//+============================================================================ ======================================== // Select font // A full list of u8g2 fonts can be found here: // https://github.com/olikraus/u8g2/wiki/fntlistall // ...and here are the ones available in FZ (currently: all of them): // grep -P '.*u8g2.*\[[0-9]*\]' lib/u8g2/u8g2_fonts.c | sed 's/.*\(u8g2_.*\)\[.*/\1/' // #if 0 //! Extra fonts is just too memory hungry #include void setFont (Canvas* const canvas, const uint8_t* font) { u8g2_SetFontMode(&canvas->fb, 1); // no idea - but canvas.c does it u8g2_SetFont(&canvas->fb, font); } #endif litui : @BlueChip for posterity, the function to break at is flipper_application_spawn. At that point, you can set new breakpoints in your fap code and continue. /* This is wrong on quite a few levels! https://training.ti.com/introduction-i2c-reserved-addresses void doit (void) { furi_hal_i2c_acquire(&furi_hal_i2c_handle_external); printf("Scanning external i2c on PC0(SCL)/PC1(SDA)\r\n" "Clock: 100khz, 7bit address\r\n" "\r\n"); printf(" | 0 1 2 3 4 5 6 7 8 9 A B C D E F\r\n"); printf("--+--------------------------------\r\n"); for(uint8_t row = 0; row < 0x8; row++) { printf("%x | ", row); for(uint8_t column = 0; column <= 0xF; column++) { bool ret = furi_hal_i2c_is_device_ready( &furi_hal_i2c_handle_external, ((row << 4) + column) << 1, 2); printf("%c ", ret ? '#' : '-'); } printf("\r\n"); } furi_hal_i2c_release(&furi_hal_i2c_handle_external); } */ region locking : firmware/targets/f7/furi_hal/furi_hal_region.c # if 0 //! scrolling works beautifully, but the LCD refresh can't keep up :( // Waveform if (cnt) { // start for (int a = ACC_1; a < ACC_N; a++) { canvas_draw_dot(canvas, x,y[a]+v[a][idx]); for (int i = 1; i < aw -cnt; i++) { canvas_draw_line(canvas, x+i,y[a]+v[a][i-1] , x+i,y[a]+v[a][i]); } } } else { // scroll for (int a = ACC_1; a < ACC_N; a++) { for (int i = 0; i < aw; i++) { int off = (idx +i) %aw; int prev = off ? off-1 : aw-1; canvas_draw_line(canvas, x+i,y[a]+v[a][prev] , x+i,y[a]+v[a][off]); } } } # else int end = idx ? idx : aw; for (int a = ACC_1; a < ACC_N; a++) { canvas_draw_dot(canvas, x,y[a]+v[a][idx]); if (state->apause) { for (int i = 1; i < end; i++) canvas_draw_line(canvas, x+i,y[a]+v[a][i-1] , x+i,y[a]+v[a][i]); } else { for (int i = 1; i < end; i++) canvas_draw_line(canvas, x+i,y[a]+v[a][i-1] , x+i,y[a]+v[a][i]); for (int i = end+10; i < aw -cnt; i++) canvas_draw_line(canvas, x+i,y[a]+v[a][i-1] , x+i,y[a]+v[a][i]); } } // Wipe bar if (end < aw) canvas_draw_line(canvas, x+end,y[0], x+end,y[2]+ah-1); if (++end < aw) canvas_draw_line(canvas, x+end,y[0], x+end,y[2]+ah-1); if (++end < aw) canvas_draw_line(canvas, x+end,y[0], x+end,y[2]+ah-1); # endif