Merge remote-tracking branch 'ofw/dev' into mntm-dev --nobuild

This commit is contained in:
Willy-JL
2025-04-01 01:40:05 +00:00
139 changed files with 1534 additions and 854 deletions

View File

@@ -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)

View File

@@ -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);

View File

@@ -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");
}

View File

@@ -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",

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 757 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 548 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 558 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 496 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 497 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 492 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 749 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 621 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 645 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 621 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 661 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 561 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 757 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 575 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 602 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 623 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 623 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 739 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 611 B

View 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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 858 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 855 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 872 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 861 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 853 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 851 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 852 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 856 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 850 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 851 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 860 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 857 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 863 B

View File

@@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 820 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 881 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 788 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 816 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 864 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 798 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 813 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 879 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 855 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 772 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 817 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 867 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 866 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 809 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 795 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 870 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 852 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 805 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 858 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 830 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 828 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 585 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 431 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 812 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 485 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 771 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 887 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 809 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 890 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 819 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 817 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 875 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 823 B

View File

@@ -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

View File

@@ -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

View File

@@ -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()`

View File

@@ -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

Some files were not shown because too many files have changed in this diff Show More