User | Revision | Line number | New contents of line |
kagelump |
0:dbe4ead20087
|
1
|
#include "mbed.h"
|
kagelump |
0:dbe4ead20087
|
2
|
#include "TFT_4DGL.h"
|
kagelump |
0:dbe4ead20087
|
3
|
|
kagelump |
0:dbe4ead20087
|
4
|
TFT_4DGL ecran(p13,p14,p15); // serial tx, serial rx, reset pin;
|
kagelump |
0:dbe4ead20087
|
5
|
CAN can(p30, p29);
|
kagelump |
0:dbe4ead20087
|
6
|
DigitalOut led(LED1);
|
kagelump |
0:dbe4ead20087
|
7
|
DigitalOut led2(LED2);
|
kagelump |
0:dbe4ead20087
|
8
|
DigitalOut led3(LED3);
|
kagelump |
0:dbe4ead20087
|
9
|
DigitalOut led4(LED4);
|
kagelump |
0:dbe4ead20087
|
10
|
DigitalIn switch_left(p16);
|
kagelump |
0:dbe4ead20087
|
11
|
DigitalIn switch_right(p17);
|
kagelump |
0:dbe4ead20087
|
12
|
Ticker tiktok;
|
kagelump |
0:dbe4ead20087
|
13
|
Ticker can_tok;
|
kagelump |
0:dbe4ead20087
|
14
|
Timer timer;
|
kagelump |
0:dbe4ead20087
|
15
|
int last_seen[10];
|
kagelump |
0:dbe4ead20087
|
16
|
int last_state[2];
|
kagelump |
0:dbe4ead20087
|
17
|
enum boards {
|
kagelump |
0:dbe4ead20087
|
18
|
CUTOFF,
|
kagelump |
0:dbe4ead20087
|
19
|
TELEMETRY,
|
kagelump |
0:dbe4ead20087
|
20
|
MAIN_OUTPUT,
|
kagelump |
0:dbe4ead20087
|
21
|
MAIN_INPUT,
|
kagelump |
0:dbe4ead20087
|
22
|
BPS,
|
kagelump |
0:dbe4ead20087
|
23
|
DATA_LOGGER,
|
kagelump |
0:dbe4ead20087
|
24
|
TRITIUM
|
kagelump |
0:dbe4ead20087
|
25
|
};
|
kagelump |
0:dbe4ead20087
|
26
|
enum modes {
|
kagelump |
0:dbe4ead20087
|
27
|
HEARTBEAT,
|
kagelump |
0:dbe4ead20087
|
28
|
DEMO,
|
kagelump |
0:dbe4ead20087
|
29
|
FULL_CAN
|
kagelump |
0:dbe4ead20087
|
30
|
};
|
kagelump |
0:dbe4ead20087
|
31
|
char mode = DEMO;
|
kagelump |
0:dbe4ead20087
|
32
|
int speed = 0;
|
kagelump |
0:dbe4ead20087
|
33
|
int percent = 0;
|
kagelump |
0:dbe4ead20087
|
34
|
char s[40][50];
|
kagelump |
0:dbe4ead20087
|
35
|
char needs_update[40];
|
kagelump |
0:dbe4ead20087
|
36
|
int current = 0;
|
kagelump |
0:dbe4ead20087
|
37
|
int j = 0;
|
kagelump |
0:dbe4ead20087
|
38
|
|
kagelump |
0:dbe4ead20087
|
39
|
void display_can();
|
kagelump |
0:dbe4ead20087
|
40
|
|
kagelump |
0:dbe4ead20087
|
41
|
int next() {
|
kagelump |
0:dbe4ead20087
|
42
|
int old = current;
|
kagelump |
0:dbe4ead20087
|
43
|
current = (current + 1) % 40;
|
kagelump |
0:dbe4ead20087
|
44
|
return old;
|
kagelump |
0:dbe4ead20087
|
45
|
}
|
kagelump |
0:dbe4ead20087
|
46
|
void demo_update() {
|
kagelump |
0:dbe4ead20087
|
47
|
char buffer[20];
|
kagelump |
0:dbe4ead20087
|
48
|
|
kagelump |
0:dbe4ead20087
|
49
|
// Speed
|
kagelump |
0:dbe4ead20087
|
50
|
sprintf(buffer, "%02d", speed);
|
kagelump |
0:dbe4ead20087
|
51
|
speed = (speed + 1) % 100;
|
kagelump |
0:dbe4ead20087
|
52
|
ecran.text_mode(1);
|
kagelump |
0:dbe4ead20087
|
53
|
ecran.graphic_string(buffer, 80, 0, FONT_8X8, WHITE, 5, 5);
|
kagelump |
0:dbe4ead20087
|
54
|
ecran.graphic_string("Kph", 160, 0, FONT_8X8, WHITE, 2, 2);
|
kagelump |
0:dbe4ead20087
|
55
|
|
kagelump |
0:dbe4ead20087
|
56
|
// Mode
|
kagelump |
0:dbe4ead20087
|
57
|
if (speed < 25)
|
kagelump |
0:dbe4ead20087
|
58
|
ecran.graphic_string("P", 0, 0, FONT_8X8, 0xFF0000, 5, 5);
|
kagelump |
0:dbe4ead20087
|
59
|
else if (speed < 50)
|
kagelump |
0:dbe4ead20087
|
60
|
ecran.graphic_string("N", 0, 0, FONT_8X8, 0x0000FF, 5, 5);
|
kagelump |
0:dbe4ead20087
|
61
|
else if (speed < 75)
|
kagelump |
0:dbe4ead20087
|
62
|
ecran.graphic_string("D", 0, 0, FONT_8X8, 0x00FF00, 5, 5);
|
kagelump |
0:dbe4ead20087
|
63
|
else
|
kagelump |
0:dbe4ead20087
|
64
|
ecran.graphic_string("R", 0, 0, FONT_8X8, 0xFF00FF, 5, 5);
|
kagelump |
0:dbe4ead20087
|
65
|
|
kagelump |
0:dbe4ead20087
|
66
|
// Battery
|
kagelump |
0:dbe4ead20087
|
67
|
percent = (percent + 2) % 100;
|
kagelump |
0:dbe4ead20087
|
68
|
ecran.pen_size(0);
|
kagelump |
0:dbe4ead20087
|
69
|
ecran.rectangle(11, 61, (int)(percent * 2.2)+11, 79, 0xFF0000);
|
kagelump |
0:dbe4ead20087
|
70
|
ecran.rectangle((int)(percent * 2.2)+11, 61, 229, 79, 0x000000);
|
kagelump |
0:dbe4ead20087
|
71
|
ecran.graphic_string("Battery:", 10, 90, FONT_8X8, WHITE, 2, 2) ;
|
kagelump |
0:dbe4ead20087
|
72
|
sprintf(buffer, "%02d%%", percent);
|
kagelump |
0:dbe4ead20087
|
73
|
ecran.graphic_string(buffer, 140, 90, FONT_8X8, WHITE, 2, 2) ;
|
kagelump |
0:dbe4ead20087
|
74
|
|
kagelump |
0:dbe4ead20087
|
75
|
// Logo
|
kagelump |
0:dbe4ead20087
|
76
|
ecran.graphic_string("CalSol GFX 2011", 110, 310, FONT_8X8, WHITE, 1, 1);
|
kagelump |
0:dbe4ead20087
|
77
|
|
kagelump |
0:dbe4ead20087
|
78
|
// LED
|
kagelump |
0:dbe4ead20087
|
79
|
led = !led;
|
kagelump |
0:dbe4ead20087
|
80
|
}
|
kagelump |
0:dbe4ead20087
|
81
|
|
kagelump |
0:dbe4ead20087
|
82
|
void update() {
|
kagelump |
0:dbe4ead20087
|
83
|
|
kagelump |
0:dbe4ead20087
|
84
|
// Packets
|
kagelump |
0:dbe4ead20087
|
85
|
ecran.text_mode(1);
|
kagelump |
0:dbe4ead20087
|
86
|
for(int i = 0; i < 40; i++) {
|
kagelump |
0:dbe4ead20087
|
87
|
if (needs_update[i]) {
|
kagelump |
0:dbe4ead20087
|
88
|
needs_update[i] = 0;
|
kagelump |
0:dbe4ead20087
|
89
|
ecran.text_string(s[i], 0, i, FONT_8X8, WHITE);
|
kagelump |
0:dbe4ead20087
|
90
|
}
|
kagelump |
0:dbe4ead20087
|
91
|
}
|
kagelump |
0:dbe4ead20087
|
92
|
// LED
|
kagelump |
0:dbe4ead20087
|
93
|
led = !led;
|
kagelump |
0:dbe4ead20087
|
94
|
}
|
kagelump |
0:dbe4ead20087
|
95
|
void heartbeat_update() {
|
kagelump |
0:dbe4ead20087
|
96
|
ecran.text_mode(1);
|
kagelump |
0:dbe4ead20087
|
97
|
int t = timer.read_ms();
|
kagelump |
0:dbe4ead20087
|
98
|
char buffer[255];
|
kagelump |
0:dbe4ead20087
|
99
|
// Title
|
kagelump |
0:dbe4ead20087
|
100
|
sprintf(buffer, "Board: Last Seen (ms)");
|
kagelump |
0:dbe4ead20087
|
101
|
ecran.text_string(buffer, 0, 0, FONT_8X8, WHITE);
|
kagelump |
0:dbe4ead20087
|
102
|
// Cutoff
|
kagelump |
0:dbe4ead20087
|
103
|
sprintf(buffer, "Cutoff: %d", t - last_seen[CUTOFF]);
|
kagelump |
0:dbe4ead20087
|
104
|
if (t - last_seen[CUTOFF] > 1000)
|
kagelump |
0:dbe4ead20087
|
105
|
ecran.text_string(buffer, 0, 2, FONT_8X8, RED);
|
kagelump |
0:dbe4ead20087
|
106
|
else
|
kagelump |
0:dbe4ead20087
|
107
|
ecran.text_string(buffer, 0, 2, FONT_8X8, GREEN);
|
kagelump |
0:dbe4ead20087
|
108
|
// Telemetry
|
kagelump |
0:dbe4ead20087
|
109
|
sprintf(buffer, "Telemetry %d", t - last_seen[TELEMETRY]);
|
kagelump |
0:dbe4ead20087
|
110
|
if (t - last_seen[TELEMETRY] > 1000)
|
kagelump |
0:dbe4ead20087
|
111
|
ecran.text_string(buffer, 0, 4, FONT_8X8, RED);
|
kagelump |
0:dbe4ead20087
|
112
|
else
|
kagelump |
0:dbe4ead20087
|
113
|
ecran.text_string(buffer, 0, 4, FONT_8X8, GREEN);
|
kagelump |
0:dbe4ead20087
|
114
|
// Main Output
|
kagelump |
0:dbe4ead20087
|
115
|
sprintf(buffer, "MainOutput %d", t - last_seen[MAIN_OUTPUT]);
|
kagelump |
0:dbe4ead20087
|
116
|
if (t - last_seen[MAIN_OUTPUT] > 1000)
|
kagelump |
0:dbe4ead20087
|
117
|
ecran.text_string(buffer, 0, 6, FONT_8X8, RED);
|
kagelump |
0:dbe4ead20087
|
118
|
else
|
kagelump |
0:dbe4ead20087
|
119
|
ecran.text_string(buffer, 0, 6, FONT_8X8, GREEN);
|
kagelump |
0:dbe4ead20087
|
120
|
// Main Input
|
kagelump |
0:dbe4ead20087
|
121
|
sprintf(buffer, "MainInput %d", t - last_seen[MAIN_INPUT]);
|
kagelump |
0:dbe4ead20087
|
122
|
if (t - last_seen[MAIN_INPUT] > 1000)
|
kagelump |
0:dbe4ead20087
|
123
|
ecran.text_string(buffer, 0, 8, FONT_8X8, RED);
|
kagelump |
0:dbe4ead20087
|
124
|
else
|
kagelump |
0:dbe4ead20087
|
125
|
ecran.text_string(buffer, 0, 8, FONT_8X8, GREEN);
|
kagelump |
0:dbe4ead20087
|
126
|
// BPS
|
kagelump |
0:dbe4ead20087
|
127
|
sprintf(buffer, "BPS: %d", t - last_seen[BPS]);
|
kagelump |
0:dbe4ead20087
|
128
|
if (t - last_seen[BPS] > 1000)
|
kagelump |
0:dbe4ead20087
|
129
|
ecran.text_string(buffer, 0, 10, FONT_8X8, RED);
|
kagelump |
0:dbe4ead20087
|
130
|
else
|
kagelump |
0:dbe4ead20087
|
131
|
ecran.text_string(buffer, 0, 10, FONT_8X8, GREEN);
|
kagelump |
0:dbe4ead20087
|
132
|
// Data Logger
|
kagelump |
0:dbe4ead20087
|
133
|
sprintf(buffer, "DataLogger: %d", t - last_seen[DATA_LOGGER]);
|
kagelump |
0:dbe4ead20087
|
134
|
if (t - last_seen[DATA_LOGGER] > 1000)
|
kagelump |
0:dbe4ead20087
|
135
|
ecran.text_string(buffer, 0, 12, FONT_8X8, RED);
|
kagelump |
0:dbe4ead20087
|
136
|
else
|
kagelump |
0:dbe4ead20087
|
137
|
ecran.text_string(buffer, 0, 12, FONT_8X8, GREEN);
|
kagelump |
0:dbe4ead20087
|
138
|
// Tritium
|
kagelump |
0:dbe4ead20087
|
139
|
sprintf(buffer, "Tritium %d", t - last_seen[TRITIUM]);
|
kagelump |
0:dbe4ead20087
|
140
|
if (t - last_seen[TRITIUM] > 1000)
|
kagelump |
0:dbe4ead20087
|
141
|
ecran.text_string(buffer, 0, 14, FONT_8X8, RED);
|
kagelump |
0:dbe4ead20087
|
142
|
else
|
kagelump |
0:dbe4ead20087
|
143
|
ecran.text_string(buffer, 0, 14, FONT_8X8, GREEN);
|
kagelump |
0:dbe4ead20087
|
144
|
// LED
|
kagelump |
0:dbe4ead20087
|
145
|
led = !led;
|
kagelump |
0:dbe4ead20087
|
146
|
}
|
kagelump |
0:dbe4ead20087
|
147
|
|
kagelump |
0:dbe4ead20087
|
148
|
void display_heartbeats();
|
kagelump |
0:dbe4ead20087
|
149
|
void set_demo() {
|
kagelump |
0:dbe4ead20087
|
150
|
ecran.cls();
|
kagelump |
0:dbe4ead20087
|
151
|
ecran.graphic_string("CalSol GFX 2011", 110, 310, FONT_8X8, WHITE, 1, 1);
|
kagelump |
0:dbe4ead20087
|
152
|
// Top bar
|
kagelump |
0:dbe4ead20087
|
153
|
ecran.pen_size(SOLID);
|
kagelump |
0:dbe4ead20087
|
154
|
ecran.rectangle(0, 40, 240, 42, 0xEEEEEE);
|
kagelump |
0:dbe4ead20087
|
155
|
|
kagelump |
0:dbe4ead20087
|
156
|
// Battery bar
|
kagelump |
0:dbe4ead20087
|
157
|
ecran.pen_size(1);
|
kagelump |
0:dbe4ead20087
|
158
|
ecran.rectangle(10, 60, 230, 80, 0xFF0000);
|
kagelump |
0:dbe4ead20087
|
159
|
tiktok.detach();
|
kagelump |
0:dbe4ead20087
|
160
|
tiktok.attach(&demo_update, 0.5);
|
kagelump |
0:dbe4ead20087
|
161
|
mode = DEMO;
|
kagelump |
0:dbe4ead20087
|
162
|
}
|
kagelump |
0:dbe4ead20087
|
163
|
void set_full() {
|
kagelump |
0:dbe4ead20087
|
164
|
tiktok.detach();
|
kagelump |
0:dbe4ead20087
|
165
|
tiktok.attach(&update, 0.5);
|
kagelump |
0:dbe4ead20087
|
166
|
mode = FULL_CAN;
|
kagelump |
0:dbe4ead20087
|
167
|
ecran.cls();
|
kagelump |
0:dbe4ead20087
|
168
|
ecran.graphic_string("CalSol GFX 2011", 110, 310, FONT_8X8, WHITE, 1, 1);
|
kagelump |
0:dbe4ead20087
|
169
|
}
|
kagelump |
0:dbe4ead20087
|
170
|
void set_heartbeat() {
|
kagelump |
0:dbe4ead20087
|
171
|
tiktok.detach();
|
kagelump |
0:dbe4ead20087
|
172
|
tiktok.attach(&heartbeat_update, 0.5);
|
kagelump |
0:dbe4ead20087
|
173
|
mode = HEARTBEAT;
|
kagelump |
0:dbe4ead20087
|
174
|
ecran.cls();
|
kagelump |
0:dbe4ead20087
|
175
|
ecran.graphic_string("CalSol GFX 2011", 110, 310, FONT_8X8, WHITE, 1, 1);
|
kagelump |
0:dbe4ead20087
|
176
|
}
|
kagelump |
0:dbe4ead20087
|
177
|
|
kagelump |
0:dbe4ead20087
|
178
|
int main() {
|
kagelump |
0:dbe4ead20087
|
179
|
can.frequency(1000000);
|
kagelump |
0:dbe4ead20087
|
180
|
switch_left.mode(PullUp);
|
kagelump |
0:dbe4ead20087
|
181
|
switch_right.mode(PullUp);
|
kagelump |
0:dbe4ead20087
|
182
|
for (int i = 0; i < 40; i++) {
|
kagelump |
0:dbe4ead20087
|
183
|
needs_update[i] = 0;
|
kagelump |
0:dbe4ead20087
|
184
|
s[i][0] = '\0';
|
kagelump |
0:dbe4ead20087
|
185
|
}
|
kagelump |
0:dbe4ead20087
|
186
|
ecran.baudrate(115200);
|
kagelump |
0:dbe4ead20087
|
187
|
timer.start();
|
kagelump |
0:dbe4ead20087
|
188
|
|
kagelump |
0:dbe4ead20087
|
189
|
// Logo
|
kagelump |
0:dbe4ead20087
|
190
|
ecran.graphic_string("CalSol GFX 2011", 110, 310, FONT_8X8, WHITE, 1, 1);
|
kagelump |
0:dbe4ead20087
|
191
|
sprintf(s[next()], "Initializing...");
|
kagelump |
0:dbe4ead20087
|
192
|
|
kagelump |
0:dbe4ead20087
|
193
|
tiktok.attach(&update, 0.5);
|
kagelump |
0:dbe4ead20087
|
194
|
CANMessage msg;
|
kagelump |
0:dbe4ead20087
|
195
|
while(1) {
|
kagelump |
0:dbe4ead20087
|
196
|
int left = switch_left;
|
kagelump |
0:dbe4ead20087
|
197
|
int right = switch_right;
|
kagelump |
0:dbe4ead20087
|
198
|
led4 = left;
|
kagelump |
0:dbe4ead20087
|
199
|
led3 = right;
|
kagelump |
0:dbe4ead20087
|
200
|
if (last_state[0] != left) {
|
kagelump |
0:dbe4ead20087
|
201
|
if (left)
|
kagelump |
0:dbe4ead20087
|
202
|
set_demo();
|
kagelump |
0:dbe4ead20087
|
203
|
else
|
kagelump |
0:dbe4ead20087
|
204
|
set_heartbeat();
|
kagelump |
0:dbe4ead20087
|
205
|
last_state[0] = left;
|
kagelump |
0:dbe4ead20087
|
206
|
}
|
kagelump |
0:dbe4ead20087
|
207
|
if (last_state[1] != right) {
|
kagelump |
0:dbe4ead20087
|
208
|
if (right)
|
kagelump |
0:dbe4ead20087
|
209
|
set_demo();
|
kagelump |
0:dbe4ead20087
|
210
|
else
|
kagelump |
0:dbe4ead20087
|
211
|
set_full();
|
kagelump |
0:dbe4ead20087
|
212
|
last_state[1] = right;
|
kagelump |
0:dbe4ead20087
|
213
|
}
|
kagelump |
0:dbe4ead20087
|
214
|
if (mode == FULL_CAN)
|
kagelump |
0:dbe4ead20087
|
215
|
display_can();
|
kagelump |
0:dbe4ead20087
|
216
|
else if (mode == HEARTBEAT)
|
kagelump |
0:dbe4ead20087
|
217
|
display_heartbeats();
|
kagelump |
0:dbe4ead20087
|
218
|
}
|
kagelump |
0:dbe4ead20087
|
219
|
}
|
kagelump |
0:dbe4ead20087
|
220
|
|
kagelump |
0:dbe4ead20087
|
221
|
void display_heartbeats() {
|
kagelump |
0:dbe4ead20087
|
222
|
CANMessage msg;
|
kagelump |
0:dbe4ead20087
|
223
|
int t = timer.read_ms();
|
kagelump |
0:dbe4ead20087
|
224
|
if (can.read(msg)) {
|
kagelump |
0:dbe4ead20087
|
225
|
switch(msg.id) {
|
kagelump |
0:dbe4ead20087
|
226
|
case 0x41:
|
kagelump |
0:dbe4ead20087
|
227
|
last_seen[BPS] = t;
|
kagelump |
0:dbe4ead20087
|
228
|
break;
|
kagelump |
0:dbe4ead20087
|
229
|
case 0x42:
|
kagelump |
0:dbe4ead20087
|
230
|
last_seen[CUTOFF] = t;
|
kagelump |
0:dbe4ead20087
|
231
|
break;
|
kagelump |
0:dbe4ead20087
|
232
|
case 0x43:
|
kagelump |
0:dbe4ead20087
|
233
|
last_seen[MAIN_OUTPUT] = t;
|
kagelump |
0:dbe4ead20087
|
234
|
break;
|
kagelump |
0:dbe4ead20087
|
235
|
case 0x44:
|
kagelump |
0:dbe4ead20087
|
236
|
last_seen[MAIN_INPUT] = t;
|
kagelump |
0:dbe4ead20087
|
237
|
break;
|
kagelump |
0:dbe4ead20087
|
238
|
case 0x45:
|
kagelump |
0:dbe4ead20087
|
239
|
last_seen[TELEMETRY] = t;
|
kagelump |
0:dbe4ead20087
|
240
|
break;
|
kagelump |
0:dbe4ead20087
|
241
|
case 0x46:
|
kagelump |
0:dbe4ead20087
|
242
|
last_seen[DATA_LOGGER] = t;
|
kagelump |
0:dbe4ead20087
|
243
|
break;
|
kagelump |
0:dbe4ead20087
|
244
|
case 0x400:
|
kagelump |
0:dbe4ead20087
|
245
|
last_seen[TRITIUM] = t;
|
kagelump |
0:dbe4ead20087
|
246
|
break;
|
kagelump |
0:dbe4ead20087
|
247
|
}
|
kagelump |
0:dbe4ead20087
|
248
|
led2 = !led2;
|
kagelump |
0:dbe4ead20087
|
249
|
}
|
kagelump |
0:dbe4ead20087
|
250
|
}
|
kagelump |
0:dbe4ead20087
|
251
|
|
kagelump |
0:dbe4ead20087
|
252
|
void display_can() {
|
kagelump |
0:dbe4ead20087
|
253
|
CANMessage msg;
|
kagelump |
0:dbe4ead20087
|
254
|
if (can.read(msg)) {
|
kagelump |
0:dbe4ead20087
|
255
|
int current_index = next();
|
kagelump |
0:dbe4ead20087
|
256
|
char *current_line = s[current_index];
|
kagelump |
0:dbe4ead20087
|
257
|
needs_update[current_index] = 1;
|
kagelump |
0:dbe4ead20087
|
258
|
if (((msg.id & 0x7FF) >= 0x100) && ((msg.id & 0x7FF) <= 0x12F)) {
|
kagelump |
0:dbe4ead20087
|
259
|
int pack_num = (msg.id & 0x30) >> 4;
|
kagelump |
0:dbe4ead20087
|
260
|
if ((msg.id & 0xF) <= 0xB) {
|
kagelump |
0:dbe4ead20087
|
261
|
sprintf(current_line, "Volt %d/%d: %f", pack_num, (msg.id & 0xF), *((float*)msg.data));
|
kagelump |
0:dbe4ead20087
|
262
|
} else {
|
kagelump |
0:dbe4ead20087
|
263
|
sprintf(current_line, "Temp %d/%d: %f", pack_num, (msg.id & 0xF) - 0xB, *((float*)msg.data));
|
kagelump |
0:dbe4ead20087
|
264
|
}
|
kagelump |
0:dbe4ead20087
|
265
|
} else {
|
kagelump |
0:dbe4ead20087
|
266
|
sprintf(current_line, "%X(%d):", msg.id & 0x7FF, msg.len);
|
kagelump |
0:dbe4ead20087
|
267
|
for (int i = 0; i < msg.len; i++) {
|
kagelump |
0:dbe4ead20087
|
268
|
sprintf(current_line + strlen(current_line), "%2X ", msg.data[i]);
|
kagelump |
0:dbe4ead20087
|
269
|
}
|
kagelump |
0:dbe4ead20087
|
270
|
}
|
kagelump |
0:dbe4ead20087
|
271
|
led2 = !led2;
|
kagelump |
0:dbe4ead20087
|
272
|
}
|
kagelump |
0:dbe4ead20087
|
273
|
} |