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