DMCP interface 03.17_023
Loading...
Searching...
No Matches
dmcp.h
1#ifndef __SYS_DMCP_H__
2#define __SYS_DMCP_H__
3
4
5
6#include <stdint.h>
7
8typedef unsigned int uint;
9
10// Remove space before ! in next line to enable Intro page
11/* ! \mainpage Introduction
12 *
13 * \section intro_sec Introduction
14 *
15 * This is the introduction.
16 *
17 * \section install_sec Installation
18 *
19 * \subsection step1 Step 1: Opening the box
20 *
21 * etc...
22 */
23
24
25// --------------------------------------
27// -------------------------------------
28
29
30// -----------------------------------
32// ----------------------------------
47// -----------------------------------
49// ----------------------------------
64// -----------------------------------
66// ----------------------------------
81// --------------------------------------
83// -------------------------------------
92// --------------------------------------
94// -------------------------------------
112// ----------------------------------------
114// ---------------------------------------
115
132// -----------------------------------
134// ----------------------------------
135
148// -----------------------------------
150// ----------------------------------
151
171#include "ff_ifc.h"
172
173#include "qrcode_ifc.h"
174
175
176
209void qrcode_disp(QRCode *qr, int xo, int yo, int z);
210
222// HW interface
223
228
233
237void LCD_power_off(int clear);
238
254void LCD_write_line(uint8_t * buf);
255
270// --------------------------------------
272// -------------------------------------
278// Configuration
279#define LCD_INVERT_XAXIS
280#define LCD_INVERT_DATA
281// -------
282
283
284#define BLT_OR 0
285#define BLT_ANDN 1
286#define BLT_XOR 2
288#define BLT_NONE 0
289#define BLT_SET 1
292#ifdef LCD_INVERT_DATA
293# define LCD_EMPTY_VALUE 0xFF
294# define LCD_SET_VALUE 0
295#else
296# define LCD_EMPTY_VALUE 0
297# define LCD_SET_VALUE 0xFF
298#endif
299
300#define LCD_X 400
301#define LCD_Y 240
302#define LCD_LINE_SIZE 50
303#define LCD_LINE_BUF_SIZE (LCD_LINE_SIZE+4)
310// Drawing Prototypes
311
316
322
328
333
338
342void lcd_refresh_lines(int ln, int cnt);
343
344
363void bitblt24(uint32_t x, uint32_t dx, uint32_t y, uint32_t val, int blt_op, int fill);
364
365
366
374uint8_t * lcd_line_addr(int y);
375
376
385void lcd_fill_rect(uint32_t x, uint32_t y, uint32_t dx, uint32_t dy, int val);
386
387
397void lcd_fill_ptrn(int x, int y, int dx, int dy, int ptrn1, int ptrn2);
398
399
407void lcd_fillLine(int ln, uint8_t val);
408
409
418void lcd_fillLines(int ln, uint8_t val, int cnt);
419
420
429
439
440
446uint8_t reverse_byte(uint8_t x);
447
461#define SCR_DIR "/SCREENS"
462
466#define OFFIMG_DIR "/OFFIMG"
467
468
469
470// Screenshot
479int create_screenshot(int report_error);
480
481// Place image into LCD buffer
482
494void lcd_draw_img(const char* img, uint32_t xo, uint32_t yo, uint32_t x, uint32_t y);
495
496
508void lcd_draw_img_direct(const char* img, uint32_t xo, uint32_t yo, uint32_t x, uint32_t y);
509
510
523void lcd_draw_img_part(const char* img, uint32_t xo, uint32_t yo, uint32_t x, uint32_t y, uint32_t dx);
524
525
526
527// Off images
533void draw_power_off_image(int allow_errors);
534
541
542#define BG_COL_PAPER 0xf4f2dc
543#define BG_COL_LCD 0xdff5cc
561int update_bmp_file_header(FIL* fp, int width, int height, uint32_t bg_color);
562
563
564// ----------------------------------
565
566
570// ----------------------------------
571
585typedef struct {
586 const char * name;
587 uint8_t width;
588 uint8_t height;
589 uint8_t baseline;
590 uint8_t first_char;
591 uint8_t char_cnt;
592 uint8_t scale_x;
593 uint8_t scale_y;
594 uint8_t const * data;
595 uint16_t const * offs;
597
598
602#define NR2T(x) (-(x)-1) // x<0
603
607#define T2NR(x) (-(x)-1) // x>=0
608
609
615typedef struct {
616 line_font_t const * f;
617 int16_t x;
618 int16_t y;
619 int16_t ln_offs;
620 int16_t y_top_grd;
621 int8_t ya;
622 int8_t yb;
623 int8_t xspc;
624 int8_t xoffs;
626 uint8_t fixed;
627 uint8_t inv;
628 uint8_t bgfill;
629 uint8_t lnfill;
630 uint8_t newln;
640 const uint8_t *post_offs;
642
643
644
650
656
662
663
669void lcd_setLine(disp_stat_t * ds, int ln_nr);
670
671
678void lcd_setXY(disp_stat_t * ds, int x, int y);
679
686
687
694
695
702
703
712void lcd_writeText(disp_stat_t * ds, const char* text);
713
730void lcd_textToBox(disp_stat_t * ds, int x, int width, char *text, int from_right, int align_right);
731
732
733
740int lcd_textWidth(disp_stat_t * ds, const char* text);
741
748int lcd_charWidth(disp_stat_t * ds, int c);
749
750
751
762int lcd_textToWidth(disp_stat_t * ds, const char* text, int expected_width, int * plen);
763
764
765
776int lcd_textToWidthR(disp_stat_t * ds, const char* text, int expected_width, int * plen);
777
778
779
787void lcd_writeTextWidth(disp_stat_t * ds, const char* text);
788
789
804int lcd_textForWidth(disp_stat_t * ds, const char* text, int expected_width, int * plen);
805
806
807
814int lcd_nextFontNr(int nr);
815
822int lcd_prevFontNr(int nr);
823
829void lcd_switchFont(disp_stat_t * ds, int nr);
830
835int lcd_toggleFontT(int nr);
836
837
843void lcd_print(disp_stat_t * ds, const char* fmt, ...);
844
845
851#define lcd_printAt(ds, ln, ...) do { lcd_setLine(ds, ln); lcd_print(ds, __VA_ARGS__); } while(0)
852
857#define lcd_printR(ds, ...) do { ds->inv=1; lcd_print(ds, __VA_ARGS__); ds->inv=0; } while(0)
858
864#define lcd_printRAt(ds, ln, ...) do { lcd_setLine(ds, ln); ds->inv=1; lcd_print(ds, __VA_ARGS__); ds->inv=0; } while(0)
865
869#define lcd_puts lcd_writeText
870
877#define lcd_putsAt(ds, ln, str) do { lcd_setLine(ds, ln); lcd_puts(ds,str); } while(0)
878
884#define lcd_putsR(ds, str) do { ds->inv=1; lcd_puts(ds,str); ds->inv=0; } while(0)
885
886
893#define lcd_putsRAt(ds, ln, str) do { lcd_setLine(ds, ln); ds->inv=1; lcd_puts(ds,str); ds->inv=0; } while(0)
894
899// ----------------------------------
900
901
908#define DISP_CALC 0
909#define DISP_SYS_MENU 2
910#define DISP_BOOTLOADER 4
911#define DISP_UNIMPLEMENTED 5
912#define DISP_USB_WRITE 6
913#define DISP_MSC_CONNECT_USB 7
914#define DISP_ABOUT 8
915#define DISP_FAT_FORMAT 9
916#define DISP_FAULT 11
917#define DISP_QSPI_BAD_CRC 12
918#define DISP_QSPI_CHECK 13
919#define DISP_MARK_REGION 15
920#define DISP_DISK_TEST 16
921#define DISP_DSKTST_CONNECT_USB 17
922#define DISP_QSPI_CONNECT_USB 18
923#define DISP_OFF_IMAGE_ERR 19
924#define DISP_HELP 21
925#define DISP_BOOTLDR_CON_USB 22
926#define DISP_PROD_DIAG 23
927#define DISP_POWER_CHECK 24
928#define DISP_FLASH_CONNECT_USB 26
929// ----
930
931
937int lcd_for_calc(int what);
938
949#define LCD_MENU_LINES 32
951#define MENU_KEY_LABEL_LEN 12
952#define MENU_KEY_COUNT 6
956
962void lcd_draw_menu_key(int nr, const char *key, int highlight);
963
969void lcd_draw_menu_keys(const char *keys[]);
970
975// ----------------------------------
976
977
984// === Date/Time
985
986
987
992#define PRINT_DT_TM_SZ 20
993
994
998typedef struct {
999 uint16_t year;
1000 uint8_t month;
1001 uint8_t day;
1002} dt_t;
1003
1007typedef struct {
1008 uint8_t hour;
1009 uint8_t min;
1010 uint8_t sec;
1011 uint8_t csec;
1017 uint8_t dow;
1018} tm_t;
1019
1024const char* get_wday_shortcut(int day); // 0 = Monday
1029const char* get_month_shortcut(int month); // 1 = Jan
1030
1035
1040
1052void print_dmy_date(char * s, int const sz, dt_t *dt, const char * prefix, int shortmon, char sep_arg);
1053
1064void print_clk24_time(char * t, int const sz, tm_t *tm, int disp_sec, int disp_dow);
1065
1069// ----------------------------------
1070
1080// System data block (SDB)
1081
1082
1083
1084
1085
1099typedef int get_flag_fn_t();
1100typedef void set_flag_fn_t(int val);
1112
1120
1121
1127
1133
1134
1140
1146
1155
1156
1157
1161typedef void void_fn_t();
1162
1166uint32_t calc_state;
1167
1174
1175
1176
1184
1185
1186
1187
1200
1205
1226
1233
1240
1253// ----------------------------------
1254
1255#define PLATFORM_VERSION "3.20"
1256
1257// System interface version
1258#define PLATFORM_IFC_CNR 3
1259#define PLATFORM_IFC_VER 15
1260
1261// STATIC_ASSERT ...
1262#define ASSERT_CONCAT_(a, b) a##b
1263#define ASSERT_CONCAT(a, b) ASSERT_CONCAT_(a, b)
1264#define STATIC_ASSERT(e,m) ;enum { ASSERT_CONCAT(assert_line_, __LINE__) = 1/(int)(!!(e)) }
1265//#define STATIC_ASSERT(expr, msg) typedef char ASSERT_CONCAT(static_assert_check_, __LINE__) [(expr) ? (+1) : (-1)]
1266
1267#define _STRINGIFY(x) #x
1268#define STR(x) _STRINGIFY(x)
1269
1270#define BIT(n) (1<<(n))
1271
1272
1273
1274
1300int qspi_user_write(uint8_t *data, int size, int offset, int erase);
1301
1306uint8_t * qspi_user_addr();
1307
1313
1314
1332void rtc_read(tm_t * tm, dt_t *dt);
1333
1339void rtc_write(tm_t * tm, dt_t *dt);
1340
1341
1346void rtc_update_time_sec(int delta_sec);
1347
1348
1356
1368void rtc_write_century(uint8_t cent);
1369
1375
1381
1389
1390
1400
1401
1402
1406#define RTCREGS_SS_PER_SEC 256
1407
1408
1416uint32_t get_rtc_ticks();
1417
1418
1419
1423typedef struct {
1424 uint32_t dt;
1425 uint32_t tm;
1426 uint16_t ss;
1428
1429
1433typedef struct {
1435 uint64_t dsec;
1436 uint32_t jday;
1437 uint32_t sec;
1438 uint32_t msec;
1440
1441
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1464void rtc_set_alarm(tm_t * tm, dt_t *dt);
1465
1466
1471
1472
1473
1486// ==== VBAT
1487
1493
1499
1505
1506// ==== USB functions
1512
1525// ==== Buzzer
1526
1527// Freq in mHz
1528
1533void start_buzzer_freq(uint32_t freq);
1534
1539
1545void set_buzzer(int pin1val, int pin2val);
1546
1547
1552
1557
1563
1583// ==== REGIONS
1584
1589uint32_t mark_region(uint32_t id);
1590
1595
1605// ==== RESET values
1606
1607#define NO_SPLASH_MAGIC 0xEACE7362
1608#define ALLOC_FAIL_MAGIC 0x363EACE7
1609#define CLEAN_RESET_MAGIC 0x3EACE736
1610#define RUN_DMCP_MAGIC 0x3CE7EA37
1617void set_reset_magic(uint32_t value);
1618
1619
1620
1621// === RESET STATE FILE
1622
1623#define RESET_STATE_FILE_SIZE 0x38
1630
1636
1646void set_reset_state_file(const char * str);
1647
1648
1653
1654
1681// Aux buf
1682#define AUX_BUF_SIZE (5*512)
1689
1695
1701
1702
1707
1716
1724// Program info structure
1725#define PROG_INFO_MAGIC 0xd377C0DE
1726
1727void program_main();
1728
1731typedef struct {
1732 uint32_t pgm_magic;
1733 uint32_t pgm_size;
1734 void * pgm_entry;
1735 uint32_t ifc_cnr;
1736 uint32_t ifc_ver;
1737 uint32_t qspi_size;
1738 uint32_t qspi_crc;
1739 char pgm_name[16];
1740 char pgm_ver[16];
1741} prog_info_t;
1742
1746// Keyboard
1747int read_key(int *k1, int *k2);
1748void suspended_bg_key_read();
1749void resume_bg_key_read();
1750
1751
1752// Timer
1753uint32_t get_tim1_timer();
1754
1755
1756// Base frequency 8MHz
1757#define TIMER_BASE_FREQ (8000000)
1758void start_timer2(uint32_t div32);
1759void start_timer3(uint16_t div16);
1760void stop_timer2();
1761void stop_timer3();
1762
1763
1764
1765
1766
1767
1768
1769
1770// ----------------------------------
1771
1819// Printer
1820#define PRINT_GRA_LN 1
1821#define PRINT_TXT_LN 0
1823#define MAX_82240_WIDTH 166
1824#define DFLT_82240_LINE_DUR 1800
1832void print_byte(uint8_t b);
1833
1834
1843void print_buffer(uint8_t * buf, int cnt);
1844
1845
1846
1852
1853
1854
1855// Printer delay in ms
1861
1866void printer_set_delay(uint val);
1867
1875void printer_advance_buf(int what);
1876
1884int printer_busy_for(int what);
1885
1890// ----------------------------------
1891
1907// --------------------------------
1908// Menu pages
1909// --------------------------------
1910
1911
1919typedef struct {
1920 const char * name;
1921 const uint8_t * items;
1931 const char* const * msg;
1932
1937} smenu_t;
1938
1939
1940// --------------------------------------
1942// -------------------------------------
1952extern const smenu_t MID_SYS_WARN;
1953extern const smenu_t MID_SYSTEM;
1954extern const smenu_t MID_FAT_FORMAT;
1955extern const smenu_t MID_DSKTST_ENTER;
1956extern const smenu_t MID_PROD_DIAG;
1957extern const smenu_t MID_PROD_DIAG2;
1958extern const smenu_t MID_DMCP;
1959extern const smenu_t MID_BASE_SETUP;
1967// --------------------------------------
1969// -------------------------------------
1980#define MI_SYSTEM 192
1981#define MI_BOOTLOADER 193
1982#define MI_QSPI_LOADER 194
1983#define MI_DIAG 195
1984#define MI_MSC 196
1985#define MI_ABOUT 197
1986#define MI_BASE_SETUP 198
1987#define MI_BEEP_MUTE 199
1988#define MI_SYSTEM_ENTER 200
1989#define MI_RELOAD_RESET 201
1990#define MI_SET_TIME 202
1991#define MI_SET_DATE 203
1992#define MI_FF_ENTER 204
1993#define MI_FAT_FORMAT 205
1994#define MI_DISK_TEST 206
1995#define MI_DSKTST_ENTER 207
1996#define MI_DISK_INFO 208
1997#define MI_LOAD_QSPI 209
1998#define MI_SLOW_AUTOREP 210
2000#define MI_EXIT 211
2002#define MI_KBD_TEST 212
2003#define MI_LCD_TEST 213
2004#define MI_IR_TEST 214
2005#define MI_BEEP_TEST 215
2006#define MI_DMCP_MENU 216
2008#define MI_SELF_TEST 217
2010#define MI_RAMFLASH 218
2012#define MI_PGM_INFO 219
2013#define MI_PGM_RUN 220
2014#define MI_PGM_LOAD 221
2016#define MI_RUN_DMCP 222
2018#define MI_OFF_MODE 223
2019// --------------------------------
2020
2021
2028typedef int run_menu_item_fn_t(uint8_t line_id);
2029
2033typedef const char * menu_line_str_fn_t(uint8_t line_id, char * s, const int slen);
2034
2035
2036// --------------------------------------
2038// -------------------------------------
2043// --------------------------------
2044#define MENU_MAX_LEVEL 8
2046#define MENU_FONT t24
2047#define MENU_LCD_LINES 8
2049#define MENU_RESET 0
2050#define MENU_ADD 1
2052#define MRET_UNIMPL -1
2053#define MRET_EXIT -2
2059#define MRET_LEAVELIMIT 512
2060// --------------------------------
2065// === Base menu functions ===
2074int handle_menu(const smenu_t * menu_id, int action, int cur_line);
2075
2076
2084int run_menu_item_sys(uint8_t line_id);
2085
2086
2096int run_menu_item(uint8_t line_id);
2097
2109const char * menu_line_str(uint8_t line_id, char * ln, const int ln_len);
2110
2111
2112// --------------------------------------
2114// -------------------------------------
2122// === Menu formatting support
2128const char * rb_str(int val);
2129
2130
2136const char * sel_str(int val);
2137
2146char * opt_str(char * s, char const *txt, int val);
2147
2155char * date_str(char * s, const char * txt);
2156
2164char * time_str(char * s, const char * txt);
2165
2185
2190
2191// === Base dialogs
2195void disp_disk_info(const char * hdr);
2196
2206
2207// === File selection ===
2208
2210#define MAX_PGM_FN_LEN 24
2221typedef int (*file_sel_fn_t)(const char * fpath, const char * fname, void * data);
2222
2235int file_selection_screen(const char * title, const char * base_dir, const char * ext, file_sel_fn_t sel_fn,
2236 int disp_new, int overwrite_check, void * data);
2237
2238
2256// ---------------------------------------------------
2257// Item selection screen
2258// ---------------------------------------------------
2259
2267#define ISEL_FILL_ITEMS -100
2268
2276#define ISEL_KEY_PRESSED -101
2277
2285#define ISEL_EXIT -102
2286
2294#define ISEL_POST_DRAW -2
2295
2303#define ISEL_PRE_DRAW -1
2304
2305
2309typedef uint16_t list_item_t;
2310
2311struct item_sel_state;
2312
2316typedef void isel_disp_line_fn_t(int lnr, list_item_t *fis, int cur_fnr, struct item_sel_state *st);
2317
2321typedef void fis_name_fn_t(struct item_sel_state *st, list_item_t fis, char * nmbuf, int len);
2322
2323
2327typedef struct item_sel_state {
2328 int8_t fnr;
2329 int8_t top_nr;
2330 int8_t lncnt;
2331 int8_t roll_lines;
2332 int8_t key;
2337 int fcnt;
2339 // -- Set by user --
2340 const char * title;
2341 char * title2;
2343 char * lnbuf;
2346 void * data;
2347 void * items;
2350
2351
2359
2360
2368
2369
2376
2377
2388void item_sel_header(item_sel_state_t *st, int update);
2389
2390
2399// ---------------------------------------------------
2400
2419void msg_box(disp_stat_t * ds, const char * txt, int inv);
2420
2423// ----------------------------------
2424
2425
2426#define MAX_LCD_LINE_LEN 40
2427
2428
2429// -----------------------
2430// Bit masks operations
2431// -----------------------
2432#define VAL(x,val) ((x) & (val))
2433#define CLR(x,val) val &= ~(x)
2434#define SET(x,val) val |= (x)
2435#define MSK(x,val) (~(x) & (val))
2436#define SETMSK(x,m,val) val = (MSK(m,val)|(x))
2437//#define SETBY(c,x,val) (c) ? SET(x,val) : CLR(x,val)
2438#define SETBY(c,x,val) if (c) { SET(x,val); } else { CLR(x,val); }
2439
2440
2441
2442
2443
2444
2445#define ST(x) VAL(x,calc_state)
2446#define VAL_ST(x) VAL(x,calc_state)
2447#define CLR_ST(x) CLR(x,calc_state)
2448#define SET_ST(x) SET(x,calc_state)
2449#define SETMSK_ST(x,m) SETMSK(x,m,calc_state)
2450#define SETBY_ST(c,x) SETBY(c,x,calc_state)
2451
2452
2453
2454#define STAT_CLEAN_RESET BIT(0)
2455#define STAT_RUNNING BIT(1)
2456#define STAT_SUSPENDED BIT(2)
2457#define STAT_KEYUP_WAIT BIT(3)
2458#define STAT_OFF BIT(4)
2459#define STAT_SOFT_OFF BIT(5)
2460#define STAT_MENU BIT(6)
2461#define STAT_BEEP_MUTE BIT(7)
2462#define STAT_SLOW_AUTOREP BIT(8)
2463#define STAT_PGM_END BIT(9)
2464#define STAT_CLK_WKUP_ENABLE BIT(10)
2465#define STAT_CLK_WKUP_SECONDS BIT(11) // 0 - wakeup runner each minute, 1 - each second
2466#define STAT_CLK_WKUP_FLAG BIT(12)
2467#define STAT_DMY BIT(13)
2468#define STAT_CLK24 BIT(14)
2469#define STAT_POWER_CHANGE BIT(15)
2470
2471#define STAT_HW_BEEP BIT(28)
2472#define STAT_HW_USB BIT(29)
2473#define STAT_HW_IR BIT(30)
2474
2475#define STAT_HW (STAT_HW_BEEP | STAT_HW_USB | STAT_HW_IR)
2476
2477
2478
2479
2480
2481
2482// --------------------------------------
2483
2484// -------------------------------------
2493#define MAX_KEY_NR 37
2494#define MAX_FNKEY_NR 43
2497// -------------
2498// Key codes
2499// -------------
2500
2501#define KEY_SIGMA 1
2502#define KEY_INV 2
2503#define KEY_SQRT 3
2504#define KEY_LOG 4
2505#define KEY_LN 5
2506#define KEY_XEQ 6
2507#define KEY_STO 7
2508#define KEY_RCL 8
2509#define KEY_RDN 9
2510#define KEY_SIN 10
2511#define KEY_COS 11
2512#define KEY_TAN 12
2513#define KEY_ENTER 13
2514#define KEY_SWAP 14
2515#define KEY_CHS 15
2516#define KEY_E 16
2517#define KEY_BSP 17
2518#define KEY_UP 18
2519#define KEY_7 19
2520#define KEY_8 20
2521#define KEY_9 21
2522#define KEY_DIV 22
2523#define KEY_DOWN 23
2524#define KEY_4 24
2525#define KEY_5 25
2526#define KEY_6 26
2527#define KEY_MUL 27
2528#define KEY_SHIFT 28
2529#define KEY_1 29
2530#define KEY_2 30
2531#define KEY_3 31
2532#define KEY_SUB 32
2533#define KEY_EXIT 33
2534#define KEY_0 34
2535#define KEY_DOT 35
2536#define KEY_RUN 36
2537#define KEY_ADD 37
2539#define KEY_F1 38
2540#define KEY_F2 39
2541#define KEY_F3 40
2542#define KEY_F4 41
2543#define KEY_F5 42
2544#define KEY_F6 43
2546#define KEY_SCREENSHOT 44
2547#define KEY_SH_UP 45
2548#define KEY_SH_DOWN 46
2550#define KEY_DOUBLE_RELEASE 99
2552#define KEY_PAGEUP KEY_DIV
2553#define KEY_PAGEDOWN KEY_MUL
2564// ---------------------------
2565// Key buffer functions
2566// ---------------------------
2567
2573
2579int key_push(int k1);
2580
2586
2592
2593
2598int key_pop_last();
2605
2606
2607// Key functions
2613int key_to_nr(int key);
2614
2615// Key
2621
2631
2637
2638
2639
2664int runner_get_key(int *repeat);
2665
2677int runner_get_key_delay(int *repeat, uint timeout, uint rep0, uint rep1, uint rep1tout);
2678
2679
2680// ---------------------------
2681// Runner get key
2682// ---------------------------
2683
2698int runner_key_tout_value(const int first);
2699
2700
2701
2711// Autorepeat
2716
2721
2733void runner_key_tout_init(const int slow);
2734
2735
2736
2747// Auto off
2748
2749
2750#define AUTO_OFF_SECONDS 600
2751#define AUTO_OFF_MENU 300
2758
2764
2770
2776
2794// Check and create dir
2795// returns 0 on success
2796int check_create_dir(const char * dir);
2797
2803int file_exists(const char * fn);
2804
2810int file_size(const char * fn);
2811
2812
2828void make_date_filename(char * fn, const char * dir, const char * ext);
2829
2830
2850
2858
2864
2865
2881
2886void set_fat_label(const char * label);
2887
2904void sys_timer_disable(int timer_ix);
2905
2911void sys_timer_start(int timer_ix, uint32_t ms_value);
2912
2918int sys_timer_active(int timer_ix);
2919
2924int sys_timer_timeout(int timer_ix);
2925
2926
2927
2931void sys_delay(uint32_t ms_delay);
2932
2933// Current systick count
2934
2944
2950
2964// Critical sections
2965
2970
2975
2976// Sleep
2977
2982
2983// Free memory
2984
2990
2991// ==== HW ID
2992
2999uint8_t get_hw_id();
3000
3015// ---------------------------
3016// Flashing
3017// ---------------------------
3018
3019
3024
3032int sys_flash_erase_block(void* start_addr, uint32_t size);
3033
3042int sys_flash_write_block(void* dst_addr, uint8_t * src_buf, uint32_t size);
3043
3046// ---------------------------
3047
3048
3067// ----------------------------------
3068
3069
3070// Help
3071#define HELP_INDEX "/HELP/index.htm"
3079
3080
3086void run_help_file(const char * help_file);
3087
3088
3094typedef void user_style_fn_t(char *class_attr, disp_stat_t *ds);
3095
3096
3111void run_help_file_style(const char * help_file, user_style_fn_t *user_style_fn);
3112
3113
3116// ----------------------------------
3117
3118
3119
3120#endif
3121
void stop_buzzer()
Stop tone.
int get_beep_volume()
Returns current tone volume.
void beep_volume_down()
Decrease tone volume.
void set_buzzer(int pin1val, int pin2val)
Set buzzer IO pins to given values.
void beep_volume_up()
Increase tone volume.
void start_buzzer_freq(uint32_t freq)
Start tone.
int sys_disk_write_enable(int val)
(En/Dis)able disk write mode
void set_fat_label(const char *label)
Sets disk label.
int sys_disk_ok()
Returns current disk status.
int sys_is_disk_write_enable()
Returns current disk write state.
void sys_disk_check_valid()
Update disk state based on low level disk state.
int check_create_dir(const char *dir)
Creates directory if doesn't exist.
int file_exists(const char *fn)
Check whether file exists.
int file_size(const char *fn)
Returns file size.
void make_date_filename(char *fn, const char *dir, const char *ext)
Creates filename using current date/time.
void run_help_file(const char *help_file)
Starts help screen.
void run_help_file_style(const char *help_file, user_style_fn_t *user_style_fn)
Starts help screen.
void user_style_fn_t(char *class_attr, disp_stat_t *ds)
Prototype for user style callback function.
Definition dmcp.h:3094
void run_help()
Starts default help screen.
void msg_box(disp_stat_t *ds, const char *txt, int inv)
Display message box.
int item_sel_engine(item_sel_state_t *st, int upd)
Main item selection engine loop.
void item_sel_header(item_sel_state_t *st, int update)
Display header for item selection dialog.
void isel_disp_line_fn_t(int lnr, list_item_t *fis, int cur_fnr, struct item_sel_state *st)
Display line callback prototype.
Definition dmcp.h:2316
void item_sel_reinit(item_sel_state_t *st)
Cleanup before items reload.
uint16_t list_item_t
Type for item list item_sel_state::fis.
Definition dmcp.h:2309
struct item_sel_state item_sel_state_t
Item selection state.
void item_sel_init(item_sel_state_t *st)
Initializes item sel structure.
void fis_name_fn_t(struct item_sel_state *st, list_item_t fis, char *nmbuf, int len)
Callback function for getting list item name.
Definition dmcp.h:2321
int(* file_sel_fn_t)(const char *fpath, const char *fname, void *data)
"File selected" callback for file_selection_screen()
Definition dmcp.h:2221
int power_check_screen()
Check power voltage and requests USB connection if power is low.
void run_set_time()
Activates "Set Time" screen.
void disp_disk_info(const char *hdr)
Activates "Disk Info" screen.
int file_selection_screen(const char *title, const char *base_dir, const char *ext, file_sel_fn_t sel_fn, int disp_new, int overwrite_check, void *data)
Displays file selection dialog.
void run_set_date()
Activates "Set Date" screen.
int sys_last_key()
Returns currently pressed key code.
int key_tail()
Check for key in key buffer.
int key_to_nr(int key)
Returns corresponding number for key code key.
void wait_for_key_press()
Wait for key press.
void key_pop_all()
Remove all keys from key buffer.
int key_pop()
Remove and return next key from key buffer.
int key_push(int k1)
Push key at the end of key buffer.
void wait_for_key_release(int tout)
Wait for key release or timeout.
int key_empty()
Check whether key buffer is empty.
int runner_key_tout_value(const int first)
Returns key repeat timeout value.
int runner_get_key(int *repeat)
Wait for key event or timeout.
int runner_get_key_delay(int *repeat, uint timeout, uint rep0, uint rep1, uint rep1tout)
Wait for key event or timeout with more autorepeat and timeout control.
int toggle_slow_autorepeat()
Toggle slow_autorepeat flag in system.
int is_slow_autorepeat()
Query slow autorepeat flag value.
void runner_key_tout_init(const int slow)
Initialize slow autorepeat flag.
void lcd_forced_refresh()
Write immediately whole LCD buffer to LCD regardless of dirty flags.
void lcd_refresh_dma()
Start non-blocking LCD refresh, LCD refresh continues in background (only dirty lines are updated)
uint8_t reverse_byte(uint8_t x)
Swaps bits in byte.
void lcd_refresh()
Start lcd refresh - could be blocking or non-blocking based on current system default (only dirty lin...
void lcd_set_buf_cleared(int val)
Sets 'LCD buffer cleared' flag.
int lcd_get_buf_cleared()
Reads 'LCD buffer cleared' flag.
void lcd_fillLines(int ln, uint8_t val, int cnt)
Fill LCD lines with value.
void lcd_fill_rect(uint32_t x, uint32_t y, uint32_t dx, uint32_t dy, int val)
Fills rectangular area of LCD.
void lcd_refresh_lines(int ln, int cnt)
Write immediately lines [ln .. ln+cnt-1] to LCD.
void lcd_refresh_wait()
Issue LCD refresh and wait until done (only dirty lines are updated)
void lcd_clear_buf()
Clear LCD buffer.
void lcd_fillLine(int ln, uint8_t val)
Fill LCD line with value.
uint8_t * lcd_line_addr(int y)
Returns pointer to line data (doesn't depend on LCD_INVERT_XAXIS)
void lcd_fill_ptrn(int x, int y, int dx, int dy, int ptrn1, int ptrn2)
Fills rectangular area with prescribed pattern.
void bitblt24(uint32_t x, uint32_t dx, uint32_t y, uint32_t val, int blt_op, int fill)
Blits dx bits from val at position x, y.
void draw_power_off_image(int allow_errors)
Draw subsequent image from OFFIMG_DIR directory.
int update_bmp_file_header(FIL *fp, int width, int height, uint32_t bg_color)
Write or update .bmp file header.
void lcd_draw_img_direct(const char *img, uint32_t xo, uint32_t yo, uint32_t x, uint32_t y)
Put image directly on LCD.
void lcd_draw_img(const char *img, uint32_t xo, uint32_t yo, uint32_t x, uint32_t y)
Put image into LCD buffer.
void reset_off_image_cycle()
Resets off image loop to first image.
void lcd_draw_img_part(const char *img, uint32_t xo, uint32_t yo, uint32_t x, uint32_t y, uint32_t dx)
Put part of image into LCD buffer.
int create_screenshot(int report_error)
Create screenshot.
int lcd_for_calc(int what)
Displays predefined static screen by id.
void lcd_draw_menu_key(int nr, const char *key, int highlight)
void lcd_draw_menu_keys(const char *keys[])
void lcd_draw_menu_bg()
int lcd_nextFontNr(int nr)
Get next (bigger) font number.
int lcd_fontWidth(disp_stat_t *ds)
Returns width of font.
int lcd_charWidth(disp_stat_t *ds, int c)
Returns width of character.
int lcd_toggleFontT(int nr)
Toggle font number between normal and TT font.
void lcd_print(disp_stat_t *ds, const char *fmt,...)
Print formatted string.
void lcd_setXY(disp_stat_t *ds, int x, int y)
Jump to pixel position (x,y)
int lcd_baseHeight(disp_stat_t *ds)
Returns baseline position.
void lcd_writeClr(disp_stat_t *ds)
Jump to first line.
void lcd_writeNl(disp_stat_t *ds)
Jump to next line.
void lcd_textToBox(disp_stat_t *ds, int x, int width, char *text, int from_right, int align_right)
Display text in confined area.
int lcd_textToWidth(disp_stat_t *ds, const char *text, int expected_width, int *plen)
Determines which part of text fits in expected_width.
void lcd_prevLn(disp_stat_t *ds)
Jump to previous line.
void lcd_switchFont(disp_stat_t *ds, int nr)
Set current font to given font number.
void lcd_writeTextWidth(disp_stat_t *ds, const char *text)
Updates display state as if lcd_writeText() was be called.
void lcd_setLine(disp_stat_t *ds, int ln_nr)
Jump to given line.
int lcd_lineHeight(disp_stat_t *ds)
Returns line height.
void lcd_writeText(disp_stat_t *ds, const char *text)
Display text.
int lcd_textForWidth(disp_stat_t *ds, const char *text, int expected_width, int *plen)
Calculate text width without breaking words
int lcd_textWidth(disp_stat_t *ds, const char *text)
Calculates width of text.
int lcd_textToWidthR(disp_stat_t *ds, const char *text, int expected_width, int *plen)
Determines which part of text from the end of the string fits in expected_width.
int lcd_prevFontNr(int nr)
Get previous (smaller) font number.
void LCD_power_off(int clear)
Powers off the LCD hardware.
void LCD_power_on()
Powers on the LCD hardware.
void LCD_write_line(uint8_t *buf)
Sends line data to LCD.
void LCD_clear()
Sends clear command to LCD.
const char * sel_str(int val)
Returns 'cross' selection string.
char * opt_str(char *s, char const *txt, int val)
Format selection string.
const char * rb_str(int val)
Returns 'dot' selection string.
char * date_str(char *s, const char *txt)
Formats text followed by date.
char * time_str(char *s, const char *txt)
Formats text followed by time.
const smenu_t MID_SYSTEM
System menu.
const smenu_t MID_DMCP
Top level system menu.
const smenu_t MID_SYS_WARN
System menu entry warning.
const smenu_t MID_PROD_DIAG2
Production diagnostic screen - selftest version in main menu.
const smenu_t MID_DSKTST_ENTER
Disk test menu.
const smenu_t MID_FAT_FORMAT
FAT format menu.
const smenu_t MID_BASE_SETUP
System setup menu.
const smenu_t MID_PROD_DIAG
Production diagnostic screen.
int run_menu_item_sys(uint8_t line_id)
Invoke particular sys menu function.
int run_menu_item_fn_t(uint8_t line_id)
Prototype for run_menu_item function.
Definition dmcp.h:2028
const char * menu_line_str(uint8_t line_id, char *ln, const int ln_len)
(Defined by user) Should return string representation of given menu item
const char * menu_line_str_fn_t(uint8_t line_id, char *s, const int slen)
Prototype for menu_line_str function.
Definition dmcp.h:2033
int handle_menu(const smenu_t *menu_id, int action, int cur_line)
Starts menu screen.
int run_menu_item(uint8_t line_id)
(Defined by user) Invoke functionality for selected menu item
int print_is_ready()
Check whether IR hw is ready for send.
void printer_set_delay(uint val)
Sets printer line delay.
void print_byte(uint8_t b)
Send byte to printer.
void print_buffer(uint8_t *buf, int cnt)
Send bytes to printer.
void printer_advance_buf(int what)
Add line type to printer buffer emulation.
int printer_busy_for(int what)
Wait until printer buffer is free for given line type.
uint printer_get_delay()
Returns current printer line delay.
uint32_t read_power_voltage()
Reads power voltage.
int usb_powered()
Returns USB powered status.
int get_lowbat_state()
Returns low-battery flag.
int get_vbat()
Returns battery voltage.
void qrcode_disp(QRCode *qr, int xo, int yo, int z)
Displays generated QR code.
int qspi_user_size()
Returns size (in bytes) of the user QSPI data area.
uint8_t * qspi_user_addr()
Returns pointer to the user QSPI data area.
int qspi_user_write(uint8_t *data, int size, int offset, int erase)
Writes data to the user QSPI data area.
uint8_t rtc_read_sec()
Reads current second.
void rtc_write(tm_t *tm, dt_t *dt)
Set date and time.
uint8_t rtc_read_century()
Read current century.
void rtc_check_unset()
Check whether RTC was updated from cold start state. Displays set time and set date dialogs if it was...
void rtc_wakeup_delay()
Workaround for CPU bug.
uint8_t rtc_read_min()
Reads current minute.
uint32_t get_rtc_ticks()
Get time ticks (linear time)
void rtc_cancel_alarm()
Cancels any pending RTC alarm.
void rtc_write_century(uint8_t cent)
Write century.
void rtc_set_alarm(tm_t *tm, dt_t *dt)
Plants RTC alarm at given time.
rtc_ticks_stat_t * rtc_update_ticks()
Returns pointer to currently updated RTC ticks structure.
void rtc_update_time_sec(int delta_sec)
Shift time by given amount of seconds.
void rtc_read(tm_t *tm, dt_t *dt)
Read current data and time.
void set_flag_fn_t(int val)
Set flag function prototype.
Definition dmcp.h:1100
set_flag_fn_t * set_flag_clk24
Setter callback for CLK24 flag.
Definition dmcp.h:1132
set_flag_fn_t * set_beep_mute
Setter callback for Beep Mute flag.
Definition dmcp.h:1145
get_flag_fn_t * get_flag_dmy
Getter callback for DMY flag.
Definition dmcp.h:1111
get_flag_fn_t * is_flag_clk24
Getter callback for CLK24 flag.
Definition dmcp.h:1126
int get_flag_fn_t()
Get flag function prototype.
Definition dmcp.h:1099
get_flag_fn_t * is_beep_mute
Getter callback for Beep Mute flag.
Definition dmcp.h:1139
set_flag_fn_t * set_flag_dmy
Setter callback for DMY flag.
Definition dmcp.h:1119
disp_stat_t * t24
Font state for normal system font.
Definition dmcp.h:1232
disp_stat_t * fReg
Font state for user font.
Definition dmcp.h:1239
disp_stat_t * t20
Font state for small system font.
Definition dmcp.h:1225
run_menu_item_fn_t * run_menu_item_app
System callback variable to run menu item (see Menu system for details)
Definition dmcp.h:1199
menu_line_str_fn_t * menu_line_str_app
System callback variable to get menu item string (see Menu system for details)
Definition dmcp.h:1204
int is_menu_auto_off()
Check menu auto-off state.
int is_auto_off()
Check auto-off state.
int sys_auto_off_cnt()
Returns remaining auto-off seconds.
void reset_auto_off()
Resets auto-off timer.
char * aux_buf_ptr()
Get pointer to aux memory buffer.
int sys_write_buf_used()
Get 'write-buffer-used' flag.
void sys_clear_write_buf_used()
Clear 'write-buffer-used' flag.
int write_buf_size()
Get write buffer size.
void * write_buf_ptr()
Get pointer to write buffer.
void sys_flashing_finish()
Disable flashing.
int sys_flash_write_block(void *dst_addr, uint8_t *src_buf, uint32_t size)
Write data to flash.
void sys_flashing_init()
Enable flashing.
int sys_flash_erase_block(void *start_addr, uint32_t size)
Flash block erase.
void sys_critical_end()
Leave critical section.
int sys_free_mem()
Query free memory for malloc.
void sys_sleep()
Suspend program until next event.
uint8_t get_hw_id()
Query hardware id.
void sys_critical_start()
Enter critical section.
uint32_t mark_region(uint32_t id)
Mark executed code.
void no_region()
Clear current region.
char * get_reset_state_file()
Get pointer to reset state file.
int is_reset_state_file()
Check for reset state file.
void set_reset_magic(uint32_t value)
Set reset constant.
void set_reset_state_file(const char *str)
Set reset state file to given string.
void sys_reset()
Invoke CPU reset.
int sys_timer_active(int timer_ix)
Check timer running status.
void sys_timer_disable(int timer_ix)
Disables system timer.
int sys_timer_timeout(int timer_ix)
Check for timer timeout.
void sys_timer_start(int timer_ix, uint32_t ms_value)
Starts system timer (non-periodic pooling timer)
uint32_t sys_current_ms()
Get current millisecond.
void sys_delay(uint32_t ms_delay)
Delays program by specified number of milliseconds.
uint32_t sys_tick_count()
Get current tick count.
const char * key_to_alpha_table
Key to alpha translation table.
Definition dmcp.h:1183
uint32_t calc_state
Main calculator state flags.
Definition dmcp.h:1166
void void_fn_t()
General prototype for void function.
Definition dmcp.h:1161
FIL * ppgm_fp
Pointer to file handle provided by system.
Definition dmcp.h:1173
void_fn_t * after_fat_format
This callback function is called by system after FAT disk format (if set)
Definition dmcp.h:1154
void print_clk24_time(char *t, int const sz, tm_t *tm, int disp_sec, int disp_dow)
Formats time according to supplied and system flags.
const char * get_month_shortcut(int month)
Three character shortcut of month name.
const char * get_wday_shortcut(int day)
Three character shortcut of day name.
void print_dmy_date(char *s, int const sz, dt_t *dt, const char *prefix, int shortmon, char sep_arg)
Formats date according to supplied and system flags.
int julian_day(dt_t *d)
Calculates Julian day for given date.
void julian_to_date(int julian_day, dt_t *d)
Calculates date for given Julian day.
FatFs file structure used in file operations.
Definition ff_ifc.h:66
QR code data structure.
Definition qrcode_ifc.h:76
Font display state.
Definition dmcp.h:615
int8_t xspc
Space between chars.
Definition dmcp.h:623
int8_t xoffs
X offset for first char on line.
Definition dmcp.h:624
line_font_t const * f
Current font.
Definition dmcp.h:616
int16_t y_top_grd
Don't overwrite anything above this LCD y-line.
Definition dmcp.h:620
const uint8_t * post_offs
Array with character x offsets (optional)
Definition dmcp.h:640
uint8_t lnfill
Fill whole line before writing line.
Definition dmcp.h:629
int8_t ya
Lines to fill above the font.
Definition dmcp.h:621
int8_t yb
Lines to fill below the font.
Definition dmcp.h:622
uint8_t fixed
Draw in fixed width.
Definition dmcp.h:626
uint8_t bgfill
Fill background while drawing.
Definition dmcp.h:628
int16_t x
Current x position.
Definition dmcp.h:617
uint8_t inv
Draw inverted.
Definition dmcp.h:627
int16_t ln_offs
Line offset (when displaying by line numbers)
Definition dmcp.h:619
uint8_t newln
Jump to new line after writing line.
Definition dmcp.h:630
int16_t y
Current y position.
Definition dmcp.h:618
Date info structure.
Definition dmcp.h:998
uint8_t month
Month 1-12.
Definition dmcp.h:1000
uint16_t year
Year.
Definition dmcp.h:999
uint8_t day
Day 1-31.
Definition dmcp.h:1001
Item selection state.
Definition dmcp.h:2327
char * lnbuf
Line buffer (optional - only app wants to use it for line drawing)
Definition dmcp.h:2343
fis_name_fn_t * fis_name_fn
Name callback.
Definition dmcp.h:2335
list_item_t * fis
List items.
Definition dmcp.h:2334
int8_t top_nr
Item number currently first on LCD.
Definition dmcp.h:2329
isel_disp_line_fn_t * disp_line_fn
Line draw function.
Definition dmcp.h:2342
void * data
Custom data (useful for line draw callback)
Definition dmcp.h:2346
int lnsize
Size of lnbuf.
Definition dmcp.h:2344
int8_t lncnt
Number of LCD lines available.
Definition dmcp.h:2330
const char * title
Screen title.
Definition dmcp.h:2340
int max_items
Maximal number of items.
Definition dmcp.h:2336
int8_t roll_lines
How many lines should remain visible while scrolling up/down.
Definition dmcp.h:2331
char * title2
(Optional) Right part of the title (aligned right)
Definition dmcp.h:2341
void * items
Custom data for items.
Definition dmcp.h:2347
int8_t key
key code, set by engine for ISEL_KEY_PRESSED
Definition dmcp.h:2332
int8_t fnr
Currently selected list item.
Definition dmcp.h:2328
int fcnt
Current item count.
Definition dmcp.h:2337
Font structure.
Definition dmcp.h:585
uint8_t width
Font width in pixels
Definition dmcp.h:587
uint8_t char_cnt
Number of characters
Definition dmcp.h:591
uint8_t first_char
Code of first character
Definition dmcp.h:590
uint16_t const * offs
Character offsets in data.
Definition dmcp.h:595
const char * name
Font name
Definition dmcp.h:586
uint8_t const * data
Font data.
Definition dmcp.h:594
uint8_t scale_x
Scaling factor in x direction
Definition dmcp.h:592
uint8_t baseline
Baseline in pixels
Definition dmcp.h:589
uint8_t scale_y
Scaling factor in y direction
Definition dmcp.h:593
uint8_t height
Font height in pixels
Definition dmcp.h:588
RTC ticks state.
Definition dmcp.h:1433
uint32_t sec
seconds in day
Definition dmcp.h:1437
rtc_time_regs_t regs
Time stamp.
Definition dmcp.h:1434
uint32_t jday
julian day
Definition dmcp.h:1436
uint32_t msec
seconds in day corresponding to current minute (for easy sub-minute updates)
Definition dmcp.h:1438
uint64_t dsec
julian day * seconds_per_day
Definition dmcp.h:1435
RTC time stamp parts.
Definition dmcp.h:1423
uint16_t ss
Subsecond part.
Definition dmcp.h:1426
uint32_t tm
Date part.
Definition dmcp.h:1425
uint32_t dt
Time part.
Definition dmcp.h:1424
Single menu screen definition.
Definition dmcp.h:1919
const char *const * msg
Message displayed above menu. NULL = no message.
Definition dmcp.h:1931
const uint8_t * items
Menu items.
Definition dmcp.h:1921
void_fn_t * post_disp
Function called after the menu is drawn to LCD.
Definition dmcp.h:1936
const char * name
Display name of the menu.
Definition dmcp.h:1920
Time info structure.
Definition dmcp.h:1007
uint8_t csec
Centiseconds (1/100s)
Definition dmcp.h:1011
uint8_t dow
Day of week.
Definition dmcp.h:1017
uint8_t min
Minutes.
Definition dmcp.h:1009
uint8_t sec
Seconds.
Definition dmcp.h:1010
uint8_t hour
Hours.
Definition dmcp.h:1008