From 36eace99966994fe0ef97ee3c391c5ec4060014b Mon Sep 17 00:00:00 2001 From: VerstreuteSeele Date: Tue, 31 Jan 2023 16:48:15 +0100 Subject: [PATCH 01/11] Update infrared assets --- assets/resources/infrared/assets/ac.ir | 2 +- assets/resources/infrared/assets/audio.ir | 34 +++++++++- assets/resources/infrared/assets/fans.ir | 64 ++++++++++++++++++- .../resources/infrared/assets/projectors.ir | 28 +++++++- assets/resources/infrared/assets/tv.ir | 22 ++++++- 5 files changed, 141 insertions(+), 9 deletions(-) diff --git a/assets/resources/infrared/assets/ac.ir b/assets/resources/infrared/assets/ac.ir index 20a72e0ca..fce68812f 100644 --- a/assets/resources/infrared/assets/ac.ir +++ b/assets/resources/infrared/assets/ac.ir @@ -1,7 +1,7 @@ Filetype: IR library file Version: 1 # Last Updated 13th Jan, 2023 -# Last Checked 13th Jan, 2023 +# Last Checked 31th Jan, 2023 # name: POWER type: raw diff --git a/assets/resources/infrared/assets/audio.ir b/assets/resources/infrared/assets/audio.ir index 5a0b18658..ae29a43f0 100644 --- a/assets/resources/infrared/assets/audio.ir +++ b/assets/resources/infrared/assets/audio.ir @@ -1,7 +1,7 @@ Filetype: IR library file Version: 1 -# Last Updated 13th Jan, 2023 -# Last Checked 13th Jan, 2023 +# Last Updated 30th Jan, 2023 +# Last Checked 31th Jan, 2023 # name: POWER type: parsed @@ -2002,3 +2002,33 @@ type: parsed protocol: NEC address: 20 00 00 00 command: 50 00 00 00 +# +name: VOL- +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 0C 00 00 00 +# +name: MUTE +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 47 00 00 00 +# +name: POWER +type: parsed +protocol: NEC +address: 80 00 00 00 +command: 02 00 00 00 +# +name: VOL- +type: parsed +protocol: NEC +address: 80 00 00 00 +command: 05 00 00 00 +# +name: MUTE +type: parsed +protocol: NEC +address: 80 00 00 00 +command: 04 00 00 00 diff --git a/assets/resources/infrared/assets/fans.ir b/assets/resources/infrared/assets/fans.ir index b2c683cba..fd28c501f 100644 --- a/assets/resources/infrared/assets/fans.ir +++ b/assets/resources/infrared/assets/fans.ir @@ -1,7 +1,7 @@ Filetype: IR library file Version: 1 -# Last Updated 13th Jan, 2023 -# Last Checked 13th Jan, 2023 +# Last Updated 30th Jan, 2023 +# Last Checked 31th Jan, 2023 # name: POWER type: raw @@ -68,6 +68,12 @@ type: raw frequency: 38000 duty_cycle: 0.330000 data: 1294 371 1351 322 443 1200 1295 346 1297 373 444 1224 445 1198 1300 345 498 1170 473 1171 496 1173 471 8057 1295 372 1297 347 444 1224 1296 347 1296 349 494 1172 470 1174 1293 376 469 1174 469 1200 468 1175 468 8082 1293 351 1318 349 468 1175 1292 377 1294 349 468 1177 491 1175 1293 350 442 1226 468 1175 468 1201 467 8083 1293 350 1268 401 467 1175 1293 351 1318 350 467 1175 442 1226 1293 350 467 1177 466 1200 468 1176 441 8133 1292 351 1267 400 468 1175 1292 351 1292 376 466 1177 467 1202 1291 352 442 1202 465 1203 441 1201 442 8132 1267 376 1267 402 440 1202 1266 377 1290 379 439 1226 416 1253 1241 402 415 1228 439 1229 414 1228 415 8161 1239 403 1240 404 439 1229 1240 403 1240 429 414 1229 414 1231 1264 404 413 1229 414 1255 413 1229 413 8161 1238 404 1239 405 437 1230 1239 404 1238 430 412 1230 412 1232 1262 405 412 1231 412 1256 412 1231 412 8162 1238 406 1237 406 411 1258 1237 406 1237 431 412 1256 387 1256 1213 456 386 1256 386 1257 412 1256 386 8164 1237 431 1212 431 386 1283 1212 431 1212 432 411 1257 386 1257 1211 457 386 1257 386 1258 411 1258 385 8164 1212 431 1212 432 411 1256 1213 431 1236 433 386 1256 387 1257 1238 430 386 1257 386 1282 386 1256 386 +# ON/SPEED+ +name: POWER +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 1330 364 1385 320 523 1158 1332 365 1329 364 479 1213 481 1213 481 1213 481 1213 481 1213 1332 390 480 8072 1358 362 1329 364 478 1216 1328 366 1328 367 476 1218 476 1218 476 1218 476 1218 476 1218 1328 367 476 8103 1328 367 1327 367 476 1218 1327 367 1327 367 476 1218 476 1218 476 1218 476 1218 476 1218 1327 367 476 8103 1327 367 1327 367 476 1218 1327 368 1326 367 476 1218 476 1219 475 1219 475 1219 475 1219 1326 368 475 8104 1327 368 1326 368 475 1219 1327 368 1326 368 475 1219 475 1219 475 1219 475 1219 475 1219 1326 368 475 8105 1326 368 1326 368 475 1219 1327 368 1326 368 475 1220 474 1220 474 1220 475 1220 474 1220 1325 368 475 8105 1326 369 1325 369 474 1220 1326 369 1325 369 474 1220 474 1220 474 1220 474 1220 474 1220 1326 369 474 8106 1325 369 1325 369 474 1220 1325 369 1326 369 474 1220 474 1220 474 1220 474 1220 474 1221 1324 370 473 8132 1273 422 1272 422 446 1248 1272 422 1297 397 421 1275 419 1300 419 1276 419 1275 419 1250 1297 398 445 8135 1297 397 1297 397 447 1247 1298 397 1297 397 447 1247 447 1247 447 1247 447 1247 447 1247 1298 397 447 8134 1298 397 1298 397 447 1248 1297 397 1297 397 447 1248 446 1248 446 1248 447 1248 447 1248 1297 397 447 8133 1298 397 1297 397 447 1248 1297 397 1297 397 447 1248 446 1248 447 1248 446 1248 446 1248 1297 398 446 8134 1297 398 1296 398 446 1248 1297 398 1296 398 446 1248 446 1248 446 1248 446 1248 446 1248 1296 398 446 8134 1295 398 1296 398 446 1248 1296 398 1296 398 446 1249 445 1249 445 1249 445 1249 445 1249 1295 399 445 8134 1295 399 1295 399 445 1249 1295 399 1295 399 445 1249 445 1249 445 1250 444 1249 445 1249 1295 399 445 8135 1295 400 1294 400 444 1250 1294 400 1295 400 444 1250 444 1250 444 1250 444 1250 444 1250 1294 401 443 8137 1293 401 1294 401 442 1251 1294 401 1293 401 442 1253 442 1252 442 1252 442 1252 442 1252 1293 427 417 8140 1292 426 1268 427 417 1277 1243 452 1267 427 417 1278 417 1277 417 1278 417 1277 417 1277 1268 427 417 8163 1242 452 1242 452 417 1278 1242 453 1241 453 391 1303 391 1303 392 1303 391 1303 391 1303 1242 453 415 8165 1241 453 1241 453 391 1304 1241 453 1241 454 390 1305 389 1304 390 1304 390 1305 389 1305 1240 480 364 8216 1214 480 1214 480 363 1331 1214 480 1214 480 364 1331 363 1331 363 1331 363 1331 363 1331 1214 481 363 8218 1213 481 1213 481 363 1333 1212 508 1186 508 335 1359 335 1359 335 1359 335 1359 335 1360 1186 508 335 8247 1184 509 1185 535 307 1387 1159 536 1158 589 253 1389 306 1415 278 1416 252 1442 199 1575 1052 # name: POWER type: raw @@ -1287,3 +1293,57 @@ type: parsed protocol: NEC address: 01 00 00 00 command: 8B 00 00 00 +# +name: POWER +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 2256 695 788 1354 789 1349 789 1340 792 702 762 697 763 692 789 661 788 720 786 693 786 689 785 685 784 681 784 676 784 1334 784 1330 783 102265 2255 695 787 1356 786 1352 785 1348 785 681 783 676 783 671 784 666 784 724 784 696 783 691 784 686 784 681 783 676 784 1335 783 1330 783 +# OSC +name: ROTATE +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 2227 749 733 1382 761 1379 866 1292 841 566 898 591 868 588 866 582 760 1412 867 612 866 576 898 603 867 598 866 1256 759 695 867 1246 759 101611 2335 615 868 1245 899 1268 869 1266 867 566 898 591 760 694 761 689 760 1411 760 720 760 715 759 710 759 705 759 1363 760 696 758 1352 761 +# +name: ROTATE +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 2224 708 755 1419 757 1443 756 685 756 1470 757 709 758 710 784 657 836 708 756 763 785 1468 782 1444 755 737 756 712 754 1471 781 1419 780 101298 2250 656 778 1420 809 1391 753 686 755 1472 779 687 779 687 752 688 831 714 778 741 750 1502 776 1422 752 740 752 741 751 1448 751 1475 749 +# +name: POWER +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 2203 675 786 1388 867 1361 786 678 786 1444 758 708 759 707 760 707 786 735 757 760 786 735 757 736 781 711 757 734 759 733 785 734 758 101185 2198 708 757 1416 757 1442 756 685 755 1445 780 685 780 662 776 689 803 742 778 740 753 766 779 715 777 714 779 714 778 690 776 742 752 +# StrengthUp +name: SPEED+ +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 2224 685 782 1419 808 1418 779 687 757 1470 757 710 757 684 809 657 809 736 758 1469 758 736 756 1470 757 762 755 1446 782 1418 781 712 755 101352 2223 707 758 1417 834 1392 781 685 781 1446 780 687 754 687 754 713 804 741 779 1447 779 715 778 1447 779 740 752 1448 778 1422 779 690 775 +# StrengthDown +name: SPEED- +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 2222 685 781 1419 808 1419 780 686 755 1447 781 684 783 686 780 686 807 1470 757 1470 756 1471 756 1497 756 1445 780 1447 780 1421 779 1421 754 101509 2250 684 777 1421 781 1444 754 687 754 1472 779 687 779 688 753 688 830 1448 777 1449 778 1448 752 1501 752 1450 773 1451 778 1422 778 1423 777 +# +name: POWER +type: parsed +protocol: NECext +address: 41 59 00 00 +command: 05 FA 00 00 +# +name: SPEED+ +type: parsed +protocol: NECext +address: 41 59 00 00 +command: 44 BB 00 00 +# OFF +name: POWER +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 1332 391 1303 359 485 1241 1304 391 1303 391 452 1242 452 1242 452 1243 451 1243 452 1243 452 1242 1303 7275 1303 391 1303 390 453 1240 1330 364 1328 366 477 1218 476 1218 476 1220 474 1220 474 1220 474 1220 1325 7252 1326 369 1325 369 475 1219 1325 369 1325 369 475 1219 475 1219 475 1219 475 1219 475 1219 475 1219 1326 7254 1326 369 1326 369 475 1219 1326 369 1326 369 475 1219 475 1220 475 1219 475 1219 475 1220 475 1220 1325 7256 1325 370 1325 370 474 1220 1325 370 1325 370 474 1220 475 1220 474 1220 474 1220 474 1221 474 1221 1324 7281 1301 370 1325 370 474 1220 1325 370 1324 370 474 1221 474 1221 473 1221 473 1221 473 1221 474 1220 1325 7256 1325 370 1324 371 473 1221 1324 370 1324 370 474 1221 473 1221 473 1220 474 1220 474 1220 474 1220 1324 7256 1324 371 1323 371 473 1221 1323 371 1323 371 473 1221 473 1221 473 1221 473 1221 473 1221 473 1221 1323 7256 1323 371 1323 371 473 1222 1322 372 1322 372 472 1222 472 1222 472 1222 472 1222 472 1222 472 1222 1322 7281 1297 372 1322 373 471 1246 1298 396 1298 397 447 1247 447 1247 447 1247 447 1247 447 1247 447 1247 1297 7281 1297 397 1297 397 447 1247 1297 397 1297 397 447 1247 447 1247 447 1247 447 1247 447 1248 446 1248 1296 7282 1296 398 1296 398 446 1248 1296 398 1296 398 447 1248 446 1248 446 1248 446 1247 447 1247 447 1248 1295 7281 1296 398 1296 398 446 1248 1296 399 1295 399 446 1248 446 1248 446 1248 446 1248 446 1248 446 1248 1296 7282 1296 399 1295 399 445 1248 1295 399 1295 399 445 1248 446 1249 444 1249 445 1249 445 1249 445 1249 1294 7282 1294 399 1295 400 444 1249 1295 399 1294 400 444 1250 444 1249 445 1250 444 1249 445 1250 444 1250 1294 7282 1294 400 1294 400 444 1250 1294 400 1294 401 443 1251 443 1250 444 1250 444 1250 444 1250 443 1251 1292 7284 1292 401 1293 402 442 1251 1292 402 1291 403 442 1276 418 1252 442 1276 418 1277 417 1277 417 1277 1242 7334 1268 427 1242 452 392 1302 1242 452 1242 452 392 1302 392 1302 392 1302 392 1302 391 1302 392 1302 1242 7335 1241 453 1240 453 391 1302 1241 453 1240 453 391 1303 390 1303 390 1303 390 1304 390 1303 391 1304 1240 7361 1216 479 1216 479 364 1330 1215 479 1215 480 363 1330 364 1330 364 1330 364 1330 364 1330 364 1330 1214 7362 1213 480 1214 480 363 1331 1213 481 1213 482 361 1332 362 1332 362 1331 363 1331 362 1332 362 1332 1212 7391 1185 508 1185 509 334 1359 1185 509 1184 509 334 1359 335 1359 334 1386 307 1386 307 1386 307 1386 1159 7445 1131 562 1131 616 196 1471 1104 diff --git a/assets/resources/infrared/assets/projectors.ir b/assets/resources/infrared/assets/projectors.ir index db90997a7..9f1d8a0a0 100644 --- a/assets/resources/infrared/assets/projectors.ir +++ b/assets/resources/infrared/assets/projectors.ir @@ -1,7 +1,7 @@ Filetype: IR library file Version: 1 -# Last Updated 13th Jan, 2023 -# Last Checked 13th Jan, 2023 +# Last Updated 31th Jan, 2023 +# Last Checked 31th Jan, 2023 # # ON name: POWER @@ -778,3 +778,27 @@ type: parsed protocol: NEC address: 31 00 00 00 command: 81 00 00 00 +# +name: POWER +type: parsed +protocol: NECext +address: 83 F4 00 00 +command: 17 E8 00 00 +# +name: VOL+ +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 9010 4413 532 1617 532 1617 533 489 533 489 533 489 558 464 558 465 557 1593 557 465 557 466 556 1594 555 467 555 1595 529 1621 554 1595 581 1569 581 441 581 1569 581 441 581 441 581 441 581 441 581 441 581 1569 581 1569 581 441 581 1569 580 1569 580 1570 580 1595 554 1595 555 468 554 42156 8983 2135 556 +# +name: VOL- +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 9032 4390 556 1592 559 1591 559 463 559 463 558 464 557 465 556 465 557 1593 583 440 581 441 580 1569 581 441 581 1569 580 1569 581 1569 581 1570 580 1596 554 1596 554 468 554 468 554 468 554 442 580 442 580 1596 554 469 553 469 553 1596 554 1596 553 1597 550 1598 553 1598 552 469 551 42155 9008 2107 531 95218 9006 2108 582 +# +name: MUTE +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 9011 4388 557 1617 532 1617 532 489 533 489 558 464 558 440 582 440 582 1593 556 466 556 466 556 1594 556 467 555 1595 555 1595 529 1620 554 1596 554 467 554 468 555 1595 579 443 581 1569 581 441 581 441 580 442 581 1569 581 1569 581 441 581 1569 580 441 581 1569 581 1569 581 1570 579 42152 8957 2159 556 diff --git a/assets/resources/infrared/assets/tv.ir b/assets/resources/infrared/assets/tv.ir index 6126a6239..a7a8c306a 100644 --- a/assets/resources/infrared/assets/tv.ir +++ b/assets/resources/infrared/assets/tv.ir @@ -1,7 +1,7 @@ Filetype: IR library file Version: 1 -# Last Updated 13th Jan, 2023 -# Last Checked 13th Jan, 2023 +# Last Updated 19th Jan, 2023 +# Last Checked 31th Jan, 2023 # name: POWER type: parsed @@ -1821,3 +1821,21 @@ type: parsed protocol: NEC address: 28 00 00 00 command: 10 00 00 00 +# +name: CH+ +type: parsed +protocol: RC5 +address: 01 00 00 00 +command: 14 00 00 00 +# +name: CH+ +type: parsed +protocol: SIRC20 +address: 5A 0E 00 00 +command: 10 00 00 00 +# +name: CH- +type: parsed +protocol: SIRC20 +address: 5A 0E 00 00 +command: 11 00 00 00 From bbba74b79b3d956d8030b7e1e5aa84dc6bfeda70 Mon Sep 17 00:00:00 2001 From: VerstreuteSeele Date: Tue, 31 Jan 2023 19:07:05 +0100 Subject: [PATCH 02/11] Update IR again, to prove a point --- assets/resources/infrared/assets/fans.ir | 46 ++++++++++++++++-------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/assets/resources/infrared/assets/fans.ir b/assets/resources/infrared/assets/fans.ir index fd28c501f..942c2df13 100644 --- a/assets/resources/infrared/assets/fans.ir +++ b/assets/resources/infrared/assets/fans.ir @@ -1,6 +1,6 @@ Filetype: IR library file Version: 1 -# Last Updated 30th Jan, 2023 +# Last Updated 31th Jan, 2023 # Last Checked 31th Jan, 2023 # name: POWER @@ -1221,19 +1221,7 @@ type: raw frequency: 38000 duty_cycle: 0.330000 data: 1349 364 1321 363 490 1219 1324 364 1294 389 463 1245 1324 363 462 1219 491 1221 462 1223 461 1226 484 8019 1292 393 1292 420 433 1252 1292 393 1292 420 433 1252 1292 393 460 1252 433 1252 460 1226 459 1252 433 8021 1317 393 1292 394 459 1226 1318 393 1292 394 458 1226 1318 394 432 1253 459 1226 459 1253 432 1253 459 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 1355 364 1348 363 462 1189 1355 363 1322 389 436 1245 492 1192 1351 389 436 1221 490 1197 487 1249 434 8019 1319 393 1292 393 459 1252 1292 393 1292 393 459 1252 432 1252 1292 393 459 1252 433 1252 433 1252 460 8020 1291 393 1292 420 432 1252 1292 393 1292 420 432 1253 459 1226 1291 420 432 1253 459 1226 459 1252 432 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 1354 363 1322 363 489 1219 1325 364 1295 389 463 1245 464 1219 466 1219 1324 416 435 1223 461 1249 461 8019 1292 393 1318 393 432 1252 1292 393 1318 393 433 1252 460 1225 460 1252 1292 393 460 1225 459 1252 433 8020 1318 393 1292 393 459 1253 1291 393 1291 394 459 1253 431 1253 432 1253 1291 420 432 1253 432 1253 458 -# +# name: TIMER type: raw frequency: 38000 @@ -1347,3 +1335,33 @@ type: raw frequency: 38000 duty_cycle: 0.330000 data: 1332 391 1303 359 485 1241 1304 391 1303 391 452 1242 452 1242 452 1243 451 1243 452 1243 452 1242 1303 7275 1303 391 1303 390 453 1240 1330 364 1328 366 477 1218 476 1218 476 1220 474 1220 474 1220 474 1220 1325 7252 1326 369 1325 369 475 1219 1325 369 1325 369 475 1219 475 1219 475 1219 475 1219 475 1219 475 1219 1326 7254 1326 369 1326 369 475 1219 1326 369 1326 369 475 1219 475 1220 475 1219 475 1219 475 1220 475 1220 1325 7256 1325 370 1325 370 474 1220 1325 370 1325 370 474 1220 475 1220 474 1220 474 1220 474 1221 474 1221 1324 7281 1301 370 1325 370 474 1220 1325 370 1324 370 474 1221 474 1221 473 1221 473 1221 473 1221 474 1220 1325 7256 1325 370 1324 371 473 1221 1324 370 1324 370 474 1221 473 1221 473 1220 474 1220 474 1220 474 1220 1324 7256 1324 371 1323 371 473 1221 1323 371 1323 371 473 1221 473 1221 473 1221 473 1221 473 1221 473 1221 1323 7256 1323 371 1323 371 473 1222 1322 372 1322 372 472 1222 472 1222 472 1222 472 1222 472 1222 472 1222 1322 7281 1297 372 1322 373 471 1246 1298 396 1298 397 447 1247 447 1247 447 1247 447 1247 447 1247 447 1247 1297 7281 1297 397 1297 397 447 1247 1297 397 1297 397 447 1247 447 1247 447 1247 447 1247 447 1248 446 1248 1296 7282 1296 398 1296 398 446 1248 1296 398 1296 398 447 1248 446 1248 446 1248 446 1247 447 1247 447 1248 1295 7281 1296 398 1296 398 446 1248 1296 399 1295 399 446 1248 446 1248 446 1248 446 1248 446 1248 446 1248 1296 7282 1296 399 1295 399 445 1248 1295 399 1295 399 445 1248 446 1249 444 1249 445 1249 445 1249 445 1249 1294 7282 1294 399 1295 400 444 1249 1295 399 1294 400 444 1250 444 1249 445 1250 444 1249 445 1250 444 1250 1294 7282 1294 400 1294 400 444 1250 1294 400 1294 401 443 1251 443 1250 444 1250 444 1250 444 1250 443 1251 1292 7284 1292 401 1293 402 442 1251 1292 402 1291 403 442 1276 418 1252 442 1276 418 1277 417 1277 417 1277 1242 7334 1268 427 1242 452 392 1302 1242 452 1242 452 392 1302 392 1302 392 1302 392 1302 391 1302 392 1302 1242 7335 1241 453 1240 453 391 1302 1241 453 1240 453 391 1303 390 1303 390 1303 390 1304 390 1303 391 1304 1240 7361 1216 479 1216 479 364 1330 1215 479 1215 480 363 1330 364 1330 364 1330 364 1330 364 1330 364 1330 1214 7362 1213 480 1214 480 363 1331 1213 481 1213 482 361 1332 362 1332 362 1331 363 1331 362 1332 362 1332 1212 7391 1185 508 1185 509 334 1359 1185 509 1184 509 334 1359 335 1359 334 1386 307 1386 307 1386 307 1386 1159 7445 1131 562 1131 616 196 1471 1104 +# +name: POWER +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 2265 691 792 690 792 684 793 1342 821 1310 821 640 822 634 822 660 792 718 791 690 791 685 791 680 791 675 791 670 790 1330 789 662 788 99517 2230 723 760 721 760 715 761 1374 761 1368 762 699 762 694 762 689 762 747 761 719 761 715 761 710 761 705 761 701 760 1360 760 691 760 +# +name: SPEED+ +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 2312 617 867 641 840 577 899 1269 866 1265 865 622 839 593 864 612 838 670 839 1306 839 611 865 1271 864 627 839 1259 865 590 866 611 840 102129 2316 670 813 667 813 664 811 1323 810 1319 759 702 759 697 759 692 759 750 759 1386 758 717 759 1376 758 706 759 1365 759 696 759 691 760 +# +name: SPEED- +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 2232 725 759 722 759 717 759 1375 760 1370 760 702 759 697 759 692 788 1384 788 1356 788 1351 788 1347 787 1342 787 1338 786 670 785 1330 784 99591 2229 724 760 721 785 690 785 1349 784 1345 784 677 783 673 782 669 781 1391 781 1363 781 1359 780 1353 781 1349 780 1343 781 675 780 1334 780 +# +name: TIMER +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 2230 724 760 720 761 715 761 1374 761 1370 760 701 760 696 760 691 786 1385 760 720 787 689 760 710 760 705 786 1339 785 670 785 665 784 98757 2224 729 754 726 755 721 754 1380 754 1375 754 706 754 701 754 696 754 1418 754 726 754 720 755 716 755 710 755 1369 755 700 755 696 755 +# +name: ROTATE +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 2256 698 786 695 786 689 787 1348 787 1342 787 673 788 668 787 663 787 722 786 696 784 1353 786 1375 759 706 759 702 783 672 783 1332 782 102265 2310 645 838 668 812 664 811 1323 810 1319 810 651 809 647 808 642 808 701 807 673 807 1332 807 1327 807 658 808 653 807 648 807 1307 807 \ No newline at end of file From 3efa6a195aef0ca4214172242c0056971d4c368e Mon Sep 17 00:00:00 2001 From: VerstreuteSeele Date: Tue, 31 Jan 2023 21:24:46 +0100 Subject: [PATCH 03/11] Delete orgasmotron.fap --- applications/plugins/orgasmotron/orgasmotron.fap | Bin 2312 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 applications/plugins/orgasmotron/orgasmotron.fap diff --git a/applications/plugins/orgasmotron/orgasmotron.fap b/applications/plugins/orgasmotron/orgasmotron.fap deleted file mode 100644 index 23d7bebb334321ec1f7f5edd4869374a887158da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2312 zcmbVNO>Epm6n^$@+9fS?Q=p`j2JezUMAX%8Xi?QugxYadPDoUhDhH6`?9OhidTrPC zrUfB22P8Q3P@x{t{o0`&Tw!0Zg0{KkPL<1YX;Fo5qwonF#M!Gj_OZE#e@{wmm`U1jWOwYh zKh#30z$UfVX72ZkpWpBQeyujUuGX}@m_e;x)AleZud7v@onlp7t4`lgt6IKXW2?w2 z$nqkt$xgB#)Wwa>eqNb+H1N_VZyfH8*GFa*c2j+&PR|;fVq@CNGZ+JLT^-X-VuTTl za0CY^@~zFShaX<==d1aNLhpKip!(^?QQ;XrNt2tnBQ)AZol(r9(BFO_O?=ba!skZs z(Su~;kC~i_*6WYaXP3{LOP-?`u4|bMBQPBs<~{EF%ABSIUC;Iv$5vLz2F`Me8$M5I zTCGUc?wVjbf!T^jh2v`Vtn$LM{!|ynOhwu1*;%rCIn-y-gFw8H%{+0i? zXgSDko#LdoQk=4PQ(XAdqL47&TEcT8{*NghwnAuKM0hToiYM`7 z8J_-jq(7h0FK76b3}4IeFEjkR4DV(5PZ|Dah7Tos1EBm$$Z3hr@SrTgDJ1XU{F#WK z%h;P4{$7TEoZ(+(`1cup7dhQKqlol=7!6>w2@S(uF?_x08JBcF@WAI6yWDPY-RFTW zYFfuqTrv42-F3VmG;A1_wPZ9dkWn0=fralutLvG%#~Y5<)Ek!L^Khku-D0%4j4bOZ5QX2N~+~?4%lD1(QIPUQLfuwugYKCwSV4e_5;9P_Y5mGJPObx#Ia0>1#U&$CB&amKsW+$necgl_X(c@SS5TK-~+-J z06rqz2XK|}S%7PV2QbNs|86HRmJkCk#N~MAajO#W%K=n8r)dNRR9c4H;WTO6UA@Vd zx^2s}FJP4aEVyOSyL%#!F9`KOA5R2gxcr+(RTkGAFwNj Date: Tue, 31 Jan 2023 21:46:02 +0100 Subject: [PATCH 04/11] format --- applications/plugins/unitemp/Sensors.c | 25 +++---------------- applications/plugins/unitemp/sensors/BMP180.c | 3 +-- 2 files changed, 5 insertions(+), 23 deletions(-) diff --git a/applications/plugins/unitemp/Sensors.c b/applications/plugins/unitemp/Sensors.c index 2fca40b53..d9304ab32 100644 --- a/applications/plugins/unitemp/Sensors.c +++ b/applications/plugins/unitemp/Sensors.c @@ -75,27 +75,10 @@ const Interface SPI = { //Перечень интерфейсов подключения //static const Interface* interfaces[] = {&SINGLE_WIRE, &I2C, &ONE_WIRE, &SPI}; //Перечень датчиков -static const SensorType* sensorTypes[] = { - &DHT11, - &DHT12_SW, - &DHT20, - &DHT21, - &DHT22, - &Dallas, - &AM2320_SW, - &AM2320_I2C, - &HTU21x, - &AHT10, - &SHT30, - &GXHT30, - &LM75, - &HDC1080, - &BMP180, - &BMP280, - &BME280, - &BME680, - &MAX31855, - &MAX6675}; +static const SensorType* sensorTypes[] = {&DHT11, &DHT12_SW, &DHT20, &DHT21, &DHT22, + &Dallas, &AM2320_SW, &AM2320_I2C, &HTU21x, &AHT10, + &SHT30, &GXHT30, &LM75, &HDC1080, &BMP180, + &BMP280, &BME280, &BME680, &MAX31855, &MAX6675}; const SensorType* unitemp_sensors_getTypeFromInt(uint8_t index) { if(index > SENSOR_TYPES_COUNT) return NULL; diff --git a/applications/plugins/unitemp/sensors/BMP180.c b/applications/plugins/unitemp/sensors/BMP180.c index e94f38044..aa0198289 100644 --- a/applications/plugins/unitemp/sensors/BMP180.c +++ b/applications/plugins/unitemp/sensors/BMP180.c @@ -101,8 +101,7 @@ bool unitemp_BMP180_init(Sensor* sensor) { bmp180_instance->bmp180_cal.MC = (buff[18] << 8) | buff[19]; bmp180_instance->bmp180_cal.MD = (buff[20] << 8) | buff[21]; - -UNITEMP_DEBUG( + UNITEMP_DEBUG( "Sensor BMP180 (0x%02X) calibration values: %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d", i2c_sensor->currentI2CAdr, bmp180_instance->bmp180_cal.AC1, From 46fb86265c1a450eecdb05e0f1f49dcf54339535 Mon Sep 17 00:00:00 2001 From: AloneLiberty <111039319+AloneLiberty@users.noreply.github.com> Date: Thu, 2 Feb 2023 15:18:39 +0000 Subject: [PATCH 05/11] NFC: fix creating MF Classic tags from "Add Manually" menu (BCC calulation and ATQA/SAK writing) (#2342) * NFC: fix creating MF Classic cards from "Add Manually" menu (BCC calculation and AQTA/SAK writing) * NFC: Fix BCC/SAK/ATQA in unit_tests and SAK in nfc_generate_mf_classic Co-authored-by: gornekich --- applications/debug/unit_tests/nfc/nfc_test.c | 28 +++++++++++++-- lib/nfc/helpers/nfc_generators.c | 36 +++++++++++++++++--- 2 files changed, 57 insertions(+), 7 deletions(-) diff --git a/applications/debug/unit_tests/nfc/nfc_test.c b/applications/debug/unit_tests/nfc/nfc_test.c index d613be2b9..54bdd5909 100644 --- a/applications/debug/unit_tests/nfc/nfc_test.c +++ b/applications/debug/unit_tests/nfc/nfc_test.c @@ -348,13 +348,37 @@ static void mf_classic_generator_test(uint8_t uid_len, MfClassicType type) { memcpy(atqa, nfc_dev->dev_data.nfc_data.atqa, 2); MfClassicData* mf_data = &nfc_dev->dev_data.mf_classic_data; - // Check the manufacturer block (should be uid[uid_len] + 0xFF[rest]) + // Check the manufacturer block (should be uid[uid_len] + BCC (for 4byte only) + SAK + ATQA0 + ATQA1 + 0xFF[rest]) uint8_t manufacturer_block[16] = {0}; memcpy(manufacturer_block, nfc_dev->dev_data.mf_classic_data.block[0].value, 16); mu_assert( memcmp(manufacturer_block, uid, uid_len) == 0, "manufacturer_block uid doesn't match the file\r\n"); - for(uint8_t i = uid_len; i < 16; i++) { + + uint8_t position = 0; + if(uid_len == 4) { + position = uid_len; + + uint8_t bcc = 0; + + for(int i = 0; i < uid_len; i++) { + bcc ^= uid[i]; + } + + mu_assert(manufacturer_block[position] == bcc, "manufacturer_block bcc assert failed\r\n"); + } else { + position = uid_len - 1; + } + + mu_assert(manufacturer_block[position + 1] == sak, "manufacturer_block sak assert failed\r\n"); + + mu_assert( + manufacturer_block[position + 2] == atqa[0], "manufacturer_block atqa0 assert failed\r\n"); + + mu_assert( + manufacturer_block[position + 3] == atqa[1], "manufacturer_block atqa1 assert failed\r\n"); + + for(uint8_t i = position + 4; i < 16; i++) { mu_assert( manufacturer_block[i] == 0xFF, "manufacturer_block[i] == 0xFF assert failed\r\n"); } diff --git a/lib/nfc/helpers/nfc_generators.c b/lib/nfc/helpers/nfc_generators.c index 590ff4d50..50c89aba8 100644 --- a/lib/nfc/helpers/nfc_generators.c +++ b/lib/nfc/helpers/nfc_generators.c @@ -30,12 +30,32 @@ static void nfc_generate_mf_classic_uid(uint8_t* uid, uint8_t length) { furi_hal_random_fill_buf(&uid[1], length - 1); } -static void nfc_generate_mf_classic_block_0(uint8_t* block, uint8_t uid_len) { +static void nfc_generate_mf_classic_block_0( + uint8_t* block, + uint8_t uid_len, + uint8_t sak, + uint8_t atqa0, + uint8_t atqa1) { // Block length is always 16 bytes, and the UID can be either 4 or 7 bytes furi_assert(uid_len == 4 || uid_len == 7); furi_assert(block); - nfc_generate_mf_classic_uid(block, uid_len); - for(int i = uid_len; i < 16; i++) { + + if(uid_len == 4) { + // Calculate BCC + block[uid_len] = 0; + + for(int i = 0; i < uid_len; i++) { + block[uid_len] ^= block[i]; + } + } else { + uid_len -= 1; + } + + block[uid_len + 1] = sak; + block[uid_len + 2] = atqa0; + block[uid_len + 3] = atqa1; + + for(int i = uid_len + 4; i < 16; i++) { block[i] = 0xFF; } } @@ -74,7 +94,6 @@ static void data->nfc_data.type = FuriHalNfcTypeA; data->nfc_data.interface = FuriHalNfcInterfaceRf; data->nfc_data.uid_len = uid_len; - nfc_generate_mf_classic_block_0(data->mf_classic_data.block[0].value, uid_len); data->nfc_data.atqa[0] = 0x44; data->nfc_data.atqa[1] = 0x00; data->nfc_data.sak = 0x08; @@ -316,6 +335,7 @@ static void nfc_generate_ntag_i2c_plus_2k(NfcDeviceData* data) { void nfc_generate_mf_classic(NfcDeviceData* data, uint8_t uid_len, MfClassicType type) { nfc_generate_common_start(data); + nfc_generate_mf_classic_uid(data->mf_classic_data.block[0].value, uid_len); nfc_generate_mf_classic_common(data, uid_len, type); // Set the UID @@ -339,7 +359,6 @@ void nfc_generate_mf_classic(NfcDeviceData* data, uint8_t uid_len, MfClassicType } // Set SAK to 18 data->nfc_data.sak = 0x18; - } else if(type == MfClassicType1k) { // Set every block to 0xFF for(uint16_t i = 1; i < MF_CLASSIC_1K_TOTAL_SECTORS_NUM * 4; i += 1) { @@ -366,6 +385,13 @@ void nfc_generate_mf_classic(NfcDeviceData* data, uint8_t uid_len, MfClassicType data->nfc_data.sak = 0x09; } + nfc_generate_mf_classic_block_0( + data->mf_classic_data.block[0].value, + uid_len, + data->nfc_data.sak, + data->nfc_data.atqa[0], + data->nfc_data.atqa[1]); + mfc->type = type; } From e33023463a19b0338cfd81d7517cff4902f0f1bd Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Thu, 2 Feb 2023 21:38:45 +0000 Subject: [PATCH 06/11] Format --- .../debug/locale_test/application.fam | 2 +- applications/main/application.fam | 6 +- applications/plugins/application.fam | 2 +- .../plugins/asteroids/application.fam | 2 +- .../plugins/blackjack/application.fam | 6 +- .../plugins/cli_bridge/application.fam | 2 +- .../plugins/clock_app/application.fam | 2 +- applications/plugins/counter/application.fam | 2 +- .../plugins/dolphinbackup/application.fam | 2 +- .../plugins/dolphinrestorer/application.fam | 6 +- .../plugins/flashlight/application.fam | 2 +- .../plugins/flipper_i2ctools/application.fam | 2 +- .../plugins/game_2048/application.fam | 6 +- .../plugins/gpioreader2/application.fam | 2 +- applications/plugins/hc_sr04/application.fam | 2 +- .../htu21d_temp_sensor/application.fam | 2 +- applications/plugins/ifttt/application.fam | 2 +- .../plugins/morse_code/application.fam | 5 +- .../plugins/mouse_jiggler/application.fam | 2 +- .../plugins/namechanger/application.fam | 6 +- applications/plugins/paint/application.fam | 2 +- applications/plugins/passgen/application.fam | 2 +- .../plugins/protoview/application.fam | 2 +- applications/plugins/qrcode/application.fam | 4 +- .../plugins/solitaire/application.fam | 6 +- applications/plugins/subbrute/application.fam | 2 +- .../plugins/timelapse/application.fam | 17 ++-- applications/plugins/totp/application.fam | 9 +- applications/plugins/unitemp/application.fam | 8 +- .../plugins/wii_ec_anal/application.fam | 56 +++++------ applications/plugins/yatzee/application.fam | 1 - .../services/namechangersrv/application.fam | 2 +- assets/SConscript | 2 +- .../resources/subghz/assets/extend_range.txt | 4 +- lib/STM32CubeWB.scons | 10 +- scripts/FlipperPlaylist.py | 9 +- scripts/User/decode.py | 92 +++++++++++-------- scripts/User/encode.py | 14 +-- scripts/User/icondecode.py | 84 ++++++++++------- scripts/User/iconencode.py | 79 +++++++++------- scripts/asset_packer.py | 25 +++-- scripts/assets.py | 38 ++++++-- scripts/flipper/assets/dolphin.py | 14 ++- scripts/runfap.py | 2 +- scripts/sconsdist.py | 12 ++- scripts/version.py | 25 ++--- site_scons/cc.scons | 2 +- site_scons/commandline.scons | 2 +- site_scons/environ.scons | 2 +- site_scons/extapps.scons | 2 +- 50 files changed, 336 insertions(+), 256 deletions(-) diff --git a/applications/debug/locale_test/application.fam b/applications/debug/locale_test/application.fam index 32d065299..e46eeff51 100644 --- a/applications/debug/locale_test/application.fam +++ b/applications/debug/locale_test/application.fam @@ -8,4 +8,4 @@ App( stack_size=2 * 1024, order=70, fap_category="Debug", -) \ No newline at end of file +) diff --git a/applications/main/application.fam b/applications/main/application.fam index 376af8c42..9820ee3ac 100644 --- a/applications/main/application.fam +++ b/applications/main/application.fam @@ -25,13 +25,13 @@ App( apptype=FlipperAppType.METAPACKAGE, provides=[ "gpio", - #"ibutton", + # "ibutton", "infrared", "lfrfid", "nfc", "subghz", - #"bad_usb", - #"u2f", + # "bad_usb", + # "u2f", "fap_loader", "archive", ], diff --git a/applications/plugins/application.fam b/applications/plugins/application.fam index 3e5a654aa..3331888f2 100644 --- a/applications/plugins/application.fam +++ b/applications/plugins/application.fam @@ -3,7 +3,7 @@ App( name="Basic applications for plug-in menu", apptype=FlipperAppType.METAPACKAGE, provides=[ - "music_player", + "music_player", "music_beeper", "snake_game", "bt_hid", diff --git a/applications/plugins/asteroids/application.fam b/applications/plugins/asteroids/application.fam index 0a56122e7..f5ad2cdb9 100644 --- a/applications/plugins/asteroids/application.fam +++ b/applications/plugins/asteroids/application.fam @@ -5,7 +5,7 @@ App( entry_point="asteroids_app_entry", cdefines=["APP_PROTOVIEW"], requires=["gui"], - stack_size=8*1024, + stack_size=8 * 1024, order=50, fap_icon="appicon.png", fap_category="Games", diff --git a/applications/plugins/blackjack/application.fam b/applications/plugins/blackjack/application.fam index 8230cd047..489ce2aeb 100644 --- a/applications/plugins/blackjack/application.fam +++ b/applications/plugins/blackjack/application.fam @@ -4,10 +4,10 @@ App( apptype=FlipperAppType.EXTERNAL, entry_point="blackjack_app", cdefines=["APP_BLACKJACK"], - requires=["gui","storage","canvas"], + requires=["gui", "storage", "canvas"], stack_size=2 * 1024, order=30, fap_icon="blackjack_10px.png", fap_category="Games", - fap_icon_assets="assets" -) \ No newline at end of file + fap_icon_assets="assets", +) diff --git a/applications/plugins/cli_bridge/application.fam b/applications/plugins/cli_bridge/application.fam index 60cd9648d..f5f294d9b 100644 --- a/applications/plugins/cli_bridge/application.fam +++ b/applications/plugins/cli_bridge/application.fam @@ -3,7 +3,7 @@ App( name="CLI (subghz chat)", apptype=FlipperAppType.EXTERNAL, entry_point="cligui_main", - requires=["gui","cli"], + requires=["gui", "cli"], stack_size=8 * 1024, fap_icon="cligui.png", fap_category="Tools", diff --git a/applications/plugins/clock_app/application.fam b/applications/plugins/clock_app/application.fam index 644fbb65f..a6a2eff3e 100644 --- a/applications/plugins/clock_app/application.fam +++ b/applications/plugins/clock_app/application.fam @@ -7,4 +7,4 @@ App( stack_size=2 * 1024, fap_icon="clock.png", fap_category="Tools", -) \ No newline at end of file +) diff --git a/applications/plugins/counter/application.fam b/applications/plugins/counter/application.fam index bb2e58df1..5d164f20c 100644 --- a/applications/plugins/counter/application.fam +++ b/applications/plugins/counter/application.fam @@ -9,4 +9,4 @@ App( fap_category="Misc", fap_icon="icons/counter_icon.png", fap_icon_assets="icons", -) \ No newline at end of file +) diff --git a/applications/plugins/dolphinbackup/application.fam b/applications/plugins/dolphinbackup/application.fam index 024c1b197..166f9a22b 100644 --- a/applications/plugins/dolphinbackup/application.fam +++ b/applications/plugins/dolphinbackup/application.fam @@ -9,4 +9,4 @@ App( order=85, fap_icon="bckupIcon.png", fap_category="Tools", -) \ No newline at end of file +) diff --git a/applications/plugins/dolphinrestorer/application.fam b/applications/plugins/dolphinrestorer/application.fam index 46699404a..afd263c45 100644 --- a/applications/plugins/dolphinrestorer/application.fam +++ b/applications/plugins/dolphinrestorer/application.fam @@ -4,9 +4,9 @@ App( apptype=FlipperAppType.EXTERNAL, entry_point="drestorer_app", cdefines=["APP_DRESTORER"], - requires=["gui","storage"], - stack_size= 2 * 1024, + requires=["gui", "storage"], + stack_size=2 * 1024, order=90, fap_icon="restoreIcon.png", fap_category="Tools", -) \ No newline at end of file +) diff --git a/applications/plugins/flashlight/application.fam b/applications/plugins/flashlight/application.fam index 368e14833..6d70a036f 100644 --- a/applications/plugins/flashlight/application.fam +++ b/applications/plugins/flashlight/application.fam @@ -11,4 +11,4 @@ App( order=20, fap_icon="flash10px.png", fap_category="GPIO", -) \ No newline at end of file +) diff --git a/applications/plugins/flipper_i2ctools/application.fam b/applications/plugins/flipper_i2ctools/application.fam index d8d10dfce..f6522a86e 100644 --- a/applications/plugins/flipper_i2ctools/application.fam +++ b/applications/plugins/flipper_i2ctools/application.fam @@ -10,4 +10,4 @@ App( fap_icon="i2ctools.png", fap_category="GPIO", fap_icon_assets="images", -) \ No newline at end of file +) diff --git a/applications/plugins/game_2048/application.fam b/applications/plugins/game_2048/application.fam index c8940c881..f2456668e 100644 --- a/applications/plugins/game_2048/application.fam +++ b/applications/plugins/game_2048/application.fam @@ -10,6 +10,6 @@ App( ], stack_size=1 * 1024, order=90, - fap_icon="game_2048.png", - fap_category="Games" -) \ No newline at end of file + fap_icon="game_2048.png", + fap_category="Games", +) diff --git a/applications/plugins/gpioreader2/application.fam b/applications/plugins/gpioreader2/application.fam index 57792fd0c..bf25c323d 100644 --- a/applications/plugins/gpioreader2/application.fam +++ b/applications/plugins/gpioreader2/application.fam @@ -8,4 +8,4 @@ App( fap_category="GPIO", fap_icon="icon.png", order=1, -) \ No newline at end of file +) diff --git a/applications/plugins/hc_sr04/application.fam b/applications/plugins/hc_sr04/application.fam index da91a0864..bfbb2daa8 100644 --- a/applications/plugins/hc_sr04/application.fam +++ b/applications/plugins/hc_sr04/application.fam @@ -11,4 +11,4 @@ App( order=20, fap_icon="dist_sensor10px.png", fap_category="GPIO", -) \ No newline at end of file +) diff --git a/applications/plugins/htu21d_temp_sensor/application.fam b/applications/plugins/htu21d_temp_sensor/application.fam index 5807d7f51..724f55cd5 100644 --- a/applications/plugins/htu21d_temp_sensor/application.fam +++ b/applications/plugins/htu21d_temp_sensor/application.fam @@ -9,6 +9,6 @@ App( ], stack_size=2 * 1024, order=90, - fap_icon="temperature_sensor.png", + fap_icon="temperature_sensor.png", fap_category="GPIO", ) diff --git a/applications/plugins/ifttt/application.fam b/applications/plugins/ifttt/application.fam index 495627429..75e5beb67 100644 --- a/applications/plugins/ifttt/application.fam +++ b/applications/plugins/ifttt/application.fam @@ -11,4 +11,4 @@ App( order=20, fap_icon="icon.png", fap_category="GPIO", -) \ No newline at end of file +) diff --git a/applications/plugins/morse_code/application.fam b/applications/plugins/morse_code/application.fam index 1cc7bdaa1..73ad2ba81 100644 --- a/applications/plugins/morse_code/application.fam +++ b/applications/plugins/morse_code/application.fam @@ -10,6 +10,5 @@ App( stack_size=1 * 1024, order=20, fap_icon="morse_code_10px.png", - fap_category="Music" - -) \ No newline at end of file + fap_category="Music", +) diff --git a/applications/plugins/mouse_jiggler/application.fam b/applications/plugins/mouse_jiggler/application.fam index 6c529a883..6115315f5 100644 --- a/applications/plugins/mouse_jiggler/application.fam +++ b/applications/plugins/mouse_jiggler/application.fam @@ -9,4 +9,4 @@ App( order=150, fap_icon="mouse_10px.png", fap_category="Misc", -) \ No newline at end of file +) diff --git a/applications/plugins/namechanger/application.fam b/applications/plugins/namechanger/application.fam index 545f0b905..704b643c5 100644 --- a/applications/plugins/namechanger/application.fam +++ b/applications/plugins/namechanger/application.fam @@ -4,10 +4,10 @@ App( apptype=FlipperAppType.EXTERNAL, entry_point="namechanger_app", cdefines=["APP_NAMECHANGER"], - requires=["gui","storage"], + requires=["gui", "storage"], stack_size=2 * 1024, order=90, fap_icon="namechanger_10px.png", fap_category="Tools", - fap_icon_assets="icons", -) \ No newline at end of file + fap_icon_assets="icons", +) diff --git a/applications/plugins/paint/application.fam b/applications/plugins/paint/application.fam index 0630abbce..d727ab2d2 100644 --- a/applications/plugins/paint/application.fam +++ b/applications/plugins/paint/application.fam @@ -9,4 +9,4 @@ App( order=175, fap_icon="paintIcon.png", fap_category="Misc", -) \ No newline at end of file +) diff --git a/applications/plugins/passgen/application.fam b/applications/plugins/passgen/application.fam index 78d810a1d..94005e716 100644 --- a/applications/plugins/passgen/application.fam +++ b/applications/plugins/passgen/application.fam @@ -9,4 +9,4 @@ App( fap_category="Tools", fap_icon="icons/passgen_icon.png", fap_icon_assets="icons", -) \ No newline at end of file +) diff --git a/applications/plugins/protoview/application.fam b/applications/plugins/protoview/application.fam index 6cd31372e..d3614524c 100644 --- a/applications/plugins/protoview/application.fam +++ b/applications/plugins/protoview/application.fam @@ -5,7 +5,7 @@ App( entry_point="protoview_app_entry", cdefines=["APP_PROTOVIEW"], requires=["gui"], - stack_size=8*1024, + stack_size=8 * 1024, order=50, fap_icon="appicon.png", fap_category="Tools", diff --git a/applications/plugins/qrcode/application.fam b/applications/plugins/qrcode/application.fam index 6de585837..68a378fa4 100644 --- a/applications/plugins/qrcode/application.fam +++ b/applications/plugins/qrcode/application.fam @@ -1,7 +1,7 @@ App( appid="QRCode", name="QR Code", - fap_version=(1,0), + fap_version=(1, 0), fap_description="Display qrcodes", fap_author="Bob Matcuk", fap_weburl="https://github.com/bmatcuk/flipperzero-qrcode", @@ -17,4 +17,4 @@ App( fap_icon="icons/qrcode_10px.png", fap_icon_assets="icons", fap_icon_assets_symbol="qrcode", -) \ No newline at end of file +) diff --git a/applications/plugins/solitaire/application.fam b/applications/plugins/solitaire/application.fam index 66e4567ec..4011c343e 100644 --- a/applications/plugins/solitaire/application.fam +++ b/applications/plugins/solitaire/application.fam @@ -4,10 +4,10 @@ App( apptype=FlipperAppType.EXTERNAL, entry_point="solitaire_app", cdefines=["APP_SOLITAIRE"], - requires=["gui","storage","canvas"], + requires=["gui", "storage", "canvas"], stack_size=2 * 1024, order=30, fap_icon="solitaire_10px.png", fap_category="Games", - fap_icon_assets="assets" -) \ No newline at end of file + fap_icon_assets="assets", +) diff --git a/applications/plugins/subbrute/application.fam b/applications/plugins/subbrute/application.fam index 455bb822f..20a5f5367 100644 --- a/applications/plugins/subbrute/application.fam +++ b/applications/plugins/subbrute/application.fam @@ -4,7 +4,7 @@ App( apptype=FlipperAppType.EXTERNAL, entry_point="subbrute_app", cdefines=["APP_SUB_BRUTE"], - requires=["gui","dialogs"], + requires=["gui", "dialogs"], stack_size=2 * 1024, order=11, fap_icon="images/subbrute_10px.png", diff --git a/applications/plugins/timelapse/application.fam b/applications/plugins/timelapse/application.fam index ee725fe52..f5eaae551 100644 --- a/applications/plugins/timelapse/application.fam +++ b/applications/plugins/timelapse/application.fam @@ -4,18 +4,13 @@ App( apptype=FlipperAppType.EXTERNAL, entry_point="zeitraffer_app", cdefines=["APP_ZEITRAFFER"], - requires=[ - "gui", - "input", - "notification", - "gpio" - ], + requires=["gui", "input", "notification", "gpio"], stack_size=2 * 1024, order=90, - fap_icon_assets="icons", - fap_icon="zeitraffer.png", + fap_icon_assets="icons", + fap_icon="zeitraffer.png", fap_category="GPIO", - fap_description="Simple intervalometer app", + fap_description="Simple intervalometer app", fap_author="Aurelius Rosenbaum", - fap_weburl="https://github.com/theageoflove/flipperzero-zeitraffer", -) \ No newline at end of file + fap_weburl="https://github.com/theageoflove/flipperzero-zeitraffer", +) diff --git a/applications/plugins/totp/application.fam b/applications/plugins/totp/application.fam index ffb6d6137..81b0e22c3 100644 --- a/applications/plugins/totp/application.fam +++ b/applications/plugins/totp/application.fam @@ -4,14 +4,7 @@ App( apptype=FlipperAppType.EXTERNAL, entry_point="totp_app", cdefines=["APP_TOTP"], - requires=[ - "gui", - "cli", - "dialogs", - "storage", - "input", - "notification" - ], + requires=["gui", "cli", "dialogs", "storage", "input", "notification"], stack_size=2 * 1024, order=20, fap_category="Misc", diff --git a/applications/plugins/unitemp/application.fam b/applications/plugins/unitemp/application.fam index 3ac128eef..d975da5ff 100644 --- a/applications/plugins/unitemp/application.fam +++ b/applications/plugins/unitemp/application.fam @@ -9,11 +9,11 @@ App( ], stack_size=2 * 1024, order=100, - fap_description = "Universal temperature sensors reader", - fap_author = "Quenon", - fap_weburl = "https://github.com/quen0n/Unitemp-Flipper-Zero-Plugin", + fap_description="Universal temperature sensors reader", + fap_author="Quenon", + fap_weburl="https://github.com/quen0n/Unitemp-Flipper-Zero-Plugin", fap_category="GPIO", fap_icon="icon.png", fap_icon_assets="assets", fap_libs=["assets"], -) \ No newline at end of file +) diff --git a/applications/plugins/wii_ec_anal/application.fam b/applications/plugins/wii_ec_anal/application.fam index 655b5f938..4dc251713 100644 --- a/applications/plugins/wii_ec_anal/application.fam +++ b/applications/plugins/wii_ec_anal/application.fam @@ -1,36 +1,28 @@ # qv. https://github.com/flipperdevices/flipperzero-firmware/blob/dev/documentation/AppManifests.md App( - # --- App Info - appid="wii_ec_anal", - name="Wii EC Analyser", - - # --- Entry point - apptype=FlipperAppType.EXTERNAL, - entry_point="wii_ec_anal", - - # --- Interaction - cdefines=["APP_WII_EC_ANAL"], - requires=[ - "gui", - ], - -# conflicts="", -# sdk_headers="", - - # --- Run-time info - stack_size=2 * 1024, - order=20, - - # --- FAP details - sources=["wii_*.c", "gfx/*.c"], - -# fap_weburl="https://github.com/csBlueChip/FlipperZero_plugin_WiiChuck/", -# fap_author="BlueChip", - -# fap_description="Wii Extension Controller Protocol Analyser", -# fap_version=(1,0), - - fap_icon="WiiEC.png", - fap_category="GPIO", + # --- App Info + appid="wii_ec_anal", + name="Wii EC Analyser", + # --- Entry point + apptype=FlipperAppType.EXTERNAL, + entry_point="wii_ec_anal", + # --- Interaction + cdefines=["APP_WII_EC_ANAL"], + requires=[ + "gui", + ], + # conflicts="", + # sdk_headers="", + # --- Run-time info + stack_size=2 * 1024, + order=20, + # --- FAP details + sources=["wii_*.c", "gfx/*.c"], + # fap_weburl="https://github.com/csBlueChip/FlipperZero_plugin_WiiChuck/", + # fap_author="BlueChip", + # fap_description="Wii Extension Controller Protocol Analyser", + # fap_version=(1,0), + fap_icon="WiiEC.png", + fap_category="GPIO", ) diff --git a/applications/plugins/yatzee/application.fam b/applications/plugins/yatzee/application.fam index 183021854..b30e90d23 100644 --- a/applications/plugins/yatzee/application.fam +++ b/applications/plugins/yatzee/application.fam @@ -9,5 +9,4 @@ App( fap_icon="images/yatzee_icon_10px.png", fap_category="Games", fap_icon_assets="images", - ) diff --git a/applications/services/namechangersrv/application.fam b/applications/services/namechangersrv/application.fam index b4bace40d..3263a3708 100644 --- a/applications/services/namechangersrv/application.fam +++ b/applications/services/namechangersrv/application.fam @@ -4,4 +4,4 @@ App( entry_point="namechanger_on_system_start", requires=["storage"], order=1000, -) \ No newline at end of file +) diff --git a/assets/SConscript b/assets/SConscript index aace521d2..ef5d83c79 100644 --- a/assets/SConscript +++ b/assets/SConscript @@ -96,4 +96,4 @@ if assetsenv["IS_BASE_FIRMWARE"]: env.Replace(FW_RESOURCES=resources) assetsenv.Alias("resources", resources) -Return("assetslib") \ No newline at end of file +Return("assetslib") diff --git a/assets/resources/subghz/assets/extend_range.txt b/assets/resources/subghz/assets/extend_range.txt index e66e7ceb2..1b404a0e5 100644 --- a/assets/resources/subghz/assets/extend_range.txt +++ b/assets/resources/subghz/assets/extend_range.txt @@ -2,7 +2,7 @@ Filetype: Flipper SubGhz Setting File Version: 1 # Whether to allow extended ranges that can break your flipper -use_ext_range_at_own_risk: true +use_ext_range_at_own_risk: false # Whether to ignore the default TX region settings -ignore_default_tx_region: true +ignore_default_tx_region: false diff --git a/lib/STM32CubeWB.scons b/lib/STM32CubeWB.scons index cbdde9814..a1b484ad1 100644 --- a/lib/STM32CubeWB.scons +++ b/lib/STM32CubeWB.scons @@ -14,9 +14,15 @@ env.Append( "USE_FULL_LL_DRIVER", ], SDK_HEADERS=[ - *env.GlobRecursive("*_ll_*.h", "#/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Inc/", exclude="*usb.h"), + *env.GlobRecursive( + "*_ll_*.h", + "#/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Inc/", + exclude="*usb.h", + ), File("STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h"), - File("STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/include/stream_buffer.h"), + File( + "STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/include/stream_buffer.h" + ), ], ) diff --git a/scripts/FlipperPlaylist.py b/scripts/FlipperPlaylist.py index 4a688f2fb..6db250717 100644 --- a/scripts/FlipperPlaylist.py +++ b/scripts/FlipperPlaylist.py @@ -1,12 +1,14 @@ # Flipper Zero SUB-GHZ Playlist Generator import os import pip + try: from easygui import diropenbox except ImportError: - pip.main(['Install'], "easygui") + pip.main(["Install"], "easygui") from easygui import diropenbox + def main(): folder_path = diropenbox("Select the folder with Subghz files", "Subghz selector") output_path = diropenbox("Select your output location", "Output location") @@ -23,5 +25,6 @@ def main(): playlist_file.close() print("Done!") -if __name__ == '__main__': - main() \ No newline at end of file + +if __name__ == "__main__": + main() diff --git a/scripts/User/decode.py b/scripts/User/decode.py index f6779d967..64072b82f 100644 --- a/scripts/User/decode.py +++ b/scripts/User/decode.py @@ -6,69 +6,85 @@ import os import sys - def padded_hex(i, l): given_int = i given_len = l - hex_result = hex(given_int)[2:] # remove '0x' from beginning of str + hex_result = hex(given_int)[2:] # remove '0x' from beginning of str num_hex_chars = len(hex_result) - extra_zeros = '0' * (given_len - num_hex_chars) # may not get used.. + extra_zeros = "0" * (given_len - num_hex_chars) # may not get used.. - return ('0x' + hex_result if num_hex_chars == given_len else - '?' * given_len if num_hex_chars > given_len else - '0x' + extra_zeros + hex_result if num_hex_chars < given_len else - None) + return ( + "0x" + hex_result + if num_hex_chars == given_len + else "?" * given_len + if num_hex_chars > given_len + else "0x" + extra_zeros + hex_result + if num_hex_chars < given_len + else None + ) -parser = argparse.ArgumentParser(description='Turn cooked Flipper .bm files back into .xbm') -parser.add_argument('infile', metavar='i', - help='Input file') -parser.add_argument('outfile', metavar='o', - help='File to write to') -parser.add_argument('Width', metavar='W', type=int, nargs="?", default="128", - help='Width of the image. Find from meta.txt or directory name') -parser.add_argument('Height', metavar='H', type=int, nargs="?", default="64", - help='Height of the image. Find from meta.txt or directory name') +parser = argparse.ArgumentParser( + description="Turn cooked Flipper .bm files back into .xbm" +) + +parser.add_argument("infile", metavar="i", help="Input file") +parser.add_argument("outfile", metavar="o", help="File to write to") +parser.add_argument( + "Width", + metavar="W", + type=int, + nargs="?", + default="128", + help="Width of the image. Find from meta.txt or directory name", +) +parser.add_argument( + "Height", + metavar="H", + type=int, + nargs="?", + default="64", + help="Height of the image. Find from meta.txt or directory name", +) args = vars(parser.parse_args()) -r = open(args["infile"],"rb") -w = open(args["outfile"],"w") +r = open(args["infile"], "rb") +w = open(args["outfile"], "w") -fileStream=r.read() -filename=os.path.splitext(os.path.basename(args["outfile"]))[0] +fileStream = r.read() +filename = os.path.splitext(os.path.basename(args["outfile"]))[0] -imageWidth=args["Width"] -imageHeight=args["Height"] +imageWidth = args["Width"] +imageHeight = args["Height"] -#remove headers and padding -if(fileStream[0:2] == bytes([0x01,0x00])): - unpad=fileStream[4:] +# remove headers and padding +if fileStream[0:2] == bytes([0x01, 0x00]): + unpad = fileStream[4:] else: - if(fileStream[0:1] == bytes([0x00])): - unpad=fileStream[2:] + if fileStream[0:1] == bytes([0x00]): + unpad = fileStream[2:] - -#lzss decompress +# lzss decompress data_decoded_str = subprocess.check_output( - ["heatshrink", "-d","-w8","-l4"], input=unpad + ["heatshrink", "-d", "-w8", "-l4"], input=unpad ) -#turn it back into xbm +# turn it back into xbm -b=list(data_decoded_str) -c=', '.join(padded_hex(my_int,2) for my_int in b) +b = list(data_decoded_str) +c = ", ".join(padded_hex(my_int, 2) for my_int in b) -width_out = "#define "+ filename+ "_width "+ str(imageWidth) + "\n" -height_out = "#define "+ filename+ "_height "+ str(imageHeight) + "\n" -bytes_out = "static unsigned char "+ filename+ "_bits[] = {"+ str(c) + "};" +width_out = "#define " + filename + "_width " + str(imageWidth) + "\n" +height_out = "#define " + filename + "_height " + str(imageHeight) + "\n" +bytes_out = "static unsigned char " + filename + "_bits[] = {" + str(c) + "};" -data=width_out+height_out+bytes_out +data = width_out + height_out + bytes_out w.write(data) r.close() -w.close() \ No newline at end of file +w.close() diff --git a/scripts/User/encode.py b/scripts/User/encode.py index d2d533ea3..d88ec25f1 100644 --- a/scripts/User/encode.py +++ b/scripts/User/encode.py @@ -6,17 +6,17 @@ import os import sys -parser = argparse.ArgumentParser(description='Turn .xbm files into cooked .bm files for flipper FS') +parser = argparse.ArgumentParser( + description="Turn .xbm files into cooked .bm files for flipper FS" +) -parser.add_argument('infile', metavar='i', - help='Input file') -parser.add_argument('outfile', metavar='o', - help='File to write to') +parser.add_argument("infile", metavar="i", help="Input file") +parser.add_argument("outfile", metavar="o", help="File to write to") args = vars(parser.parse_args()) -r = open(args["infile"],"r") -w = open(args["outfile"],"wb") +r = open(args["infile"], "r") +w = open(args["outfile"], "wb") output = subprocess.check_output(["cat", args["infile"]]) diff --git a/scripts/User/icondecode.py b/scripts/User/icondecode.py index 596545269..c1177bc18 100644 --- a/scripts/User/icondecode.py +++ b/scripts/User/icondecode.py @@ -5,60 +5,82 @@ import io import os import sys + def padded_hex(i, l): given_int = i given_len = l - hex_result = hex(given_int)[2:] # remove '0x' from beginning of str + hex_result = hex(given_int)[2:] # remove '0x' from beginning of str num_hex_chars = len(hex_result) - extra_zeros = '0' * (given_len - num_hex_chars) # may not get used.. + extra_zeros = "0" * (given_len - num_hex_chars) # may not get used.. - return ('0x' + hex_result if num_hex_chars == given_len else - '?' * given_len if num_hex_chars > given_len else - '0x' + extra_zeros + hex_result if num_hex_chars < given_len else - None) + return ( + "0x" + hex_result + if num_hex_chars == given_len + else "?" * given_len + if num_hex_chars > given_len + else "0x" + extra_zeros + hex_result + if num_hex_chars < given_len + else None + ) -parser = argparse.ArgumentParser(description='Turn icon char arrays back into .xbm') +parser = argparse.ArgumentParser(description="Turn icon char arrays back into .xbm") -parser.add_argument('infile', metavar='i', - help='Input file') -parser.add_argument('outfile', metavar='o', - help='File to write to') -parser.add_argument('Width', metavar='W', type=int, nargs="?", default="128", - help='Width of the image. Find from meta.txt or directory name') -parser.add_argument('Height', metavar='H', type=int, nargs="?", default="64", - help='Height of the image. Find from meta.txt or directory name') -parser.add_argument('Trim', metavar='T', type=int, nargs="?", default="8", - help='Number of bytes off the start/header to trim. Multiples of 2 required.') +parser.add_argument("infile", metavar="i", help="Input file") +parser.add_argument("outfile", metavar="o", help="File to write to") +parser.add_argument( + "Width", + metavar="W", + type=int, + nargs="?", + default="128", + help="Width of the image. Find from meta.txt or directory name", +) +parser.add_argument( + "Height", + metavar="H", + type=int, + nargs="?", + default="64", + help="Height of the image. Find from meta.txt or directory name", +) +parser.add_argument( + "Trim", + metavar="T", + type=int, + nargs="?", + default="8", + help="Number of bytes off the start/header to trim. Multiples of 2 required.", +) args = vars(parser.parse_args()) -r = open(args["infile"],"r") -w = open(args["outfile"],"w") -imageWidth=args["Width"] -imageHeight=args["Height"] -trimStart=args["Trim"] +r = open(args["infile"], "r") +w = open(args["outfile"], "w") +imageWidth = args["Width"] +imageHeight = args["Height"] +trimStart = args["Trim"] -output = subprocess.check_output(["cat", args["infile"]]) #yes this is terrible. +output = subprocess.check_output(["cat", args["infile"]]) # yes this is terrible. f = io.StringIO(output.decode().strip()) -data = f.read().strip().replace(";","").replace("{","").replace("}","") +data = f.read().strip().replace(";", "").replace("{", "").replace("}", "") data_str = data.replace(",", "").replace("0x", "") data_bin = bytearray.fromhex(data_str[trimStart:]) data_decoded_str = subprocess.check_output( - ["heatshrink", "-d","-w8","-l4"], input=data_bin + ["heatshrink", "-d", "-w8", "-l4"], input=data_bin ) -b=list(data_decoded_str) +b = list(data_decoded_str) -c=', '.join(padded_hex(my_int,2) for my_int in b) +c = ", ".join(padded_hex(my_int, 2) for my_int in b) -width_out = "#define icon_width "+ str(imageWidth) + "\n" -height_out = "#define icon_height "+ str(imageHeight) + "\n" -bytes_out = "static unsigned char icon_bits[] = {"+ str(c) + "};" +width_out = "#define icon_width " + str(imageWidth) + "\n" +height_out = "#define icon_height " + str(imageHeight) + "\n" +bytes_out = "static unsigned char icon_bits[] = {" + str(c) + "};" -data=width_out+height_out+bytes_out +data = width_out + height_out + bytes_out w.write(data) r.close() diff --git a/scripts/User/iconencode.py b/scripts/User/iconencode.py index 67ba05d1b..e41e597dd 100644 --- a/scripts/User/iconencode.py +++ b/scripts/User/iconencode.py @@ -5,64 +5,81 @@ import io import os import sys + def padded_hex(i, l): given_int = i given_len = l - hex_result = hex(given_int)[2:] # remove '0x' from beginning of str + hex_result = hex(given_int)[2:] # remove '0x' from beginning of str num_hex_chars = len(hex_result) - extra_zeros = '0' * (given_len - num_hex_chars) # may not get used.. + extra_zeros = "0" * (given_len - num_hex_chars) # may not get used.. - return ('0x' + hex_result if num_hex_chars == given_len else - '?' * given_len if num_hex_chars > given_len else - '0x' + extra_zeros + hex_result if num_hex_chars < given_len else - None) + return ( + "0x" + hex_result + if num_hex_chars == given_len + else "?" * given_len + if num_hex_chars > given_len + else "0x" + extra_zeros + hex_result + if num_hex_chars < given_len + else None + ) -parser = argparse.ArgumentParser(description='Turn icon char arrays back into .xbm') +parser = argparse.ArgumentParser(description="Turn icon char arrays back into .xbm") -parser.add_argument('infile', metavar='i', - help='Input file') -parser.add_argument('Width', metavar='W', type=int, nargs="?", default="128", - help='Width of the image. Find from meta.txt or directory name') -parser.add_argument('Height', metavar='H', type=int, nargs="?", default="64", - help='Height of the image. Find from meta.txt or directory name') +parser.add_argument("infile", metavar="i", help="Input file") +parser.add_argument( + "Width", + metavar="W", + type=int, + nargs="?", + default="128", + help="Width of the image. Find from meta.txt or directory name", +) +parser.add_argument( + "Height", + metavar="H", + type=int, + nargs="?", + default="64", + help="Height of the image. Find from meta.txt or directory name", +) args = vars(parser.parse_args()) -r = open(args["infile"],"r") -infile=args["infile"].split(".")[0] +r = open(args["infile"], "r") +infile = args["infile"].split(".")[0] -imageWidth=args["Width"] -imageHeight=args["Height"] -dims=str(imageWidth)+"x"+str(imageHeight) +imageWidth = args["Width"] +imageHeight = args["Height"] +dims = str(imageWidth) + "x" + str(imageHeight) -output = subprocess.check_output(["cat", args["infile"]]) #yes this is terrible. +output = subprocess.check_output(["cat", args["infile"]]) # yes this is terrible. f = io.StringIO(output.decode().strip()) -data = f.read().strip().replace(";","").replace("{","").replace("}","") +data = f.read().strip().replace(";", "").replace("{", "").replace("}", "") data_str = data.replace(",", "").replace("0x", "") data_bin = bytearray.fromhex(data_str) data_encoded_str = subprocess.check_output( - ["heatshrink", "-e","-w8","-l4"], input=data_bin + ["heatshrink", "-e", "-w8", "-l4"], input=data_bin ) -b=list(data_encoded_str) +b = list(data_encoded_str) -c=','.join(padded_hex(my_int,2) for my_int in b) +c = ",".join(padded_hex(my_int, 2) for my_int in b) # a bit ugly. -framename="_I_"+infile+"_"+dims +framename = "_I_" + infile + "_" + dims print(len(b)) -#d=len(b) +# d=len(b) # if b > 255 split 0x1234 into 0x34,0x12 -#d=hex(len(b)) +# d=hex(len(b)) -char_out = "const uint8_t "+framename+"_0[] = {"+ str(c) + ",};" -char_out2 = "const uint8_t "+framename+"[] = {"+framename+"_0};" -#data=bytes_out +char_out = "const uint8_t " + framename + "_0[] = {" + str(c) + ",};" +char_out2 = "const uint8_t " + framename + "[] = {" + framename + "_0};" +# data=bytes_out print(char_out) print(char_out2) -#w.write(data) -#w.close() +# w.write(data) +# w.close() diff --git a/scripts/asset_packer.py b/scripts/asset_packer.py index 54c598ea5..aea755811 100755 --- a/scripts/asset_packer.py +++ b/scripts/asset_packer.py @@ -43,7 +43,9 @@ def convert_bmx(img: "Image.Image | pathlib.Path") -> bytes: return data -def pack(input: "str | pathlib.Path", output: "str | pathlib.Path", logger: typing.Callable): +def pack( + input: "str | pathlib.Path", output: "str | pathlib.Path", logger: typing.Callable +): input = pathlib.Path(input) output = pathlib.Path(output) output.mkdir(parents=True, exist_ok=True) @@ -68,7 +70,9 @@ def pack(input: "str | pathlib.Path", output: "str | pathlib.Path", logger: typi if (source / "Anims/manifest.txt").exists(): (packed / "Anims").mkdir(parents=True, exist_ok=True) - shutil.copyfile(source / "Anims/manifest.txt", packed / "Anims/manifest.txt") + shutil.copyfile( + source / "Anims/manifest.txt", packed / "Anims/manifest.txt" + ) for anim in (source / "Anims").iterdir(): if not anim.is_dir(): continue @@ -77,9 +81,13 @@ def pack(input: "str | pathlib.Path", output: "str | pathlib.Path", logger: typi if not frame.is_file(): continue if frame.name == "meta.txt": - shutil.copyfile(frame, packed / "Anims" / anim.name / "meta.txt") + shutil.copyfile( + frame, packed / "Anims" / anim.name / "meta.txt" + ) elif frame.name.startswith("frame_"): - (packed / "Anims" / anim.name / frame.with_suffix(".bm").name).write_bytes(convert_bm(frame)) + ( + packed / "Anims" / anim.name / frame.with_suffix(".bm").name + ).write_bytes(convert_bm(frame)) if (source / "Icons").is_dir(): for icons in (source / "Icons").iterdir(): @@ -89,7 +97,9 @@ def pack(input: "str | pathlib.Path", output: "str | pathlib.Path", logger: typi for icon in icons.iterdir(): if not icon.is_file(): continue - (packed / "Icons" / icons.name / icon.with_suffix(".bmx").name).write_bytes(convert_bmx(icon)) + ( + packed / "Icons" / icons.name / icon.with_suffix(".bmx").name + ).write_bytes(convert_bmx(icon)) if __name__ == "__main__": @@ -105,7 +115,4 @@ if __name__ == "__main__": pack(here, here / "dolphin_custom", logger=print) end = time.perf_counter() - input( - f"\nFinished in {round(end - start, 2)}s\n" - "Press [Enter] to exit" - ) + input(f"\nFinished in {round(end - start, 2)}s\n" "Press [Enter] to exit") diff --git a/scripts/assets.py b/scripts/assets.py index c616a4ab1..e7c5a6d12 100755 --- a/scripts/assets.py +++ b/scripts/assets.py @@ -30,11 +30,16 @@ valid_dirs = list() # This will not stay, dont worry! This is temp code until we got time to rewrite this all root_dir = pathlib.Path(__file__).absolute().parent.parent dolphin_external = root_dir / "assets/dolphin/external/" -potential_directories = [item for item in dolphin_external.iterdir() if item.is_dir()] # Get all animation directories +potential_directories = [ + item for item in dolphin_external.iterdir() if item.is_dir() +] # Get all animation directories + +for directory in potential_directories: # loop through all of them + if ( + directory / "manifest.txt" + ).exists(): # check if they contain a manifest.txt TODO: This code should be moved to wherever manifest.txt files are validated! + valid_dirs.append(directory) # append valid directory to list -for directory in potential_directories: # loop through all of them - if (directory / "manifest.txt").exists(): # check if they contain a manifest.txt TODO: This code should be moved to wherever manifest.txt files are validated! - valid_dirs.append(directory) # append valid directory to list class Main(App): def init(self): @@ -259,13 +264,24 @@ class Main(App): self.logger.info("Manifest is up-to-date!") # This will not stay, dont worry! This is temp code until we got time to rewrite this all - global valid_dirs # access our global variable - for valid_dir in valid_dirs: # We can copy the manifest for all of the valid dirs! - (root_dir / f"assets/resources/dolphin/{valid_dir.name}").mkdir(parents=True, exist_ok=True) - shutil.copyfile(valid_dir / "manifest.txt", root_dir / f"assets/resources/dolphin/{valid_dir.name}/manifest.txt") + global valid_dirs # access our global variable + for ( + valid_dir + ) in valid_dirs: # We can copy the manifest for all of the valid dirs! + (root_dir / f"assets/resources/dolphin/{valid_dir.name}").mkdir( + parents=True, exist_ok=True + ) + shutil.copyfile( + valid_dir / "manifest.txt", + root_dir / f"assets/resources/dolphin/{valid_dir.name}/manifest.txt", + ) (root_dir / "assets/resources/dolphin/manifest.txt").unlink() self.logger.info("Packing custom asset packs") - asset_packer.pack(root_dir / "assets/dolphin/custom", root_dir / f"assets/resources/dolphin_custom", self.logger.info) + asset_packer.pack( + root_dir / "assets/dolphin/custom", + root_dir / f"assets/resources/dolphin_custom", + self.logger.info, + ) self.logger.info(f"Complete") @@ -295,7 +311,9 @@ class Main(App): self.logger.info(f"Processing Dolphin sources") dolphin = Dolphin() self.logger.info(f"Loading data") - if f"dolphin{os.sep}external" in str(self.args.input_directory): # AHEM... oopsie. This script apparently just loads all assets, not only external assets, lol. + if f"dolphin{os.sep}external" in str( + self.args.input_directory + ): # AHEM... oopsie. This script apparently just loads all assets, not only external assets, lol. dolphin.load(self.args.input_directory, valid_dirs) else: dolphin.load(self.args.input_directory) diff --git a/scripts/flipper/assets/dolphin.py b/scripts/flipper/assets/dolphin.py index 899a8a615..45ed3e19f 100644 --- a/scripts/flipper/assets/dolphin.py +++ b/scripts/flipper/assets/dolphin.py @@ -35,7 +35,7 @@ class DolphinBubbleAnimation: min_level: int, max_level: int, weight: int, - subpath: str = None + subpath: str = None, ): # Manifest self.name = name @@ -188,7 +188,9 @@ class DolphinBubbleAnimation: def save(self, output_directory: str): if self.subpath: - animation_directory = os.path.join(output_directory, self.subpath, self.name) + animation_directory = os.path.join( + output_directory, self.subpath, self.name + ) else: animation_directory = os.path.join(output_directory, self.name) os.makedirs(animation_directory, exist_ok=True) @@ -294,7 +296,13 @@ class DolphinManifest: # Initialize animation animation = DolphinBubbleAnimation( - name, min_butthurt, max_butthurt, min_level, max_level, weight, subpath + name, + min_butthurt, + max_butthurt, + min_level, + max_level, + weight, + subpath, ) # Load Animation meta and frames diff --git a/scripts/runfap.py b/scripts/runfap.py index 14d885e8a..9f544fd90 100644 --- a/scripts/runfap.py +++ b/scripts/runfap.py @@ -103,4 +103,4 @@ class Main(App): if __name__ == "__main__": - Main()() \ No newline at end of file + Main()() diff --git a/scripts/sconsdist.py b/scripts/sconsdist.py index 0fa120d87..ce261954c 100644 --- a/scripts/sconsdist.py +++ b/scripts/sconsdist.py @@ -166,11 +166,13 @@ class Main(App): ) ) bundle_args.extend(self.other_args) - log_custom_fz_name = ( - environ.get("CUSTOM_FLIPPER_NAME", None) - or "" - ) - if (log_custom_fz_name != "") and (len(log_custom_fz_name) <= 8) and (log_custom_fz_name.isalnum()) and (log_custom_fz_name.isascii()): + log_custom_fz_name = environ.get("CUSTOM_FLIPPER_NAME", None) or "" + if ( + (log_custom_fz_name != "") + and (len(log_custom_fz_name) <= 8) + and (log_custom_fz_name.isalnum()) + and (log_custom_fz_name.isascii()) + ): self.logger.info( f"Flipper Custom Name is set:\n\tName: {log_custom_fz_name} : length - {len(log_custom_fz_name)} chars" ) diff --git a/scripts/version.py b/scripts/version.py index 363df0aeb..7f0a11349 100644 --- a/scripts/version.py +++ b/scripts/version.py @@ -11,7 +11,11 @@ from datetime import date, datetime class GitVersion: def __init__(self, source_dir): self.source_dir = source_dir - self.gitlist = [("commit", "rev-parse --short HEAD"), ("branch", "rev-parse --abbrev-ref") , ("branch_num", "rev-list -count HEAD")] + self.gitlist = [ + ("commit", "rev-parse --short HEAD"), + ("branch", "rev-parse --abbrev-ref"), + ("branch_num", "rev-list -count HEAD"), + ] def get_version_info(self): commit = branch = branch_num = "XFW-0040" @@ -36,20 +40,19 @@ class GitVersion: # If WORKFLOW_BRANCH_OR_TAG is set in environment, is has precedence # (set by CI) - custom_fz_name = ( - os.environ.get("CUSTOM_FLIPPER_NAME", None) - or "" - ) + custom_fz_name = os.environ.get("CUSTOM_FLIPPER_NAME", None) or "" - force_no_dirty = ( - os.environ.get("FORCE_NO_DIRTY", None) - or "" - ) + force_no_dirty = os.environ.get("FORCE_NO_DIRTY", None) or "" - if (force_no_dirty != ""): + if force_no_dirty != "": dirty = False - if (custom_fz_name != "") and (len(custom_fz_name) <= 8) and (custom_fz_name.isalnum()) and (custom_fz_name.isascii()): + if ( + (custom_fz_name != "") + and (len(custom_fz_name) <= 8) + and (custom_fz_name.isalnum()) + and (custom_fz_name.isascii()) + ): return { "GIT_COMMIT": commit, "GIT_BRANCH": "dev", diff --git a/site_scons/cc.scons b/site_scons/cc.scons index 95888dc95..1eb6a3376 100644 --- a/site_scons/cc.scons +++ b/site_scons/cc.scons @@ -44,4 +44,4 @@ ENV.AppendUnique( "-mlittle-endian", "-mthumb", ], -) \ No newline at end of file +) diff --git a/site_scons/commandline.scons b/site_scons/commandline.scons index 837fd0b85..722dd3cfa 100644 --- a/site_scons/commandline.scons +++ b/site_scons/commandline.scons @@ -243,4 +243,4 @@ vars.AddVariables( ), ) -Return("vars") \ No newline at end of file +Return("vars") diff --git a/site_scons/environ.scons b/site_scons/environ.scons index ab60d4e71..0ffc8a6a2 100644 --- a/site_scons/environ.scons +++ b/site_scons/environ.scons @@ -88,4 +88,4 @@ SetOption("max_drift", 1) wrap_tempfile(coreenv, "LINKCOM") wrap_tempfile(coreenv, "ARCOM") -Return("coreenv") \ No newline at end of file +Return("coreenv") diff --git a/site_scons/extapps.scons b/site_scons/extapps.scons index ea16d1e78..bff9a8c30 100644 --- a/site_scons/extapps.scons +++ b/site_scons/extapps.scons @@ -152,4 +152,4 @@ if appenv["FORCE"]: appenv.AlwaysBuild(sdk_source, sdk_tree, sdk_apicheck, sdk_apisyms) -Return("extapps") \ No newline at end of file +Return("extapps") From 64fa597e19943452ae0fcf057830f5573ccf7d39 Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Fri, 3 Feb 2023 05:01:00 +0000 Subject: [PATCH 07/11] Fix animation load fail, size too big --- applications/services/desktop/animations/animation_storage.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/services/desktop/animations/animation_storage.c b/applications/services/desktop/animations/animation_storage.c index c717b0c36..a80a958a3 100644 --- a/applications/services/desktop/animations/animation_storage.c +++ b/applications/services/desktop/animations/animation_storage.c @@ -336,7 +336,7 @@ static bool animation_storage_load_frames( FileInfo file_info; FuriString* filename; filename = furi_string_alloc(); - size_t max_filesize = ROUND_UP_TO(width, 8) * height + 1; + size_t max_filesize = ROUND_UP_TO(width, 8) * height + 2; for(int i = 0; i < icon->frame_count; ++i) { frames_ok = false; From 195aea9c37d9a1e8342edac992b053942a034455 Mon Sep 17 00:00:00 2001 From: VerstreuteSeele Date: Fri, 3 Feb 2023 11:43:16 +0100 Subject: [PATCH 08/11] Update storage_settings_scene_sd_info.c --- .../scenes/storage_settings_scene_sd_info.c | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/applications/settings/storage_settings/scenes/storage_settings_scene_sd_info.c b/applications/settings/storage_settings/scenes/storage_settings_scene_sd_info.c index f69f6c7ef..4901e960e 100644 --- a/applications/settings/storage_settings/scenes/storage_settings_scene_sd_info.c +++ b/applications/settings/storage_settings/scenes/storage_settings_scene_sd_info.c @@ -28,14 +28,44 @@ void storage_settings_scene_sd_info_on_enter(void* context) { dialog_ex, "Try to reinsert\nor format SD\ncard.", 3, 19, AlignLeft, AlignTop); dialog_ex_set_center_button_text(dialog_ex, "Ok"); } else { + char unit_kb[] = "KB"; + char unit_mb[] = "MB"; + char unit_gb[] = "GB"; + + double sd_total_val = (double)sd_info.kb_total; + char* sd_total_unit = unit_kb; + double sd_free_val = (double)sd_info.kb_free; + char* sd_free_unit = unit_kb; + + if(sd_total_val > 1024) { + sd_total_val /= 1024; + sd_total_unit = unit_mb; + } + if(sd_total_val > 1024) { + sd_total_val /= 1024; + sd_total_unit = unit_gb; + } + + if(sd_free_val > 1024) { + sd_free_val /= 1024; + sd_free_unit = unit_mb; + } + if(sd_free_val > 1024) { + sd_free_val /= 1024; + sd_free_unit = unit_gb; + } + furi_string_printf( app->text_string, - "Label: %s\nType: %s\n%lu KiB total\n%lu KiB free\n" + "Label: %s\nType: %s\n%.2f %s total\n%.2f %s free %.2f%% free\n" "%02X%2.2s %5.5s %i.%i\nSN:%04lX %02i/%i", sd_info.label, sd_api_get_fs_type_text(sd_info.fs_type), - sd_info.kb_total, - sd_info.kb_free, + sd_total_val, + sd_total_unit, + sd_free_val, + sd_free_unit, + (double)(((int)sd_info.kb_free * 100.0) / (int)sd_info.kb_total), sd_cid.ManufacturerID, sd_cid.OEM_AppliID, sd_cid.ProdName, From f3bb068fd71a864e360fec037e836f183a1d5c52 Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Fri, 3 Feb 2023 17:43:59 +0000 Subject: [PATCH 09/11] Rename bad usb to bad kb --- applications/ReadMe.md | 2 +- .../file_browser_test/file_browser_app.c | 2 +- .../icons/{badusb_10px.png => badkb_10px.png} | Bin .../scenes/file_browser_scene_start.c | 2 +- applications/main/application.fam | 4 +- .../main/archive/helpers/archive_browser.h | 6 +- .../main/archive/helpers/archive_files.c | 6 +- .../main/archive/helpers/archive_files.h | 2 +- .../archive/scenes/archive_scene_browser.c | 2 +- .../main/archive/views/archive_browser_view.c | 12 +- .../main/archive/views/archive_browser_view.h | 2 +- .../main/{bad_usb => bad_kb}/application.fam | 10 +- .../bad_usb_app.c => bad_kb/bad_kb_app.c} | 116 ++--- applications/main/bad_kb/bad_kb_app.h | 13 + applications/main/bad_kb/bad_kb_app_i.h | 80 ++++ .../bad_kb_script.c} | 426 +++++++++--------- applications/main/bad_kb/bad_kb_script.h | 49 ++ .../main/bad_kb/bad_kb_settings_filename.h | 3 + .../main/bad_kb/scenes/bad_kb_scene.c | 30 ++ .../scenes/bad_kb_scene.h} | 16 +- .../main/bad_kb/scenes/bad_kb_scene_config.h | 8 + .../bad_kb/scenes/bad_kb_scene_config_bt.c | 84 ++++ .../scenes/bad_kb_scene_config_layout.c | 48 ++ .../bad_kb/scenes/bad_kb_scene_config_mac.c | 57 +++ .../bad_kb/scenes/bad_kb_scene_config_name.c | 46 ++ .../bad_kb/scenes/bad_kb_scene_config_usb.c | 72 +++ .../scenes/bad_kb_scene_error.c} | 30 +- .../bad_kb/scenes/bad_kb_scene_file_select.c | 52 +++ .../main/bad_kb/scenes/bad_kb_scene_work.c | 58 +++ .../views/bad_kb_view.c} | 114 ++--- applications/main/bad_kb/views/bad_kb_view.h | 21 + applications/main/bad_usb/bad_usb_app.h | 13 - applications/main/bad_usb/bad_usb_app_i.h | 80 ---- applications/main/bad_usb/bad_usb_script.h | 49 -- .../main/bad_usb/bad_usb_settings_filename.h | 3 - .../main/bad_usb/scenes/bad_usb_scene.c | 30 -- .../bad_usb/scenes/bad_usb_scene_config.h | 8 - .../bad_usb/scenes/bad_usb_scene_config_bt.c | 84 ---- .../scenes/bad_usb_scene_config_layout.c | 48 -- .../bad_usb/scenes/bad_usb_scene_config_mac.c | 57 --- .../scenes/bad_usb_scene_config_name.c | 46 -- .../bad_usb/scenes/bad_usb_scene_config_usb.c | 72 --- .../scenes/bad_usb_scene_file_select.c | 52 --- .../main/bad_usb/scenes/bad_usb_scene_work.c | 58 --- .../main/bad_usb/views/bad_usb_view.h | 21 - .../dolphinbackup/storage_DolphinBackup.c | 2 +- .../icons/{badusb_10px.png => badkb_10px.png} | Bin .../{badusb_10px.png => badkb_10px.png} | Bin .../plugins/mousejacker/mousejacker.c | 4 +- .../plugins/totp/services/config/config.c | 4 +- .../totp_scene_generate_token.c | 40 +- .../services/dolphin/helpers/dolphin_deed.c | 4 +- .../services/dolphin/helpers/dolphin_deed.h | 4 +- .../gui/modules/file_browser_worker.c | 4 +- .../{badusb_10px.png => badkb_10px.png} | Bin .../icons/{BadUsb => BadKb}/Clock_18x18.png | Bin .../icons/{BadUsb => BadKb}/Error_18x18.png | Bin .../{BadUsb => BadKb}/EviSmile1_18x21.png | Bin .../{BadUsb => BadKb}/EviSmile2_18x21.png | Bin .../{BadUsb => BadKb}/EviWaiting1_18x21.png | Bin .../{BadUsb => BadKb}/EviWaiting2_18x21.png | Bin .../icons/{BadUsb => BadKb}/Percent_10x14.png | Bin .../icons/{BadUsb => BadKb}/Smile_18x18.png | Bin .../icons/{BadUsb => BadKb}/UsbTree_48x22.png | Bin .../{BadUsb_14 => BadKb_14}/frame_01.png | Bin .../{BadUsb_14 => BadKb_14}/frame_02.png | Bin .../{BadUsb_14 => BadKb_14}/frame_03.png | Bin .../{BadUsb_14 => BadKb_14}/frame_04.png | Bin .../{BadUsb_14 => BadKb_14}/frame_05.png | Bin .../{BadUsb_14 => BadKb_14}/frame_06.png | Bin .../{BadUsb_14 => BadKb_14}/frame_07.png | Bin .../{BadUsb_14 => BadKb_14}/frame_08.png | Bin .../{BadUsb_14 => BadKb_14}/frame_09.png | Bin .../{BadUsb_14 => BadKb_14}/frame_10.png | Bin .../{BadUsb_14 => BadKb_14}/frame_11.png | Bin .../{BadUsb_14 => BadKb_14}/frame_rate | 0 assets/resources/badkb/.badkb.settings | 1 + .../Kiosk-Evasion-Bruteforce.txt | 0 .../{badusb => badkb}/Wifi-Stealer_ORG.txt | 0 .../{badusb => badkb}/demo_macos.txt | 4 +- .../{badusb => badkb}/demo_windows.txt | 4 +- .../{badusb => badkb}/layouts/ba-BA.kl | Bin .../{badusb => badkb}/layouts/cz_CS.kl | Bin .../{badusb => badkb}/layouts/da-DA.kl | Bin .../{badusb => badkb}/layouts/de-CH.kl | Bin .../{badusb => badkb}/layouts/de-DE.kl | Bin .../{badusb => badkb}/layouts/dvorak.kl | Bin .../{badusb => badkb}/layouts/en-UK.kl | Bin .../{badusb => badkb}/layouts/en-US.kl | Bin .../{badusb => badkb}/layouts/es-ES.kl | Bin .../{badusb => badkb}/layouts/fr-BE.kl | Bin .../{badusb => badkb}/layouts/fr-CH.kl | Bin .../{badusb => badkb}/layouts/fr-FR.kl | Bin .../{badusb => badkb}/layouts/hr-HR.kl | Bin .../{badusb => badkb}/layouts/hu-HU.kl | Bin .../{badusb => badkb}/layouts/it-IT.kl | Bin .../{badusb => badkb}/layouts/nb-NO.kl | Bin .../{badusb => badkb}/layouts/nl-NL.kl | Bin .../{badusb => badkb}/layouts/pt-BR.kl | Bin .../{badusb => badkb}/layouts/pt-PT.kl | Bin .../{badusb => badkb}/layouts/si-SI.kl | Bin .../{badusb => badkb}/layouts/sk-SK.kl | Bin .../{badusb => badkb}/layouts/sv-SE.kl | Bin .../{badusb => badkb}/layouts/tr-TR.kl | Bin assets/resources/badusb/.badusb.settings | 1 - 105 files changed, 1033 insertions(+), 1033 deletions(-) rename applications/debug/file_browser_test/icons/{badusb_10px.png => badkb_10px.png} (100%) rename applications/main/{bad_usb => bad_kb}/application.fam (55%) rename applications/main/{bad_usb/bad_usb_app.c => bad_kb/bad_kb_app.c} (52%) create mode 100644 applications/main/bad_kb/bad_kb_app.h create mode 100644 applications/main/bad_kb/bad_kb_app_i.h rename applications/main/{bad_usb/bad_usb_script.c => bad_kb/bad_kb_script.c} (65%) create mode 100644 applications/main/bad_kb/bad_kb_script.h create mode 100644 applications/main/bad_kb/bad_kb_settings_filename.h create mode 100644 applications/main/bad_kb/scenes/bad_kb_scene.c rename applications/main/{bad_usb/scenes/bad_usb_scene.h => bad_kb/scenes/bad_kb_scene.h} (68%) create mode 100644 applications/main/bad_kb/scenes/bad_kb_scene_config.h create mode 100644 applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c create mode 100644 applications/main/bad_kb/scenes/bad_kb_scene_config_layout.c create mode 100644 applications/main/bad_kb/scenes/bad_kb_scene_config_mac.c create mode 100644 applications/main/bad_kb/scenes/bad_kb_scene_config_name.c create mode 100644 applications/main/bad_kb/scenes/bad_kb_scene_config_usb.c rename applications/main/{bad_usb/scenes/bad_usb_scene_error.c => bad_kb/scenes/bad_kb_scene_error.c} (70%) create mode 100644 applications/main/bad_kb/scenes/bad_kb_scene_file_select.c create mode 100644 applications/main/bad_kb/scenes/bad_kb_scene_work.c rename applications/main/{bad_usb/views/bad_usb_view.c => bad_kb/views/bad_kb_view.c} (70%) create mode 100644 applications/main/bad_kb/views/bad_kb_view.h delete mode 100644 applications/main/bad_usb/bad_usb_app.h delete mode 100644 applications/main/bad_usb/bad_usb_app_i.h delete mode 100644 applications/main/bad_usb/bad_usb_script.h delete mode 100644 applications/main/bad_usb/bad_usb_settings_filename.h delete mode 100644 applications/main/bad_usb/scenes/bad_usb_scene.c delete mode 100644 applications/main/bad_usb/scenes/bad_usb_scene_config.h delete mode 100644 applications/main/bad_usb/scenes/bad_usb_scene_config_bt.c delete mode 100644 applications/main/bad_usb/scenes/bad_usb_scene_config_layout.c delete mode 100644 applications/main/bad_usb/scenes/bad_usb_scene_config_mac.c delete mode 100644 applications/main/bad_usb/scenes/bad_usb_scene_config_name.c delete mode 100644 applications/main/bad_usb/scenes/bad_usb_scene_config_usb.c delete mode 100644 applications/main/bad_usb/scenes/bad_usb_scene_file_select.c delete mode 100644 applications/main/bad_usb/scenes/bad_usb_scene_work.c delete mode 100644 applications/main/bad_usb/views/bad_usb_view.h rename applications/plugins/mousejacker/icons/{badusb_10px.png => badkb_10px.png} (100%) rename applications/plugins/mousejacker/images/{badusb_10px.png => badkb_10px.png} (100%) rename assets/icons/Archive/{badusb_10px.png => badkb_10px.png} (100%) rename assets/icons/{BadUsb => BadKb}/Clock_18x18.png (100%) rename assets/icons/{BadUsb => BadKb}/Error_18x18.png (100%) rename assets/icons/{BadUsb => BadKb}/EviSmile1_18x21.png (100%) rename assets/icons/{BadUsb => BadKb}/EviSmile2_18x21.png (100%) rename assets/icons/{BadUsb => BadKb}/EviWaiting1_18x21.png (100%) rename assets/icons/{BadUsb => BadKb}/EviWaiting2_18x21.png (100%) rename assets/icons/{BadUsb => BadKb}/Percent_10x14.png (100%) rename assets/icons/{BadUsb => BadKb}/Smile_18x18.png (100%) rename assets/icons/{BadUsb => BadKb}/UsbTree_48x22.png (100%) rename assets/icons/MainMenu/{BadUsb_14 => BadKb_14}/frame_01.png (100%) rename assets/icons/MainMenu/{BadUsb_14 => BadKb_14}/frame_02.png (100%) rename assets/icons/MainMenu/{BadUsb_14 => BadKb_14}/frame_03.png (100%) rename assets/icons/MainMenu/{BadUsb_14 => BadKb_14}/frame_04.png (100%) rename assets/icons/MainMenu/{BadUsb_14 => BadKb_14}/frame_05.png (100%) rename assets/icons/MainMenu/{BadUsb_14 => BadKb_14}/frame_06.png (100%) rename assets/icons/MainMenu/{BadUsb_14 => BadKb_14}/frame_07.png (100%) rename assets/icons/MainMenu/{BadUsb_14 => BadKb_14}/frame_08.png (100%) rename assets/icons/MainMenu/{BadUsb_14 => BadKb_14}/frame_09.png (100%) rename assets/icons/MainMenu/{BadUsb_14 => BadKb_14}/frame_10.png (100%) rename assets/icons/MainMenu/{BadUsb_14 => BadKb_14}/frame_11.png (100%) rename assets/icons/MainMenu/{BadUsb_14 => BadKb_14}/frame_rate (100%) create mode 100644 assets/resources/badkb/.badkb.settings rename assets/resources/{badusb => badkb}/Kiosk-Evasion-Bruteforce.txt (100%) rename assets/resources/{badusb => badkb}/Wifi-Stealer_ORG.txt (100%) rename assets/resources/{badusb => badkb}/demo_macos.txt (92%) rename assets/resources/{badusb => badkb}/demo_windows.txt (92%) rename assets/resources/{badusb => badkb}/layouts/ba-BA.kl (100%) rename assets/resources/{badusb => badkb}/layouts/cz_CS.kl (100%) rename assets/resources/{badusb => badkb}/layouts/da-DA.kl (100%) rename assets/resources/{badusb => badkb}/layouts/de-CH.kl (100%) rename assets/resources/{badusb => badkb}/layouts/de-DE.kl (100%) rename assets/resources/{badusb => badkb}/layouts/dvorak.kl (100%) rename assets/resources/{badusb => badkb}/layouts/en-UK.kl (100%) rename assets/resources/{badusb => badkb}/layouts/en-US.kl (100%) rename assets/resources/{badusb => badkb}/layouts/es-ES.kl (100%) rename assets/resources/{badusb => badkb}/layouts/fr-BE.kl (100%) rename assets/resources/{badusb => badkb}/layouts/fr-CH.kl (100%) rename assets/resources/{badusb => badkb}/layouts/fr-FR.kl (100%) rename assets/resources/{badusb => badkb}/layouts/hr-HR.kl (100%) rename assets/resources/{badusb => badkb}/layouts/hu-HU.kl (100%) rename assets/resources/{badusb => badkb}/layouts/it-IT.kl (100%) rename assets/resources/{badusb => badkb}/layouts/nb-NO.kl (100%) rename assets/resources/{badusb => badkb}/layouts/nl-NL.kl (100%) rename assets/resources/{badusb => badkb}/layouts/pt-BR.kl (100%) rename assets/resources/{badusb => badkb}/layouts/pt-PT.kl (100%) rename assets/resources/{badusb => badkb}/layouts/si-SI.kl (100%) rename assets/resources/{badusb => badkb}/layouts/sk-SK.kl (100%) rename assets/resources/{badusb => badkb}/layouts/sv-SE.kl (100%) rename assets/resources/{badusb => badkb}/layouts/tr-TR.kl (100%) delete mode 100644 assets/resources/badusb/.badusb.settings diff --git a/applications/ReadMe.md b/applications/ReadMe.md index 3bd2aeb06..efc9afd86 100644 --- a/applications/ReadMe.md +++ b/applications/ReadMe.md @@ -25,7 +25,7 @@ Applications for factory testing the Flipper. Applications for main Flipper menu. - `archive` - Archive and file manager -- `bad_usb` - Bad USB application +- `bad_kb` - Bad KB application - `fap_loader` - External applications loader - `gpio` - GPIO application: includes USART bridge and GPIO control - `ibutton` - iButton application, onewire keys and more diff --git a/applications/debug/file_browser_test/file_browser_app.c b/applications/debug/file_browser_test/file_browser_app.c index bf423d34e..1df4891cd 100644 --- a/applications/debug/file_browser_test/file_browser_app.c +++ b/applications/debug/file_browser_test/file_browser_app.c @@ -48,7 +48,7 @@ FileBrowserApp* file_browser_app_alloc(char* arg) { app->file_path = furi_string_alloc(); app->file_browser = file_browser_alloc(app->file_path); - file_browser_configure(app->file_browser, "*", NULL, true, false, &I_badusb_10px, true); + file_browser_configure(app->file_browser, "*", NULL, true, false, &I_badkb_10px, true); view_dispatcher_add_view( app->view_dispatcher, FileBrowserAppViewStart, widget_get_view(app->widget)); diff --git a/applications/debug/file_browser_test/icons/badusb_10px.png b/applications/debug/file_browser_test/icons/badkb_10px.png similarity index 100% rename from applications/debug/file_browser_test/icons/badusb_10px.png rename to applications/debug/file_browser_test/icons/badkb_10px.png diff --git a/applications/debug/file_browser_test/scenes/file_browser_scene_start.c b/applications/debug/file_browser_test/scenes/file_browser_scene_start.c index 9eb26944f..9211ff3bb 100644 --- a/applications/debug/file_browser_test/scenes/file_browser_scene_start.c +++ b/applications/debug/file_browser_test/scenes/file_browser_scene_start.c @@ -19,7 +19,7 @@ bool file_browser_scene_start_on_event(void* context, SceneManagerEvent event) { bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { - furi_string_set(app->file_path, ANY_PATH("badusb/demo_windows.txt")); + furi_string_set(app->file_path, ANY_PATH("badkb/demo_windows.txt")); scene_manager_next_scene(app->scene_manager, FileBrowserSceneBrowser); consumed = true; } else if(event.type == SceneManagerEventTypeTick) { diff --git a/applications/main/application.fam b/applications/main/application.fam index 9820ee3ac..eefb801b3 100644 --- a/applications/main/application.fam +++ b/applications/main/application.fam @@ -9,7 +9,7 @@ App( "lfrfid", "nfc", "subghz", - "bad_usb", + "bad_kb", "u2f", "fap_loader", "sub_playlist", @@ -30,7 +30,7 @@ App( "lfrfid", "nfc", "subghz", - # "bad_usb", + # "bad_kb", # "u2f", "fap_loader", "archive", diff --git a/applications/main/archive/helpers/archive_browser.h b/applications/main/archive/helpers/archive_browser.h index 5b13e98da..ece04ad72 100644 --- a/applications/main/archive/helpers/archive_browser.h +++ b/applications/main/archive/helpers/archive_browser.h @@ -14,7 +14,7 @@ static const char* tab_default_paths[] = { [ArchiveTabSubGhz] = ANY_PATH("subghz"), [ArchiveTabLFRFID] = ANY_PATH("lfrfid"), [ArchiveTabInfrared] = ANY_PATH("infrared"), - [ArchiveTabBadUsb] = ANY_PATH("badusb"), + [ArchiveTabBadKb] = ANY_PATH("badkb"), [ArchiveTabU2f] = "/app:u2f", [ArchiveTabApplications] = ANY_PATH("apps"), [ArchiveTabBrowser] = STORAGE_ANY_PATH_PREFIX, @@ -26,7 +26,7 @@ static const char* known_ext[] = { [ArchiveFileTypeSubGhz] = ".sub", [ArchiveFileTypeLFRFID] = ".rfid", [ArchiveFileTypeInfrared] = ".ir", - [ArchiveFileTypeBadUsb] = ".txt", + [ArchiveFileTypeBadKb] = ".txt", [ArchiveFileTypeU2f] = "?", [ArchiveFileTypeApplication] = ".fap", [ArchiveFileTypeUpdateManifest] = ".fuf", @@ -41,7 +41,7 @@ static const ArchiveFileTypeEnum known_type[] = { [ArchiveTabSubGhz] = ArchiveFileTypeSubGhz, [ArchiveTabLFRFID] = ArchiveFileTypeLFRFID, [ArchiveTabInfrared] = ArchiveFileTypeInfrared, - [ArchiveTabBadUsb] = ArchiveFileTypeBadUsb, + [ArchiveTabBadKb] = ArchiveFileTypeBadKb, [ArchiveTabU2f] = ArchiveFileTypeU2f, [ArchiveTabApplications] = ArchiveFileTypeApplication, [ArchiveTabBrowser] = ArchiveFileTypeUnknown, diff --git a/applications/main/archive/helpers/archive_files.c b/applications/main/archive/helpers/archive_files.c index 5c06c1bda..7e7ab1774 100644 --- a/applications/main/archive/helpers/archive_files.c +++ b/applications/main/archive/helpers/archive_files.c @@ -16,11 +16,11 @@ void archive_set_file_type(ArchiveFile_t* file, const char* path, bool is_folder for(size_t i = 0; i < COUNT_OF(known_ext); i++) { if((known_ext[i][0] == '?') || (known_ext[i][0] == '*')) continue; if(furi_string_search(file->path, known_ext[i], 0) != FURI_STRING_FAILURE) { - if(i == ArchiveFileTypeBadUsb) { + if(i == ArchiveFileTypeBadKb) { if(furi_string_search( - file->path, archive_get_default_path(ArchiveTabBadUsb)) == 0) { + file->path, archive_get_default_path(ArchiveTabBadKb)) == 0) { file->type = i; - return; // *.txt file is a BadUSB script only if it is in BadUSB folder + return; // *.txt file is a BadKB script only if it is in BadKB folder } } else { file->type = i; diff --git a/applications/main/archive/helpers/archive_files.h b/applications/main/archive/helpers/archive_files.h index db624f5b5..62d635461 100644 --- a/applications/main/archive/helpers/archive_files.h +++ b/applications/main/archive/helpers/archive_files.h @@ -15,7 +15,7 @@ typedef enum { ArchiveFileTypeSubGhz, ArchiveFileTypeLFRFID, ArchiveFileTypeInfrared, - ArchiveFileTypeBadUsb, + ArchiveFileTypeBadKb, ArchiveFileTypeU2f, ArchiveFileTypeApplication, ArchiveFileTypeUpdateManifest, diff --git a/applications/main/archive/scenes/archive_scene_browser.c b/applications/main/archive/scenes/archive_scene_browser.c index f88efb0c4..0696647ea 100644 --- a/applications/main/archive/scenes/archive_scene_browser.c +++ b/applications/main/archive/scenes/archive_scene_browser.c @@ -17,7 +17,7 @@ static const char* flipper_app_name[] = { [ArchiveFileTypeSubGhz] = "Sub-GHz", [ArchiveFileTypeLFRFID] = "125 kHz RFID", [ArchiveFileTypeInfrared] = "Infrared", - [ArchiveFileTypeBadUsb] = "Bad USB", + [ArchiveFileTypeBadKb] = "Bad KB", [ArchiveFileTypeU2f] = "U2F", [ArchiveFileTypeApplication] = "Applications", [ArchiveFileTypeUpdateManifest] = "UpdaterApp", diff --git a/applications/main/archive/views/archive_browser_view.c b/applications/main/archive/views/archive_browser_view.c index dce753fde..213d65512 100644 --- a/applications/main/archive/views/archive_browser_view.c +++ b/applications/main/archive/views/archive_browser_view.c @@ -16,7 +16,7 @@ static const char* ArchiveTabNames[] = { [ArchiveTabSubGhz] = "Sub-GHz", [ArchiveTabLFRFID] = "RFID LF", [ArchiveTabInfrared] = "Infrared", - [ArchiveTabBadUsb] = "Bad USB", + [ArchiveTabBadKb] = "Bad KB", [ArchiveTabU2f] = "U2F", [ArchiveTabApplications] = "Apps", [ArchiveTabBrowser] = "Browser", @@ -28,7 +28,7 @@ static const Icon* ArchiveItemIcons[] = { [ArchiveFileTypeSubGhz] = &I_sub1_10px, [ArchiveFileTypeLFRFID] = &I_125_10px, [ArchiveFileTypeInfrared] = &I_ir_10px, - [ArchiveFileTypeBadUsb] = &I_badusb_10px, + [ArchiveFileTypeBadKb] = &I_badkb_10px, [ArchiveFileTypeU2f] = &I_u2f_10px, [ArchiveFileTypeApplication] = &I_Apps_10px, [ArchiveFileTypeUpdateManifest] = &I_update_10px, @@ -109,7 +109,7 @@ static void render_item_menu(Canvas* canvas, ArchiveBrowserViewModel* model) { menu_array_push_raw(model->context_menu), item_pin, ArchiveBrowserEventFileMenuPin); - if(selected->type <= ArchiveFileTypeBadUsb) { + if(selected->type <= ArchiveFileTypeBadKb) { archive_menu_add_item( menu_array_push_raw(model->context_menu), item_show, @@ -129,7 +129,7 @@ static void render_item_menu(Canvas* canvas, ArchiveBrowserViewModel* model) { menu_array_push_raw(model->context_menu), item_info, ArchiveBrowserEventFileMenuInfo); - if(selected->type <= ArchiveFileTypeBadUsb) { + if(selected->type <= ArchiveFileTypeBadKb) { archive_menu_add_item( menu_array_push_raw(model->context_menu), item_show, @@ -157,7 +157,7 @@ static void render_item_menu(Canvas* canvas, ArchiveBrowserViewModel* model) { menu_array_push_raw(model->context_menu), item_info, ArchiveBrowserEventFileMenuInfo); - if(selected->type <= ArchiveFileTypeBadUsb) { + if(selected->type <= ArchiveFileTypeBadKb) { archive_menu_add_item( menu_array_push_raw(model->context_menu), item_show, @@ -588,4 +588,4 @@ void browser_free(ArchiveBrowserView* browser) { view_free(browser->view); free(browser); -} \ No newline at end of file +} diff --git a/applications/main/archive/views/archive_browser_view.h b/applications/main/archive/views/archive_browser_view.h index dfe18d13b..1e6cbf036 100644 --- a/applications/main/archive/views/archive_browser_view.h +++ b/applications/main/archive/views/archive_browser_view.h @@ -25,7 +25,7 @@ typedef enum { ArchiveTabNFC, ArchiveTabInfrared, ArchiveTabIButton, - ArchiveTabBadUsb, + ArchiveTabBadKb, ArchiveTabU2f, ArchiveTabApplications, ArchiveTabBrowser, diff --git a/applications/main/bad_usb/application.fam b/applications/main/bad_kb/application.fam similarity index 55% rename from applications/main/bad_usb/application.fam rename to applications/main/bad_kb/application.fam index 2442dd3aa..09531da81 100644 --- a/applications/main/bad_usb/application.fam +++ b/applications/main/bad_kb/application.fam @@ -1,15 +1,15 @@ App( - appid="bad_usb", - name="Bad USB", + appid="bad_kb", + name="Bad KB", apptype=FlipperAppType.APP, - entry_point="bad_usb_app", - cdefines=["APP_BAD_USB"], + entry_point="bad_kb_app", + cdefines=["APP_BAD_KB"], requires=[ "gui", "dialogs", ], stack_size=2 * 1024, - icon="A_BadUsb_14", + icon="A_BadKb_14", order=70, fap_libs=["assets"], ) diff --git a/applications/main/bad_usb/bad_usb_app.c b/applications/main/bad_kb/bad_kb_app.c similarity index 52% rename from applications/main/bad_usb/bad_usb_app.c rename to applications/main/bad_kb/bad_kb_app.c index 43ed76c37..c62af4733 100644 --- a/applications/main/bad_usb/bad_usb_app.c +++ b/applications/main/bad_kb/bad_kb_app.c @@ -1,5 +1,5 @@ -#include "bad_usb_app_i.h" -#include "bad_usb_settings_filename.h" +#include "bad_kb_app_i.h" +#include "bad_kb_settings_filename.h" #include #include #include @@ -8,29 +8,29 @@ #include #include -#define BAD_USB_SETTINGS_PATH BAD_USB_APP_BASE_FOLDER "/" BAD_USB_SETTINGS_FILE_NAME +#define BAD_KB_SETTINGS_PATH BAD_KB_APP_BASE_FOLDER "/" BAD_KB_SETTINGS_FILE_NAME -static bool bad_usb_app_custom_event_callback(void* context, uint32_t event) { +static bool bad_kb_app_custom_event_callback(void* context, uint32_t event) { furi_assert(context); - BadUsbApp* app = context; + BadKbApp* app = context; return scene_manager_handle_custom_event(app->scene_manager, event); } -static bool bad_usb_app_back_event_callback(void* context) { +static bool bad_kb_app_back_event_callback(void* context) { furi_assert(context); - BadUsbApp* app = context; + BadKbApp* app = context; return scene_manager_handle_back_event(app->scene_manager); } -static void bad_usb_app_tick_event_callback(void* context) { +static void bad_kb_app_tick_event_callback(void* context) { furi_assert(context); - BadUsbApp* app = context; + BadKbApp* app = context; scene_manager_handle_tick_event(app->scene_manager); } -static void bad_usb_load_settings(BadUsbApp* app) { +static void bad_kb_load_settings(BadKbApp* app) { File* settings_file = storage_file_alloc(furi_record_open(RECORD_STORAGE)); - if(storage_file_open(settings_file, BAD_USB_SETTINGS_PATH, FSAM_READ, FSOM_OPEN_EXISTING)) { + if(storage_file_open(settings_file, BAD_KB_SETTINGS_PATH, FSAM_READ, FSOM_OPEN_EXISTING)) { char chr; while((storage_file_read(settings_file, &chr, 1) == 1) && !storage_file_eof(settings_file) && !isspace(chr)) { @@ -41,9 +41,9 @@ static void bad_usb_load_settings(BadUsbApp* app) { storage_file_free(settings_file); } -static void bad_usb_save_settings(BadUsbApp* app) { +static void bad_kb_save_settings(BadKbApp* app) { File* settings_file = storage_file_alloc(furi_record_open(RECORD_STORAGE)); - if(storage_file_open(settings_file, BAD_USB_SETTINGS_PATH, FSAM_WRITE, FSOM_OPEN_ALWAYS)) { + if(storage_file_open(settings_file, BAD_KB_SETTINGS_PATH, FSAM_WRITE, FSOM_OPEN_ALWAYS)) { storage_file_write( settings_file, furi_string_get_cstr(app->keyboard_layout), @@ -54,21 +54,21 @@ static void bad_usb_save_settings(BadUsbApp* app) { storage_file_free(settings_file); } -void bad_usb_set_name(BadUsbApp* app, const char* fmt, ...) { +void bad_kb_set_name(BadKbApp* app, const char* fmt, ...) { furi_assert(app); va_list args; va_start(args, fmt); - vsnprintf(app->name, BAD_USB_ADV_NAME_MAX_LEN, fmt, args); + vsnprintf(app->name, BAD_KB_ADV_NAME_MAX_LEN, fmt, args); va_end(args); } -BadUsbApp* bad_usb_app_alloc(char* arg) { - BadUsbApp* app = malloc(sizeof(BadUsbApp)); +BadKbApp* bad_kb_app_alloc(char* arg) { + BadKbApp* app = malloc(sizeof(BadKbApp)); - app->bad_usb_script = NULL; + app->bad_kb_script = NULL; app->file_path = furi_string_alloc(); app->keyboard_layout = furi_string_alloc(); @@ -76,7 +76,7 @@ BadUsbApp* bad_usb_app_alloc(char* arg) { furi_string_set(app->file_path, arg); } - bad_usb_load_settings(app); + bad_kb_load_settings(app); app->gui = furi_record_open(RECORD_GUI); app->notifications = furi_record_open(RECORD_NOTIFICATION); @@ -85,97 +85,97 @@ BadUsbApp* bad_usb_app_alloc(char* arg) { app->view_dispatcher = view_dispatcher_alloc(); view_dispatcher_enable_queue(app->view_dispatcher); - app->scene_manager = scene_manager_alloc(&bad_usb_scene_handlers, app); + app->scene_manager = scene_manager_alloc(&bad_kb_scene_handlers, app); view_dispatcher_set_event_callback_context(app->view_dispatcher, app); view_dispatcher_set_tick_event_callback( - app->view_dispatcher, bad_usb_app_tick_event_callback, 500); + app->view_dispatcher, bad_kb_app_tick_event_callback, 500); view_dispatcher_set_custom_event_callback( - app->view_dispatcher, bad_usb_app_custom_event_callback); + app->view_dispatcher, bad_kb_app_custom_event_callback); view_dispatcher_set_navigation_event_callback( - app->view_dispatcher, bad_usb_app_back_event_callback); + app->view_dispatcher, bad_kb_app_back_event_callback); Bt* bt = furi_record_open(RECORD_BT); app->bt = bt; const char* adv_name = bt_get_profile_adv_name(bt); - memcpy(app->name, adv_name, BAD_USB_ADV_NAME_MAX_LEN); - memcpy(app->bt_old_config.name, adv_name, BAD_USB_ADV_NAME_MAX_LEN); + memcpy(app->name, adv_name, BAD_KB_ADV_NAME_MAX_LEN); + memcpy(app->bt_old_config.name, adv_name, BAD_KB_ADV_NAME_MAX_LEN); const uint8_t* mac_addr = bt_get_profile_mac_address(bt); - memcpy(app->mac, mac_addr, BAD_USB_MAC_ADDRESS_LEN); - memcpy(app->bt_old_config.mac, mac_addr, BAD_USB_MAC_ADDRESS_LEN); + memcpy(app->mac, mac_addr, BAD_KB_MAC_ADDRESS_LEN); + memcpy(app->bt_old_config.mac, mac_addr, BAD_KB_MAC_ADDRESS_LEN); // Custom Widget app->widget = widget_alloc(); view_dispatcher_add_view( - app->view_dispatcher, BadUsbAppViewError, widget_get_view(app->widget)); + app->view_dispatcher, BadKbAppViewError, widget_get_view(app->widget)); app->var_item_list_bt = variable_item_list_alloc(); view_dispatcher_add_view( - app->view_dispatcher, BadUsbAppViewConfigBt, variable_item_list_get_view(app->var_item_list_bt)); + app->view_dispatcher, BadKbAppViewConfigBt, variable_item_list_get_view(app->var_item_list_bt)); app->var_item_list_usb = variable_item_list_alloc(); view_dispatcher_add_view( - app->view_dispatcher, BadUsbAppViewConfigUsb, variable_item_list_get_view(app->var_item_list_usb)); + app->view_dispatcher, BadKbAppViewConfigUsb, variable_item_list_get_view(app->var_item_list_usb)); - app->bad_usb_view = bad_usb_alloc(); + app->bad_kb_view = bad_kb_alloc(); view_dispatcher_add_view( - app->view_dispatcher, BadUsbAppViewWork, bad_usb_get_view(app->bad_usb_view)); + app->view_dispatcher, BadKbAppViewWork, bad_kb_get_view(app->bad_kb_view)); app->text_input = text_input_alloc(); view_dispatcher_add_view( - app->view_dispatcher, BadUsbAppViewConfigName, text_input_get_view(app->text_input)); + app->view_dispatcher, BadKbAppViewConfigName, text_input_get_view(app->text_input)); app->byte_input = byte_input_alloc(); view_dispatcher_add_view( - app->view_dispatcher, BadUsbAppViewConfigMac, byte_input_get_view(app->byte_input)); + app->view_dispatcher, BadKbAppViewConfigMac, byte_input_get_view(app->byte_input)); view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen); if(furi_hal_usb_is_locked()) { - app->error = BadUsbAppErrorCloseRpc; - scene_manager_next_scene(app->scene_manager, BadUsbSceneError); + app->error = BadKbAppErrorCloseRpc; + scene_manager_next_scene(app->scene_manager, BadKbSceneError); } else { if(!furi_string_empty(app->file_path)) { - app->bad_usb_script = bad_usb_script_open(app->file_path, app->is_bt ? app->bt : NULL); - bad_usb_script_set_keyboard_layout(app->bad_usb_script, app->keyboard_layout); - scene_manager_next_scene(app->scene_manager, BadUsbSceneWork); + app->bad_kb_script = bad_kb_script_open(app->file_path, app->is_bt ? app->bt : NULL); + bad_kb_script_set_keyboard_layout(app->bad_kb_script, app->keyboard_layout); + scene_manager_next_scene(app->scene_manager, BadKbSceneWork); } else { - furi_string_set(app->file_path, BAD_USB_APP_BASE_FOLDER); - scene_manager_next_scene(app->scene_manager, BadUsbSceneFileSelect); + furi_string_set(app->file_path, BAD_KB_APP_BASE_FOLDER); + scene_manager_next_scene(app->scene_manager, BadKbSceneFileSelect); } } return app; } -void bad_usb_app_free(BadUsbApp* app) { +void bad_kb_app_free(BadKbApp* app) { furi_assert(app); - if(app->bad_usb_script) { - bad_usb_script_close(app->bad_usb_script); - app->bad_usb_script = NULL; + if(app->bad_kb_script) { + bad_kb_script_close(app->bad_kb_script); + app->bad_kb_script = NULL; } // Views - view_dispatcher_remove_view(app->view_dispatcher, BadUsbAppViewWork); - bad_usb_free(app->bad_usb_view); + view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewWork); + bad_kb_free(app->bad_kb_view); // Custom Widget - view_dispatcher_remove_view(app->view_dispatcher, BadUsbAppViewError); + view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewError); widget_free(app->widget); // Variable item list - view_dispatcher_remove_view(app->view_dispatcher, BadUsbAppViewConfigBt); + view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewConfigBt); variable_item_list_free(app->var_item_list_bt); - view_dispatcher_remove_view(app->view_dispatcher, BadUsbAppViewConfigUsb); + view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewConfigUsb); variable_item_list_free(app->var_item_list_usb); // Text Input - view_dispatcher_remove_view(app->view_dispatcher, BadUsbAppViewConfigName); + view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewConfigName); text_input_free(app->text_input); // Byte Input - view_dispatcher_remove_view(app->view_dispatcher, BadUsbAppViewConfigMac); + view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewConfigMac); byte_input_free(app->byte_input); // View dispatcher @@ -188,7 +188,7 @@ void bad_usb_app_free(BadUsbApp* app) { if (strcmp(app->bt_old_config.name, app->name) != 0) { furi_hal_bt_set_profile_adv_name(FuriHalBtProfileHidKeyboard, app->bt_old_config.name); } - if (memcmp(app->bt_old_config.mac, app->mac, BAD_USB_MAC_ADDRESS_LEN) != 0) { + if (memcmp(app->bt_old_config.mac, app->mac, BAD_KB_MAC_ADDRESS_LEN) != 0) { furi_hal_bt_set_profile_mac_addr(FuriHalBtProfileHidKeyboard, app->bt_old_config.mac); } @@ -199,7 +199,7 @@ void bad_usb_app_free(BadUsbApp* app) { furi_record_close(RECORD_DIALOGS); furi_record_close(RECORD_BT); - bad_usb_save_settings(app); + bad_kb_save_settings(app); furi_string_free(app->file_path); furi_string_free(app->keyboard_layout); @@ -207,11 +207,11 @@ void bad_usb_app_free(BadUsbApp* app) { free(app); } -int32_t bad_usb_app(void* p) { - BadUsbApp* bad_usb_app = bad_usb_app_alloc((char*)p); +int32_t bad_kb_app(void* p) { + BadKbApp* bad_kb_app = bad_kb_app_alloc((char*)p); - view_dispatcher_run(bad_usb_app->view_dispatcher); + view_dispatcher_run(bad_kb_app->view_dispatcher); - bad_usb_app_free(bad_usb_app); + bad_kb_app_free(bad_kb_app); return 0; } diff --git a/applications/main/bad_kb/bad_kb_app.h b/applications/main/bad_kb/bad_kb_app.h new file mode 100644 index 000000000..e75a94651 --- /dev/null +++ b/applications/main/bad_kb/bad_kb_app.h @@ -0,0 +1,13 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct BadKbApp BadKbApp; + +void bad_kb_set_name(BadKbApp* app, const char* fmt, ...); + +#ifdef __cplusplus +} +#endif diff --git a/applications/main/bad_kb/bad_kb_app_i.h b/applications/main/bad_kb/bad_kb_app_i.h new file mode 100644 index 000000000..913830e72 --- /dev/null +++ b/applications/main/bad_kb/bad_kb_app_i.h @@ -0,0 +1,80 @@ +#pragma once + +#include "bad_kb_app.h" +#include "scenes/bad_kb_scene.h" +#include "bad_kb_script.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "views/bad_kb_view.h" + +#define BAD_KB_APP_BASE_FOLDER ANY_PATH("badkb") +#define BAD_KB_APP_PATH_LAYOUT_FOLDER BAD_KB_APP_BASE_FOLDER "/layouts" +#define BAD_KB_APP_SCRIPT_EXTENSION ".txt" +#define BAD_KB_APP_LAYOUT_EXTENSION ".kl" + +#define BAD_KB_MAC_ADDRESS_LEN 6 // need replace with MAC size maccro +#define BAD_KB_ADV_NAME_MAX_LEN 18 + +typedef enum { + BadKbAppErrorNoFiles, + BadKbAppErrorCloseRpc, +} BadKbAppError; + +typedef enum BadKbCustomEvent { + BadKbAppCustomEventTextEditResult, + BadKbAppCustomEventByteInputDone, + BadKbCustomEventErrorBack +} BadKbCustomEvent; + +typedef struct { + uint8_t mac[BAD_KB_MAC_ADDRESS_LEN]; + char name[BAD_KB_ADV_NAME_MAX_LEN + 1]; + + // number of bt keys before starting the app (all keys added in + // the bt keys file then will be removed) + uint16_t n_keys; +} BadKbBtConfig; + +struct BadKbApp { + Gui* gui; + ViewDispatcher* view_dispatcher; + SceneManager* scene_manager; + NotificationApp* notifications; + DialogsApp* dialogs; + Widget* widget; + VariableItemList* var_item_list_bt; + VariableItemList* var_item_list_usb; + + Bt* bt; + TextInput* text_input; + ByteInput* byte_input; + uint8_t mac[BAD_KB_MAC_ADDRESS_LEN]; + char name[BAD_KB_ADV_NAME_MAX_LEN + 1]; + BadKbBtConfig bt_old_config; + + BadKbAppError error; + FuriString* file_path; + FuriString* keyboard_layout; + BadKb* bad_kb_view; + BadKbScript* bad_kb_script; + + bool is_bt; +}; + +typedef enum { + BadKbAppViewError, + BadKbAppViewWork, + BadKbAppViewConfigBt, + BadKbAppViewConfigUsb, + BadKbAppViewConfigMac, + BadKbAppViewConfigName +} BadKbAppView; diff --git a/applications/main/bad_usb/bad_usb_script.c b/applications/main/bad_kb/bad_kb_script.c similarity index 65% rename from applications/main/bad_usb/bad_usb_script.c rename to applications/main/bad_kb/bad_kb_script.c index 51ce49df9..e63a39c05 100644 --- a/applications/main/bad_usb/bad_usb_script.c +++ b/applications/main/bad_kb/bad_kb_script.c @@ -6,14 +6,14 @@ #include #include #include -#include "bad_usb_script.h" +#include "bad_kb_script.h" #include #include #define HID_BT_KEYS_STORAGE_PATH EXT_PATH("apps/Tools/.bt_hid.keys") -#define TAG "BadUSB" +#define TAG "BadKB" #define WORKER_TAG TAG "Worker" #define FILE_BUFFER_LEN 16 @@ -21,7 +21,7 @@ #define SCRIPT_STATE_END (-2) #define SCRIPT_STATE_NEXT_LINE (-3) -#define BADUSB_ASCII_TO_KEY(script, x) \ +#define BADKB_ASCII_TO_KEY(script, x) \ (((uint8_t)x < 128) ? (script->layout[(uint8_t)x]) : HID_KEYBOARD_NONE) typedef enum { @@ -52,9 +52,9 @@ const uint8_t bt_hid_delays[LevelRssiNum] = { 14, // LevelRssi39_0 }; -struct BadUsbScript { +struct BadKbScript { FuriHalUsbHidConfig hid_cfg; - BadUsbState st; + BadKbState st; FuriString* file_path; FuriString* keyboard_layout; uint32_t defdelay; @@ -230,8 +230,8 @@ static bool ducky_is_line_end(const char chr) { return ((chr == ' ') || (chr == '\0') || (chr == '\r') || (chr == '\n')); } -static void ducky_numlock_on(BadUsbScript* bad_usb) { - if (bad_usb->bt) { +static void ducky_numlock_on(BadKbScript* bad_kb) { + if (bad_kb->bt) { if((furi_hal_hid_get_led_state() & HID_KB_LED_NUM) == 0) { // FIXME bt_hid_hold_while_keyboard_buffer_full(1, -1); furi_hal_bt_hid_kb_press(HID_KEYBOARD_LOCK_NUM_LOCK); @@ -246,12 +246,12 @@ static void ducky_numlock_on(BadUsbScript* bad_usb) { } } -static bool ducky_numpad_press(BadUsbScript* bad_usb, const char num) { +static bool ducky_numpad_press(BadKbScript* bad_kb, const char num) { if((num < '0') || (num > '9')) return false; uint16_t key = numpad_keys[num - '0']; FURI_LOG_I(WORKER_TAG, "Pressing %c\r\n", num); - if (bad_usb->bt) { + if (bad_kb->bt) { bt_hid_hold_while_keyboard_buffer_full(1, -1); furi_hal_bt_hid_kb_press(key); furi_delay_ms(bt_timeout); @@ -264,13 +264,13 @@ static bool ducky_numpad_press(BadUsbScript* bad_usb, const char num) { return true; } -static bool ducky_altchar(BadUsbScript* bad_usb, const char* charcode) { +static bool ducky_altchar(BadKbScript* bad_kb, const char* charcode) { uint8_t i = 0; bool state = false; FURI_LOG_I(WORKER_TAG, "char %s", charcode); - if (bad_usb->bt) { + if (bad_kb->bt) { bt_hid_hold_while_keyboard_buffer_full(1, -1); furi_hal_bt_hid_kb_press(KEY_MOD_LEFT_ALT); } else { @@ -278,12 +278,12 @@ static bool ducky_altchar(BadUsbScript* bad_usb, const char* charcode) { } while(!ducky_is_line_end(charcode[i])) { - state = ducky_numpad_press(bad_usb, charcode[i]); + state = ducky_numpad_press(bad_kb, charcode[i]); if(state == false) break; i++; } - if (bad_usb->bt) { + if (bad_kb->bt) { furi_hal_bt_hid_kb_release(KEY_MOD_LEFT_ALT); } else { furi_hal_hid_kb_release(KEY_MOD_LEFT_ALT); @@ -291,7 +291,7 @@ static bool ducky_altchar(BadUsbScript* bad_usb, const char* charcode) { return state; } -static bool ducky_altstring(BadUsbScript* bad_usb, const char* param) { +static bool ducky_altstring(BadKbScript* bad_kb, const char* param) { uint32_t i = 0; bool state = false; @@ -304,19 +304,19 @@ static bool ducky_altstring(BadUsbScript* bad_usb, const char* param) { char temp_str[4]; snprintf(temp_str, 4, "%u", param[i]); - state = ducky_altchar(bad_usb, temp_str); + state = ducky_altchar(bad_kb, temp_str); if(state == false) break; i++; } return state; } -static bool ducky_string(BadUsbScript* bad_usb, const char* param) { +static bool ducky_string(BadKbScript* bad_kb, const char* param) { uint32_t i = 0; while(param[i] != '\0') { - uint16_t keycode = BADUSB_ASCII_TO_KEY(bad_usb, param[i]); + uint16_t keycode = BADKB_ASCII_TO_KEY(bad_kb, param[i]); if(keycode != HID_KEYBOARD_NONE) { - if (bad_usb->bt) { + if (bad_kb->bt) { bt_hid_hold_while_keyboard_buffer_full(1, -1); furi_hal_bt_hid_kb_press(keycode); furi_delay_ms(bt_timeout); @@ -331,7 +331,7 @@ static bool ducky_string(BadUsbScript* bad_usb, const char* param) { return true; } -static uint16_t ducky_get_keycode(BadUsbScript* bad_usb, const char* param, bool accept_chars) { +static uint16_t ducky_get_keycode(BadKbScript* bad_kb, const char* param, bool accept_chars) { for(size_t i = 0; i < (sizeof(ducky_keys) / sizeof(ducky_keys[0])); i++) { size_t key_cmd_len = strlen(ducky_keys[i].name); if((strncmp(param, ducky_keys[i].name, key_cmd_len) == 0) && @@ -340,13 +340,13 @@ static uint16_t ducky_get_keycode(BadUsbScript* bad_usb, const char* param, bool } } if((accept_chars) && (strlen(param) > 0)) { - return (BADUSB_ASCII_TO_KEY(bad_usb, param[0]) & 0xFF); + return (BADKB_ASCII_TO_KEY(bad_kb, param[0]) & 0xFF); } return 0; } static int32_t - ducky_parse_line(BadUsbScript* bad_usb, FuriString* line, char* error, size_t error_len) { + ducky_parse_line(BadKbScript* bad_kb, FuriString* line, char* error, size_t error_len) { uint32_t line_len = furi_string_size(line); const char* line_tmp = furi_string_get_cstr(line); bool state = false; @@ -384,7 +384,7 @@ static int32_t (strncmp(line_tmp, ducky_cmd_defdelay_2, strlen(ducky_cmd_defdelay_2)) == 0)) { // DEFAULT_DELAY line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - state = ducky_get_number(line_tmp, &bad_usb->defdelay); + state = ducky_get_number(line_tmp, &bad_kb->defdelay); if(!state && error != NULL) { snprintf(error, error_len, "Invalid number %s", line_tmp); } @@ -392,7 +392,7 @@ static int32_t } else if(strncmp(line_tmp, ducky_cmd_string, strlen(ducky_cmd_string)) == 0) { // STRING line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - state = ducky_string(bad_usb, line_tmp); + state = ducky_string(bad_kb, line_tmp); if(!state && error != NULL) { snprintf(error, error_len, "Invalid string %s", line_tmp); } @@ -400,8 +400,8 @@ static int32_t } else if(strncmp(line_tmp, ducky_cmd_altchar, strlen(ducky_cmd_altchar)) == 0) { // ALTCHAR line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - ducky_numlock_on(bad_usb); - state = ducky_altchar(bad_usb, line_tmp); + ducky_numlock_on(bad_kb); + state = ducky_altchar(bad_kb, line_tmp); if(!state && error != NULL) { snprintf(error, error_len, "Invalid altchar %s", line_tmp); } @@ -411,8 +411,8 @@ static int32_t (strncmp(line_tmp, ducky_cmd_altstr_2, strlen(ducky_cmd_altstr_2)) == 0)) { // ALTSTRING line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - ducky_numlock_on(bad_usb); - state = ducky_altstring(bad_usb, line_tmp); + ducky_numlock_on(bad_kb); + state = ducky_altstring(bad_kb, line_tmp); if(!state && error != NULL) { snprintf(error, error_len, "Invalid altstring %s", line_tmp); } @@ -420,7 +420,7 @@ static int32_t } else if(strncmp(line_tmp, ducky_cmd_repeat, strlen(ducky_cmd_repeat)) == 0) { // REPEAT line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - state = ducky_get_number(line_tmp, &bad_usb->repeat_cnt); + state = ducky_get_number(line_tmp, &bad_kb->repeat_cnt); if(!state && error != NULL) { snprintf(error, error_len, "Invalid number %s", line_tmp); } @@ -428,8 +428,8 @@ static int32_t } else if(strncmp(line_tmp, ducky_cmd_sysrq, strlen(ducky_cmd_sysrq)) == 0) { // SYSRQ line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - uint16_t key = ducky_get_keycode(bad_usb, line_tmp, true); - if (bad_usb->bt) { + uint16_t key = ducky_get_keycode(bad_kb, line_tmp, true); + if (bad_kb->bt) { bt_hid_hold_while_keyboard_buffer_full(1, -1); furi_hal_bt_hid_kb_press(KEY_MOD_LEFT_ALT | HID_KEYBOARD_PRINT_SCREEN); furi_hal_bt_hid_kb_press(key); @@ -444,7 +444,7 @@ static int32_t return (0); } else { // Special keys + modifiers - uint16_t key = ducky_get_keycode(bad_usb, line_tmp, false); + uint16_t key = ducky_get_keycode(bad_kb, line_tmp, false); if(key == HID_KEYBOARD_NONE) { if(error != NULL) { snprintf(error, error_len, "No keycode defined for %s", line_tmp); @@ -454,9 +454,9 @@ static int32_t if((key & 0xFF00) != 0) { // It's a modifier key line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - key |= ducky_get_keycode(bad_usb, line_tmp, true); + key |= ducky_get_keycode(bad_kb, line_tmp, true); } - if (bad_usb->bt) { + if (bad_kb->bt) { furi_hal_bt_hid_kb_press(key); furi_delay_ms(bt_timeout); furi_hal_bt_hid_kb_release(key); @@ -468,231 +468,231 @@ static int32_t } } -static bool ducky_set_usb_id(BadUsbScript* bad_usb, const char* line) { - if(sscanf(line, "%lX:%lX", &bad_usb->hid_cfg.vid, &bad_usb->hid_cfg.pid) == 2) { - bad_usb->hid_cfg.manuf[0] = '\0'; - bad_usb->hid_cfg.product[0] = '\0'; +static bool ducky_set_usb_id(BadKbScript* bad_kb, const char* line) { + if(sscanf(line, "%lX:%lX", &bad_kb->hid_cfg.vid, &bad_kb->hid_cfg.pid) == 2) { + bad_kb->hid_cfg.manuf[0] = '\0'; + bad_kb->hid_cfg.product[0] = '\0'; uint8_t id_len = ducky_get_command_len(line); if(!ducky_is_line_end(line[id_len + 1])) { sscanf( &line[id_len + 1], "%31[^\r\n:]:%31[^\r\n]", - bad_usb->hid_cfg.manuf, - bad_usb->hid_cfg.product); + bad_kb->hid_cfg.manuf, + bad_kb->hid_cfg.product); } FURI_LOG_D( WORKER_TAG, "set id: %04lX:%04lX mfr:%s product:%s", - bad_usb->hid_cfg.vid, - bad_usb->hid_cfg.pid, - bad_usb->hid_cfg.manuf, - bad_usb->hid_cfg.product); + bad_kb->hid_cfg.vid, + bad_kb->hid_cfg.pid, + bad_kb->hid_cfg.manuf, + bad_kb->hid_cfg.product); return true; } return false; } -static bool ducky_script_preload(BadUsbScript* bad_usb, File* script_file) { +static bool ducky_script_preload(BadKbScript* bad_kb, File* script_file) { uint8_t ret = 0; uint32_t line_len = 0; - furi_string_reset(bad_usb->line); + furi_string_reset(bad_kb->line); do { - ret = storage_file_read(script_file, bad_usb->file_buf, FILE_BUFFER_LEN); + ret = storage_file_read(script_file, bad_kb->file_buf, FILE_BUFFER_LEN); for(uint16_t i = 0; i < ret; i++) { - if(bad_usb->file_buf[i] == '\n' && line_len > 0) { - bad_usb->st.line_nb++; + if(bad_kb->file_buf[i] == '\n' && line_len > 0) { + bad_kb->st.line_nb++; line_len = 0; } else { - if(bad_usb->st.line_nb == 0) { // Save first line - furi_string_push_back(bad_usb->line, bad_usb->file_buf[i]); + if(bad_kb->st.line_nb == 0) { // Save first line + furi_string_push_back(bad_kb->line, bad_kb->file_buf[i]); } line_len++; } } if(storage_file_eof(script_file)) { if(line_len > 0) { - bad_usb->st.line_nb++; + bad_kb->st.line_nb++; break; } } } while(ret > 0); - if (!bad_usb->bt) { - const char* line_tmp = furi_string_get_cstr(bad_usb->line); + if (!bad_kb->bt) { + const char* line_tmp = furi_string_get_cstr(bad_kb->line); bool id_set = false; // Looking for ID command at first line if(strncmp(line_tmp, ducky_cmd_id, strlen(ducky_cmd_id)) == 0) { - id_set = ducky_set_usb_id(bad_usb, &line_tmp[strlen(ducky_cmd_id) + 1]); + id_set = ducky_set_usb_id(bad_kb, &line_tmp[strlen(ducky_cmd_id) + 1]); } if(id_set) { - furi_check(furi_hal_usb_set_config(&usb_hid, &bad_usb->hid_cfg)); + furi_check(furi_hal_usb_set_config(&usb_hid, &bad_kb->hid_cfg)); } else { furi_check(furi_hal_usb_set_config(&usb_hid, NULL)); } } storage_file_seek(script_file, 0, true); - furi_string_reset(bad_usb->line); + furi_string_reset(bad_kb->line); return true; } -static int32_t ducky_script_execute_next(BadUsbScript* bad_usb, File* script_file) { +static int32_t ducky_script_execute_next(BadKbScript* bad_kb, File* script_file) { int32_t delay_val = 0; - if(bad_usb->repeat_cnt > 0) { - bad_usb->repeat_cnt--; + if(bad_kb->repeat_cnt > 0) { + bad_kb->repeat_cnt--; delay_val = ducky_parse_line( - bad_usb, bad_usb->line_prev, bad_usb->st.error, sizeof(bad_usb->st.error)); + bad_kb, bad_kb->line_prev, bad_kb->st.error, sizeof(bad_kb->st.error)); if(delay_val == SCRIPT_STATE_NEXT_LINE) { // Empty line return 0; } else if(delay_val < 0) { // Script error - bad_usb->st.error_line = bad_usb->st.line_cur - 1; - FURI_LOG_E(WORKER_TAG, "Unknown command at line %u", bad_usb->st.line_cur - 1U); + bad_kb->st.error_line = bad_kb->st.line_cur - 1; + FURI_LOG_E(WORKER_TAG, "Unknown command at line %u", bad_kb->st.line_cur - 1U); return SCRIPT_STATE_ERROR; } else { - return (delay_val + bad_usb->defdelay); + return (delay_val + bad_kb->defdelay); } } - furi_string_set(bad_usb->line_prev, bad_usb->line); - furi_string_reset(bad_usb->line); + furi_string_set(bad_kb->line_prev, bad_kb->line); + furi_string_reset(bad_kb->line); while(1) { - if(bad_usb->buf_len == 0) { - bad_usb->buf_len = storage_file_read(script_file, bad_usb->file_buf, FILE_BUFFER_LEN); + if(bad_kb->buf_len == 0) { + bad_kb->buf_len = storage_file_read(script_file, bad_kb->file_buf, FILE_BUFFER_LEN); if(storage_file_eof(script_file)) { - if((bad_usb->buf_len < FILE_BUFFER_LEN) && (bad_usb->file_end == false)) { - bad_usb->file_buf[bad_usb->buf_len] = '\n'; - bad_usb->buf_len++; - bad_usb->file_end = true; + if((bad_kb->buf_len < FILE_BUFFER_LEN) && (bad_kb->file_end == false)) { + bad_kb->file_buf[bad_kb->buf_len] = '\n'; + bad_kb->buf_len++; + bad_kb->file_end = true; } } - bad_usb->buf_start = 0; - if(bad_usb->buf_len == 0) return SCRIPT_STATE_END; + bad_kb->buf_start = 0; + if(bad_kb->buf_len == 0) return SCRIPT_STATE_END; } - for(uint8_t i = bad_usb->buf_start; i < (bad_usb->buf_start + bad_usb->buf_len); i++) { - if(bad_usb->file_buf[i] == '\n' && furi_string_size(bad_usb->line) > 0) { - bad_usb->st.line_cur++; - bad_usb->buf_len = bad_usb->buf_len + bad_usb->buf_start - (i + 1); - bad_usb->buf_start = i + 1; - furi_string_trim(bad_usb->line); + for(uint8_t i = bad_kb->buf_start; i < (bad_kb->buf_start + bad_kb->buf_len); i++) { + if(bad_kb->file_buf[i] == '\n' && furi_string_size(bad_kb->line) > 0) { + bad_kb->st.line_cur++; + bad_kb->buf_len = bad_kb->buf_len + bad_kb->buf_start - (i + 1); + bad_kb->buf_start = i + 1; + furi_string_trim(bad_kb->line); delay_val = ducky_parse_line( - bad_usb, bad_usb->line, bad_usb->st.error, sizeof(bad_usb->st.error)); + bad_kb, bad_kb->line, bad_kb->st.error, sizeof(bad_kb->st.error)); if(delay_val == SCRIPT_STATE_NEXT_LINE) { // Empty line return 0; } else if(delay_val < 0) { - bad_usb->st.error_line = bad_usb->st.line_cur; + bad_kb->st.error_line = bad_kb->st.line_cur; if(delay_val == SCRIPT_STATE_NEXT_LINE) { snprintf( - bad_usb->st.error, sizeof(bad_usb->st.error), "Forbidden empty line"); + bad_kb->st.error, sizeof(bad_kb->st.error), "Forbidden empty line"); FURI_LOG_E( - WORKER_TAG, "Forbidden empty line at line %u", bad_usb->st.line_cur); + WORKER_TAG, "Forbidden empty line at line %u", bad_kb->st.line_cur); } else { - FURI_LOG_E(WORKER_TAG, "Unknown command at line %u", bad_usb->st.line_cur); + FURI_LOG_E(WORKER_TAG, "Unknown command at line %u", bad_kb->st.line_cur); } return SCRIPT_STATE_ERROR; } else { - return (delay_val + bad_usb->defdelay); + return (delay_val + bad_kb->defdelay); } } else { - furi_string_push_back(bad_usb->line, bad_usb->file_buf[i]); + furi_string_push_back(bad_kb->line, bad_kb->file_buf[i]); } } - bad_usb->buf_len = 0; - if(bad_usb->file_end) return SCRIPT_STATE_END; + bad_kb->buf_len = 0; + if(bad_kb->file_end) return SCRIPT_STATE_END; } return 0; } -static void bad_usb_bt_hid_state_callback(BtStatus status, void* context) { +static void bad_kb_bt_hid_state_callback(BtStatus status, void* context) { furi_assert(context); - BadUsbScript* bad_usb = (BadUsbScript*)context; + BadKbScript* bad_kb = (BadKbScript*)context; bool state = (status == BtStatusConnected); if(state == true) { - LevelRssiRange r = bt_remote_rssi_range(bad_usb->bt); + LevelRssiRange r = bt_remote_rssi_range(bad_kb->bt); if(r != LevelRssiError) { bt_timeout = bt_hid_delays[r]; } - furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtConnect); + furi_thread_flags_set(furi_thread_get_id(bad_kb->thread), WorkerEvtConnect); } else - furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtDisconnect); + furi_thread_flags_set(furi_thread_get_id(bad_kb->thread), WorkerEvtDisconnect); } -static void bad_usb_usb_hid_state_callback(bool state, void* context) { +static void bad_kb_usb_hid_state_callback(bool state, void* context) { furi_assert(context); - BadUsbScript* bad_usb = context; + BadKbScript* bad_kb = context; if(state == true) - furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtConnect); + furi_thread_flags_set(furi_thread_get_id(bad_kb->thread), WorkerEvtConnect); else - furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtDisconnect); + furi_thread_flags_set(furi_thread_get_id(bad_kb->thread), WorkerEvtDisconnect); } -static int32_t bad_usb_worker(void* context) { - BadUsbScript* bad_usb = context; +static int32_t bad_kb_worker(void* context) { + BadKbScript* bad_kb = context; - BadUsbWorkerState worker_state = BadUsbStateInit; + BadKbWorkerState worker_state = BadKbStateInit; int32_t delay_val = 0; FuriHalUsbInterface* usb_mode_prev = NULL; GapPairing old_pairing_method = GapPairingNone; - if (bad_usb->bt) { + if (bad_kb->bt) { bt_timeout = bt_hid_delays[LevelRssi39_0]; - bt_disconnect(bad_usb->bt); + bt_disconnect(bad_kb->bt); furi_delay_ms(200); - bt_keys_storage_set_storage_path(bad_usb->bt, HID_BT_KEYS_STORAGE_PATH); - if (!bt_set_profile(bad_usb->bt, BtProfileHidKeyboard)) { + bt_keys_storage_set_storage_path(bad_kb->bt, HID_BT_KEYS_STORAGE_PATH); + if (!bt_set_profile(bad_kb->bt, BtProfileHidKeyboard)) { FURI_LOG_E(TAG, "Failed to switch to HID profile"); return -1; } - old_pairing_method = bt_get_profile_pairing_method(bad_usb->bt); - bt_set_profile_pairing_method(bad_usb->bt, GapPairingNone); + old_pairing_method = bt_get_profile_pairing_method(bad_kb->bt); + bt_set_profile_pairing_method(bad_kb->bt, GapPairingNone); furi_hal_bt_start_advertising(); - bt_set_status_changed_callback(bad_usb->bt, bad_usb_bt_hid_state_callback, bad_usb); + bt_set_status_changed_callback(bad_kb->bt, bad_kb_bt_hid_state_callback, bad_kb); } else { usb_mode_prev = furi_hal_usb_get_config(); - furi_hal_hid_set_state_callback(bad_usb_usb_hid_state_callback, bad_usb); + furi_hal_hid_set_state_callback(bad_kb_usb_hid_state_callback, bad_kb); } FURI_LOG_I(WORKER_TAG, "Init"); File* script_file = storage_file_alloc(furi_record_open(RECORD_STORAGE)); - bad_usb->line = furi_string_alloc(); - bad_usb->line_prev = furi_string_alloc(); + bad_kb->line = furi_string_alloc(); + bad_kb->line_prev = furi_string_alloc(); while(1) { - if(worker_state == BadUsbStateInit) { // State: initialization + if(worker_state == BadKbStateInit) { // State: initialization if(storage_file_open( script_file, - furi_string_get_cstr(bad_usb->file_path), + furi_string_get_cstr(bad_kb->file_path), FSAM_READ, FSOM_OPEN_EXISTING)) { - if((ducky_script_preload(bad_usb, script_file)) && (bad_usb->st.line_nb > 0)) { - if (bad_usb->bt) { - worker_state = BadUsbStateNotConnected; // Ready to run + if((ducky_script_preload(bad_kb, script_file)) && (bad_kb->st.line_nb > 0)) { + if (bad_kb->bt) { + worker_state = BadKbStateNotConnected; // Ready to run } else { if(furi_hal_hid_is_connected()) { - worker_state = BadUsbStateIdle; // Ready to run + worker_state = BadKbStateIdle; // Ready to run } else { - worker_state = BadUsbStateNotConnected; // USB not connected + worker_state = BadKbStateNotConnected; // USB not connected } } } else { - worker_state = BadUsbStateScriptError; // Script preload error + worker_state = BadKbStateScriptError; // Script preload error } } else { FURI_LOG_E(WORKER_TAG, "File open error"); - worker_state = BadUsbStateFileError; // File open error + worker_state = BadKbStateFileError; // File open error } - bad_usb->st.state = worker_state; + bad_kb->st.state = worker_state; - } else if(worker_state == BadUsbStateNotConnected) { // State: USB not connected + } else if(worker_state == BadKbStateNotConnected) { // State: USB not connected uint32_t flags = furi_thread_flags_wait( WorkerEvtEnd | WorkerEvtConnect | WorkerEvtToggle, FuriFlagWaitAny, @@ -701,13 +701,13 @@ static int32_t bad_usb_worker(void* context) { if(flags & WorkerEvtEnd) { break; } else if(flags & WorkerEvtConnect) { - worker_state = BadUsbStateIdle; // Ready to run + worker_state = BadKbStateIdle; // Ready to run } else if(flags & WorkerEvtToggle) { - worker_state = BadUsbStateWillRun; // Will run when USB is connected + worker_state = BadKbStateWillRun; // Will run when USB is connected } - bad_usb->st.state = worker_state; + bad_kb->st.state = worker_state; - } else if(worker_state == BadUsbStateIdle) { // State: ready to start + } else if(worker_state == BadKbStateIdle) { // State: ready to start uint32_t flags = furi_thread_flags_wait( WorkerEvtEnd | WorkerEvtToggle | WorkerEvtDisconnect, FuriFlagWaitAny, @@ -716,22 +716,22 @@ static int32_t bad_usb_worker(void* context) { if(flags & WorkerEvtEnd) { break; } else if(flags & WorkerEvtToggle) { // Start executing script - DOLPHIN_DEED(DolphinDeedBadUsbPlayScript); + DOLPHIN_DEED(DolphinDeedBadKbPlayScript); delay_val = 0; - bad_usb->buf_len = 0; - bad_usb->st.line_cur = 0; - bad_usb->defdelay = 0; - bad_usb->repeat_cnt = 0; - bad_usb->file_end = false; + bad_kb->buf_len = 0; + bad_kb->st.line_cur = 0; + bad_kb->defdelay = 0; + bad_kb->repeat_cnt = 0; + bad_kb->file_end = false; storage_file_seek(script_file, 0, true); - bad_usb_script_set_keyboard_layout(bad_usb, bad_usb->keyboard_layout); - worker_state = BadUsbStateRunning; + bad_kb_script_set_keyboard_layout(bad_kb, bad_kb->keyboard_layout); + worker_state = BadKbStateRunning; } else if(flags & WorkerEvtDisconnect) { - worker_state = BadUsbStateNotConnected; // USB disconnected + worker_state = BadKbStateNotConnected; // USB disconnected } - bad_usb->st.state = worker_state; + bad_kb->st.state = worker_state; - } else if(worker_state == BadUsbStateWillRun) { // State: start on connection + } else if(worker_state == BadKbStateWillRun) { // State: start on connection uint32_t flags = furi_thread_flags_wait( WorkerEvtEnd | WorkerEvtConnect | WorkerEvtToggle, FuriFlagWaitAny, @@ -740,28 +740,28 @@ static int32_t bad_usb_worker(void* context) { if(flags & WorkerEvtEnd) { break; } else if(flags & WorkerEvtConnect) { // Start executing script - DOLPHIN_DEED(DolphinDeedBadUsbPlayScript); + DOLPHIN_DEED(DolphinDeedBadKbPlayScript); delay_val = 0; - bad_usb->buf_len = 0; - bad_usb->st.line_cur = 0; - bad_usb->defdelay = 0; - bad_usb->repeat_cnt = 0; - bad_usb->file_end = false; + bad_kb->buf_len = 0; + bad_kb->st.line_cur = 0; + bad_kb->defdelay = 0; + bad_kb->repeat_cnt = 0; + bad_kb->file_end = false; storage_file_seek(script_file, 0, true); // extra time for PC to recognize Flipper as keyboard furi_thread_flags_wait(0, FuriFlagWaitAny, 1500); - if (bad_usb->bt) { - update_bt_timeout(bad_usb->bt); + if (bad_kb->bt) { + update_bt_timeout(bad_kb->bt); FURI_LOG_I(WORKER_TAG, "BLE Key timeout : %u", bt_timeout); } - bad_usb_script_set_keyboard_layout(bad_usb, bad_usb->keyboard_layout); - worker_state = BadUsbStateRunning; + bad_kb_script_set_keyboard_layout(bad_kb, bad_kb->keyboard_layout); + worker_state = BadKbStateRunning; } else if(flags & WorkerEvtToggle) { // Cancel scheduled execution - worker_state = BadUsbStateNotConnected; + worker_state = BadKbStateNotConnected; } - bad_usb->st.state = worker_state; + bad_kb->st.state = worker_state; - } else if(worker_state == BadUsbStateRunning) { // State: running + } else if(worker_state == BadKbStateRunning) { // State: running uint16_t delay_cur = (delay_val > 1000) ? (1000) : (delay_val); uint32_t flags = furi_thread_flags_wait( WorkerEvtEnd | WorkerEvtToggle | WorkerEvtDisconnect, FuriFlagWaitAny, delay_cur); @@ -770,56 +770,56 @@ static int32_t bad_usb_worker(void* context) { if(flags & WorkerEvtEnd) { break; } else if(flags & WorkerEvtToggle) { - worker_state = BadUsbStateIdle; // Stop executing script - if (bad_usb->bt) { + worker_state = BadKbStateIdle; // Stop executing script + if (bad_kb->bt) { furi_hal_bt_hid_kb_release_all(); } else { furi_hal_hid_kb_release_all(); } } else if(flags & WorkerEvtDisconnect) { - worker_state = BadUsbStateNotConnected; // USB disconnected - if (bad_usb->bt) { + worker_state = BadKbStateNotConnected; // USB disconnected + if (bad_kb->bt) { furi_hal_bt_hid_kb_release_all(); } else { furi_hal_hid_kb_release_all(); } } - bad_usb->st.state = worker_state; + bad_kb->st.state = worker_state; continue; } else if( (flags == (unsigned)FuriFlagErrorTimeout) || (flags == (unsigned)FuriFlagErrorResource)) { if(delay_val > 0) { - bad_usb->st.delay_remain--; + bad_kb->st.delay_remain--; continue; } - bad_usb->st.state = BadUsbStateRunning; - delay_val = ducky_script_execute_next(bad_usb, script_file); + bad_kb->st.state = BadKbStateRunning; + delay_val = ducky_script_execute_next(bad_kb, script_file); if(delay_val == SCRIPT_STATE_ERROR) { // Script error delay_val = 0; - worker_state = BadUsbStateScriptError; - bad_usb->st.state = worker_state; + worker_state = BadKbStateScriptError; + bad_kb->st.state = worker_state; } else if(delay_val == SCRIPT_STATE_END) { // End of script delay_val = 0; - worker_state = BadUsbStateIdle; - bad_usb->st.state = BadUsbStateDone; - if (bad_usb->bt) { + worker_state = BadKbStateIdle; + bad_kb->st.state = BadKbStateDone; + if (bad_kb->bt) { furi_hal_bt_hid_kb_release_all(); } else { furi_hal_hid_kb_release_all(); } continue; } else if(delay_val > 1000) { - bad_usb->st.state = BadUsbStateDelay; // Show long delays - bad_usb->st.delay_remain = delay_val / 1000; + bad_kb->st.state = BadKbStateDelay; // Show long delays + bad_kb->st.delay_remain = delay_val / 1000; } } else { furi_check((flags & FuriFlagError) == 0); } } else if( - (worker_state == BadUsbStateFileError) || - (worker_state == BadUsbStateScriptError)) { // State: error + (worker_state == BadKbStateFileError) || + (worker_state == BadKbStateScriptError)) { // State: error uint32_t flags = furi_thread_flags_wait( WorkerEvtEnd, FuriFlagWaitAny, FuriWaitForever); // Waiting for exit command furi_check((flags & FuriFlagError) == 0); @@ -827,31 +827,31 @@ static int32_t bad_usb_worker(void* context) { break; } } - if (bad_usb->bt) { - update_bt_timeout(bad_usb->bt); + if (bad_kb->bt) { + update_bt_timeout(bad_kb->bt); FURI_LOG_D(WORKER_TAG, "BLE Key timeout : %u", bt_timeout); } } - if (bad_usb->bt) { + if (bad_kb->bt) { // release all keys bt_hid_hold_while_keyboard_buffer_full(6, 3000); // stop ble - bt_set_status_changed_callback(bad_usb->bt, NULL, NULL); + bt_set_status_changed_callback(bad_kb->bt, NULL, NULL); - bt_disconnect(bad_usb->bt); + bt_disconnect(bad_kb->bt); // Wait 2nd core to update nvm storage furi_delay_ms(200); - bt_keys_storage_set_default_path(bad_usb->bt); + bt_keys_storage_set_default_path(bad_kb->bt); - bt_set_profile_pairing_method(bad_usb->bt, old_pairing_method); + bt_set_profile_pairing_method(bad_kb->bt, old_pairing_method); // fails if ble radio stack isn't ready when switching profile // if it happens, maybe we should increase the delay after bt_disconnect - bt_set_profile(bad_usb->bt, BtProfileSerial); + bt_set_profile(bad_kb->bt, BtProfileSerial); } else { furi_hal_hid_set_state_callback(NULL, NULL); @@ -860,82 +860,82 @@ static int32_t bad_usb_worker(void* context) { storage_file_close(script_file); storage_file_free(script_file); - furi_string_free(bad_usb->line); - furi_string_free(bad_usb->line_prev); + furi_string_free(bad_kb->line); + furi_string_free(bad_kb->line_prev); FURI_LOG_I(WORKER_TAG, "End"); return 0; } -static void bad_usb_script_set_default_keyboard_layout(BadUsbScript* bad_usb) { - furi_assert(bad_usb); - furi_string_set_str(bad_usb->keyboard_layout, ""); - memset(bad_usb->layout, HID_KEYBOARD_NONE, sizeof(bad_usb->layout)); - memcpy(bad_usb->layout, hid_asciimap, MIN(sizeof(hid_asciimap), sizeof(bad_usb->layout))); +static void bad_kb_script_set_default_keyboard_layout(BadKbScript* bad_kb) { + furi_assert(bad_kb); + furi_string_set_str(bad_kb->keyboard_layout, ""); + memset(bad_kb->layout, HID_KEYBOARD_NONE, sizeof(bad_kb->layout)); + memcpy(bad_kb->layout, hid_asciimap, MIN(sizeof(hid_asciimap), sizeof(bad_kb->layout))); } -BadUsbScript* bad_usb_script_open(FuriString* file_path, Bt* bt) { +BadKbScript* bad_kb_script_open(FuriString* file_path, Bt* bt) { furi_assert(file_path); - BadUsbScript* bad_usb = malloc(sizeof(BadUsbScript)); - bad_usb->file_path = furi_string_alloc(); - furi_string_set(bad_usb->file_path, file_path); - bad_usb->keyboard_layout = furi_string_alloc(); - bad_usb_script_set_default_keyboard_layout(bad_usb); + BadKbScript* bad_kb = malloc(sizeof(BadKbScript)); + bad_kb->file_path = furi_string_alloc(); + furi_string_set(bad_kb->file_path, file_path); + bad_kb->keyboard_layout = furi_string_alloc(); + bad_kb_script_set_default_keyboard_layout(bad_kb); - bad_usb->st.state = BadUsbStateInit; - bad_usb->st.error[0] = '\0'; + bad_kb->st.state = BadKbStateInit; + bad_kb->st.error[0] = '\0'; - bad_usb->bt = bt; + bad_kb->bt = bt; - bad_usb->thread = furi_thread_alloc_ex("BadUsbWorker", 2048, bad_usb_worker, bad_usb); - furi_thread_start(bad_usb->thread); - return bad_usb; + bad_kb->thread = furi_thread_alloc_ex("BadKbWorker", 2048, bad_kb_worker, bad_kb); + furi_thread_start(bad_kb->thread); + return bad_kb; } //-V773 -void bad_usb_script_close(BadUsbScript* bad_usb) { - furi_assert(bad_usb); +void bad_kb_script_close(BadKbScript* bad_kb) { + furi_assert(bad_kb); furi_record_close(RECORD_STORAGE); - furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtEnd); - furi_thread_join(bad_usb->thread); - furi_thread_free(bad_usb->thread); - furi_string_free(bad_usb->file_path); - furi_string_free(bad_usb->keyboard_layout); - free(bad_usb); + furi_thread_flags_set(furi_thread_get_id(bad_kb->thread), WorkerEvtEnd); + furi_thread_join(bad_kb->thread); + furi_thread_free(bad_kb->thread); + furi_string_free(bad_kb->file_path); + furi_string_free(bad_kb->keyboard_layout); + free(bad_kb); } -void bad_usb_script_set_keyboard_layout(BadUsbScript* bad_usb, FuriString* layout_path) { - furi_assert(bad_usb); +void bad_kb_script_set_keyboard_layout(BadKbScript* bad_kb, FuriString* layout_path) { + furi_assert(bad_kb); - if((bad_usb->st.state == BadUsbStateRunning) || (bad_usb->st.state == BadUsbStateDelay)) { + if((bad_kb->st.state == BadKbStateRunning) || (bad_kb->st.state == BadKbStateDelay)) { // do not update keyboard layout while a script is running return; } File* layout_file = storage_file_alloc(furi_record_open(RECORD_STORAGE)); if(!furi_string_empty(layout_path)) { - furi_string_set(bad_usb->keyboard_layout, layout_path); + furi_string_set(bad_kb->keyboard_layout, layout_path); if(storage_file_open( layout_file, furi_string_get_cstr(layout_path), FSAM_READ, FSOM_OPEN_EXISTING)) { uint16_t layout[128]; if(storage_file_read(layout_file, layout, sizeof(layout)) == sizeof(layout)) { - memcpy(bad_usb->layout, layout, sizeof(layout)); + memcpy(bad_kb->layout, layout, sizeof(layout)); } } storage_file_close(layout_file); } else { - bad_usb_script_set_default_keyboard_layout(bad_usb); + bad_kb_script_set_default_keyboard_layout(bad_kb); } storage_file_free(layout_file); } -void bad_usb_script_toggle(BadUsbScript* bad_usb) { - furi_assert(bad_usb); - furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtToggle); +void bad_kb_script_toggle(BadKbScript* bad_kb) { + furi_assert(bad_kb); + furi_thread_flags_set(furi_thread_get_id(bad_kb->thread), WorkerEvtToggle); } -BadUsbState* bad_usb_script_get_state(BadUsbScript* bad_usb) { - furi_assert(bad_usb); - return &(bad_usb->st); +BadKbState* bad_kb_script_get_state(BadKbScript* bad_kb) { + furi_assert(bad_kb); + return &(bad_kb->st); } diff --git a/applications/main/bad_kb/bad_kb_script.h b/applications/main/bad_kb/bad_kb_script.h new file mode 100644 index 000000000..35c57c112 --- /dev/null +++ b/applications/main/bad_kb/bad_kb_script.h @@ -0,0 +1,49 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +typedef struct BadKbScript BadKbScript; + +typedef enum { + BadKbStateInit, + BadKbStateNotConnected, + BadKbStateIdle, + BadKbStateWillRun, + BadKbStateRunning, + BadKbStateDelay, + BadKbStateDone, + BadKbStateScriptError, + BadKbStateFileError, +} BadKbWorkerState; + +typedef struct { + BadKbWorkerState state; + uint16_t line_cur; + uint16_t line_nb; + uint32_t delay_remain; + uint16_t error_line; + char error[64]; +} BadKbState; + +BadKbScript* bad_kb_script_open(FuriString* file_path, Bt* bt); + +void bad_kb_script_close(BadKbScript* bad_kb); + +void bad_kb_script_set_keyboard_layout(BadKbScript* bad_kb, FuriString* layout_path); + +void bad_kb_script_start(BadKbScript* bad_kb); + +void bad_kb_script_stop(BadKbScript* bad_kb); + +void bad_kb_script_toggle(BadKbScript* bad_kb); + +BadKbState* bad_kb_script_get_state(BadKbScript* bad_kb); + +#ifdef __cplusplus +} +#endif diff --git a/applications/main/bad_kb/bad_kb_settings_filename.h b/applications/main/bad_kb/bad_kb_settings_filename.h new file mode 100644 index 000000000..3eb7d3c0a --- /dev/null +++ b/applications/main/bad_kb/bad_kb_settings_filename.h @@ -0,0 +1,3 @@ +#pragma once + +#define BAD_KB_SETTINGS_FILE_NAME ".badkb.settings" diff --git a/applications/main/bad_kb/scenes/bad_kb_scene.c b/applications/main/bad_kb/scenes/bad_kb_scene.c new file mode 100644 index 000000000..f90d23a77 --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene.c @@ -0,0 +1,30 @@ +#include "bad_kb_scene.h" + +// Generate scene on_enter handlers array +#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_enter, +void (*const bad_kb_scene_on_enter_handlers[])(void*) = { +#include "bad_kb_scene_config.h" +}; +#undef ADD_SCENE + +// Generate scene on_event handlers array +#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_event, +bool (*const bad_kb_scene_on_event_handlers[])(void* context, SceneManagerEvent event) = { +#include "bad_kb_scene_config.h" +}; +#undef ADD_SCENE + +// Generate scene on_exit handlers array +#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_exit, +void (*const bad_kb_scene_on_exit_handlers[])(void* context) = { +#include "bad_kb_scene_config.h" +}; +#undef ADD_SCENE + +// Initialize scene handlers configuration structure +const SceneManagerHandlers bad_kb_scene_handlers = { + .on_enter_handlers = bad_kb_scene_on_enter_handlers, + .on_event_handlers = bad_kb_scene_on_event_handlers, + .on_exit_handlers = bad_kb_scene_on_exit_handlers, + .scene_num = BadKbSceneNum, +}; diff --git a/applications/main/bad_usb/scenes/bad_usb_scene.h b/applications/main/bad_kb/scenes/bad_kb_scene.h similarity index 68% rename from applications/main/bad_usb/scenes/bad_usb_scene.h rename to applications/main/bad_kb/scenes/bad_kb_scene.h index 68a753210..82db02873 100644 --- a/applications/main/bad_usb/scenes/bad_usb_scene.h +++ b/applications/main/bad_kb/scenes/bad_kb_scene.h @@ -3,27 +3,27 @@ #include // Generate scene id and total number -#define ADD_SCENE(prefix, name, id) BadUsbScene##id, +#define ADD_SCENE(prefix, name, id) BadKbScene##id, typedef enum { -#include "bad_usb_scene_config.h" - BadUsbSceneNum, -} BadUsbScene; +#include "bad_kb_scene_config.h" + BadKbSceneNum, +} BadKbScene; #undef ADD_SCENE -extern const SceneManagerHandlers bad_usb_scene_handlers; +extern const SceneManagerHandlers bad_kb_scene_handlers; // Generate scene on_enter handlers declaration #define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_enter(void*); -#include "bad_usb_scene_config.h" +#include "bad_kb_scene_config.h" #undef ADD_SCENE // Generate scene on_event handlers declaration #define ADD_SCENE(prefix, name, id) \ bool prefix##_scene_##name##_on_event(void* context, SceneManagerEvent event); -#include "bad_usb_scene_config.h" +#include "bad_kb_scene_config.h" #undef ADD_SCENE // Generate scene on_exit handlers declaration #define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_exit(void* context); -#include "bad_usb_scene_config.h" +#include "bad_kb_scene_config.h" #undef ADD_SCENE diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config.h b/applications/main/bad_kb/scenes/bad_kb_scene_config.h new file mode 100644 index 000000000..794468eba --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config.h @@ -0,0 +1,8 @@ +ADD_SCENE(bad_kb, file_select, FileSelect) +ADD_SCENE(bad_kb, work, Work) +ADD_SCENE(bad_kb, error, Error) +ADD_SCENE(bad_kb, config_bt, ConfigBt) +ADD_SCENE(bad_kb, config_usb, ConfigUsb) +ADD_SCENE(bad_kb, config_layout, ConfigLayout) +ADD_SCENE(bad_kb, config_name, ConfigName) +ADD_SCENE(bad_kb, config_mac, ConfigMac) diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c b/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c new file mode 100644 index 000000000..fc1d19e76 --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c @@ -0,0 +1,84 @@ +#include "../bad_kb_app_i.h" +#include "furi_hal_power.h" +#include "furi_hal_usb.h" + +enum VarItemListIndex { + VarItemListIndexConnection, + VarItemListIndexKeyboardLayout, + VarItemListIndexAdvertisementName, + VarItemListIndexMacAddress, +}; + +void bad_kb_scene_config_bt_connection_callback(VariableItem* item) { + BadKbApp* bad_kb = variable_item_get_context(item); + bad_kb->is_bt = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, VarItemListIndexConnection); +} + +void bad_kb_scene_config_bt_var_item_list_callback(void* context, uint32_t index) { + BadKbApp* bad_kb = context; + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, index); +} + +void bad_kb_scene_config_bt_on_enter(void* context) { + BadKbApp* bad_kb = context; + VariableItemList* var_item_list = bad_kb->var_item_list_bt; + VariableItem* item; + + item = variable_item_list_add( + var_item_list, "Connection", 2, bad_kb_scene_config_bt_connection_callback, bad_kb); + variable_item_set_current_value_index(item, bad_kb->is_bt); + variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); + + item = variable_item_list_add( + var_item_list, "Keyboard layout", 0, NULL, bad_kb); + + item = variable_item_list_add( + var_item_list, "Change adv name", 0, NULL, bad_kb); + + item = variable_item_list_add( + var_item_list, "Change MAC address", 0, NULL, bad_kb); + + variable_item_list_set_enter_callback(var_item_list, bad_kb_scene_config_bt_var_item_list_callback, bad_kb); + + view_dispatcher_switch_to_view(bad_kb->view_dispatcher, BadKbAppViewConfigBt); +} + +bool bad_kb_scene_config_bt_on_event(void* context, SceneManagerEvent event) { + BadKbApp* bad_kb = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + scene_manager_set_scene_state(bad_kb->scene_manager, BadKbSceneConfigBt, event.event); + consumed = true; + if(event.event == VarItemListIndexKeyboardLayout) { + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigLayout); + } else if(event.event == VarItemListIndexConnection) { + bad_kb_script_close(bad_kb->bad_kb_script); + bad_kb->bad_kb_script = bad_kb_script_open(bad_kb->file_path, bad_kb->is_bt ? bad_kb->bt : NULL); + bad_kb_script_set_keyboard_layout(bad_kb->bad_kb_script, bad_kb->keyboard_layout); + scene_manager_previous_scene(bad_kb->scene_manager); + if (bad_kb->is_bt) { + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigBt); + } else { + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigUsb); + } + } else if(event.event == VarItemListIndexAdvertisementName) { + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigName); + } else if(event.event == VarItemListIndexMacAddress) { + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigMac); + // } else { + // furi_crash("Unknown key type"); + } + } + + return consumed; +} + +void bad_kb_scene_config_bt_on_exit(void* context) { + BadKbApp* bad_kb = context; + VariableItemList* var_item_list = bad_kb->var_item_list_bt; + + variable_item_list_reset(var_item_list); +} diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config_layout.c b/applications/main/bad_kb/scenes/bad_kb_scene_config_layout.c new file mode 100644 index 000000000..006ad31bd --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config_layout.c @@ -0,0 +1,48 @@ +#include "../bad_kb_app_i.h" +#include "furi_hal_power.h" +#include "furi_hal_usb.h" +#include + +static bool bad_kb_layout_select(BadKbApp* bad_kb) { + furi_assert(bad_kb); + + FuriString* predefined_path; + predefined_path = furi_string_alloc(); + if(!furi_string_empty(bad_kb->keyboard_layout)) { + furi_string_set(predefined_path, bad_kb->keyboard_layout); + } else { + furi_string_set(predefined_path, BAD_KB_APP_PATH_LAYOUT_FOLDER); + } + + DialogsFileBrowserOptions browser_options; + dialog_file_browser_set_basic_options( + &browser_options, BAD_KB_APP_LAYOUT_EXTENSION, &I_keyboard_10px); + + // Input events and views are managed by file_browser + bool res = dialog_file_browser_show( + bad_kb->dialogs, bad_kb->keyboard_layout, predefined_path, &browser_options); + + furi_string_free(predefined_path); + return res; +} + +void bad_kb_scene_config_layout_on_enter(void* context) { + BadKbApp* bad_kb = context; + + if(bad_kb_layout_select(bad_kb)) { + bad_kb_script_set_keyboard_layout(bad_kb->bad_kb_script, bad_kb->keyboard_layout); + } + scene_manager_previous_scene(bad_kb->scene_manager); +} + +bool bad_kb_scene_config_layout_on_event(void* context, SceneManagerEvent event) { + UNUSED(context); + UNUSED(event); + // BadKbApp* bad_kb = context; + return false; +} + +void bad_kb_scene_config_layout_on_exit(void* context) { + UNUSED(context); + // BadKbApp* bad_kb = context; +} diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config_mac.c b/applications/main/bad_kb/scenes/bad_kb_scene_config_mac.c new file mode 100644 index 000000000..0dc4be10a --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config_mac.c @@ -0,0 +1,57 @@ +#include "../bad_kb_app_i.h" + +#define TAG "BadKbConfigMac" + +static uint8_t* reverse_mac_addr(uint8_t* mac) { + uint8_t tmp; + for(int i = 0; i < 3; i++) { + tmp = mac[i]; + mac[i] = mac[5 - i]; + mac[5 - i] = tmp; + } + return mac; +} + +void bad_kb_scene_config_mac_byte_input_callback(void* context) { + BadKbApp* bad_kb = context; + + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, BadKbAppCustomEventByteInputDone); +} + +void bad_kb_scene_config_mac_on_enter(void* context) { + BadKbApp* bad_kb = context; + + // Setup view + ByteInput* byte_input = bad_kb->byte_input; + byte_input_set_header_text(byte_input, "Enter new MAC address"); + byte_input_set_result_callback( + byte_input, + bad_kb_scene_config_mac_byte_input_callback, + NULL, + bad_kb, + reverse_mac_addr(bad_kb->mac), + GAP_MAC_ADDR_SIZE); + view_dispatcher_switch_to_view(bad_kb->view_dispatcher, BadKbAppViewConfigMac); +} + +bool bad_kb_scene_config_mac_on_event(void* context, SceneManagerEvent event) { + BadKbApp* bad_kb = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == BadKbAppCustomEventByteInputDone) { + bt_set_profile_mac_address(bad_kb->bt, reverse_mac_addr(bad_kb->mac)); + scene_manager_previous_scene(bad_kb->scene_manager); + consumed = true; + } + } + return consumed; +} + +void bad_kb_scene_config_mac_on_exit(void* context) { + BadKbApp* bad_kb = context; + + // Clear view + byte_input_set_result_callback(bad_kb->byte_input, NULL, NULL, NULL, NULL, 0); + byte_input_set_header_text(bad_kb->byte_input, ""); +} diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config_name.c b/applications/main/bad_kb/scenes/bad_kb_scene_config_name.c new file mode 100644 index 000000000..d3d7628b1 --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config_name.c @@ -0,0 +1,46 @@ +#include "../bad_kb_app_i.h" + +static void bad_kb_scene_config_name_text_input_callback(void* context) { + BadKbApp* bad_kb = context; + + view_dispatcher_send_custom_event( + bad_kb->view_dispatcher, BadKbAppCustomEventTextEditResult); +} + +void bad_kb_scene_config_name_on_enter(void* context) { + BadKbApp* bad_kb = context; + TextInput* text_input = bad_kb->text_input; + + text_input_set_header_text(text_input, "Set BLE adv name"); + + text_input_set_result_callback( + text_input, + bad_kb_scene_config_name_text_input_callback, + bad_kb, + bad_kb->name, + BAD_KB_ADV_NAME_MAX_LEN, + true); + + view_dispatcher_switch_to_view(bad_kb->view_dispatcher, BadKbAppViewConfigName); +} + +bool bad_kb_scene_config_name_on_event(void* context, SceneManagerEvent event) { + BadKbApp* bad_kb = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + consumed = true; + if(event.event == BadKbAppCustomEventTextEditResult) { + bt_set_profile_adv_name(bad_kb->bt, bad_kb->name); + } + scene_manager_previous_scene(bad_kb->scene_manager); + } + return consumed; +} + +void bad_kb_scene_config_name_on_exit(void* context) { + BadKbApp* bad_kb = context; + TextInput* text_input = bad_kb->text_input; + + text_input_reset(text_input); +} diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config_usb.c b/applications/main/bad_kb/scenes/bad_kb_scene_config_usb.c new file mode 100644 index 000000000..35c5ab8d2 --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config_usb.c @@ -0,0 +1,72 @@ +#include "../bad_kb_app_i.h" +#include "furi_hal_power.h" +#include "furi_hal_usb.h" + +enum VarItemListIndex { + VarItemListIndexConnection, + VarItemListIndexKeyboardLayout, +}; + +void bad_kb_scene_config_usb_connection_callback(VariableItem* item) { + BadKbApp* bad_kb = variable_item_get_context(item); + bad_kb->is_bt = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, VarItemListIndexConnection); +} + +void bad_kb_scene_config_usb_var_item_list_callback(void* context, uint32_t index) { + BadKbApp* bad_kb = context; + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, index); +} + +void bad_kb_scene_config_usb_on_enter(void* context) { + BadKbApp* bad_kb = context; + VariableItemList* var_item_list = bad_kb->var_item_list_usb; + VariableItem* item; + + item = variable_item_list_add( + var_item_list, "Connection", 2, bad_kb_scene_config_usb_connection_callback, bad_kb); + variable_item_set_current_value_index(item, bad_kb->is_bt); + variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); + + item = variable_item_list_add( + var_item_list, "Keyboard layout", 0, NULL, bad_kb); + + variable_item_list_set_enter_callback(var_item_list, bad_kb_scene_config_usb_var_item_list_callback, bad_kb); + + view_dispatcher_switch_to_view(bad_kb->view_dispatcher, BadKbAppViewConfigUsb); +} + +bool bad_kb_scene_config_usb_on_event(void* context, SceneManagerEvent event) { + BadKbApp* bad_kb = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + scene_manager_set_scene_state(bad_kb->scene_manager, BadKbSceneConfigUsb, event.event); + consumed = true; + if(event.event == VarItemListIndexKeyboardLayout) { + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigLayout); + } else if(event.event == VarItemListIndexConnection) { + bad_kb_script_close(bad_kb->bad_kb_script); + bad_kb->bad_kb_script = bad_kb_script_open(bad_kb->file_path, bad_kb->is_bt ? bad_kb->bt : NULL); + bad_kb_script_set_keyboard_layout(bad_kb->bad_kb_script, bad_kb->keyboard_layout); + scene_manager_previous_scene(bad_kb->scene_manager); + if (bad_kb->is_bt) { + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigBt); + } else { + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigUsb); + } + // } else { + // furi_crash("Unknown key type"); + } + } + + return consumed; +} + +void bad_kb_scene_config_usb_on_exit(void* context) { + BadKbApp* bad_kb = context; + VariableItemList* var_item_list = bad_kb->var_item_list_usb; + + variable_item_list_reset(var_item_list); +} diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_error.c b/applications/main/bad_kb/scenes/bad_kb_scene_error.c similarity index 70% rename from applications/main/bad_usb/scenes/bad_usb_scene_error.c rename to applications/main/bad_kb/scenes/bad_kb_scene_error.c index d1290e0e0..bd1796d7a 100644 --- a/applications/main/bad_usb/scenes/bad_usb_scene_error.c +++ b/applications/main/bad_kb/scenes/bad_kb_scene_error.c @@ -1,20 +1,20 @@ -#include "../bad_usb_app_i.h" +#include "../bad_kb_app_i.h" #include "../../../settings/xtreme_settings/xtreme_settings.h" static void - bad_usb_scene_error_event_callback(GuiButtonType result, InputType type, void* context) { + bad_kb_scene_error_event_callback(GuiButtonType result, InputType type, void* context) { furi_assert(context); - BadUsbApp* app = context; + BadKbApp* app = context; if((result == GuiButtonTypeLeft) && (type == InputTypeShort)) { - view_dispatcher_send_custom_event(app->view_dispatcher, BadUsbCustomEventErrorBack); + view_dispatcher_send_custom_event(app->view_dispatcher, BadKbCustomEventErrorBack); } } -void bad_usb_scene_error_on_enter(void* context) { - BadUsbApp* app = context; +void bad_kb_scene_error_on_enter(void* context) { + BadKbApp* app = context; - if(app->error == BadUsbAppErrorNoFiles) { + if(app->error == BadKbAppErrorNoFiles) { widget_add_icon_element(app->widget, 0, 0, &I_SDQuestion_35x43); widget_add_string_multiline_element( app->widget, @@ -25,8 +25,8 @@ void bad_usb_scene_error_on_enter(void* context) { FontSecondary, "No SD card or\napp data found.\nThis app will not\nwork without\nrequired files."); widget_add_button_element( - app->widget, GuiButtonTypeLeft, "Back", bad_usb_scene_error_event_callback, app); - } else if(app->error == BadUsbAppErrorCloseRpc) { + app->widget, GuiButtonTypeLeft, "Back", bad_kb_scene_error_event_callback, app); + } else if(app->error == BadKbAppErrorCloseRpc) { widget_add_icon_element(app->widget, 78, 0, &I_ActiveConnection_50x64); if(XTREME_SETTINGS()->nsfw_mode) { widget_add_string_multiline_element( @@ -53,15 +53,15 @@ void bad_usb_scene_error_on_enter(void* context) { } } - view_dispatcher_switch_to_view(app->view_dispatcher, BadUsbAppViewError); + view_dispatcher_switch_to_view(app->view_dispatcher, BadKbAppViewError); } -bool bad_usb_scene_error_on_event(void* context, SceneManagerEvent event) { - BadUsbApp* app = context; +bool bad_kb_scene_error_on_event(void* context, SceneManagerEvent event) { + BadKbApp* app = context; bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { - if(event.event == BadUsbCustomEventErrorBack) { + if(event.event == BadKbCustomEventErrorBack) { view_dispatcher_stop(app->view_dispatcher); consumed = true; } @@ -69,7 +69,7 @@ bool bad_usb_scene_error_on_event(void* context, SceneManagerEvent event) { return consumed; } -void bad_usb_scene_error_on_exit(void* context) { - BadUsbApp* app = context; +void bad_kb_scene_error_on_exit(void* context) { + BadKbApp* app = context; widget_reset(app->widget); } diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_file_select.c b/applications/main/bad_kb/scenes/bad_kb_scene_file_select.c new file mode 100644 index 000000000..44012f68d --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene_file_select.c @@ -0,0 +1,52 @@ +#include "../bad_kb_app_i.h" +#include "furi_hal_power.h" +#include "furi_hal_usb.h" +#include + +static bool bad_kb_file_select(BadKbApp* bad_kb) { + furi_assert(bad_kb); + + DialogsFileBrowserOptions browser_options; + dialog_file_browser_set_basic_options( + &browser_options, BAD_KB_APP_SCRIPT_EXTENSION, &I_badkb_10px); + browser_options.base_path = BAD_KB_APP_BASE_FOLDER; + browser_options.skip_assets = true; + + // Input events and views are managed by file_browser + bool res = dialog_file_browser_show( + bad_kb->dialogs, bad_kb->file_path, bad_kb->file_path, &browser_options); + + return res; +} + +void bad_kb_scene_file_select_on_enter(void* context) { + BadKbApp* bad_kb = context; + + furi_hal_usb_disable(); + if(bad_kb->bad_kb_script) { + bad_kb_script_close(bad_kb->bad_kb_script); + bad_kb->bad_kb_script = NULL; + } + + if(bad_kb_file_select(bad_kb)) { + bad_kb->bad_kb_script = bad_kb_script_open(bad_kb->file_path, bad_kb->is_bt ? bad_kb->bt : NULL); + bad_kb_script_set_keyboard_layout(bad_kb->bad_kb_script, bad_kb->keyboard_layout); + + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneWork); + } else { + furi_hal_usb_enable(); + view_dispatcher_stop(bad_kb->view_dispatcher); + } +} + +bool bad_kb_scene_file_select_on_event(void* context, SceneManagerEvent event) { + UNUSED(context); + UNUSED(event); + // BadKbApp* bad_kb = context; + return false; +} + +void bad_kb_scene_file_select_on_exit(void* context) { + UNUSED(context); + // BadKbApp* bad_kb = context; +} diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_work.c b/applications/main/bad_kb/scenes/bad_kb_scene_work.c new file mode 100644 index 000000000..a7eac1786 --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene_work.c @@ -0,0 +1,58 @@ +#include "../bad_kb_script.h" +#include "../bad_kb_app_i.h" +#include "../views/bad_kb_view.h" +#include "furi_hal.h" +#include "toolbox/path.h" + +void bad_kb_scene_work_button_callback(InputKey key, void* context) { + furi_assert(context); + BadKbApp* app = context; + view_dispatcher_send_custom_event(app->view_dispatcher, key); +} + +bool bad_kb_scene_work_on_event(void* context, SceneManagerEvent event) { + BadKbApp* app = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == InputKeyLeft) { + if (app->is_bt) { + scene_manager_next_scene(app->scene_manager, BadKbSceneConfigBt); + } else { + scene_manager_next_scene(app->scene_manager, BadKbSceneConfigUsb); + } + consumed = true; + } else if(event.event == InputKeyOk) { + bad_kb_script_toggle(app->bad_kb_script); + consumed = true; + } + } else if(event.type == SceneManagerEventTypeTick) { + bad_kb_set_state(app->bad_kb_view, bad_kb_script_get_state(app->bad_kb_script)); + } + return consumed; +} + +void bad_kb_scene_work_on_enter(void* context) { + BadKbApp* app = context; + + FuriString* file_name; + file_name = furi_string_alloc(); + path_extract_filename(app->file_path, file_name, true); + bad_kb_set_file_name(app->bad_kb_view, furi_string_get_cstr(file_name)); + furi_string_free(file_name); + + FuriString* layout; + layout = furi_string_alloc(); + path_extract_filename(app->keyboard_layout, layout, true); + bad_kb_set_layout(app->bad_kb_view, furi_string_get_cstr(layout)); + furi_string_free(layout); + + bad_kb_set_state(app->bad_kb_view, bad_kb_script_get_state(app->bad_kb_script)); + + bad_kb_set_button_callback(app->bad_kb_view, bad_kb_scene_work_button_callback, app); + view_dispatcher_switch_to_view(app->view_dispatcher, BadKbAppViewWork); +} + +void bad_kb_scene_work_on_exit(void* context) { + UNUSED(context); +} diff --git a/applications/main/bad_usb/views/bad_usb_view.c b/applications/main/bad_kb/views/bad_kb_view.c similarity index 70% rename from applications/main/bad_usb/views/bad_usb_view.c rename to applications/main/bad_kb/views/bad_kb_view.c index ad889cd1c..a0fb39f88 100644 --- a/applications/main/bad_usb/views/bad_usb_view.c +++ b/applications/main/bad_kb/views/bad_kb_view.c @@ -1,5 +1,5 @@ -#include "bad_usb_view.h" -#include "../bad_usb_script.h" +#include "bad_kb_view.h" +#include "../bad_kb_script.h" #include #include #include @@ -7,21 +7,21 @@ #define MAX_NAME_LEN 64 -struct BadUsb { +struct BadKb { View* view; - BadUsbButtonCallback callback; + BadKbButtonCallback callback; void* context; }; typedef struct { char file_name[MAX_NAME_LEN]; char layout[MAX_NAME_LEN]; - BadUsbState state; + BadKbState state; uint8_t anim_frame; -} BadUsbModel; +} BadKbModel; -static void bad_usb_draw_callback(Canvas* canvas, void* _model) { - BadUsbModel* model = _model; +static void bad_kb_draw_callback(Canvas* canvas, void* _model) { + BadKbModel* model = _model; FuriString* disp_str; disp_str = furi_string_alloc_set(model->file_name); @@ -47,25 +47,25 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) { canvas_draw_icon(canvas, 22, 24, &I_UsbTree_48x22); - if((model->state.state == BadUsbStateIdle) || (model->state.state == BadUsbStateDone) || - (model->state.state == BadUsbStateNotConnected)) { + if((model->state.state == BadKbStateIdle) || (model->state.state == BadKbStateDone) || + (model->state.state == BadKbStateNotConnected)) { if(xtreme_settings->nsfw_mode) { elements_button_center(canvas, "Cum"); } else { elements_button_center(canvas, "Start"); } - } else if((model->state.state == BadUsbStateRunning) || (model->state.state == BadUsbStateDelay)) { + } else if((model->state.state == BadKbStateRunning) || (model->state.state == BadKbStateDelay)) { elements_button_center(canvas, "Stop"); - } else if(model->state.state == BadUsbStateWillRun) { + } else if(model->state.state == BadKbStateWillRun) { elements_button_center(canvas, "Cancel"); } - if((model->state.state == BadUsbStateNotConnected) || - (model->state.state == BadUsbStateIdle) || (model->state.state == BadUsbStateDone)) { + if((model->state.state == BadKbStateNotConnected) || + (model->state.state == BadKbStateIdle) || (model->state.state == BadKbStateDone)) { elements_button_left(canvas, "Config"); } - if(model->state.state == BadUsbStateNotConnected) { + if(model->state.state == BadKbStateNotConnected) { canvas_draw_icon(canvas, 4, 26, &I_Clock_18x18); canvas_set_font(canvas, FontPrimary); if(xtreme_settings->nsfw_mode) { @@ -75,7 +75,7 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) { canvas_draw_str_aligned(canvas, 127, 31, AlignRight, AlignBottom, "Connect to"); canvas_draw_str_aligned(canvas, 127, 43, AlignRight, AlignBottom, "a device"); } - } else if(model->state.state == BadUsbStateWillRun) { + } else if(model->state.state == BadKbStateWillRun) { canvas_draw_icon(canvas, 4, 26, &I_Clock_18x18); canvas_set_font(canvas, FontPrimary); if(xtreme_settings->nsfw_mode) { @@ -84,12 +84,12 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) { canvas_draw_str_aligned(canvas, 127, 31, AlignRight, AlignBottom, "Will run"); } canvas_draw_str_aligned(canvas, 127, 43, AlignRight, AlignBottom, "on connect"); - } else if(model->state.state == BadUsbStateFileError) { + } else if(model->state.state == BadKbStateFileError) { canvas_draw_icon(canvas, 4, 26, &I_Error_18x18); canvas_set_font(canvas, FontPrimary); canvas_draw_str_aligned(canvas, 127, 31, AlignRight, AlignBottom, "File"); canvas_draw_str_aligned(canvas, 127, 43, AlignRight, AlignBottom, "ERROR"); - } else if(model->state.state == BadUsbStateScriptError) { + } else if(model->state.state == BadKbStateScriptError) { canvas_draw_icon(canvas, 4, 26, &I_Error_18x18); canvas_set_font(canvas, FontPrimary); canvas_draw_str_aligned(canvas, 127, 33, AlignRight, AlignBottom, "ERROR:"); @@ -99,12 +99,12 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) { canvas, 127, 46, AlignRight, AlignBottom, furi_string_get_cstr(disp_str)); furi_string_reset(disp_str); canvas_draw_str_aligned(canvas, 127, 56, AlignRight, AlignBottom, model->state.error); - } else if(model->state.state == BadUsbStateIdle) { + } else if(model->state.state == BadKbStateIdle) { canvas_draw_icon(canvas, 4, 26, &I_Smile_18x18); canvas_set_font(canvas, FontBigNumbers); canvas_draw_str_aligned(canvas, 114, 40, AlignRight, AlignBottom, "0"); canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14); - } else if(model->state.state == BadUsbStateRunning) { + } else if(model->state.state == BadKbStateRunning) { if(model->anim_frame == 0) { canvas_draw_icon(canvas, 4, 23, &I_EviSmile1_18x21); } else { @@ -117,13 +117,13 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) { canvas, 114, 40, AlignRight, AlignBottom, furi_string_get_cstr(disp_str)); furi_string_reset(disp_str); canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14); - } else if(model->state.state == BadUsbStateDone) { + } else if(model->state.state == BadKbStateDone) { canvas_draw_icon(canvas, 4, 23, &I_EviSmile1_18x21); canvas_set_font(canvas, FontBigNumbers); canvas_draw_str_aligned(canvas, 114, 40, AlignRight, AlignBottom, "100"); furi_string_reset(disp_str); canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14); - } else if(model->state.state == BadUsbStateDelay) { + } else if(model->state.state == BadKbStateDelay) { if(model->anim_frame == 0) { canvas_draw_icon(canvas, 4, 23, &I_EviWaiting1_18x21); } else { @@ -148,84 +148,84 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) { furi_string_free(disp_str); } -static bool bad_usb_input_callback(InputEvent* event, void* context) { +static bool bad_kb_input_callback(InputEvent* event, void* context) { furi_assert(context); - BadUsb* bad_usb = context; + BadKb* bad_kb = context; bool consumed = false; if(event->type == InputTypeShort) { if((event->key == InputKeyLeft) || (event->key == InputKeyOk)) { consumed = true; - furi_assert(bad_usb->callback); - bad_usb->callback(event->key, bad_usb->context); + furi_assert(bad_kb->callback); + bad_kb->callback(event->key, bad_kb->context); } } return consumed; } -BadUsb* bad_usb_alloc() { - BadUsb* bad_usb = malloc(sizeof(BadUsb)); +BadKb* bad_kb_alloc() { + BadKb* bad_kb = malloc(sizeof(BadKb)); - bad_usb->view = view_alloc(); - view_allocate_model(bad_usb->view, ViewModelTypeLocking, sizeof(BadUsbModel)); - view_set_context(bad_usb->view, bad_usb); - view_set_draw_callback(bad_usb->view, bad_usb_draw_callback); - view_set_input_callback(bad_usb->view, bad_usb_input_callback); + bad_kb->view = view_alloc(); + view_allocate_model(bad_kb->view, ViewModelTypeLocking, sizeof(BadKbModel)); + view_set_context(bad_kb->view, bad_kb); + view_set_draw_callback(bad_kb->view, bad_kb_draw_callback); + view_set_input_callback(bad_kb->view, bad_kb_input_callback); - return bad_usb; + return bad_kb; } -void bad_usb_free(BadUsb* bad_usb) { - furi_assert(bad_usb); - view_free(bad_usb->view); - free(bad_usb); +void bad_kb_free(BadKb* bad_kb) { + furi_assert(bad_kb); + view_free(bad_kb->view); + free(bad_kb); } -View* bad_usb_get_view(BadUsb* bad_usb) { - furi_assert(bad_usb); - return bad_usb->view; +View* bad_kb_get_view(BadKb* bad_kb) { + furi_assert(bad_kb); + return bad_kb->view; } -void bad_usb_set_button_callback(BadUsb* bad_usb, BadUsbButtonCallback callback, void* context) { - furi_assert(bad_usb); +void bad_kb_set_button_callback(BadKb* bad_kb, BadKbButtonCallback callback, void* context) { + furi_assert(bad_kb); furi_assert(callback); with_view_model( - bad_usb->view, - BadUsbModel * model, + bad_kb->view, + BadKbModel * model, { UNUSED(model); - bad_usb->callback = callback; - bad_usb->context = context; + bad_kb->callback = callback; + bad_kb->context = context; }, true); } -void bad_usb_set_file_name(BadUsb* bad_usb, const char* name) { +void bad_kb_set_file_name(BadKb* bad_kb, const char* name) { furi_assert(name); with_view_model( - bad_usb->view, - BadUsbModel * model, + bad_kb->view, + BadKbModel * model, { strlcpy(model->file_name, name, MAX_NAME_LEN); }, true); } -void bad_usb_set_layout(BadUsb* bad_usb, const char* layout) { +void bad_kb_set_layout(BadKb* bad_kb, const char* layout) { furi_assert(layout); with_view_model( - bad_usb->view, - BadUsbModel * model, + bad_kb->view, + BadKbModel * model, { strlcpy(model->layout, layout, MAX_NAME_LEN); }, true); } -void bad_usb_set_state(BadUsb* bad_usb, BadUsbState* st) { +void bad_kb_set_state(BadKb* bad_kb, BadKbState* st) { furi_assert(st); with_view_model( - bad_usb->view, - BadUsbModel * model, + bad_kb->view, + BadKbModel * model, { - memcpy(&(model->state), st, sizeof(BadUsbState)); + memcpy(&(model->state), st, sizeof(BadKbState)); model->anim_frame ^= 1; }, true); diff --git a/applications/main/bad_kb/views/bad_kb_view.h b/applications/main/bad_kb/views/bad_kb_view.h new file mode 100644 index 000000000..24fdf4792 --- /dev/null +++ b/applications/main/bad_kb/views/bad_kb_view.h @@ -0,0 +1,21 @@ +#pragma once + +#include +#include "../bad_kb_script.h" + +typedef struct BadKb BadKb; +typedef void (*BadKbButtonCallback)(InputKey key, void* context); + +BadKb* bad_kb_alloc(); + +void bad_kb_free(BadKb* bad_kb); + +View* bad_kb_get_view(BadKb* bad_kb); + +void bad_kb_set_button_callback(BadKb* bad_kb, BadKbButtonCallback callback, void* context); + +void bad_kb_set_file_name(BadKb* bad_kb, const char* name); + +void bad_kb_set_layout(BadKb* bad_kb, const char* layout); + +void bad_kb_set_state(BadKb* bad_kb, BadKbState* st); diff --git a/applications/main/bad_usb/bad_usb_app.h b/applications/main/bad_usb/bad_usb_app.h deleted file mode 100644 index 4192a59c9..000000000 --- a/applications/main/bad_usb/bad_usb_app.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct BadUsbApp BadUsbApp; - -void bad_usb_set_name(BadUsbApp* app, const char* fmt, ...); - -#ifdef __cplusplus -} -#endif diff --git a/applications/main/bad_usb/bad_usb_app_i.h b/applications/main/bad_usb/bad_usb_app_i.h deleted file mode 100644 index abd252bb4..000000000 --- a/applications/main/bad_usb/bad_usb_app_i.h +++ /dev/null @@ -1,80 +0,0 @@ -#pragma once - -#include "bad_usb_app.h" -#include "scenes/bad_usb_scene.h" -#include "bad_usb_script.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "views/bad_usb_view.h" - -#define BAD_USB_APP_BASE_FOLDER ANY_PATH("badusb") -#define BAD_USB_APP_PATH_LAYOUT_FOLDER BAD_USB_APP_BASE_FOLDER "/layouts" -#define BAD_USB_APP_SCRIPT_EXTENSION ".txt" -#define BAD_USB_APP_LAYOUT_EXTENSION ".kl" - -#define BAD_USB_MAC_ADDRESS_LEN 6 // need replace with MAC size maccro -#define BAD_USB_ADV_NAME_MAX_LEN 18 - -typedef enum { - BadUsbAppErrorNoFiles, - BadUsbAppErrorCloseRpc, -} BadUsbAppError; - -typedef enum BadUsbCustomEvent { - BadUsbAppCustomEventTextEditResult, - BadUsbAppCustomEventByteInputDone, - BadUsbCustomEventErrorBack -} BadUsbCustomEvent; - -typedef struct { - uint8_t mac[BAD_USB_MAC_ADDRESS_LEN]; - char name[BAD_USB_ADV_NAME_MAX_LEN + 1]; - - // number of bt keys before starting the app (all keys added in - // the bt keys file then will be removed) - uint16_t n_keys; -} BadUsbBtConfig; - -struct BadUsbApp { - Gui* gui; - ViewDispatcher* view_dispatcher; - SceneManager* scene_manager; - NotificationApp* notifications; - DialogsApp* dialogs; - Widget* widget; - VariableItemList* var_item_list_bt; - VariableItemList* var_item_list_usb; - - Bt* bt; - TextInput* text_input; - ByteInput* byte_input; - uint8_t mac[BAD_USB_MAC_ADDRESS_LEN]; - char name[BAD_USB_ADV_NAME_MAX_LEN + 1]; - BadUsbBtConfig bt_old_config; - - BadUsbAppError error; - FuriString* file_path; - FuriString* keyboard_layout; - BadUsb* bad_usb_view; - BadUsbScript* bad_usb_script; - - bool is_bt; -}; - -typedef enum { - BadUsbAppViewError, - BadUsbAppViewWork, - BadUsbAppViewConfigBt, - BadUsbAppViewConfigUsb, - BadUsbAppViewConfigMac, - BadUsbAppViewConfigName -} BadUsbAppView; diff --git a/applications/main/bad_usb/bad_usb_script.h b/applications/main/bad_usb/bad_usb_script.h deleted file mode 100644 index 5c37bcec2..000000000 --- a/applications/main/bad_usb/bad_usb_script.h +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -typedef struct BadUsbScript BadUsbScript; - -typedef enum { - BadUsbStateInit, - BadUsbStateNotConnected, - BadUsbStateIdle, - BadUsbStateWillRun, - BadUsbStateRunning, - BadUsbStateDelay, - BadUsbStateDone, - BadUsbStateScriptError, - BadUsbStateFileError, -} BadUsbWorkerState; - -typedef struct { - BadUsbWorkerState state; - uint16_t line_cur; - uint16_t line_nb; - uint32_t delay_remain; - uint16_t error_line; - char error[64]; -} BadUsbState; - -BadUsbScript* bad_usb_script_open(FuriString* file_path, Bt* bt); - -void bad_usb_script_close(BadUsbScript* bad_usb); - -void bad_usb_script_set_keyboard_layout(BadUsbScript* bad_usb, FuriString* layout_path); - -void bad_usb_script_start(BadUsbScript* bad_usb); - -void bad_usb_script_stop(BadUsbScript* bad_usb); - -void bad_usb_script_toggle(BadUsbScript* bad_usb); - -BadUsbState* bad_usb_script_get_state(BadUsbScript* bad_usb); - -#ifdef __cplusplus -} -#endif diff --git a/applications/main/bad_usb/bad_usb_settings_filename.h b/applications/main/bad_usb/bad_usb_settings_filename.h deleted file mode 100644 index 12ba8f31c..000000000 --- a/applications/main/bad_usb/bad_usb_settings_filename.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#define BAD_USB_SETTINGS_FILE_NAME ".badusb.settings" diff --git a/applications/main/bad_usb/scenes/bad_usb_scene.c b/applications/main/bad_usb/scenes/bad_usb_scene.c deleted file mode 100644 index 03c7c4471..000000000 --- a/applications/main/bad_usb/scenes/bad_usb_scene.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "bad_usb_scene.h" - -// Generate scene on_enter handlers array -#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_enter, -void (*const bad_usb_scene_on_enter_handlers[])(void*) = { -#include "bad_usb_scene_config.h" -}; -#undef ADD_SCENE - -// Generate scene on_event handlers array -#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_event, -bool (*const bad_usb_scene_on_event_handlers[])(void* context, SceneManagerEvent event) = { -#include "bad_usb_scene_config.h" -}; -#undef ADD_SCENE - -// Generate scene on_exit handlers array -#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_exit, -void (*const bad_usb_scene_on_exit_handlers[])(void* context) = { -#include "bad_usb_scene_config.h" -}; -#undef ADD_SCENE - -// Initialize scene handlers configuration structure -const SceneManagerHandlers bad_usb_scene_handlers = { - .on_enter_handlers = bad_usb_scene_on_enter_handlers, - .on_event_handlers = bad_usb_scene_on_event_handlers, - .on_exit_handlers = bad_usb_scene_on_exit_handlers, - .scene_num = BadUsbSceneNum, -}; diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_config.h b/applications/main/bad_usb/scenes/bad_usb_scene_config.h deleted file mode 100644 index 2524464f1..000000000 --- a/applications/main/bad_usb/scenes/bad_usb_scene_config.h +++ /dev/null @@ -1,8 +0,0 @@ -ADD_SCENE(bad_usb, file_select, FileSelect) -ADD_SCENE(bad_usb, work, Work) -ADD_SCENE(bad_usb, error, Error) -ADD_SCENE(bad_usb, config_bt, ConfigBt) -ADD_SCENE(bad_usb, config_usb, ConfigUsb) -ADD_SCENE(bad_usb, config_layout, ConfigLayout) -ADD_SCENE(bad_usb, config_name, ConfigName) -ADD_SCENE(bad_usb, config_mac, ConfigMac) diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_config_bt.c b/applications/main/bad_usb/scenes/bad_usb_scene_config_bt.c deleted file mode 100644 index 7071e748e..000000000 --- a/applications/main/bad_usb/scenes/bad_usb_scene_config_bt.c +++ /dev/null @@ -1,84 +0,0 @@ -#include "../bad_usb_app_i.h" -#include "furi_hal_power.h" -#include "furi_hal_usb.h" - -enum VarItemListIndex { - VarItemListIndexConnection, - VarItemListIndexKeyboardLayout, - VarItemListIndexAdvertisementName, - VarItemListIndexMacAddress, -}; - -void bad_usb_scene_config_bt_connection_callback(VariableItem* item) { - BadUsbApp* bad_usb = variable_item_get_context(item); - bad_usb->is_bt = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, bad_usb->is_bt ? "BT" : "USB"); - view_dispatcher_send_custom_event(bad_usb->view_dispatcher, VarItemListIndexConnection); -} - -void bad_usb_scene_config_bt_var_item_list_callback(void* context, uint32_t index) { - BadUsbApp* bad_usb = context; - view_dispatcher_send_custom_event(bad_usb->view_dispatcher, index); -} - -void bad_usb_scene_config_bt_on_enter(void* context) { - BadUsbApp* bad_usb = context; - VariableItemList* var_item_list = bad_usb->var_item_list_bt; - VariableItem* item; - - item = variable_item_list_add( - var_item_list, "Connection", 2, bad_usb_scene_config_bt_connection_callback, bad_usb); - variable_item_set_current_value_index(item, bad_usb->is_bt); - variable_item_set_current_value_text(item, bad_usb->is_bt ? "BT" : "USB"); - - item = variable_item_list_add( - var_item_list, "Keyboard layout", 0, NULL, bad_usb); - - item = variable_item_list_add( - var_item_list, "Change adv name", 0, NULL, bad_usb); - - item = variable_item_list_add( - var_item_list, "Change MAC address", 0, NULL, bad_usb); - - variable_item_list_set_enter_callback(var_item_list, bad_usb_scene_config_bt_var_item_list_callback, bad_usb); - - view_dispatcher_switch_to_view(bad_usb->view_dispatcher, BadUsbAppViewConfigBt); -} - -bool bad_usb_scene_config_bt_on_event(void* context, SceneManagerEvent event) { - BadUsbApp* bad_usb = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - scene_manager_set_scene_state(bad_usb->scene_manager, BadUsbSceneConfigBt, event.event); - consumed = true; - if(event.event == VarItemListIndexKeyboardLayout) { - scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneConfigLayout); - } else if(event.event == VarItemListIndexConnection) { - bad_usb_script_close(bad_usb->bad_usb_script); - bad_usb->bad_usb_script = bad_usb_script_open(bad_usb->file_path, bad_usb->is_bt ? bad_usb->bt : NULL); - bad_usb_script_set_keyboard_layout(bad_usb->bad_usb_script, bad_usb->keyboard_layout); - scene_manager_previous_scene(bad_usb->scene_manager); - if (bad_usb->is_bt) { - scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneConfigBt); - } else { - scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneConfigUsb); - } - } else if(event.event == VarItemListIndexAdvertisementName) { - scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneConfigName); - } else if(event.event == VarItemListIndexMacAddress) { - scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneConfigMac); - // } else { - // furi_crash("Unknown key type"); - } - } - - return consumed; -} - -void bad_usb_scene_config_bt_on_exit(void* context) { - BadUsbApp* bad_usb = context; - VariableItemList* var_item_list = bad_usb->var_item_list_bt; - - variable_item_list_reset(var_item_list); -} diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_config_layout.c b/applications/main/bad_usb/scenes/bad_usb_scene_config_layout.c deleted file mode 100644 index 44dcd55af..000000000 --- a/applications/main/bad_usb/scenes/bad_usb_scene_config_layout.c +++ /dev/null @@ -1,48 +0,0 @@ -#include "../bad_usb_app_i.h" -#include "furi_hal_power.h" -#include "furi_hal_usb.h" -#include - -static bool bad_usb_layout_select(BadUsbApp* bad_usb) { - furi_assert(bad_usb); - - FuriString* predefined_path; - predefined_path = furi_string_alloc(); - if(!furi_string_empty(bad_usb->keyboard_layout)) { - furi_string_set(predefined_path, bad_usb->keyboard_layout); - } else { - furi_string_set(predefined_path, BAD_USB_APP_PATH_LAYOUT_FOLDER); - } - - DialogsFileBrowserOptions browser_options; - dialog_file_browser_set_basic_options( - &browser_options, BAD_USB_APP_LAYOUT_EXTENSION, &I_keyboard_10px); - - // Input events and views are managed by file_browser - bool res = dialog_file_browser_show( - bad_usb->dialogs, bad_usb->keyboard_layout, predefined_path, &browser_options); - - furi_string_free(predefined_path); - return res; -} - -void bad_usb_scene_config_layout_on_enter(void* context) { - BadUsbApp* bad_usb = context; - - if(bad_usb_layout_select(bad_usb)) { - bad_usb_script_set_keyboard_layout(bad_usb->bad_usb_script, bad_usb->keyboard_layout); - } - scene_manager_previous_scene(bad_usb->scene_manager); -} - -bool bad_usb_scene_config_layout_on_event(void* context, SceneManagerEvent event) { - UNUSED(context); - UNUSED(event); - // BadUsbApp* bad_usb = context; - return false; -} - -void bad_usb_scene_config_layout_on_exit(void* context) { - UNUSED(context); - // BadUsbApp* bad_usb = context; -} diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_config_mac.c b/applications/main/bad_usb/scenes/bad_usb_scene_config_mac.c deleted file mode 100644 index 597cbcbd7..000000000 --- a/applications/main/bad_usb/scenes/bad_usb_scene_config_mac.c +++ /dev/null @@ -1,57 +0,0 @@ -#include "../bad_usb_app_i.h" - -#define TAG "BadUsbConfigMac" - -static uint8_t* reverse_mac_addr(uint8_t* mac) { - uint8_t tmp; - for(int i = 0; i < 3; i++) { - tmp = mac[i]; - mac[i] = mac[5 - i]; - mac[5 - i] = tmp; - } - return mac; -} - -void bad_usb_scene_config_mac_byte_input_callback(void* context) { - BadUsbApp* bad_usb = context; - - view_dispatcher_send_custom_event(bad_usb->view_dispatcher, BadUsbAppCustomEventByteInputDone); -} - -void bad_usb_scene_config_mac_on_enter(void* context) { - BadUsbApp* bad_usb = context; - - // Setup view - ByteInput* byte_input = bad_usb->byte_input; - byte_input_set_header_text(byte_input, "Enter new MAC address"); - byte_input_set_result_callback( - byte_input, - bad_usb_scene_config_mac_byte_input_callback, - NULL, - bad_usb, - reverse_mac_addr(bad_usb->mac), - GAP_MAC_ADDR_SIZE); - view_dispatcher_switch_to_view(bad_usb->view_dispatcher, BadUsbAppViewConfigMac); -} - -bool bad_usb_scene_config_mac_on_event(void* context, SceneManagerEvent event) { - BadUsbApp* bad_usb = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - if(event.event == BadUsbAppCustomEventByteInputDone) { - bt_set_profile_mac_address(bad_usb->bt, reverse_mac_addr(bad_usb->mac)); - scene_manager_previous_scene(bad_usb->scene_manager); - consumed = true; - } - } - return consumed; -} - -void bad_usb_scene_config_mac_on_exit(void* context) { - BadUsbApp* bad_usb = context; - - // Clear view - byte_input_set_result_callback(bad_usb->byte_input, NULL, NULL, NULL, NULL, 0); - byte_input_set_header_text(bad_usb->byte_input, ""); -} diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_config_name.c b/applications/main/bad_usb/scenes/bad_usb_scene_config_name.c deleted file mode 100644 index c22558d58..000000000 --- a/applications/main/bad_usb/scenes/bad_usb_scene_config_name.c +++ /dev/null @@ -1,46 +0,0 @@ -#include "../bad_usb_app_i.h" - -static void bad_usb_scene_config_name_text_input_callback(void* context) { - BadUsbApp* bad_usb = context; - - view_dispatcher_send_custom_event( - bad_usb->view_dispatcher, BadUsbAppCustomEventTextEditResult); -} - -void bad_usb_scene_config_name_on_enter(void* context) { - BadUsbApp* bad_usb = context; - TextInput* text_input = bad_usb->text_input; - - text_input_set_header_text(text_input, "Set BLE adv name"); - - text_input_set_result_callback( - text_input, - bad_usb_scene_config_name_text_input_callback, - bad_usb, - bad_usb->name, - BAD_USB_ADV_NAME_MAX_LEN, - true); - - view_dispatcher_switch_to_view(bad_usb->view_dispatcher, BadUsbAppViewConfigName); -} - -bool bad_usb_scene_config_name_on_event(void* context, SceneManagerEvent event) { - BadUsbApp* bad_usb = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - consumed = true; - if(event.event == BadUsbAppCustomEventTextEditResult) { - bt_set_profile_adv_name(bad_usb->bt, bad_usb->name); - } - scene_manager_previous_scene(bad_usb->scene_manager); - } - return consumed; -} - -void bad_usb_scene_config_name_on_exit(void* context) { - BadUsbApp* bad_usb = context; - TextInput* text_input = bad_usb->text_input; - - text_input_reset(text_input); -} diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_config_usb.c b/applications/main/bad_usb/scenes/bad_usb_scene_config_usb.c deleted file mode 100644 index af7abd570..000000000 --- a/applications/main/bad_usb/scenes/bad_usb_scene_config_usb.c +++ /dev/null @@ -1,72 +0,0 @@ -#include "../bad_usb_app_i.h" -#include "furi_hal_power.h" -#include "furi_hal_usb.h" - -enum VarItemListIndex { - VarItemListIndexConnection, - VarItemListIndexKeyboardLayout, -}; - -void bad_usb_scene_config_usb_connection_callback(VariableItem* item) { - BadUsbApp* bad_usb = variable_item_get_context(item); - bad_usb->is_bt = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, bad_usb->is_bt ? "BT" : "USB"); - view_dispatcher_send_custom_event(bad_usb->view_dispatcher, VarItemListIndexConnection); -} - -void bad_usb_scene_config_usb_var_item_list_callback(void* context, uint32_t index) { - BadUsbApp* bad_usb = context; - view_dispatcher_send_custom_event(bad_usb->view_dispatcher, index); -} - -void bad_usb_scene_config_usb_on_enter(void* context) { - BadUsbApp* bad_usb = context; - VariableItemList* var_item_list = bad_usb->var_item_list_usb; - VariableItem* item; - - item = variable_item_list_add( - var_item_list, "Connection", 2, bad_usb_scene_config_usb_connection_callback, bad_usb); - variable_item_set_current_value_index(item, bad_usb->is_bt); - variable_item_set_current_value_text(item, bad_usb->is_bt ? "BT" : "USB"); - - item = variable_item_list_add( - var_item_list, "Keyboard layout", 0, NULL, bad_usb); - - variable_item_list_set_enter_callback(var_item_list, bad_usb_scene_config_usb_var_item_list_callback, bad_usb); - - view_dispatcher_switch_to_view(bad_usb->view_dispatcher, BadUsbAppViewConfigUsb); -} - -bool bad_usb_scene_config_usb_on_event(void* context, SceneManagerEvent event) { - BadUsbApp* bad_usb = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - scene_manager_set_scene_state(bad_usb->scene_manager, BadUsbSceneConfigUsb, event.event); - consumed = true; - if(event.event == VarItemListIndexKeyboardLayout) { - scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneConfigLayout); - } else if(event.event == VarItemListIndexConnection) { - bad_usb_script_close(bad_usb->bad_usb_script); - bad_usb->bad_usb_script = bad_usb_script_open(bad_usb->file_path, bad_usb->is_bt ? bad_usb->bt : NULL); - bad_usb_script_set_keyboard_layout(bad_usb->bad_usb_script, bad_usb->keyboard_layout); - scene_manager_previous_scene(bad_usb->scene_manager); - if (bad_usb->is_bt) { - scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneConfigBt); - } else { - scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneConfigUsb); - } - // } else { - // furi_crash("Unknown key type"); - } - } - - return consumed; -} - -void bad_usb_scene_config_usb_on_exit(void* context) { - BadUsbApp* bad_usb = context; - VariableItemList* var_item_list = bad_usb->var_item_list_usb; - - variable_item_list_reset(var_item_list); -} diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_file_select.c b/applications/main/bad_usb/scenes/bad_usb_scene_file_select.c deleted file mode 100644 index eb72f1765..000000000 --- a/applications/main/bad_usb/scenes/bad_usb_scene_file_select.c +++ /dev/null @@ -1,52 +0,0 @@ -#include "../bad_usb_app_i.h" -#include "furi_hal_power.h" -#include "furi_hal_usb.h" -#include - -static bool bad_usb_file_select(BadUsbApp* bad_usb) { - furi_assert(bad_usb); - - DialogsFileBrowserOptions browser_options; - dialog_file_browser_set_basic_options( - &browser_options, BAD_USB_APP_SCRIPT_EXTENSION, &I_badusb_10px); - browser_options.base_path = BAD_USB_APP_BASE_FOLDER; - browser_options.skip_assets = true; - - // Input events and views are managed by file_browser - bool res = dialog_file_browser_show( - bad_usb->dialogs, bad_usb->file_path, bad_usb->file_path, &browser_options); - - return res; -} - -void bad_usb_scene_file_select_on_enter(void* context) { - BadUsbApp* bad_usb = context; - - furi_hal_usb_disable(); - if(bad_usb->bad_usb_script) { - bad_usb_script_close(bad_usb->bad_usb_script); - bad_usb->bad_usb_script = NULL; - } - - if(bad_usb_file_select(bad_usb)) { - bad_usb->bad_usb_script = bad_usb_script_open(bad_usb->file_path, bad_usb->is_bt ? bad_usb->bt : NULL); - bad_usb_script_set_keyboard_layout(bad_usb->bad_usb_script, bad_usb->keyboard_layout); - - scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneWork); - } else { - furi_hal_usb_enable(); - view_dispatcher_stop(bad_usb->view_dispatcher); - } -} - -bool bad_usb_scene_file_select_on_event(void* context, SceneManagerEvent event) { - UNUSED(context); - UNUSED(event); - // BadUsbApp* bad_usb = context; - return false; -} - -void bad_usb_scene_file_select_on_exit(void* context) { - UNUSED(context); - // BadUsbApp* bad_usb = context; -} diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_work.c b/applications/main/bad_usb/scenes/bad_usb_scene_work.c deleted file mode 100644 index 03a8114e0..000000000 --- a/applications/main/bad_usb/scenes/bad_usb_scene_work.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "../bad_usb_script.h" -#include "../bad_usb_app_i.h" -#include "../views/bad_usb_view.h" -#include "furi_hal.h" -#include "toolbox/path.h" - -void bad_usb_scene_work_button_callback(InputKey key, void* context) { - furi_assert(context); - BadUsbApp* app = context; - view_dispatcher_send_custom_event(app->view_dispatcher, key); -} - -bool bad_usb_scene_work_on_event(void* context, SceneManagerEvent event) { - BadUsbApp* app = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - if(event.event == InputKeyLeft) { - if (app->is_bt) { - scene_manager_next_scene(app->scene_manager, BadUsbSceneConfigBt); - } else { - scene_manager_next_scene(app->scene_manager, BadUsbSceneConfigUsb); - } - consumed = true; - } else if(event.event == InputKeyOk) { - bad_usb_script_toggle(app->bad_usb_script); - consumed = true; - } - } else if(event.type == SceneManagerEventTypeTick) { - bad_usb_set_state(app->bad_usb_view, bad_usb_script_get_state(app->bad_usb_script)); - } - return consumed; -} - -void bad_usb_scene_work_on_enter(void* context) { - BadUsbApp* app = context; - - FuriString* file_name; - file_name = furi_string_alloc(); - path_extract_filename(app->file_path, file_name, true); - bad_usb_set_file_name(app->bad_usb_view, furi_string_get_cstr(file_name)); - furi_string_free(file_name); - - FuriString* layout; - layout = furi_string_alloc(); - path_extract_filename(app->keyboard_layout, layout, true); - bad_usb_set_layout(app->bad_usb_view, furi_string_get_cstr(layout)); - furi_string_free(layout); - - bad_usb_set_state(app->bad_usb_view, bad_usb_script_get_state(app->bad_usb_script)); - - bad_usb_set_button_callback(app->bad_usb_view, bad_usb_scene_work_button_callback, app); - view_dispatcher_switch_to_view(app->view_dispatcher, BadUsbAppViewWork); -} - -void bad_usb_scene_work_on_exit(void* context) { - UNUSED(context); -} diff --git a/applications/main/bad_usb/views/bad_usb_view.h b/applications/main/bad_usb/views/bad_usb_view.h deleted file mode 100644 index 8447fb055..000000000 --- a/applications/main/bad_usb/views/bad_usb_view.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include -#include "../bad_usb_script.h" - -typedef struct BadUsb BadUsb; -typedef void (*BadUsbButtonCallback)(InputKey key, void* context); - -BadUsb* bad_usb_alloc(); - -void bad_usb_free(BadUsb* bad_usb); - -View* bad_usb_get_view(BadUsb* bad_usb); - -void bad_usb_set_button_callback(BadUsb* bad_usb, BadUsbButtonCallback callback, void* context); - -void bad_usb_set_file_name(BadUsb* bad_usb, const char* name); - -void bad_usb_set_layout(BadUsb* bad_usb, const char* layout); - -void bad_usb_set_state(BadUsb* bad_usb, BadUsbState* st); diff --git a/applications/plugins/dolphinbackup/storage_DolphinBackup.c b/applications/plugins/dolphinbackup/storage_DolphinBackup.c index 02baddc0f..7e7bd8f36 100644 --- a/applications/plugins/dolphinbackup/storage_DolphinBackup.c +++ b/applications/plugins/dolphinbackup/storage_DolphinBackup.c @@ -16,7 +16,7 @@ static const char* app_dirsDolphinBackup[] = { "nfc", "infrared", "ibutton", - "badusb", + "badkb", ".bt.settings", ".desktop.settings", ".dolphin.state", diff --git a/applications/plugins/mousejacker/icons/badusb_10px.png b/applications/plugins/mousejacker/icons/badkb_10px.png similarity index 100% rename from applications/plugins/mousejacker/icons/badusb_10px.png rename to applications/plugins/mousejacker/icons/badkb_10px.png diff --git a/applications/plugins/mousejacker/images/badusb_10px.png b/applications/plugins/mousejacker/images/badkb_10px.png similarity index 100% rename from applications/plugins/mousejacker/images/badusb_10px.png rename to applications/plugins/mousejacker/images/badkb_10px.png diff --git a/applications/plugins/mousejacker/mousejacker.c b/applications/plugins/mousejacker/mousejacker.c index c45b0e502..3bd772889 100644 --- a/applications/plugins/mousejacker/mousejacker.c +++ b/applications/plugins/mousejacker/mousejacker.c @@ -112,7 +112,7 @@ static bool open_ducky_script(Stream* stream, PluginState* plugin_state) { DialogsFileBrowserOptions browser_options; dialog_file_browser_set_basic_options( - &browser_options, MOUSEJACKER_APP_PATH_EXTENSION, &I_badusb_10px); + &browser_options, MOUSEJACKER_APP_PATH_EXTENSION, &I_badkb_10px); browser_options.hide_ext = false; bool ret = dialog_file_browser_show(dialogs, path, path, &browser_options); @@ -396,4 +396,4 @@ int32_t mousejacker_app(void* p) { free(plugin_state); return 0; -} \ No newline at end of file +} diff --git a/applications/plugins/totp/services/config/config.c b/applications/plugins/totp/services/config/config.c index cd19d19d4..c5193ac2e 100644 --- a/applications/plugins/totp/services/config/config.c +++ b/applications/plugins/totp/services/config/config.c @@ -132,7 +132,7 @@ static TotpConfigFileOpenResult totp_open_config_file(Storage* storage, FlipperF flipper_format_write_comment_cstr(fff_data_file, " "); flipper_format_write_comment_cstr( fff_data_file, - "How to notify user when new token is generated or badusb mode is activated (possible values: 0 - do not notify, 1 - sound, 2 - vibro, 3 sound and vibro)"); + "How to notify user when new token is generated or badkb mode is activated (possible values: 0 - do not notify, 1 - sound, 2 - vibro, 3 sound and vibro)"); flipper_format_write_uint32( fff_data_file, TOTP_CONFIG_KEY_NOTIFICATION_METHOD, &tmp_uint32, 1); @@ -769,4 +769,4 @@ void totp_config_file_reset() { Storage* storage = totp_open_storage(); storage_simply_remove(storage, CONFIG_FILE_PATH); totp_close_storage(); -} \ No newline at end of file +} diff --git a/applications/plugins/totp/ui/scenes/generate_token/totp_scene_generate_token.c b/applications/plugins/totp/ui/scenes/generate_token/totp_scene_generate_token.c index 41c52b435..18d1791f4 100644 --- a/applications/plugins/totp/ui/scenes/generate_token/totp_scene_generate_token.c +++ b/applications/plugins/totp/ui/scenes/generate_token/totp_scene_generate_token.c @@ -24,7 +24,7 @@ typedef struct { uint32_t last_token_gen_time; TotpTypeCodeWorkerContext* type_code_worker_context; NotificationMessage const** notification_sequence_new_token; - NotificationMessage const** notification_sequence_badusb; + NotificationMessage const** notification_sequence_badkb; } SceneState; static const NotificationSequence* @@ -69,8 +69,8 @@ static const NotificationSequence* } static const NotificationSequence* - get_notification_sequence_badusb(const PluginState* plugin_state, SceneState* scene_state) { - if(scene_state->notification_sequence_badusb == NULL) { + get_notification_sequence_badkb(const PluginState* plugin_state, SceneState* scene_state) { + if(scene_state->notification_sequence_badkb == NULL) { uint8_t i = 0; uint8_t length = 3; if(plugin_state->notification_method & NotificationMethodVibro) { @@ -81,36 +81,36 @@ static const NotificationSequence* length += 6; } - scene_state->notification_sequence_badusb = malloc(sizeof(void*) * length); - furi_check(scene_state->notification_sequence_badusb != NULL); + scene_state->notification_sequence_badkb = malloc(sizeof(void*) * length); + furi_check(scene_state->notification_sequence_badkb != NULL); - scene_state->notification_sequence_badusb[i++] = &message_blue_255; + scene_state->notification_sequence_badkb[i++] = &message_blue_255; if(plugin_state->notification_method & NotificationMethodVibro) { - scene_state->notification_sequence_badusb[i++] = &message_vibro_on; + scene_state->notification_sequence_badkb[i++] = &message_vibro_on; } if(plugin_state->notification_method & NotificationMethodSound) { - scene_state->notification_sequence_badusb[i++] = &message_note_d5; //-V525 - scene_state->notification_sequence_badusb[i++] = &message_delay_50; - scene_state->notification_sequence_badusb[i++] = &message_note_e4; - scene_state->notification_sequence_badusb[i++] = &message_delay_50; - scene_state->notification_sequence_badusb[i++] = &message_note_f3; + scene_state->notification_sequence_badkb[i++] = &message_note_d5; //-V525 + scene_state->notification_sequence_badkb[i++] = &message_delay_50; + scene_state->notification_sequence_badkb[i++] = &message_note_e4; + scene_state->notification_sequence_badkb[i++] = &message_delay_50; + scene_state->notification_sequence_badkb[i++] = &message_note_f3; } - scene_state->notification_sequence_badusb[i++] = &message_delay_50; + scene_state->notification_sequence_badkb[i++] = &message_delay_50; if(plugin_state->notification_method & NotificationMethodVibro) { - scene_state->notification_sequence_badusb[i++] = &message_vibro_off; + scene_state->notification_sequence_badkb[i++] = &message_vibro_off; } if(plugin_state->notification_method & NotificationMethodSound) { - scene_state->notification_sequence_badusb[i++] = &message_sound_off; + scene_state->notification_sequence_badkb[i++] = &message_sound_off; } - scene_state->notification_sequence_badusb[i++] = NULL; + scene_state->notification_sequence_badkb[i++] = NULL; } - return (NotificationSequence*)scene_state->notification_sequence_badusb; + return (NotificationSequence*)scene_state->notification_sequence_badkb; } static void int_token_to_str(uint32_t i_token_code, char* str, TokenDigitsCount len) { @@ -340,7 +340,7 @@ bool totp_scene_generate_token_handle_event( scene_state->type_code_worker_context, TotpTypeCodeWorkerEventType); notification_message( plugin_state->notification_app, - get_notification_sequence_badusb(plugin_state, scene_state)); + get_notification_sequence_badkb(plugin_state, scene_state)); return true; } @@ -399,8 +399,8 @@ void totp_scene_generate_token_deactivate(PluginState* plugin_state) { free(scene_state->notification_sequence_new_token); } - if(scene_state->notification_sequence_badusb != NULL) { - free(scene_state->notification_sequence_badusb); + if(scene_state->notification_sequence_badkb != NULL) { + free(scene_state->notification_sequence_badkb); } free(scene_state); diff --git a/applications/services/dolphin/helpers/dolphin_deed.c b/applications/services/dolphin/helpers/dolphin_deed.c index 51db56fdf..4b9f11599 100644 --- a/applications/services/dolphin/helpers/dolphin_deed.c +++ b/applications/services/dolphin/helpers/dolphin_deed.c @@ -34,7 +34,7 @@ static const DolphinDeedWeight dolphin_deed_weights[] = { {2, DolphinAppIbutton}, // DolphinDeedIbuttonEmulate {2, DolphinAppIbutton}, // DolphinDeedIbuttonAdd - {3, DolphinAppBadusb}, // DolphinDeedBadUsbPlayScript + {3, DolphinAppBadKb}, // DolphinDeedBadKbPlayScript {3, DolphinAppPlugin}, // DolphinDeedU2fAuthorized {1, DolphinAppPlugin}, // DolphinDeedGpioUartBridge @@ -50,7 +50,7 @@ static uint8_t dolphin_deed_limits[] = { 20, // DolphinAppNfc 20, // DolphinAppIr 20, // DolphinAppIbutton - 20, // DolphinAppBadusb + 20, // DolphinAppBadKb 20, // DolphinAppPlugin }; diff --git a/applications/services/dolphin/helpers/dolphin_deed.h b/applications/services/dolphin/helpers/dolphin_deed.h index c9cd18f31..51adf6b20 100644 --- a/applications/services/dolphin/helpers/dolphin_deed.h +++ b/applications/services/dolphin/helpers/dolphin_deed.h @@ -12,7 +12,7 @@ typedef enum { DolphinAppNfc, DolphinAppIr, DolphinAppIbutton, - DolphinAppBadusb, + DolphinAppBadKb, DolphinAppPlugin, DolphinAppMAX, } DolphinApp; @@ -50,7 +50,7 @@ typedef enum { DolphinDeedIbuttonEmulate, DolphinDeedIbuttonAdd, - DolphinDeedBadUsbPlayScript, + DolphinDeedBadKbPlayScript, DolphinDeedU2fAuthorized, DolphinDeedGpioUartBridge, diff --git a/applications/services/gui/modules/file_browser_worker.c b/applications/services/gui/modules/file_browser_worker.c index 4386fdfd0..ce67e789c 100644 --- a/applications/services/gui/modules/file_browser_worker.c +++ b/applications/services/gui/modules/file_browser_worker.c @@ -12,7 +12,7 @@ #define TAG "BrowserWorker" #define ASSETS_DIR "assets" -#define BADUSB_LAYOUTS_DIR "layouts" +#define BADKB_LAYOUTS_DIR "layouts" #define SUBGHZ_TEMP_DIR "tmp_history" #define BROWSER_ROOT STORAGE_ANY_PATH_PREFIX #define FILE_NAME_LEN_MAX 256 @@ -90,7 +90,7 @@ static bool browser_filter_by_name(BrowserWorker* browser, FuriString* name, boo // Skip assets folders (if enabled) if(browser->skip_assets) { return ((furi_string_cmp_str(name, ASSETS_DIR) == 0) ? (false) : (true)) && - ((furi_string_cmp_str(name, BADUSB_LAYOUTS_DIR) == 0) ? (false) : (true)) && + ((furi_string_cmp_str(name, BADKB_LAYOUTS_DIR) == 0) ? (false) : (true)) && ((furi_string_cmp_str(name, SUBGHZ_TEMP_DIR) == 0) ? (false) : (true)); } else { return true; diff --git a/assets/icons/Archive/badusb_10px.png b/assets/icons/Archive/badkb_10px.png similarity index 100% rename from assets/icons/Archive/badusb_10px.png rename to assets/icons/Archive/badkb_10px.png diff --git a/assets/icons/BadUsb/Clock_18x18.png b/assets/icons/BadKb/Clock_18x18.png similarity index 100% rename from assets/icons/BadUsb/Clock_18x18.png rename to assets/icons/BadKb/Clock_18x18.png diff --git a/assets/icons/BadUsb/Error_18x18.png b/assets/icons/BadKb/Error_18x18.png similarity index 100% rename from assets/icons/BadUsb/Error_18x18.png rename to assets/icons/BadKb/Error_18x18.png diff --git a/assets/icons/BadUsb/EviSmile1_18x21.png b/assets/icons/BadKb/EviSmile1_18x21.png similarity index 100% rename from assets/icons/BadUsb/EviSmile1_18x21.png rename to assets/icons/BadKb/EviSmile1_18x21.png diff --git a/assets/icons/BadUsb/EviSmile2_18x21.png b/assets/icons/BadKb/EviSmile2_18x21.png similarity index 100% rename from assets/icons/BadUsb/EviSmile2_18x21.png rename to assets/icons/BadKb/EviSmile2_18x21.png diff --git a/assets/icons/BadUsb/EviWaiting1_18x21.png b/assets/icons/BadKb/EviWaiting1_18x21.png similarity index 100% rename from assets/icons/BadUsb/EviWaiting1_18x21.png rename to assets/icons/BadKb/EviWaiting1_18x21.png diff --git a/assets/icons/BadUsb/EviWaiting2_18x21.png b/assets/icons/BadKb/EviWaiting2_18x21.png similarity index 100% rename from assets/icons/BadUsb/EviWaiting2_18x21.png rename to assets/icons/BadKb/EviWaiting2_18x21.png diff --git a/assets/icons/BadUsb/Percent_10x14.png b/assets/icons/BadKb/Percent_10x14.png similarity index 100% rename from assets/icons/BadUsb/Percent_10x14.png rename to assets/icons/BadKb/Percent_10x14.png diff --git a/assets/icons/BadUsb/Smile_18x18.png b/assets/icons/BadKb/Smile_18x18.png similarity index 100% rename from assets/icons/BadUsb/Smile_18x18.png rename to assets/icons/BadKb/Smile_18x18.png diff --git a/assets/icons/BadUsb/UsbTree_48x22.png b/assets/icons/BadKb/UsbTree_48x22.png similarity index 100% rename from assets/icons/BadUsb/UsbTree_48x22.png rename to assets/icons/BadKb/UsbTree_48x22.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_01.png b/assets/icons/MainMenu/BadKb_14/frame_01.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_01.png rename to assets/icons/MainMenu/BadKb_14/frame_01.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_02.png b/assets/icons/MainMenu/BadKb_14/frame_02.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_02.png rename to assets/icons/MainMenu/BadKb_14/frame_02.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_03.png b/assets/icons/MainMenu/BadKb_14/frame_03.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_03.png rename to assets/icons/MainMenu/BadKb_14/frame_03.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_04.png b/assets/icons/MainMenu/BadKb_14/frame_04.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_04.png rename to assets/icons/MainMenu/BadKb_14/frame_04.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_05.png b/assets/icons/MainMenu/BadKb_14/frame_05.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_05.png rename to assets/icons/MainMenu/BadKb_14/frame_05.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_06.png b/assets/icons/MainMenu/BadKb_14/frame_06.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_06.png rename to assets/icons/MainMenu/BadKb_14/frame_06.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_07.png b/assets/icons/MainMenu/BadKb_14/frame_07.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_07.png rename to assets/icons/MainMenu/BadKb_14/frame_07.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_08.png b/assets/icons/MainMenu/BadKb_14/frame_08.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_08.png rename to assets/icons/MainMenu/BadKb_14/frame_08.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_09.png b/assets/icons/MainMenu/BadKb_14/frame_09.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_09.png rename to assets/icons/MainMenu/BadKb_14/frame_09.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_10.png b/assets/icons/MainMenu/BadKb_14/frame_10.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_10.png rename to assets/icons/MainMenu/BadKb_14/frame_10.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_11.png b/assets/icons/MainMenu/BadKb_14/frame_11.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_11.png rename to assets/icons/MainMenu/BadKb_14/frame_11.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_rate b/assets/icons/MainMenu/BadKb_14/frame_rate similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_rate rename to assets/icons/MainMenu/BadKb_14/frame_rate diff --git a/assets/resources/badkb/.badkb.settings b/assets/resources/badkb/.badkb.settings new file mode 100644 index 000000000..4841c2ded --- /dev/null +++ b/assets/resources/badkb/.badkb.settings @@ -0,0 +1 @@ +/any/badkb/layouts/en-US.kl diff --git a/assets/resources/badusb/Kiosk-Evasion-Bruteforce.txt b/assets/resources/badkb/Kiosk-Evasion-Bruteforce.txt similarity index 100% rename from assets/resources/badusb/Kiosk-Evasion-Bruteforce.txt rename to assets/resources/badkb/Kiosk-Evasion-Bruteforce.txt diff --git a/assets/resources/badusb/Wifi-Stealer_ORG.txt b/assets/resources/badkb/Wifi-Stealer_ORG.txt similarity index 100% rename from assets/resources/badusb/Wifi-Stealer_ORG.txt rename to assets/resources/badkb/Wifi-Stealer_ORG.txt diff --git a/assets/resources/badusb/demo_macos.txt b/assets/resources/badkb/demo_macos.txt similarity index 92% rename from assets/resources/badusb/demo_macos.txt rename to assets/resources/badkb/demo_macos.txt index 82543b28f..1fd4544b3 100644 --- a/assets/resources/badusb/demo_macos.txt +++ b/assets/resources/badkb/demo_macos.txt @@ -2,7 +2,7 @@ ID 1234:5678 Apple:Keyboard REM You can change these values to VID/PID of original Apple keyboard REM to bypass Keyboard Setup Assistant -REM This is BadUSB demo script for macOS +REM This is BadKB demo script for macOS REM Open terminal window DELAY 1000 @@ -75,7 +75,7 @@ ENTER HOME ENTER -STRING Flipper Zero BadUSB feature is compatible with USB Rubber Ducky script format +STRING Flipper Zero BadKB feature is compatible with USB Rubber Ducky script format ENTER STRING More information about script syntax can be found here: ENTER diff --git a/assets/resources/badusb/demo_windows.txt b/assets/resources/badkb/demo_windows.txt similarity index 92% rename from assets/resources/badusb/demo_windows.txt rename to assets/resources/badkb/demo_windows.txt index 2ed33b3c0..f3b1309d1 100644 --- a/assets/resources/badusb/demo_windows.txt +++ b/assets/resources/badkb/demo_windows.txt @@ -1,4 +1,4 @@ -REM This is BadUSB demo script for windows +REM This is BadKB demo script for windows REM Open windows notepad DELAY 1000 @@ -76,7 +76,7 @@ ENTER HOME ENTER -STRING Flipper Zero BadUSB feature is compatible with USB Rubber Ducky script format +STRING Flipper Zero BadKB feature is compatible with USB Rubber Ducky script format ENTER STRING More information about script syntax can be found here: ENTER diff --git a/assets/resources/badusb/layouts/ba-BA.kl b/assets/resources/badkb/layouts/ba-BA.kl similarity index 100% rename from assets/resources/badusb/layouts/ba-BA.kl rename to assets/resources/badkb/layouts/ba-BA.kl diff --git a/assets/resources/badusb/layouts/cz_CS.kl b/assets/resources/badkb/layouts/cz_CS.kl similarity index 100% rename from assets/resources/badusb/layouts/cz_CS.kl rename to assets/resources/badkb/layouts/cz_CS.kl diff --git a/assets/resources/badusb/layouts/da-DA.kl b/assets/resources/badkb/layouts/da-DA.kl similarity index 100% rename from assets/resources/badusb/layouts/da-DA.kl rename to assets/resources/badkb/layouts/da-DA.kl diff --git a/assets/resources/badusb/layouts/de-CH.kl b/assets/resources/badkb/layouts/de-CH.kl similarity index 100% rename from assets/resources/badusb/layouts/de-CH.kl rename to assets/resources/badkb/layouts/de-CH.kl diff --git a/assets/resources/badusb/layouts/de-DE.kl b/assets/resources/badkb/layouts/de-DE.kl similarity index 100% rename from assets/resources/badusb/layouts/de-DE.kl rename to assets/resources/badkb/layouts/de-DE.kl diff --git a/assets/resources/badusb/layouts/dvorak.kl b/assets/resources/badkb/layouts/dvorak.kl similarity index 100% rename from assets/resources/badusb/layouts/dvorak.kl rename to assets/resources/badkb/layouts/dvorak.kl diff --git a/assets/resources/badusb/layouts/en-UK.kl b/assets/resources/badkb/layouts/en-UK.kl similarity index 100% rename from assets/resources/badusb/layouts/en-UK.kl rename to assets/resources/badkb/layouts/en-UK.kl diff --git a/assets/resources/badusb/layouts/en-US.kl b/assets/resources/badkb/layouts/en-US.kl similarity index 100% rename from assets/resources/badusb/layouts/en-US.kl rename to assets/resources/badkb/layouts/en-US.kl diff --git a/assets/resources/badusb/layouts/es-ES.kl b/assets/resources/badkb/layouts/es-ES.kl similarity index 100% rename from assets/resources/badusb/layouts/es-ES.kl rename to assets/resources/badkb/layouts/es-ES.kl diff --git a/assets/resources/badusb/layouts/fr-BE.kl b/assets/resources/badkb/layouts/fr-BE.kl similarity index 100% rename from assets/resources/badusb/layouts/fr-BE.kl rename to assets/resources/badkb/layouts/fr-BE.kl diff --git a/assets/resources/badusb/layouts/fr-CH.kl b/assets/resources/badkb/layouts/fr-CH.kl similarity index 100% rename from assets/resources/badusb/layouts/fr-CH.kl rename to assets/resources/badkb/layouts/fr-CH.kl diff --git a/assets/resources/badusb/layouts/fr-FR.kl b/assets/resources/badkb/layouts/fr-FR.kl similarity index 100% rename from assets/resources/badusb/layouts/fr-FR.kl rename to assets/resources/badkb/layouts/fr-FR.kl diff --git a/assets/resources/badusb/layouts/hr-HR.kl b/assets/resources/badkb/layouts/hr-HR.kl similarity index 100% rename from assets/resources/badusb/layouts/hr-HR.kl rename to assets/resources/badkb/layouts/hr-HR.kl diff --git a/assets/resources/badusb/layouts/hu-HU.kl b/assets/resources/badkb/layouts/hu-HU.kl similarity index 100% rename from assets/resources/badusb/layouts/hu-HU.kl rename to assets/resources/badkb/layouts/hu-HU.kl diff --git a/assets/resources/badusb/layouts/it-IT.kl b/assets/resources/badkb/layouts/it-IT.kl similarity index 100% rename from assets/resources/badusb/layouts/it-IT.kl rename to assets/resources/badkb/layouts/it-IT.kl diff --git a/assets/resources/badusb/layouts/nb-NO.kl b/assets/resources/badkb/layouts/nb-NO.kl similarity index 100% rename from assets/resources/badusb/layouts/nb-NO.kl rename to assets/resources/badkb/layouts/nb-NO.kl diff --git a/assets/resources/badusb/layouts/nl-NL.kl b/assets/resources/badkb/layouts/nl-NL.kl similarity index 100% rename from assets/resources/badusb/layouts/nl-NL.kl rename to assets/resources/badkb/layouts/nl-NL.kl diff --git a/assets/resources/badusb/layouts/pt-BR.kl b/assets/resources/badkb/layouts/pt-BR.kl similarity index 100% rename from assets/resources/badusb/layouts/pt-BR.kl rename to assets/resources/badkb/layouts/pt-BR.kl diff --git a/assets/resources/badusb/layouts/pt-PT.kl b/assets/resources/badkb/layouts/pt-PT.kl similarity index 100% rename from assets/resources/badusb/layouts/pt-PT.kl rename to assets/resources/badkb/layouts/pt-PT.kl diff --git a/assets/resources/badusb/layouts/si-SI.kl b/assets/resources/badkb/layouts/si-SI.kl similarity index 100% rename from assets/resources/badusb/layouts/si-SI.kl rename to assets/resources/badkb/layouts/si-SI.kl diff --git a/assets/resources/badusb/layouts/sk-SK.kl b/assets/resources/badkb/layouts/sk-SK.kl similarity index 100% rename from assets/resources/badusb/layouts/sk-SK.kl rename to assets/resources/badkb/layouts/sk-SK.kl diff --git a/assets/resources/badusb/layouts/sv-SE.kl b/assets/resources/badkb/layouts/sv-SE.kl similarity index 100% rename from assets/resources/badusb/layouts/sv-SE.kl rename to assets/resources/badkb/layouts/sv-SE.kl diff --git a/assets/resources/badusb/layouts/tr-TR.kl b/assets/resources/badkb/layouts/tr-TR.kl similarity index 100% rename from assets/resources/badusb/layouts/tr-TR.kl rename to assets/resources/badkb/layouts/tr-TR.kl diff --git a/assets/resources/badusb/.badusb.settings b/assets/resources/badusb/.badusb.settings deleted file mode 100644 index 34330a3c0..000000000 --- a/assets/resources/badusb/.badusb.settings +++ /dev/null @@ -1 +0,0 @@ -/any/badusb/layouts/en-US.kl From 8a3bd796d4721f6ee91567e92a7e095dfdd21cc1 Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Fri, 3 Feb 2023 17:44:22 +0000 Subject: [PATCH 10/11] Generic bad kb comments --- applications/main/bad_kb/bad_kb_script.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/applications/main/bad_kb/bad_kb_script.c b/applications/main/bad_kb/bad_kb_script.c index e63a39c05..80d203db6 100644 --- a/applications/main/bad_kb/bad_kb_script.c +++ b/applications/main/bad_kb/bad_kb_script.c @@ -680,7 +680,7 @@ static int32_t bad_kb_worker(void* context) { if(furi_hal_hid_is_connected()) { worker_state = BadKbStateIdle; // Ready to run } else { - worker_state = BadKbStateNotConnected; // USB not connected + worker_state = BadKbStateNotConnected; // Not connected } } } else { @@ -692,7 +692,7 @@ static int32_t bad_kb_worker(void* context) { } bad_kb->st.state = worker_state; - } else if(worker_state == BadKbStateNotConnected) { // State: USB not connected + } else if(worker_state == BadKbStateNotConnected) { // State: Not connected uint32_t flags = furi_thread_flags_wait( WorkerEvtEnd | WorkerEvtConnect | WorkerEvtToggle, FuriFlagWaitAny, @@ -703,7 +703,7 @@ static int32_t bad_kb_worker(void* context) { } else if(flags & WorkerEvtConnect) { worker_state = BadKbStateIdle; // Ready to run } else if(flags & WorkerEvtToggle) { - worker_state = BadKbStateWillRun; // Will run when USB is connected + worker_state = BadKbStateWillRun; // Will run when connected } bad_kb->st.state = worker_state; @@ -727,7 +727,7 @@ static int32_t bad_kb_worker(void* context) { bad_kb_script_set_keyboard_layout(bad_kb, bad_kb->keyboard_layout); worker_state = BadKbStateRunning; } else if(flags & WorkerEvtDisconnect) { - worker_state = BadKbStateNotConnected; // USB disconnected + worker_state = BadKbStateNotConnected; // Disconnected } bad_kb->st.state = worker_state; @@ -777,7 +777,7 @@ static int32_t bad_kb_worker(void* context) { furi_hal_hid_kb_release_all(); } } else if(flags & WorkerEvtDisconnect) { - worker_state = BadKbStateNotConnected; // USB disconnected + worker_state = BadKbStateNotConnected; // Disconnected if (bad_kb->bt) { furi_hal_bt_hid_kb_release_all(); } else { From 72935579e6c4863a4eb95072836dc1a6d60bb3ed Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Fri, 3 Feb 2023 17:46:32 +0000 Subject: [PATCH 11/11] Format --- .../main/archive/helpers/archive_files.c | 4 +-- applications/main/bad_kb/bad_kb_app.c | 15 ++++---- applications/main/bad_kb/bad_kb_script.c | 36 +++++++++---------- .../bad_kb/scenes/bad_kb_scene_config_bt.c | 21 ++++++----- .../bad_kb/scenes/bad_kb_scene_config_name.c | 3 +- .../bad_kb/scenes/bad_kb_scene_config_usb.c | 15 ++++---- .../bad_kb/scenes/bad_kb_scene_file_select.c | 3 +- .../main/bad_kb/scenes/bad_kb_scene_work.c | 2 +- applications/main/bad_kb/views/bad_kb_view.c | 14 +++----- applications/services/bt/bt_service/bt.c | 7 ++-- firmware/targets/f7/ble_glue/gap.c | 4 +-- 11 files changed, 59 insertions(+), 65 deletions(-) diff --git a/applications/main/archive/helpers/archive_files.c b/applications/main/archive/helpers/archive_files.c index 7e7ab1774..83eb2a845 100644 --- a/applications/main/archive/helpers/archive_files.c +++ b/applications/main/archive/helpers/archive_files.c @@ -17,8 +17,8 @@ void archive_set_file_type(ArchiveFile_t* file, const char* path, bool is_folder if((known_ext[i][0] == '?') || (known_ext[i][0] == '*')) continue; if(furi_string_search(file->path, known_ext[i], 0) != FURI_STRING_FAILURE) { if(i == ArchiveFileTypeBadKb) { - if(furi_string_search( - file->path, archive_get_default_path(ArchiveTabBadKb)) == 0) { + if(furi_string_search(file->path, archive_get_default_path(ArchiveTabBadKb)) == + 0) { file->type = i; return; // *.txt file is a BadKB script only if it is in BadKB folder } diff --git a/applications/main/bad_kb/bad_kb_app.c b/applications/main/bad_kb/bad_kb_app.c index c62af4733..4181b08d4 100644 --- a/applications/main/bad_kb/bad_kb_app.c +++ b/applications/main/bad_kb/bad_kb_app.c @@ -112,10 +112,14 @@ BadKbApp* bad_kb_app_alloc(char* arg) { app->var_item_list_bt = variable_item_list_alloc(); view_dispatcher_add_view( - app->view_dispatcher, BadKbAppViewConfigBt, variable_item_list_get_view(app->var_item_list_bt)); + app->view_dispatcher, + BadKbAppViewConfigBt, + variable_item_list_get_view(app->var_item_list_bt)); app->var_item_list_usb = variable_item_list_alloc(); view_dispatcher_add_view( - app->view_dispatcher, BadKbAppViewConfigUsb, variable_item_list_get_view(app->var_item_list_usb)); + app->view_dispatcher, + BadKbAppViewConfigUsb, + variable_item_list_get_view(app->var_item_list_usb)); app->bad_kb_view = bad_kb_alloc(); view_dispatcher_add_view( @@ -184,15 +188,14 @@ void bad_kb_app_free(BadKbApp* app) { // restores bt config // BtProfile have already been switched to the previous one - // so we directly modify the right profile - if (strcmp(app->bt_old_config.name, app->name) != 0) { + // so we directly modify the right profile + if(strcmp(app->bt_old_config.name, app->name) != 0) { furi_hal_bt_set_profile_adv_name(FuriHalBtProfileHidKeyboard, app->bt_old_config.name); } - if (memcmp(app->bt_old_config.mac, app->mac, BAD_KB_MAC_ADDRESS_LEN) != 0) { + if(memcmp(app->bt_old_config.mac, app->mac, BAD_KB_MAC_ADDRESS_LEN) != 0) { furi_hal_bt_set_profile_mac_addr(FuriHalBtProfileHidKeyboard, app->bt_old_config.mac); } - // Close records furi_record_close(RECORD_GUI); furi_record_close(RECORD_NOTIFICATION); diff --git a/applications/main/bad_kb/bad_kb_script.c b/applications/main/bad_kb/bad_kb_script.c index 80d203db6..18aabe860 100644 --- a/applications/main/bad_kb/bad_kb_script.c +++ b/applications/main/bad_kb/bad_kb_script.c @@ -231,8 +231,8 @@ static bool ducky_is_line_end(const char chr) { } static void ducky_numlock_on(BadKbScript* bad_kb) { - if (bad_kb->bt) { - if((furi_hal_hid_get_led_state() & HID_KB_LED_NUM) == 0) { // FIXME + if(bad_kb->bt) { + if((furi_hal_hid_get_led_state() & HID_KB_LED_NUM) == 0) { // FIXME bt_hid_hold_while_keyboard_buffer_full(1, -1); furi_hal_bt_hid_kb_press(HID_KEYBOARD_LOCK_NUM_LOCK); furi_delay_ms(bt_timeout); @@ -251,7 +251,7 @@ static bool ducky_numpad_press(BadKbScript* bad_kb, const char num) { uint16_t key = numpad_keys[num - '0']; FURI_LOG_I(WORKER_TAG, "Pressing %c\r\n", num); - if (bad_kb->bt) { + if(bad_kb->bt) { bt_hid_hold_while_keyboard_buffer_full(1, -1); furi_hal_bt_hid_kb_press(key); furi_delay_ms(bt_timeout); @@ -270,7 +270,7 @@ static bool ducky_altchar(BadKbScript* bad_kb, const char* charcode) { FURI_LOG_I(WORKER_TAG, "char %s", charcode); - if (bad_kb->bt) { + if(bad_kb->bt) { bt_hid_hold_while_keyboard_buffer_full(1, -1); furi_hal_bt_hid_kb_press(KEY_MOD_LEFT_ALT); } else { @@ -283,7 +283,7 @@ static bool ducky_altchar(BadKbScript* bad_kb, const char* charcode) { i++; } - if (bad_kb->bt) { + if(bad_kb->bt) { furi_hal_bt_hid_kb_release(KEY_MOD_LEFT_ALT); } else { furi_hal_hid_kb_release(KEY_MOD_LEFT_ALT); @@ -316,7 +316,7 @@ static bool ducky_string(BadKbScript* bad_kb, const char* param) { while(param[i] != '\0') { uint16_t keycode = BADKB_ASCII_TO_KEY(bad_kb, param[i]); if(keycode != HID_KEYBOARD_NONE) { - if (bad_kb->bt) { + if(bad_kb->bt) { bt_hid_hold_while_keyboard_buffer_full(1, -1); furi_hal_bt_hid_kb_press(keycode); furi_delay_ms(bt_timeout); @@ -429,7 +429,7 @@ static int32_t // SYSRQ line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; uint16_t key = ducky_get_keycode(bad_kb, line_tmp, true); - if (bad_kb->bt) { + if(bad_kb->bt) { bt_hid_hold_while_keyboard_buffer_full(1, -1); furi_hal_bt_hid_kb_press(KEY_MOD_LEFT_ALT | HID_KEYBOARD_PRINT_SCREEN); furi_hal_bt_hid_kb_press(key); @@ -456,7 +456,7 @@ static int32_t line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; key |= ducky_get_keycode(bad_kb, line_tmp, true); } - if (bad_kb->bt) { + if(bad_kb->bt) { furi_hal_bt_hid_kb_press(key); furi_delay_ms(bt_timeout); furi_hal_bt_hid_kb_release(key); @@ -520,7 +520,7 @@ static bool ducky_script_preload(BadKbScript* bad_kb, File* script_file) { } } while(ret > 0); - if (!bad_kb->bt) { + if(!bad_kb->bt) { const char* line_tmp = furi_string_get_cstr(bad_kb->line); bool id_set = false; // Looking for ID command at first line if(strncmp(line_tmp, ducky_cmd_id, strlen(ducky_cmd_id)) == 0) { @@ -643,12 +643,12 @@ static int32_t bad_kb_worker(void* context) { FuriHalUsbInterface* usb_mode_prev = NULL; GapPairing old_pairing_method = GapPairingNone; - if (bad_kb->bt) { + if(bad_kb->bt) { bt_timeout = bt_hid_delays[LevelRssi39_0]; bt_disconnect(bad_kb->bt); furi_delay_ms(200); bt_keys_storage_set_storage_path(bad_kb->bt, HID_BT_KEYS_STORAGE_PATH); - if (!bt_set_profile(bad_kb->bt, BtProfileHidKeyboard)) { + if(!bt_set_profile(bad_kb->bt, BtProfileHidKeyboard)) { FURI_LOG_E(TAG, "Failed to switch to HID profile"); return -1; } @@ -674,7 +674,7 @@ static int32_t bad_kb_worker(void* context) { FSAM_READ, FSOM_OPEN_EXISTING)) { if((ducky_script_preload(bad_kb, script_file)) && (bad_kb->st.line_nb > 0)) { - if (bad_kb->bt) { + if(bad_kb->bt) { worker_state = BadKbStateNotConnected; // Ready to run } else { if(furi_hal_hid_is_connected()) { @@ -750,7 +750,7 @@ static int32_t bad_kb_worker(void* context) { storage_file_seek(script_file, 0, true); // extra time for PC to recognize Flipper as keyboard furi_thread_flags_wait(0, FuriFlagWaitAny, 1500); - if (bad_kb->bt) { + if(bad_kb->bt) { update_bt_timeout(bad_kb->bt); FURI_LOG_I(WORKER_TAG, "BLE Key timeout : %u", bt_timeout); } @@ -771,14 +771,14 @@ static int32_t bad_kb_worker(void* context) { break; } else if(flags & WorkerEvtToggle) { worker_state = BadKbStateIdle; // Stop executing script - if (bad_kb->bt) { + if(bad_kb->bt) { furi_hal_bt_hid_kb_release_all(); } else { furi_hal_hid_kb_release_all(); } } else if(flags & WorkerEvtDisconnect) { worker_state = BadKbStateNotConnected; // Disconnected - if (bad_kb->bt) { + if(bad_kb->bt) { furi_hal_bt_hid_kb_release_all(); } else { furi_hal_hid_kb_release_all(); @@ -803,7 +803,7 @@ static int32_t bad_kb_worker(void* context) { delay_val = 0; worker_state = BadKbStateIdle; bad_kb->st.state = BadKbStateDone; - if (bad_kb->bt) { + if(bad_kb->bt) { furi_hal_bt_hid_kb_release_all(); } else { furi_hal_hid_kb_release_all(); @@ -827,13 +827,13 @@ static int32_t bad_kb_worker(void* context) { break; } } - if (bad_kb->bt) { + if(bad_kb->bt) { update_bt_timeout(bad_kb->bt); FURI_LOG_D(WORKER_TAG, "BLE Key timeout : %u", bt_timeout); } } - if (bad_kb->bt) { + if(bad_kb->bt) { // release all keys bt_hid_hold_while_keyboard_buffer_full(6, 3000); diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c b/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c index fc1d19e76..6d01f1df1 100644 --- a/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c @@ -31,16 +31,14 @@ void bad_kb_scene_config_bt_on_enter(void* context) { variable_item_set_current_value_index(item, bad_kb->is_bt); variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); - item = variable_item_list_add( - var_item_list, "Keyboard layout", 0, NULL, bad_kb); + item = variable_item_list_add(var_item_list, "Keyboard layout", 0, NULL, bad_kb); - item = variable_item_list_add( - var_item_list, "Change adv name", 0, NULL, bad_kb); + item = variable_item_list_add(var_item_list, "Change adv name", 0, NULL, bad_kb); - item = variable_item_list_add( - var_item_list, "Change MAC address", 0, NULL, bad_kb); + item = variable_item_list_add(var_item_list, "Change MAC address", 0, NULL, bad_kb); - variable_item_list_set_enter_callback(var_item_list, bad_kb_scene_config_bt_var_item_list_callback, bad_kb); + variable_item_list_set_enter_callback( + var_item_list, bad_kb_scene_config_bt_var_item_list_callback, bad_kb); view_dispatcher_switch_to_view(bad_kb->view_dispatcher, BadKbAppViewConfigBt); } @@ -56,10 +54,11 @@ bool bad_kb_scene_config_bt_on_event(void* context, SceneManagerEvent event) { scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigLayout); } else if(event.event == VarItemListIndexConnection) { bad_kb_script_close(bad_kb->bad_kb_script); - bad_kb->bad_kb_script = bad_kb_script_open(bad_kb->file_path, bad_kb->is_bt ? bad_kb->bt : NULL); + bad_kb->bad_kb_script = + bad_kb_script_open(bad_kb->file_path, bad_kb->is_bt ? bad_kb->bt : NULL); bad_kb_script_set_keyboard_layout(bad_kb->bad_kb_script, bad_kb->keyboard_layout); scene_manager_previous_scene(bad_kb->scene_manager); - if (bad_kb->is_bt) { + if(bad_kb->is_bt) { scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigBt); } else { scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigUsb); @@ -68,8 +67,8 @@ bool bad_kb_scene_config_bt_on_event(void* context, SceneManagerEvent event) { scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigName); } else if(event.event == VarItemListIndexMacAddress) { scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigMac); - // } else { - // furi_crash("Unknown key type"); + // } else { + // furi_crash("Unknown key type"); } } diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config_name.c b/applications/main/bad_kb/scenes/bad_kb_scene_config_name.c index d3d7628b1..82dd7a850 100644 --- a/applications/main/bad_kb/scenes/bad_kb_scene_config_name.c +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config_name.c @@ -3,8 +3,7 @@ static void bad_kb_scene_config_name_text_input_callback(void* context) { BadKbApp* bad_kb = context; - view_dispatcher_send_custom_event( - bad_kb->view_dispatcher, BadKbAppCustomEventTextEditResult); + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, BadKbAppCustomEventTextEditResult); } void bad_kb_scene_config_name_on_enter(void* context) { diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config_usb.c b/applications/main/bad_kb/scenes/bad_kb_scene_config_usb.c index 35c5ab8d2..27457e5f2 100644 --- a/applications/main/bad_kb/scenes/bad_kb_scene_config_usb.c +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config_usb.c @@ -29,10 +29,10 @@ void bad_kb_scene_config_usb_on_enter(void* context) { variable_item_set_current_value_index(item, bad_kb->is_bt); variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); - item = variable_item_list_add( - var_item_list, "Keyboard layout", 0, NULL, bad_kb); + item = variable_item_list_add(var_item_list, "Keyboard layout", 0, NULL, bad_kb); - variable_item_list_set_enter_callback(var_item_list, bad_kb_scene_config_usb_var_item_list_callback, bad_kb); + variable_item_list_set_enter_callback( + var_item_list, bad_kb_scene_config_usb_var_item_list_callback, bad_kb); view_dispatcher_switch_to_view(bad_kb->view_dispatcher, BadKbAppViewConfigUsb); } @@ -48,16 +48,17 @@ bool bad_kb_scene_config_usb_on_event(void* context, SceneManagerEvent event) { scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigLayout); } else if(event.event == VarItemListIndexConnection) { bad_kb_script_close(bad_kb->bad_kb_script); - bad_kb->bad_kb_script = bad_kb_script_open(bad_kb->file_path, bad_kb->is_bt ? bad_kb->bt : NULL); + bad_kb->bad_kb_script = + bad_kb_script_open(bad_kb->file_path, bad_kb->is_bt ? bad_kb->bt : NULL); bad_kb_script_set_keyboard_layout(bad_kb->bad_kb_script, bad_kb->keyboard_layout); scene_manager_previous_scene(bad_kb->scene_manager); - if (bad_kb->is_bt) { + if(bad_kb->is_bt) { scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigBt); } else { scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigUsb); } - // } else { - // furi_crash("Unknown key type"); + // } else { + // furi_crash("Unknown key type"); } } diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_file_select.c b/applications/main/bad_kb/scenes/bad_kb_scene_file_select.c index 44012f68d..df1c93feb 100644 --- a/applications/main/bad_kb/scenes/bad_kb_scene_file_select.c +++ b/applications/main/bad_kb/scenes/bad_kb_scene_file_select.c @@ -29,7 +29,8 @@ void bad_kb_scene_file_select_on_enter(void* context) { } if(bad_kb_file_select(bad_kb)) { - bad_kb->bad_kb_script = bad_kb_script_open(bad_kb->file_path, bad_kb->is_bt ? bad_kb->bt : NULL); + bad_kb->bad_kb_script = + bad_kb_script_open(bad_kb->file_path, bad_kb->is_bt ? bad_kb->bt : NULL); bad_kb_script_set_keyboard_layout(bad_kb->bad_kb_script, bad_kb->keyboard_layout); scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneWork); diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_work.c b/applications/main/bad_kb/scenes/bad_kb_scene_work.c index a7eac1786..2f6ae6057 100644 --- a/applications/main/bad_kb/scenes/bad_kb_scene_work.c +++ b/applications/main/bad_kb/scenes/bad_kb_scene_work.c @@ -16,7 +16,7 @@ bool bad_kb_scene_work_on_event(void* context, SceneManagerEvent event) { if(event.type == SceneManagerEventTypeCustom) { if(event.event == InputKeyLeft) { - if (app->is_bt) { + if(app->is_bt) { scene_manager_next_scene(app->scene_manager, BadKbSceneConfigBt); } else { scene_manager_next_scene(app->scene_manager, BadKbSceneConfigUsb); diff --git a/applications/main/bad_kb/views/bad_kb_view.c b/applications/main/bad_kb/views/bad_kb_view.c index a0fb39f88..581a703b9 100644 --- a/applications/main/bad_kb/views/bad_kb_view.c +++ b/applications/main/bad_kb/views/bad_kb_view.c @@ -60,8 +60,8 @@ static void bad_kb_draw_callback(Canvas* canvas, void* _model) { elements_button_center(canvas, "Cancel"); } - if((model->state.state == BadKbStateNotConnected) || - (model->state.state == BadKbStateIdle) || (model->state.state == BadKbStateDone)) { + if((model->state.state == BadKbStateNotConnected) || (model->state.state == BadKbStateIdle) || + (model->state.state == BadKbStateDone)) { elements_button_left(canvas, "Config"); } @@ -204,19 +204,13 @@ void bad_kb_set_button_callback(BadKb* bad_kb, BadKbButtonCallback callback, voi void bad_kb_set_file_name(BadKb* bad_kb, const char* name) { furi_assert(name); with_view_model( - bad_kb->view, - BadKbModel * model, - { strlcpy(model->file_name, name, MAX_NAME_LEN); }, - true); + bad_kb->view, BadKbModel * model, { strlcpy(model->file_name, name, MAX_NAME_LEN); }, true); } void bad_kb_set_layout(BadKb* bad_kb, const char* layout) { furi_assert(layout); with_view_model( - bad_kb->view, - BadKbModel * model, - { strlcpy(model->layout, layout, MAX_NAME_LEN); }, - true); + bad_kb->view, BadKbModel * model, { strlcpy(model->layout, layout, MAX_NAME_LEN); }, true); } void bad_kb_set_state(BadKb* bad_kb, BadKbState* st) { diff --git a/applications/services/bt/bt_service/bt.c b/applications/services/bt/bt_service/bt.c index 6108a7790..6c2fb9307 100644 --- a/applications/services/bt/bt_service/bt.c +++ b/applications/services/bt/bt_service/bt.c @@ -76,10 +76,9 @@ static void bt_pin_code_hide(Bt* bt) { static bool bt_pin_code_verify_event_handler(Bt* bt, uint32_t pin) { furi_assert(bt); - - if (bt_get_profile_pairing_method(bt) == GapPairingNone) - return true; - + + if(bt_get_profile_pairing_method(bt) == GapPairingNone) return true; + notification_message(bt->notification, &sequence_display_backlight_on); FuriString* pin_str; dialog_message_set_icon(bt->dialog_message, XTREME_ASSETS()->I_BLE_Pairing_128x64, 0, 0); diff --git a/firmware/targets/f7/ble_glue/gap.c b/firmware/targets/f7/ble_glue/gap.c index 892fbd2a9..83944b4b5 100644 --- a/firmware/targets/f7/ble_glue/gap.c +++ b/firmware/targets/f7/ble_glue/gap.c @@ -378,7 +378,7 @@ static void gap_init_svc(Gap* gap) { } else if(gap->config->pairing_method == GapPairingPinCodeVerifyYesNo) { aci_gap_set_io_capability(IO_CAP_DISPLAY_YES_NO); keypress_supported = true; - } else if (gap->config->pairing_method == GapPairingNone) { + } else if(gap->config->pairing_method == GapPairingNone) { // Just works pairing method (IOS accept it, it seems android and linux doesn't) conf_mitm = 0; conf_used_fixed_pin = 0; @@ -387,8 +387,6 @@ static void gap_init_svc(Gap* gap) { keypress_supported = true; } - - // Setup authentication aci_gap_set_authentication_requirement( gap->config->bonding_mode,