Thu, 07 Oct 2021 22:24:45 +0200
Possibly fix the 'reset FP while running' case
1
3021fc79cc3b
kinf of working prototype using a ILI9341 based TFT
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
1 | #include "stdio.h" |
4
219766126afb
another attempt using a more complete support of the protocol and async serial stuff
David Douard <david.douard@logilab.fr>
parents:
3
diff
changeset
|
2 | |
21 | 3 | #include <mbed.h> |
4 | #include <rtos.h> | |
5 | #include <string> | |
4
219766126afb
another attempt using a more complete support of the protocol and async serial stuff
David Douard <david.douard@logilab.fr>
parents:
3
diff
changeset
|
6 | |
5 | 7 | #include "hp34comm.h" |
37
07e8ca2bdf6d
Extracted the display related functions in a Display class
David Douard <david.douard@sdf3.org>
parents:
36
diff
changeset
|
8 | #include "display.h" |
1
3021fc79cc3b
kinf of working prototype using a ILI9341 based TFT
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
9 | |
19 | 10 | #include "QEI.h" |
18
4fd621551d55
[full replacement] implement a state machine for Rx
David Douard <david.douard@logilab.fr>
parents:
17
diff
changeset
|
11 | #include "Keypad.h" |
4fd621551d55
[full replacement] implement a state machine for Rx
David Douard <david.douard@logilab.fr>
parents:
17
diff
changeset
|
12 | |
32
bc1d6ecbb0cc
Update the main code: extract headers and use a CircularBuffer for key events
David Douard <david.douard@sdf3.org>
parents:
28
diff
changeset
|
13 | // Pins and device declarations |
bc1d6ecbb0cc
Update the main code: extract headers and use a CircularBuffer for key events
David Douard <david.douard@sdf3.org>
parents:
28
diff
changeset
|
14 | #include "def_hp34970_fp.h" |
8 | 15 | |
32
bc1d6ecbb0cc
Update the main code: extract headers and use a CircularBuffer for key events
David Douard <david.douard@sdf3.org>
parents:
28
diff
changeset
|
16 | #include "platform/CircularBuffer.h" |
1
3021fc79cc3b
kinf of working prototype using a ILI9341 based TFT
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
17 | |
37
07e8ca2bdf6d
Extracted the display related functions in a Display class
David Douard <david.douard@sdf3.org>
parents:
36
diff
changeset
|
18 | Display *dsp; |
07e8ca2bdf6d
Extracted the display related functions in a Display class
David Douard <david.douard@sdf3.org>
parents:
36
diff
changeset
|
19 | volatile bool splashscreen; |
19 | 20 | HPSerial *hp; |
44 | 21 | Thread tdsp(osPriorityNormal, OS_STACK_SIZE, nullptr, "DSP"); |
22 | Ticker dsp_refresh; | |
68
a0f97359f266
Revert to soft reset on RST irq
David Douard <david.douard@sdfa3.org>
parents:
65
diff
changeset
|
23 | Timeout rst_delay; |
19 | 24 | Timeout splashscreen_timer; |
44 | 25 | Timeout byescreen_timer; |
19 | 26 | InterruptIn rst(HP_RST); |
27 | ||
28 | QEI qenc(KP_ENC1, KP_ENC2, NC, 16); | |
29 | volatile uint8_t knob; | |
35
b2dca6b935bb
Indent src/main.cpp with 2-ws
David Douard <david.douard@sdf3.org>
parents:
34
diff
changeset
|
30 | bool shift; // true when kp is shifted, cleared by command 0x01 from Unit |
44 | 31 | bool must_reset; |
32 | bool must_shutdown; | |
19 | 33 | |
34 | typedef enum { | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
35 | KEY_NONE=0, |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
36 | KEY_PRESSED, |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
37 | KEY_RELEASED |
19 | 38 | } key_event_t; |
39 | ||
40 | typedef struct keycode { | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
41 | uint8_t row; |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
42 | uint8_t col; |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
43 | key_event_t keyevent; |
19 | 44 | } keycode_t; |
45 | ||
32
bc1d6ecbb0cc
Update the main code: extract headers and use a CircularBuffer for key events
David Douard <david.douard@sdf3.org>
parents:
28
diff
changeset
|
46 | |
bc1d6ecbb0cc
Update the main code: extract headers and use a CircularBuffer for key events
David Douard <david.douard@sdf3.org>
parents:
28
diff
changeset
|
47 | #define KEY_BUF_SIZE 10 |
bc1d6ecbb0cc
Update the main code: extract headers and use a CircularBuffer for key events
David Douard <david.douard@sdf3.org>
parents:
28
diff
changeset
|
48 | CircularBuffer<keycode_t, KEY_BUF_SIZE> key_buf; |
5 | 49 | |
34
94ab7ff42a1b
Add a key mapping table (protocol value vs. raw keycode) and send it
David Douard <david.douard@sdf3.org>
parents:
32
diff
changeset
|
50 | #define KP_NROWS 4 |
94ab7ff42a1b
Add a key mapping table (protocol value vs. raw keycode) and send it
David Douard <david.douard@sdf3.org>
parents:
32
diff
changeset
|
51 | #define KP_NCOLS 5 |
94ab7ff42a1b
Add a key mapping table (protocol value vs. raw keycode) and send it
David Douard <david.douard@sdf3.org>
parents:
32
diff
changeset
|
52 | DigitalIn kp_rows[KP_NROWS] = { |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
53 | KP_R0, |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
54 | KP_R1, |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
55 | KP_R2, |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
56 | KP_R3 |
19 | 57 | }; |
58 | ||
34
94ab7ff42a1b
Add a key mapping table (protocol value vs. raw keycode) and send it
David Douard <david.douard@sdf3.org>
parents:
32
diff
changeset
|
59 | DigitalOut kp_columns[KP_NCOLS] = { |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
60 | KP_C0, KP_C1, |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
61 | KP_C2, KP_C3, |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
62 | KP_C4 |
19 | 63 | }; |
18
4fd621551d55
[full replacement] implement a state machine for Rx
David Douard <david.douard@logilab.fr>
parents:
17
diff
changeset
|
64 | |
36
a6c7292742a0
Add support for the shift flag
David Douard <david.douard@sdf3.org>
parents:
35
diff
changeset
|
65 | /* key mapping |
a6c7292742a0
Add support for the shift flag
David Douard <david.douard@sdf3.org>
parents:
35
diff
changeset
|
66 | RxC code name |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
67 | 0x2 0x00 View |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
68 | 0x1 0x01 Mon |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
69 | 3x3 0x02 Sto/Rcl |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
70 | 0x0 0x03 Scan |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
71 | 1x2 0x04 Alarm |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
72 | 1x1 0x05 Mx+B |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
73 | 1x0 0x06 Measure |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
74 | 2x0 0x07 Interval |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
75 | 3x2 0x08 Card Reset |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
76 | 3x1 0x09 Close |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
77 | 3x0 0x0A Open |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
78 | 0x3 0x0B Read |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
79 | 2x3 0x0C Shift |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
80 | 1x3 0x0D Write |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
81 | 0x4 0x0E Left |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
82 | 1x4 0x0F Right |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
83 | 2x2 0x10 Advanced |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
84 | 2x1 0x11 Step |
34
94ab7ff42a1b
Add a key mapping table (protocol value vs. raw keycode) and send it
David Douard <david.douard@sdf3.org>
parents:
32
diff
changeset
|
85 | */ |
94ab7ff42a1b
Add a key mapping table (protocol value vs. raw keycode) and send it
David Douard <david.douard@sdf3.org>
parents:
32
diff
changeset
|
86 | |
36
a6c7292742a0
Add support for the shift flag
David Douard <david.douard@sdf3.org>
parents:
35
diff
changeset
|
87 | uint8_t kp_mapping[KP_NROWS][KP_NCOLS] = { |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
88 | {0x03, 0x01, 0x00, 0x0B, 0x0E}, |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
89 | {0x06, 0x05, 0x04, 0x0D, 0x0F}, |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
90 | {0x07, 0x11, 0x10, 0x0C, 0xFF}, |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
91 | {0x0A, 0x09, 0x08, 0x02, 0xFF} |
19 | 92 | }; |
93 | ||
44 | 94 | #define KC_SHIFT 0x0C |
95 | ||
19 | 96 | void kp_cb(uint8_t row, uint8_t col); |
97 | void kr_cb(uint8_t row, uint8_t col); | |
98 | ||
99 | Keypad *kpad; | |
44 | 100 | keycode_t last_key = {0, 0, KEY_NONE}; |
101 | ||
1
3021fc79cc3b
kinf of working prototype using a ILI9341 based TFT
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
102 | uint8_t curchar; |
26 | 103 | //uint8_t curcmd; |
1
3021fc79cc3b
kinf of working prototype using a ILI9341 based TFT
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
104 | uint8_t nchars; |
3021fc79cc3b
kinf of working prototype using a ILI9341 based TFT
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
105 | char buffer[MAX_BUFF+1]; |
3021fc79cc3b
kinf of working prototype using a ILI9341 based TFT
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
106 | |
37
07e8ca2bdf6d
Extracted the display related functions in a Display class
David Douard <david.douard@sdf3.org>
parents:
36
diff
changeset
|
107 | void refresh_display(void); |
07e8ca2bdf6d
Extracted the display related functions in a Display class
David Douard <david.douard@sdf3.org>
parents:
36
diff
changeset
|
108 | |
19 | 109 | // callbacks & thread functions |
110 | void reset(void); | |
111 | void reset_irq(void); | |
112 | void qei_cb(int dir); | |
113 | void end_splashscreen(void); | |
4
219766126afb
another attempt using a more complete support of the protocol and async serial stuff
David Douard <david.douard@logilab.fr>
parents:
3
diff
changeset
|
114 | |
44 | 115 | #if defined(HAVE_PC) |
116 | FileHandle *mbed::mbed_override_console(int fd) | |
117 | { | |
118 | return static_cast<FileHandle*> (&pc); | |
64
897330ee6e9d
Make USBSerial work -- at last
David Douard <david.douard@sdfa3.org>
parents:
63
diff
changeset
|
119 | //return &pc; |
44 | 120 | } |
121 | #endif | |
122 | ||
1
3021fc79cc3b
kinf of working prototype using a ILI9341 based TFT
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
123 | void setup() { |
64
897330ee6e9d
Make USBSerial work -- at last
David Douard <david.douard@sdfa3.org>
parents:
63
diff
changeset
|
124 | #if defined(HAVE_PC) |
897330ee6e9d
Make USBSerial work -- at last
David Douard <david.douard@sdfa3.org>
parents:
63
diff
changeset
|
125 | pc.connect(); |
897330ee6e9d
Make USBSerial work -- at last
David Douard <david.douard@sdfa3.org>
parents:
63
diff
changeset
|
126 | ThisThread::sleep_for(100ms); |
897330ee6e9d
Make USBSerial work -- at last
David Douard <david.douard@sdfa3.org>
parents:
63
diff
changeset
|
127 | //pc.printf("SERIAL CONNECTION\r\n"); |
897330ee6e9d
Make USBSerial work -- at last
David Douard <david.douard@sdfa3.org>
parents:
63
diff
changeset
|
128 | #endif |
897330ee6e9d
Make USBSerial work -- at last
David Douard <david.douard@sdfa3.org>
parents:
63
diff
changeset
|
129 | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
130 | printf("\n\nSETUP\n"); |
44 | 131 | printf(" System Core Clock = %ld MHZ\r\n", SystemCoreClock/1000000); |
21 | 132 | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
133 | hp = NULL; |
64
897330ee6e9d
Make USBSerial work -- at last
David Douard <david.douard@sdfa3.org>
parents:
63
diff
changeset
|
134 | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
135 | printf("Setup HP communication pins\r\n"); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
136 | DigitalIn(HP_RX).mode(PullDown); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
137 | DigitalOut(HP_TX).write(1); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
138 | DigitalIn(HP_RST).mode(PullDown); |
21 | 139 | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
140 | printf(" setup QEI pins\r\n"); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
141 | DigitalIn(KP_ENC1).mode(PullDown); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
142 | DigitalIn(KP_ENC2).mode(PullDown); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
143 | qenc.attach(&qei_cb); |
19 | 144 | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
145 | printf(" setup Keypad\r\n"); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
146 | shift = false; |
44 | 147 | must_reset = false; |
148 | must_shutdown = false; | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
149 | kpad = new Keypad(KP_NROWS, kp_rows, KP_NCOLS, kp_columns); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
150 | printf(" attach Keypad callbacks\r\n"); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
151 | kpad->attach(&kp_cb, &kr_cb); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
152 | printf(" start Keypad\r\n"); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
153 | kpad->start(); |
21 | 154 | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
155 | printf("Setup OLED display\r\n"); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
156 | // init the LCD |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
157 | dsp = new Display(20000000, DSP_MOSI, DSP_MISO, DSP_SCLK, DSP_CS, |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
158 | DSP_RST, DSP_DC, "SSD1322"); |
19 | 159 | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
160 | curchar = 0; |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
161 | nchars = 0; |
7
5cf4034ba4e0
attempt to update display by bloc
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
162 | |
54
f6774bd0d570
Refactor the flag display system
David Douard <david.douard@sdf3.org>
parents:
53
diff
changeset
|
163 | //for (uint8_t i=0; i<sizeof(table)/sizeof(table[0]); ++i) |
f6774bd0d570
Refactor the flag display system
David Douard <david.douard@sdf3.org>
parents:
53
diff
changeset
|
164 | // memset(table[i].buffer, 0, MAX_BUFF+1); |
19 | 165 | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
166 | printf(" display splash screen\r\n"); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
167 | dsp->show_splashscreen(); |
19 | 168 | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
169 | printf("Starting LCD thread\r\n"); |
44 | 170 | // does not compile... |
171 | // dsp_refresh.attach(callback(dsp, &Display::copy_to_lcd), 50ms); | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
172 | tdsp.start(&refresh_display); |
22 | 173 | |
48
fc55f6eaa8bc
Remove print statements
David Douard <david.douard@sdf3.org>
parents:
44
diff
changeset
|
174 | printf("Attach timers\r\n"); |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
175 | splashscreen = true; |
62
55e3b4441b11
Stop splashscreen after 5s
David Douard <david.douard@sdfa3.org>
parents:
57
diff
changeset
|
176 | splashscreen_timer.attach(callback(&end_splashscreen), 5s); |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
177 | rst.fall(&reset_irq); |
64
897330ee6e9d
Make USBSerial work -- at last
David Douard <david.douard@sdfa3.org>
parents:
63
diff
changeset
|
178 | printf("SETUP DONE\r\n"); |
21 | 179 | |
64
897330ee6e9d
Make USBSerial work -- at last
David Douard <david.douard@sdfa3.org>
parents:
63
diff
changeset
|
180 | if (rst.read() == 0) |
68
a0f97359f266
Revert to soft reset on RST irq
David Douard <david.douard@sdfa3.org>
parents:
65
diff
changeset
|
181 | // in case we reset the FP while the unit is running |
69
516acbbce05a
Possibly fix the 'reset FP while running' case
David Douard <david.douard@sdfa3.org>
parents:
68
diff
changeset
|
182 | hp = new HPSerial(HP_TX, HP_RX); |
516acbbce05a
Possibly fix the 'reset FP while running' case
David Douard <david.douard@sdfa3.org>
parents:
68
diff
changeset
|
183 | //reset(); |
19 | 184 | } |
8 | 185 | |
19 | 186 | void end_splashscreen(void) |
187 | { | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
188 | splashscreen = false; |
63
f71f6c0af3cd
Simplify a bit the rst logic and make a bit more robust
David Douard <david.douard@sdfa3.org>
parents:
62
diff
changeset
|
189 | // wait for the reset irq from the CPU board |
f71f6c0af3cd
Simplify a bit the rst logic and make a bit more robust
David Douard <david.douard@sdfa3.org>
parents:
62
diff
changeset
|
190 | must_shutdown = true; |
19 | 191 | } |
192 | ||
68
a0f97359f266
Revert to soft reset on RST irq
David Douard <david.douard@sdfa3.org>
parents:
65
diff
changeset
|
193 | |
44 | 194 | void reset_irq_tmr(void) |
195 | { | |
196 | must_reset = true; | |
197 | } | |
68
a0f97359f266
Revert to soft reset on RST irq
David Douard <david.douard@sdfa3.org>
parents:
65
diff
changeset
|
198 | |
44 | 199 | |
19 | 200 | void reset_irq(void) |
201 | { | |
68
a0f97359f266
Revert to soft reset on RST irq
David Douard <david.douard@sdfa3.org>
parents:
65
diff
changeset
|
202 | //must_reset = true; |
a0f97359f266
Revert to soft reset on RST irq
David Douard <david.douard@sdfa3.org>
parents:
65
diff
changeset
|
203 | rst_delay.attach(callback(&reset_irq_tmr), 600ms); |
a0f97359f266
Revert to soft reset on RST irq
David Douard <david.douard@sdfa3.org>
parents:
65
diff
changeset
|
204 | //NVIC_SystemReset(); |
19 | 205 | } |
206 | ||
207 | void reset(void) | |
208 | { | |
44 | 209 | // this should be called as a result of the HP_RST pin going LO |
210 | printf("Reset connection to the main unit\n"); | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
211 | if (DigitalIn(HP_RST).read() == 0) { |
57 | 212 | byescreen_timer.detach(); // cancel a "poweroff", if any |
63
f71f6c0af3cd
Simplify a bit the rst logic and make a bit more robust
David Douard <david.douard@sdfa3.org>
parents:
62
diff
changeset
|
213 | splashscreen_timer.detach(); // same for splashscreen |
62
55e3b4441b11
Stop splashscreen after 5s
David Douard <david.douard@sdfa3.org>
parents:
57
diff
changeset
|
214 | splashscreen = false; // in case it still on |
57 | 215 | |
65
d9c5eaf85fab
Fix SHIFT and code cleanup
David Douard <david.douard@sdfa3.org>
parents:
64
diff
changeset
|
216 | if (hp == NULL) { |
d9c5eaf85fab
Fix SHIFT and code cleanup
David Douard <david.douard@sdfa3.org>
parents:
64
diff
changeset
|
217 | printf("setup HP communication handler\r\n"); |
d9c5eaf85fab
Fix SHIFT and code cleanup
David Douard <david.douard@sdfa3.org>
parents:
64
diff
changeset
|
218 | hp = new HPSerial(HP_TX, HP_RX); |
d9c5eaf85fab
Fix SHIFT and code cleanup
David Douard <david.douard@sdfa3.org>
parents:
64
diff
changeset
|
219 | } else { |
d9c5eaf85fab
Fix SHIFT and code cleanup
David Douard <david.douard@sdfa3.org>
parents:
64
diff
changeset
|
220 | printf("reset existing connection\n"); |
d9c5eaf85fab
Fix SHIFT and code cleanup
David Douard <david.douard@sdfa3.org>
parents:
64
diff
changeset
|
221 | hp->reset(); |
d9c5eaf85fab
Fix SHIFT and code cleanup
David Douard <david.douard@sdfa3.org>
parents:
64
diff
changeset
|
222 | } |
d9c5eaf85fab
Fix SHIFT and code cleanup
David Douard <david.douard@sdfa3.org>
parents:
64
diff
changeset
|
223 | dsp->power_on(); |
d9c5eaf85fab
Fix SHIFT and code cleanup
David Douard <david.douard@sdfa3.org>
parents:
64
diff
changeset
|
224 | dsp->cls(); |
68
a0f97359f266
Revert to soft reset on RST irq
David Douard <david.douard@sdfa3.org>
parents:
65
diff
changeset
|
225 | |
65
d9c5eaf85fab
Fix SHIFT and code cleanup
David Douard <david.douard@sdfa3.org>
parents:
64
diff
changeset
|
226 | printf("Initiate startup sequence\n"); |
d9c5eaf85fab
Fix SHIFT and code cleanup
David Douard <david.douard@sdfa3.org>
parents:
64
diff
changeset
|
227 | if (last_key.keyevent == KEY_PRESSED) { |
d9c5eaf85fab
Fix SHIFT and code cleanup
David Douard <david.douard@sdfa3.org>
parents:
64
diff
changeset
|
228 | printf(" with key pressed\n"); |
d9c5eaf85fab
Fix SHIFT and code cleanup
David Douard <david.douard@sdfa3.org>
parents:
64
diff
changeset
|
229 | hp->send_startup_seq(kp_mapping[last_key.row][last_key.col]); |
d9c5eaf85fab
Fix SHIFT and code cleanup
David Douard <david.douard@sdfa3.org>
parents:
64
diff
changeset
|
230 | } else { |
d9c5eaf85fab
Fix SHIFT and code cleanup
David Douard <david.douard@sdfa3.org>
parents:
64
diff
changeset
|
231 | hp->send_startup_seq(); |
d9c5eaf85fab
Fix SHIFT and code cleanup
David Douard <david.douard@sdfa3.org>
parents:
64
diff
changeset
|
232 | } |
44 | 233 | } |
234 | else | |
235 | { | |
236 | printf("HP_RST is not LOW, skipping\n"); | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
237 | } |
1
3021fc79cc3b
kinf of working prototype using a ILI9341 based TFT
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
238 | } |
3021fc79cc3b
kinf of working prototype using a ILI9341 based TFT
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
239 | |
37
07e8ca2bdf6d
Extracted the display related functions in a Display class
David Douard <david.douard@sdf3.org>
parents:
36
diff
changeset
|
240 | void refresh_display(void) { |
44 | 241 | while(1) { //!must_shutdown) { |
242 | dsp->copy_to_lcd(); | |
243 | ThisThread::sleep_for(50ms); | |
244 | } | |
245 | } | |
8 | 246 | |
44 | 247 | void shutdown(void) |
248 | { | |
64
897330ee6e9d
Make USBSerial work -- at last
David Douard <david.douard@sdfa3.org>
parents:
63
diff
changeset
|
249 | // TODO: implement low-power-mode stuff |
44 | 250 | must_shutdown = true; |
1
3021fc79cc3b
kinf of working prototype using a ILI9341 based TFT
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
251 | } |
3021fc79cc3b
kinf of working prototype using a ILI9341 based TFT
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
252 | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
253 | void mainloop() |
19 | 254 | { // run over and over |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
255 | keycode_t key = {0, 0, KEY_NONE}; |
44 | 256 | uint8_t keycode; // actual sent value to the CPU |
257 | HPSerial::CMD cmd; | |
258 | unsigned int nkeys = 0; | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
259 | unsigned int err[8]; |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
260 | for (uint8_t i=0; i<8; i++) |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
261 | err[i] = 0; |
32
bc1d6ecbb0cc
Update the main code: extract headers and use a CircularBuffer for key events
David Douard <david.douard@sdf3.org>
parents:
28
diff
changeset
|
262 | |
65
d9c5eaf85fab
Fix SHIFT and code cleanup
David Douard <david.douard@sdfa3.org>
parents:
64
diff
changeset
|
263 | printf("Start the main loop\n"); |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
264 | while(1) { |
44 | 265 | if (must_reset) { |
266 | must_reset = false; | |
63
f71f6c0af3cd
Simplify a bit the rst logic and make a bit more robust
David Douard <david.douard@sdfa3.org>
parents:
62
diff
changeset
|
267 | must_shutdown = false; // just in case... |
44 | 268 | reset(); |
269 | } | |
68
a0f97359f266
Revert to soft reset on RST irq
David Douard <david.douard@sdfa3.org>
parents:
65
diff
changeset
|
270 | else if (must_shutdown) { |
44 | 271 | must_shutdown = false; |
63
f71f6c0af3cd
Simplify a bit the rst logic and make a bit more robust
David Douard <david.douard@sdfa3.org>
parents:
62
diff
changeset
|
272 | dsp->cls(); |
44 | 273 | dsp->power_off(); |
274 | } | |
68
a0f97359f266
Revert to soft reset on RST irq
David Douard <david.douard@sdfa3.org>
parents:
65
diff
changeset
|
275 | else { |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
276 | if (knob != 0) |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
277 | { |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
278 | if (hp != NULL) |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
279 | { |
44 | 280 | printf("KEY[%d] %s%X\n", nkeys++, knob<0x0F ? "0" : "", knob); |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
281 | hp->sendkey(knob); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
282 | } |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
283 | else |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
284 | { |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
285 | dsp->locate(70, 0); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
286 | dsp->printf("Knob = %X ", knob); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
287 | dsp->copy_to_lcd(); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
288 | } |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
289 | knob = 0; |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
290 | } |
34
94ab7ff42a1b
Add a key mapping table (protocol value vs. raw keycode) and send it
David Douard <david.douard@sdf3.org>
parents:
32
diff
changeset
|
291 | |
44 | 292 | if (!key_buf.empty()) |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
293 | { |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
294 | key_buf.pop(key); |
44 | 295 | keycode = kp_mapping[key.row][key.col]; |
296 | ||
297 | if ((keycode == KC_SHIFT) && (key.keyevent == KEY_PRESSED)) | |
298 | { | |
57 | 299 | // toggle the shift indicator |
300 | if (shift) | |
301 | shift = false; | |
302 | else | |
65
d9c5eaf85fab
Fix SHIFT and code cleanup
David Douard <david.douard@sdfa3.org>
parents:
64
diff
changeset
|
303 | shift = true; |
57 | 304 | dsp->set_flag_status(0x0E, shift); |
54
f6774bd0d570
Refactor the flag display system
David Douard <david.douard@sdf3.org>
parents:
53
diff
changeset
|
305 | dsp->draw_flag(0x0E); |
44 | 306 | } |
307 | ||
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
308 | if (hp != NULL) { |
44 | 309 | if ((shift) && (keycode != KC_SHIFT)) |
310 | { | |
311 | keycode |= 0x20; // bit 5: key shifted | |
312 | shift = false; | |
54
f6774bd0d570
Refactor the flag display system
David Douard <david.douard@sdf3.org>
parents:
53
diff
changeset
|
313 | dsp->set_flag_status(0x0E, false); |
44 | 314 | } |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
315 | if (key.keyevent == KEY_RELEASED) |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
316 | keycode |= 0x40; // bit 6: key relased |
44 | 317 | printf("KEY[%d] %s%X\n", nkeys++, keycode<0x0F ? "0" : "", keycode); |
318 | hp->sendkey(keycode); | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
319 | } |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
320 | else |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
321 | { |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
322 | dsp->locate(140, 0); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
323 | dsp->printf("KC: %dx%d[0x%s%X] %s", |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
324 | key.row, key.col, |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
325 | kp_mapping[key.row][key.col] <= 0x0F ? "0" : "", |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
326 | kp_mapping[key.row][key.col], |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
327 | key.keyevent==KEY_PRESSED ? "PRE" : "REL"); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
328 | dsp->copy_to_lcd(); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
329 | } |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
330 | } |
19 | 331 | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
332 | if ((hp != NULL) && (hp->cmd_available())) |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
333 | { |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
334 | if (hp->pop(cmd)) |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
335 | { |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
336 | for (uint8_t i=0; i<7; i++) |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
337 | if (hp->nerrors(i) > err[i]) { |
44 | 338 | printf("ERR: %X/%X/%X/%X/%X/%X/%X\n", |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
339 | hp->nerrors(0), |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
340 | hp->nerrors(1), |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
341 | hp->nerrors(2), |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
342 | hp->nerrors(3), |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
343 | hp->nerrors(4), |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
344 | hp->nerrors(5), |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
345 | hp->nerrors(6) |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
346 | ); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
347 | break; |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
348 | } |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
349 | for (uint8_t i=0; i<7; i++) |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
350 | err[i] = hp->nerrors(i); |
19 | 351 | |
44 | 352 | printf("CMD[%d] %s%X", (int)cmd.id, cmd.cmd<0x10 ? "0" : "", cmd.cmd); |
19 | 353 | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
354 | // 0x00: main display |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
355 | // 0x0C: channel display |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
356 | if ((cmd.cmd == 0x00) || (cmd.cmd == 0x0C)) |
44 | 357 | printf(": '%s'\n", cmd.value); |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
358 | else { |
44 | 359 | printf(": "); |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
360 | for (uint8_t i=0; i<cmd.size; i++) |
44 | 361 | printf("%s%X ", cmd.value[i] < 0x10 ? "0" : "", cmd.value[i]); |
362 | printf("\n"); | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
363 | } |
36
a6c7292742a0
Add support for the shift flag
David Douard <david.douard@sdf3.org>
parents:
35
diff
changeset
|
364 | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
365 | if (cmd.cmd == 0x01) { |
36
a6c7292742a0
Add support for the shift flag
David Douard <david.douard@sdf3.org>
parents:
35
diff
changeset
|
366 | // clear a flag |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
367 | if (cmd.value[0] == 0x0E) { |
36
a6c7292742a0
Add support for the shift flag
David Douard <david.douard@sdf3.org>
parents:
35
diff
changeset
|
368 | // clear the Shift flag |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
369 | shift = false; |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
370 | } |
54
f6774bd0d570
Refactor the flag display system
David Douard <david.douard@sdf3.org>
parents:
53
diff
changeset
|
371 | dsp->set_flag_status(cmd.value[0], false); |
f6774bd0d570
Refactor the flag display system
David Douard <david.douard@sdf3.org>
parents:
53
diff
changeset
|
372 | dsp->draw_flag(cmd.value[0]); |
52
098124b730eb
Add support for 0x08 and 0x09 command codes (display a flag dimm/bright)
David Douard <david.douard@sdf3.org>
parents:
49
diff
changeset
|
373 | } else if (cmd.cmd == 0x08) { |
098124b730eb
Add support for 0x08 and 0x09 command codes (display a flag dimm/bright)
David Douard <david.douard@sdf3.org>
parents:
49
diff
changeset
|
374 | // set a flag dimmed |
54
f6774bd0d570
Refactor the flag display system
David Douard <david.douard@sdf3.org>
parents:
53
diff
changeset
|
375 | dsp->set_flag_status(cmd.value[0], true); |
f6774bd0d570
Refactor the flag display system
David Douard <david.douard@sdf3.org>
parents:
53
diff
changeset
|
376 | dsp->set_flag_dim(cmd.value[0], true); |
f6774bd0d570
Refactor the flag display system
David Douard <david.douard@sdf3.org>
parents:
53
diff
changeset
|
377 | dsp->draw_flag(cmd.value[0]); |
52
098124b730eb
Add support for 0x08 and 0x09 command codes (display a flag dimm/bright)
David Douard <david.douard@sdf3.org>
parents:
49
diff
changeset
|
378 | } else if (cmd.cmd == 0x09) { |
098124b730eb
Add support for 0x08 and 0x09 command codes (display a flag dimm/bright)
David Douard <david.douard@sdf3.org>
parents:
49
diff
changeset
|
379 | // set a flag bright |
54
f6774bd0d570
Refactor the flag display system
David Douard <david.douard@sdf3.org>
parents:
53
diff
changeset
|
380 | dsp->set_flag_status(cmd.value[0], true); |
f6774bd0d570
Refactor the flag display system
David Douard <david.douard@sdf3.org>
parents:
53
diff
changeset
|
381 | dsp->set_flag_dim(cmd.value[0], false); |
f6774bd0d570
Refactor the flag display system
David Douard <david.douard@sdf3.org>
parents:
53
diff
changeset
|
382 | dsp->draw_flag(cmd.value[0]); |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
383 | } else if (cmd.cmd == 0x86) { |
44 | 384 | // shutdown |
385 | dsp->show_byescreen(); | |
386 | byescreen_timer.attach(callback(&shutdown), 2s); | |
62
55e3b4441b11
Stop splashscreen after 5s
David Douard <david.douard@sdfa3.org>
parents:
57
diff
changeset
|
387 | } else { |
36
a6c7292742a0
Add support for the shift flag
David Douard <david.douard@sdf3.org>
parents:
35
diff
changeset
|
388 | // display related commands |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
389 | dsp->show(cmd.cmd, cmd.value, cmd.size); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
390 | } |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
391 | } |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
392 | } |
68
a0f97359f266
Revert to soft reset on RST irq
David Douard <david.douard@sdfa3.org>
parents:
65
diff
changeset
|
393 | } |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
394 | //else |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
395 | ThisThread::sleep_for(1ms); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
396 | } |
1
3021fc79cc3b
kinf of working prototype using a ILI9341 based TFT
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
397 | } |
3021fc79cc3b
kinf of working prototype using a ILI9341 based TFT
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
398 | |
44 | 399 | |
19 | 400 | void qei_cb(int dir) |
401 | { | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
402 | if(dir == 1) // turn right |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
403 | knob = 0x80; |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
404 | else // turn left |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
405 | knob = 0x81; // 83? |
19 | 406 | } |
407 | ||
408 | void kp_cb(uint8_t row, uint8_t col) | |
409 | { | |
44 | 410 | last_key.row = row; |
411 | last_key.col = col; | |
412 | last_key.keyevent = KEY_PRESSED; | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
413 | if(!key_buf.full()) |
44 | 414 | key_buf.push(last_key); |
19 | 415 | } |
416 | ||
417 | void kr_cb(uint8_t row, uint8_t col) | |
418 | { | |
44 | 419 | last_key.row = row; |
420 | last_key.col = col; | |
421 | last_key.keyevent = KEY_RELEASED; | |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
422 | if(!key_buf.full()) |
44 | 423 | key_buf.push(last_key); |
19 | 424 | } |
425 | ||
1
3021fc79cc3b
kinf of working prototype using a ILI9341 based TFT
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
426 | int main() |
3021fc79cc3b
kinf of working prototype using a ILI9341 based TFT
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
427 | { |
38
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
428 | setup(); |
ffef9bbb345d
kill tabs (again) in src/main.cpp
David Douard <david.douard@sdf3.org>
parents:
37
diff
changeset
|
429 | mainloop(); |
1
3021fc79cc3b
kinf of working prototype using a ILI9341 based TFT
David Douard <david.douard@logilab.fr>
parents:
diff
changeset
|
430 | } |