Merge remote-tracking branch 'ofw/dev' into mntm-dev --nobuild
10
CHANGELOG.md
@@ -31,6 +31,7 @@
|
||||
- Desktop:
|
||||
- UL: Option to prevent Auto Lock when connected to USB/RPC (by @Dmitry422)
|
||||
- OFW: Add the Showtime animation (by @Astrrra)
|
||||
- OFW: Added Doom animation, removed winter holiday animations (by @doomwastaken)
|
||||
- JS:
|
||||
- OFW: Features & bugfixes, SDK 0.2 (by @portasynthinca3)
|
||||
- New `gui/widget` view, replaces old `widget` module
|
||||
@@ -61,6 +62,7 @@
|
||||
- Solitaire: Fixed cards from waste can be placed on the first tableau (by @Erbonator3000)
|
||||
- W5500 Ethernet: Add traceroute command (by @arag0re)
|
||||
- Wardriver: Fix swapped Channel/RSSI (by @jamisonderek)
|
||||
- OFW: USB/BT Remote: Fix TikTok remote, increased stack size (by @doomwastaken)
|
||||
- Many app fixes for new firmware changes (by @xMasterX & @Willy-JL)
|
||||
- BadKB: Rewritten BadKB extras on top of "new" OFW BadUSB structure (by @Willy-JL)
|
||||
- Additionally, can now customize MAC address when BLE Remember is enabled
|
||||
@@ -68,7 +70,7 @@
|
||||
- Main Menu: Refined CoverFlow menu style (#379 by @956MB)
|
||||
- NFC:
|
||||
- Support MIFARE DESFire Transaction MAC file type, fixes reading some EV2+ cards (by @Willy-JL)
|
||||
- Improvements and fixes for NDEF parsing on MIFARE Classic (by @Willy-JL)
|
||||
- Improve NDEF parser handling and display of raw non-text data (by @Willy-JL)
|
||||
- OFW: Added naming for DESFire cards + fix MF3ICD40 cards unable to be read (by @Demae)
|
||||
- OFW: FeliCa Protocol Expose Read Block API and Allow Specifying Service (by @zinongli)
|
||||
- OFW: Enable MFUL sync poller to be provided with passwords (by @GMMan)
|
||||
@@ -83,10 +85,15 @@
|
||||
- OFW: Update mbedtls & expose AES to API (by @portasynthinca3)
|
||||
- OFW: Stdio API improvements, pipe stdout timeout (by @portasynthinca3)
|
||||
- OFW: Stricter constness for const data (by @hedger)
|
||||
- OFW: Reduced ieee754 parser size (by @portasynthinca3)
|
||||
|
||||
### Fixed:
|
||||
- Asset Packs: Fix level-up animations not being themed (by @Willy-JL)
|
||||
- About: Fix missing Prev. button when invoked from Device Info keybind (by @Willy-JL)
|
||||
- NFC:
|
||||
- Fix parsing large NDEF payloads on MIFARE Classic cards, fix MAD format edge cases (by @Willy-JL)
|
||||
- Fix crash on ISO15693-3 save when memory is empty or cannot be read (by @Willy-JL)
|
||||
- Infrared: Fix universals sending (by @Willy-JL)
|
||||
- GUI: Fix widget text scroll with 256+ lines (by @Willy-JL)
|
||||
- Sub-GHz:
|
||||
- UL: Fix Hollarm protocol with more verification (by @xMasterX)
|
||||
@@ -99,6 +106,7 @@
|
||||
- OFW: Various bug fixes and improvements (by @skotopes)
|
||||
- OFW: Clear IRQ status before calling user handler, fixes some interrupt edge cases / weirdness (by @mammothbane)
|
||||
- OFW: Ensure that `furi_record_create()` is passed a non-NULL data pointer (by @dcoles)
|
||||
- OFW: FBT: Fix DWARF dead code elimination and linking (by @GMMan)
|
||||
- OFW: CLI: Fixed repeat in subghz tx_from_file command (by @Jnesselr)
|
||||
- OFW: VSCode: Disabled auto-update for clangd since correct version is in the toolchain (by @hedger)
|
||||
- OFW: uFBT: Bumped action version in example github workflow for project template (by @hedger)
|
||||
|
||||
@@ -37,11 +37,13 @@ void nfc_render_iso15693_3_brief(const Iso15693_3Data* data, FuriString* str) {
|
||||
}
|
||||
|
||||
void nfc_render_iso15693_3_system_info(const Iso15693_3Data* data, FuriString* str) {
|
||||
if(data->system_info.flags & ISO15693_3_SYSINFO_FLAG_MEMORY) {
|
||||
const uint16_t block_count = iso15693_3_get_block_count(data);
|
||||
const uint8_t block_size = iso15693_3_get_block_size(data);
|
||||
|
||||
if((data->system_info.flags & ISO15693_3_SYSINFO_FLAG_MEMORY) &&
|
||||
(block_count > 0 && block_size > 0)) {
|
||||
furi_string_cat(str, "\e#Memory data\n\e*--------------------\n");
|
||||
|
||||
const uint16_t block_count = iso15693_3_get_block_count(data);
|
||||
const uint8_t block_size = iso15693_3_get_block_size(data);
|
||||
const uint16_t display_block_count =
|
||||
MIN(NFC_RENDER_ISO15693_3_MAX_BYTES / block_size, block_count);
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <nfc/protocols/slix/slix.h>
|
||||
|
||||
#include <bit_lib.h>
|
||||
#include <toolbox/pretty_format.h>
|
||||
|
||||
#define TAG "NDEF"
|
||||
|
||||
@@ -248,7 +249,9 @@ static inline bool is_printable(char c) {
|
||||
|
||||
static bool is_text(const uint8_t* buf, size_t len) {
|
||||
for(size_t i = 0; i < len; i++) {
|
||||
if(!is_printable(buf[i])) return false;
|
||||
if(!is_printable(buf[i]) && !(buf[i] == '\0' && i == len - 1)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -264,7 +267,7 @@ static bool ndef_dump(Ndef* ndef, const char* prefix, size_t pos, size_t len, bo
|
||||
for(size_t i = 0; i < len; i++) {
|
||||
char c;
|
||||
if(!ndef_get(ndef, pos + i, 1, &c)) return false;
|
||||
if(!is_printable(c)) {
|
||||
if(!is_printable(c) && !(c == '\0' && i == len - 1)) {
|
||||
furi_string_left(ndef->output, string_prev);
|
||||
force_hex = true;
|
||||
break;
|
||||
@@ -272,14 +275,18 @@ static bool ndef_dump(Ndef* ndef, const char* prefix, size_t pos, size_t len, bo
|
||||
furi_string_push_back(ndef->output, c);
|
||||
}
|
||||
}
|
||||
if(force_hex) {
|
||||
for(size_t i = 0; i < len; i++) {
|
||||
uint8_t b;
|
||||
if(!ndef_get(ndef, pos + i, 1, &b)) return false;
|
||||
furi_string_cat_printf(ndef->output, "%02X ", b);
|
||||
if(!force_hex) {
|
||||
furi_string_cat(ndef->output, "\n");
|
||||
} else {
|
||||
uint8_t buf[4];
|
||||
for(size_t i = 0; i < len; i += sizeof(buf)) {
|
||||
uint8_t buf_len = MIN(sizeof(buf), len - i);
|
||||
if(!ndef_get(ndef, pos + i, buf_len, &buf)) return false;
|
||||
pretty_format_bytes_hex_canonical(
|
||||
ndef->output, 4, PRETTY_FORMAT_FONT_MONOSPACE, buf, buf_len);
|
||||
furi_string_cat(ndef->output, "\n");
|
||||
}
|
||||
}
|
||||
furi_string_cat(ndef->output, "\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -289,9 +296,7 @@ static void
|
||||
if(!force_hex && is_text(buf, len)) {
|
||||
furi_string_cat_printf(ndef->output, "%.*s", len, (const char*)buf);
|
||||
} else {
|
||||
for(size_t i = 0; i < len; i++) {
|
||||
furi_string_cat_printf(ndef->output, "%02X ", ((const uint8_t*)buf)[i]);
|
||||
}
|
||||
pretty_format_bytes_hex_canonical(ndef->output, 4, PRETTY_FORMAT_FONT_MONOSPACE, buf, len);
|
||||
}
|
||||
furi_string_cat(ndef->output, "\n");
|
||||
}
|
||||
|
||||
@@ -3,11 +3,11 @@ App(
|
||||
name="USB Remote",
|
||||
apptype=FlipperAppType.EXTERNAL,
|
||||
entry_point="hid_usb_app",
|
||||
stack_size=1 * 1024,
|
||||
stack_size=2 * 1024,
|
||||
sources=["*.c", "!transport_ble.c"],
|
||||
cdefines=["HID_TRANSPORT_USB"],
|
||||
fap_description="Use Flipper as a HID remote control over USB",
|
||||
fap_version="1.0",
|
||||
fap_version="1.1",
|
||||
fap_category="USB",
|
||||
fap_icon="hid_usb_10px.png",
|
||||
fap_icon_assets="assets",
|
||||
@@ -20,12 +20,12 @@ App(
|
||||
name="Bluetooth Remote",
|
||||
apptype=FlipperAppType.EXTERNAL,
|
||||
entry_point="hid_ble_app",
|
||||
stack_size=1 * 1024,
|
||||
stack_size=2 * 1024,
|
||||
sources=["*.c", "!transport_usb.c"],
|
||||
cdefines=["HID_TRANSPORT_BLE"],
|
||||
fap_libs=["ble_profile"],
|
||||
fap_description="Use Flipper as a HID remote control over Bluetooth",
|
||||
fap_version="1.0",
|
||||
fap_version="1.1",
|
||||
fap_category="Bluetooth",
|
||||
fap_icon="hid_ble_10px.png",
|
||||
fap_icon_assets="assets",
|
||||
|
||||
@@ -117,7 +117,10 @@ static void hid_tiktok_reset_cursor(HidTikTok* hid_tiktok) {
|
||||
furi_delay_ms(50);
|
||||
}
|
||||
// Move cursor from the corner
|
||||
hid_hal_mouse_move(hid_tiktok->hid, 20, 120);
|
||||
// Actions split for some mobiles to properly process mouse movements
|
||||
hid_hal_mouse_move(hid_tiktok->hid, 10, 60);
|
||||
furi_delay_ms(3);
|
||||
hid_hal_mouse_move(hid_tiktok->hid, 0, 60);
|
||||
furi_delay_ms(50);
|
||||
}
|
||||
|
||||
@@ -180,29 +183,30 @@ static bool hid_tiktok_input_callback(InputEvent* event, void* context) {
|
||||
consumed = true;
|
||||
} else if(event->type == InputTypeShort) {
|
||||
if(event->key == InputKeyOk) {
|
||||
// delays adjusted for emulation of a finger tap
|
||||
hid_hal_mouse_press(hid_tiktok->hid, HID_MOUSE_BTN_LEFT);
|
||||
furi_delay_ms(25);
|
||||
hid_hal_mouse_release(hid_tiktok->hid, HID_MOUSE_BTN_LEFT);
|
||||
furi_delay_ms(100);
|
||||
furi_delay_ms(75);
|
||||
hid_hal_mouse_press(hid_tiktok->hid, HID_MOUSE_BTN_LEFT);
|
||||
furi_delay_ms(25);
|
||||
hid_hal_mouse_release(hid_tiktok->hid, HID_MOUSE_BTN_LEFT);
|
||||
consumed = true;
|
||||
} else if(event->key == InputKeyUp) {
|
||||
// Swipe to previous video
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, -6);
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, -8);
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, -10);
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, -8);
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, -6);
|
||||
// Emulate up swipe
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, -12);
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, -24);
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, -38);
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, -24);
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, -12);
|
||||
consumed = true;
|
||||
} else if(event->key == InputKeyDown) {
|
||||
// Swipe to next video
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, 6);
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, 8);
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, 10);
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, 8);
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, 6);
|
||||
// Emulate down swipe
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, 12);
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, 24);
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, 38);
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, 24);
|
||||
hid_hal_mouse_scroll(hid_tiktok->hid, 12);
|
||||
consumed = true;
|
||||
} else if(event->key == InputKeyBack) {
|
||||
// Pause
|
||||
|
||||
BIN
assets/dolphin/external/L1_Doom_128x64/frame_0.png
vendored
Normal file
|
After Width: | Height: | Size: 733 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_1.png
vendored
Normal file
|
After Width: | Height: | Size: 757 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_10.png
vendored
Normal file
|
After Width: | Height: | Size: 498 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_11.png
vendored
Normal file
|
After Width: | Height: | Size: 548 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_12.png
vendored
Normal file
|
After Width: | Height: | Size: 578 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_13.png
vendored
Normal file
|
After Width: | Height: | Size: 567 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_14.png
vendored
Normal file
|
After Width: | Height: | Size: 558 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_15.png
vendored
Normal file
|
After Width: | Height: | Size: 488 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_16.png
vendored
Normal file
|
After Width: | Height: | Size: 496 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_17.png
vendored
Normal file
|
After Width: | Height: | Size: 498 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_18.png
vendored
Normal file
|
After Width: | Height: | Size: 497 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_19.png
vendored
Normal file
|
After Width: | Height: | Size: 492 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_2.png
vendored
Normal file
|
After Width: | Height: | Size: 749 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_20.png
vendored
Normal file
|
After Width: | Height: | Size: 621 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_21.png
vendored
Normal file
|
After Width: | Height: | Size: 645 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_22.png
vendored
Normal file
|
After Width: | Height: | Size: 612 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_23.png
vendored
Normal file
|
After Width: | Height: | Size: 655 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_24.png
vendored
Normal file
|
After Width: | Height: | Size: 621 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_25.png
vendored
Normal file
|
After Width: | Height: | Size: 661 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_26.png
vendored
Normal file
|
After Width: | Height: | Size: 561 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_27.png
vendored
Normal file
|
After Width: | Height: | Size: 583 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_28.png
vendored
Normal file
|
After Width: | Height: | Size: 592 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_29.png
vendored
Normal file
|
After Width: | Height: | Size: 563 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_3.png
vendored
Normal file
|
After Width: | Height: | Size: 757 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_30.png
vendored
Normal file
|
After Width: | Height: | Size: 532 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_31.png
vendored
Normal file
|
After Width: | Height: | Size: 389 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_32.png
vendored
Normal file
|
After Width: | Height: | Size: 575 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_33.png
vendored
Normal file
|
After Width: | Height: | Size: 602 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_34.png
vendored
Normal file
|
After Width: | Height: | Size: 601 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_35.png
vendored
Normal file
|
After Width: | Height: | Size: 623 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_36.png
vendored
Normal file
|
After Width: | Height: | Size: 623 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_37.png
vendored
Normal file
|
After Width: | Height: | Size: 580 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_38.png
vendored
Normal file
|
After Width: | Height: | Size: 604 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_4.png
vendored
Normal file
|
After Width: | Height: | Size: 739 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_5.png
vendored
Normal file
|
After Width: | Height: | Size: 596 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_6.png
vendored
Normal file
|
After Width: | Height: | Size: 618 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_7.png
vendored
Normal file
|
After Width: | Height: | Size: 597 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_8.png
vendored
Normal file
|
After Width: | Height: | Size: 610 B |
BIN
assets/dolphin/external/L1_Doom_128x64/frame_9.png
vendored
Normal file
|
After Width: | Height: | Size: 611 B |
14
assets/dolphin/external/L1_Doom_128x64/meta.txt
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
Filetype: Flipper Animation
|
||||
Version: 1
|
||||
|
||||
Width: 128
|
||||
Height: 64
|
||||
Passive frames: 15
|
||||
Active frames: 24
|
||||
Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
||||
Active cycles: 1
|
||||
Frame rate: 2
|
||||
Duration: 360
|
||||
Active cooldown: 7
|
||||
|
||||
Bubble slots: 0
|
||||
|
Before Width: | Height: | Size: 858 B |
|
Before Width: | Height: | Size: 855 B |
|
Before Width: | Height: | Size: 872 B |
|
Before Width: | Height: | Size: 861 B |
|
Before Width: | Height: | Size: 853 B |
|
Before Width: | Height: | Size: 851 B |
|
Before Width: | Height: | Size: 852 B |
|
Before Width: | Height: | Size: 856 B |
|
Before Width: | Height: | Size: 850 B |
|
Before Width: | Height: | Size: 851 B |
|
Before Width: | Height: | Size: 860 B |
|
Before Width: | Height: | Size: 857 B |
|
Before Width: | Height: | Size: 863 B |
@@ -1,23 +0,0 @@
|
||||
Filetype: Flipper Animation
|
||||
Version: 1
|
||||
|
||||
Width: 128
|
||||
Height: 64
|
||||
Passive frames: 10
|
||||
Active frames: 18
|
||||
Frames order: 0 1 2 1 0 1 2 1 0 1 2 3 4 5 6 5 4 7 2 8 9 10 11 10 9 10 11 12
|
||||
Active cycles: 1
|
||||
Frame rate: 2
|
||||
Duration: 3600
|
||||
Active cooldown: 7
|
||||
|
||||
Bubble slots: 1
|
||||
|
||||
Slot: 0
|
||||
X: 11
|
||||
Y: 19
|
||||
Text: HAPPY\nHOLIDAYS!
|
||||
AlignH: Right
|
||||
AlignV: Center
|
||||
StartFrame: 22
|
||||
EndFrame: 27
|
||||
|
Before Width: | Height: | Size: 820 B |
|
Before Width: | Height: | Size: 881 B |
|
Before Width: | Height: | Size: 788 B |
|
Before Width: | Height: | Size: 816 B |
|
Before Width: | Height: | Size: 864 B |
|
Before Width: | Height: | Size: 798 B |
|
Before Width: | Height: | Size: 813 B |
|
Before Width: | Height: | Size: 879 B |
|
Before Width: | Height: | Size: 855 B |
|
Before Width: | Height: | Size: 772 B |
|
Before Width: | Height: | Size: 817 B |
|
Before Width: | Height: | Size: 867 B |
|
Before Width: | Height: | Size: 866 B |
|
Before Width: | Height: | Size: 809 B |
|
Before Width: | Height: | Size: 795 B |
|
Before Width: | Height: | Size: 870 B |
|
Before Width: | Height: | Size: 852 B |
|
Before Width: | Height: | Size: 805 B |
|
Before Width: | Height: | Size: 858 B |
|
Before Width: | Height: | Size: 830 B |
|
Before Width: | Height: | Size: 828 B |
|
Before Width: | Height: | Size: 585 B |
|
Before Width: | Height: | Size: 431 B |
|
Before Width: | Height: | Size: 812 B |
|
Before Width: | Height: | Size: 281 B |
|
Before Width: | Height: | Size: 270 B |
|
Before Width: | Height: | Size: 236 B |
|
Before Width: | Height: | Size: 485 B |
|
Before Width: | Height: | Size: 771 B |
|
Before Width: | Height: | Size: 887 B |
|
Before Width: | Height: | Size: 809 B |
|
Before Width: | Height: | Size: 890 B |
|
Before Width: | Height: | Size: 819 B |
|
Before Width: | Height: | Size: 799 B |
|
Before Width: | Height: | Size: 817 B |
|
Before Width: | Height: | Size: 875 B |
|
Before Width: | Height: | Size: 823 B |
@@ -1,23 +0,0 @@
|
||||
Filetype: Flipper Animation
|
||||
Version: 1
|
||||
|
||||
Width: 128
|
||||
Height: 64
|
||||
Passive frames: 18
|
||||
Active frames: 19
|
||||
Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
||||
Active cycles: 1
|
||||
Frame rate: 2
|
||||
Duration: 3600
|
||||
Active cooldown: 7
|
||||
|
||||
Bubble slots: 1
|
||||
|
||||
Slot: 0
|
||||
X: 21
|
||||
Y: 25
|
||||
Text: AAAAaAAAAHHh!!
|
||||
AlignH: Right
|
||||
AlignV: Bottom
|
||||
StartFrame: 30
|
||||
EndFrame: 32
|
||||
21
assets/dolphin/external/manifest.txt
vendored
@@ -232,23 +232,16 @@ Min level: 11
|
||||
Max level: 30
|
||||
Weight: 4
|
||||
|
||||
Name: L1_Happy_holidays_128x64
|
||||
Min butthurt: 0
|
||||
Max butthurt: 14
|
||||
Min level: 16
|
||||
Max level: 30
|
||||
Weight: 3
|
||||
|
||||
Name: L1_Sleigh_ride_128x64
|
||||
Min butthurt: 0
|
||||
Max butthurt: 14
|
||||
Min level: 9
|
||||
Max level: 30
|
||||
Weight: 4
|
||||
|
||||
Name: L1_Showtime_128x64
|
||||
Min butthurt: 0
|
||||
Max butthurt: 10
|
||||
Min level: 16
|
||||
Max level: 30
|
||||
Weight: 4
|
||||
|
||||
Name: L1_Doom_128x64
|
||||
Min butthurt: 0
|
||||
Max butthurt: 13
|
||||
Min level: 9
|
||||
Max level: 30
|
||||
Weight: 4
|
||||
|
||||
@@ -1,152 +0,0 @@
|
||||
|
||||
# JavaScript scripting API (WIP)
|
||||
|
||||
> [!IMPORTANT]
|
||||
> This documentation is deprecated! You should now look at type info in `applications/system/js_app/packages/fz-sdk` and examples in `applications/system/js_app/examples/apps/Scripts`.
|
||||
> Human readable documentation will eventually be derived from this type information.
|
||||
> For now, old documentation is still available here and in `documentation/js`, but it may be inaccurate or missing.
|
||||
|
||||
## Description
|
||||
Momentum supports JavaScript scripting using [mjs](https://github.com/cesanta/mjs).
|
||||
**Note: Read about mjs's limitations in the link above! You will experience alot of missing js features (e.g. createTimeout).**
|
||||
|
||||
## Examples
|
||||
Make sure to check out the [included examples](https://github.com/Next-Flip/Momentum-Firmware/tree/dev/applications/system/js_app/examples/apps/Scripts)! They cover basically everything that is possible with Flipper JS.
|
||||
|
||||
## API
|
||||
|
||||
### Global
|
||||
- `print(...args: any): undefined`
|
||||
- `delay(...args: any): undefined | error`
|
||||
- `to_string(num: number): string`
|
||||
- `to_hex_string(num: number): string`
|
||||
- `ffi_address(symbol: string): foreign`
|
||||
- `require(module: string): object | error`
|
||||
- `parse_int(text: string): number`
|
||||
- `to_upper_case(text: string): string | error`
|
||||
- `to_lower_case(text: string): string | error`
|
||||
|
||||
### SubGHZ
|
||||
`const subghz = require("subghz");`
|
||||
- `subghz.setup(): undefined`
|
||||
- `subghz.setRx(): undefined`
|
||||
- `subghz.setIdle(): undefined`
|
||||
- `subghz.getRssi(): number`
|
||||
- `subghz.getState(): string`
|
||||
- `subghz.getFrequency(): number`
|
||||
- `subghz.setFrequency(freq: number): number | error`
|
||||
- `subghz.isExternal(): bool`
|
||||
- `subghz.transmitFile(file: string): bool | error`
|
||||
|
||||
### Usbdisk
|
||||
`const usbdisk = require("usbdisk");`
|
||||
- `createImage(file: string, size: number): undefined | error`
|
||||
- `start(file: string): undefined | error`
|
||||
- `stop(): undefined | error`
|
||||
- `wasEjected(): bool | error`
|
||||
|
||||
### BadUsb
|
||||
`const badusb = require("badusb");`
|
||||
- `setup({ vid: number, pid: number, mfr_name: string, prod_name: string }): undefined | error`
|
||||
- `quit(): undefined | error`
|
||||
- `isConnected(): bool | error`
|
||||
- `press(...keyAndModifiers: string | number): undefined | error`
|
||||
- `hold(...keyAndModifiers: string | number): undefined | error`
|
||||
- `release(...keyAndModifiers: string | number | undefined): undefined | error`
|
||||
- `print(text: string, delay: number | undefined): undefined | error`
|
||||
- `println(text: string, delay: number | undefined): undefined | error`
|
||||
- `altPrint(text: string, delay: number | undefined): undefined | error`
|
||||
- `altPrintln(text: string, delay: number | undefined): undefined | error`
|
||||
|
||||
### BleBeacon
|
||||
`const blebeacon = require("blebeacon");`
|
||||
- `isActive(): bool | error`
|
||||
- `setConfig(mac: Uint8Array, power: number | undefined, intvMin: number | undefined, intvMax: number | undefined): undefined | error`
|
||||
- `setData(data: Uint8Array): undefined | error`
|
||||
- `start(): undefined | error`
|
||||
- `stop(): undefined | error`
|
||||
- `keepAlive(keep: boolean): undefined | error`
|
||||
|
||||
### Dialog
|
||||
`const dialog = require("dialog");`
|
||||
- `message()`
|
||||
- `custom()`
|
||||
- `pickFile()`
|
||||
|
||||
### Flipper
|
||||
`const flipper= require("flipper");`
|
||||
- `getModel()`
|
||||
- `getName()`
|
||||
- `getBatteryCharge()`
|
||||
|
||||
### Gpio
|
||||
`const gpio = require("gpio");`
|
||||
- `init()`
|
||||
- `write()`
|
||||
- `read()`
|
||||
|
||||
### Keyboard
|
||||
`const keyboard = require("keyboard");`
|
||||
- `setHeader()`
|
||||
- `text()`
|
||||
- `byte()`
|
||||
|
||||
### Math
|
||||
`const math = require("math");`
|
||||
- `abs()`
|
||||
- `acos()`
|
||||
- `acosh()`
|
||||
- `asin()`
|
||||
- `asinh()`
|
||||
- `atan()`
|
||||
- `atan2()`
|
||||
- `atanh()`
|
||||
- `cbrt()`
|
||||
- `ceil()`
|
||||
- `clz32()`
|
||||
- `cos()`
|
||||
- `exp()`
|
||||
- `floor()`
|
||||
- `log()`
|
||||
- `max()`
|
||||
- `min()`
|
||||
- `pow()`
|
||||
- `random()`
|
||||
- `sign()`
|
||||
- `sin()`
|
||||
- `sqrt()`
|
||||
- `trunc()`
|
||||
- `PI`
|
||||
- `E`
|
||||
|
||||
### Notification
|
||||
`const notify = require("notification");`
|
||||
- `success()`
|
||||
- `error()`
|
||||
- `blink()`
|
||||
|
||||
### Serial
|
||||
`const serial = require("serial");`
|
||||
- `setup()`
|
||||
- `write()`
|
||||
- `read()`
|
||||
- `readln()`
|
||||
- `readBytes()`
|
||||
- `expect()`
|
||||
|
||||
### Storage
|
||||
`const storage = require("storage");`
|
||||
- `read()`
|
||||
- `write()`
|
||||
- `append()`
|
||||
- `exists()`
|
||||
- `remove()`
|
||||
- `virtualInit()`
|
||||
- `virtualMount()`
|
||||
- `virtualQuit()`
|
||||
|
||||
### Submenu
|
||||
`const submenu = require("submenu");`
|
||||
- `addItem()`
|
||||
- `setHeader()`
|
||||
- `show()`
|
||||
@@ -2,10 +2,9 @@
|
||||
|
||||
The Developer Board allows you to read Flipper Zero logs via UART. Unlike reading logs via the command-line interface (CLI), the Developer Board enables you to collect logs from the device directly to a serial console independently from the operating system of Flipper Zero. It allows you to see the device's logs when it's loading, updating, or crashing. It's useful for debugging and troubleshooting during software development.
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> Flipper Zero logs can only be viewed when the developer board is connected via USB.
|
||||
> The option to view logs over Wi-Fi will be added in future updates.
|
||||
> **NOTE:** Flipper Zero logs can only be viewed when the developer board is connected via USB. The option to view logs over Wi-Fi will be added in future updates.
|
||||
|
||||
***
|
||||
|
||||
## Setting the log level
|
||||
|
||||
@@ -24,24 +23,29 @@ Depending on your operating system, you need to install an additional applicatio
|
||||
On macOS, you need to install the **minicom** communication program by doing the following:
|
||||
|
||||
1. [Install Homebrew](https://brew.sh/) by running the following command in the Terminal:
|
||||
```bash
|
||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||
```
|
||||
2. After installation of Homebrew, run the following command to install `minicom`:
|
||||
```bash
|
||||
|
||||
```text
|
||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||
```
|
||||
|
||||
2. After installation of Homebrew, run the following command to install minicom:
|
||||
|
||||
```text
|
||||
brew install minicom
|
||||
```
|
||||
|
||||
After installation of `minicom` on your macOS computer, you can connect to the Developer Board to read Flipper Zero logs by doing the following:
|
||||
After installation of minicom on your macOS computer, you can connect to the Developer Board to read Flipper Zero logs by doing the following:
|
||||
|
||||
1. Cold-plug the Developer Board into your Flipper Zero by turning off the Flipper Zero, connecting the developer board, and then turning it back on.
|
||||
|
||||
2. On your computer, open the Terminal and run the following command:
|
||||
```bash
|
||||
|
||||
```text
|
||||
ls /dev/cu.*
|
||||
```
|
||||
> [!NOTE]
|
||||
>
|
||||
> The list of devices.
|
||||
|
||||
Note the list of devices.
|
||||
|
||||
3. Connect the developer board to your computer using a USB Type-C cable.
|
||||
\image html https://cdn.flipperzero.one/Flipper_Zero_Wi-Fi_developer_board_wired.png width=700
|
||||
|
||||
@@ -50,68 +54,84 @@ After installation of `minicom` on your macOS computer, you can connect to the D
|
||||
```text
|
||||
/dev/cu.usbmodemblackmagic1
|
||||
```
|
||||
```bash
|
||||
|
||||
```text
|
||||
/dev/cu.usbmodemblackmagic3
|
||||
```
|
||||
> [!NOTE]
|
||||
>
|
||||
> Your Developer Board might have different names.
|
||||
6. Run the following command:
|
||||
```bash
|
||||
minicom -D /dev/<port> -b 230400
|
||||
```
|
||||
|
||||
Your Developer Board might have different names.
|
||||
|
||||
5. Run the following command:
|
||||
|
||||
```text
|
||||
minicom -D /dev/<port> -b 230400
|
||||
```
|
||||
|
||||
Where `<port>` is the name of your device with a bigger number.
|
||||
|
||||
Example:
|
||||
```bash
|
||||
|
||||
```text
|
||||
minicom -D /dev/cu.usbmodemblackmagic3 -b 230400
|
||||
```
|
||||
7. View logs of your Flipper Zero in the Terminal.
|
||||
8. To quit, close the `minicom` window or quit via the `minicom` menu.
|
||||
|
||||
6. View logs of your Flipper Zero in the Terminal.
|
||||
|
||||
7. To quit, close the minicom window or quit via the minicom menu.
|
||||
|
||||
### Linux
|
||||
|
||||
On Linux, you need to install the `minicom` communication program. For example, on Ubuntu, run in the Terminal the following command:
|
||||
On Linux, you need to install the **minicom** communication program. For example, on Ubuntu, run in the Terminal the following command:
|
||||
|
||||
```bash
|
||||
```text
|
||||
sudo apt install minicom
|
||||
```
|
||||
```
|
||||
|
||||
After installation of `minicom` on your Linux computer, you can connect to the Developer Board to read Flipper Zero logs by doing the following:
|
||||
After installation of minicom on your Linux computer, you can connect to the Developer Board to read Flipper Zero logs by doing the following:
|
||||
|
||||
1. Cold-plug the Developer Board into your Flipper Zero by turning off the Flipper Zero, connecting the developer board, and then turning it back on.
|
||||
|
||||
2. On your computer, open the Terminal and run the following command:
|
||||
```bash
|
||||
|
||||
```text
|
||||
ls /dev/tty*
|
||||
```
|
||||
|
||||
Note the list of devices.
|
||||
|
||||
3. Connect the developer board to your computer using a USB Type-C cable.
|
||||
\image html https://cdn.flipperzero.one/Flipper_Zero_Wi-Fi_developer_board_wired.png width=700
|
||||
|
||||
4. Rerun the command. Two new devices have to appear: this is the Developer Board.
|
||||
```bash
|
||||
|
||||
```text
|
||||
/dev/ttyACM0
|
||||
```
|
||||
```bash
|
||||
|
||||
```text
|
||||
/dev/ttyACM1
|
||||
```
|
||||
> [!NOTE]
|
||||
>
|
||||
> Your Developer Board might have different names.
|
||||
|
||||
Your Developer Board might have different names.
|
||||
|
||||
5. Run the following command:
|
||||
```bash
|
||||
|
||||
```text
|
||||
minicom -D /dev/<port> -b 230400
|
||||
```
|
||||
|
||||
Where `<port>` is the name of your device with a bigger number.
|
||||
|
||||
Example:
|
||||
```bash
|
||||
|
||||
```text
|
||||
minicom -D /dev/cu.usbmodemblackmagic3 -b 230400
|
||||
```
|
||||
|
||||
6. View logs of your Flipper Zero in the Terminal.
|
||||
> [!NOTE]
|
||||
>
|
||||
> If no logs are shown in the Terminal,
|
||||
> try running the command from Step 5 with another device name.
|
||||
>
|
||||
|
||||
**NOTE:** If no logs are shown in the Terminal, try running the command from Step 5 with another device name.
|
||||
|
||||
7. To quit, close the minicom window or quit via the minicom menu.
|
||||
|
||||
### Windows
|
||||
@@ -119,7 +139,9 @@ After installation of `minicom` on your Linux computer, you can connect to the D
|
||||
On Windows, do the following:
|
||||
|
||||
1. On your computer, [install the PuTTY application](https://www.chiark.greenend.org.uk/\~sgtatham/putty/latest.html).
|
||||
|
||||
2. Cold-plug the Developer Board into your Flipper Zero by turning off the Flipper Zero, connecting the developer board, and then turning it back on.
|
||||
|
||||
3. Connect the developer board to your computer using a USB Type-C cable.
|
||||
\image html https://cdn.flipperzero.one/Flipper_Zero_Wi-Fi_developer_board_wired.png width=700
|
||||
|
||||
|
||||