7
7
#include "render.h"
8
8
9
9
// Convert 2 little-endian 8bit bytes to a 16bit integer
10
- static uint16_t decodeInt16 (uint8_t * data , uint8_t start ) {
10
+ static uint16_t decodeInt16 (const uint8_t * data , const uint8_t start ) {
11
11
return data [start ] | (uint16_t )data [start + 1 ] << 8 ;
12
12
}
13
13
@@ -26,7 +26,7 @@ enum m8_command_bytes {
26
26
system_info_command_datalength = 6
27
27
};
28
28
29
- static inline void dump_packet (uint32_t size , uint8_t * recv_buf ) {
29
+ static void dump_packet (const uint32_t size , const uint8_t * recv_buf ) {
30
30
for (uint16_t a = 0 ; a < size ; a ++ ) {
31
31
SDL_LogDebug (SDL_LOG_CATEGORY_APPLICATION , "0x%02X " , recv_buf [a ]);
32
32
}
@@ -42,8 +42,7 @@ int process_command(uint8_t *data, uint32_t size) {
42
42
43
43
switch (recv_buf [0 ]) {
44
44
45
- case draw_rectangle_command :
46
-
45
+ case draw_rectangle_command : {
47
46
if (size < draw_rectangle_command_min_datalength ||
48
47
size > draw_rectangle_command_max_datalength ) {
49
48
SDL_LogError (SDL_LOG_CATEGORY_ERROR ,
@@ -52,74 +51,64 @@ int process_command(uint8_t *data, uint32_t size) {
52
51
size );
53
52
dump_packet (size , recv_buf );
54
53
return 0 ;
55
- break ;
56
- } else {
57
-
58
- /* Support variable sized rectangle commands
59
- If colors are omitted, the last drawn color should be used
60
- If size is omitted, the size should be 1x1 pixels
61
- So basically the command can be 5, 8, 9 or 12 bytes long */
62
-
63
- static struct draw_rectangle_command rectcmd ;
64
-
65
- rectcmd .pos .x = decodeInt16 (recv_buf , 1 );
66
- rectcmd .pos .y = decodeInt16 (recv_buf , 3 );
67
-
68
- switch (size ) {
69
- case 5 :
70
- rectcmd .size .width = 1 ;
71
- rectcmd .size .height = 1 ;
72
- break ;
73
- case 8 :
74
- rectcmd .size .width = 1 ;
75
- rectcmd .size .height = 1 ;
76
- rectcmd .color .r = recv_buf [5 ];
77
- rectcmd .color .g = recv_buf [6 ];
78
- rectcmd .color .b = recv_buf [7 ];
79
- break ;
80
- case 9 :
81
- rectcmd .size .width = decodeInt16 (recv_buf , 5 );
82
- rectcmd .size .height = decodeInt16 (recv_buf , 7 );
83
- break ;
84
- default :
85
- rectcmd .size .width = decodeInt16 (recv_buf , 5 );
86
- rectcmd .size .height = decodeInt16 (recv_buf , 7 );
87
- rectcmd .color .r = recv_buf [9 ];
88
- rectcmd .color .g = recv_buf [10 ];
89
- rectcmd .color .b = recv_buf [11 ];
90
- break ;
91
- }
92
-
93
- draw_rectangle (& rectcmd );
94
- return 1 ;
95
54
}
55
+ /* Support variable sized rectangle commands
56
+ If colors are omitted, the last drawn color should be used
57
+ If size is omitted, the size should be 1x1 pixels
58
+ So basically the command can be 5, 8, 9 or 12 bytes long */
96
59
97
- break ;
60
+ static struct draw_rectangle_command rectcmd ;
98
61
99
- case draw_character_command :
62
+ rectcmd .pos .x = decodeInt16 (recv_buf , 1 );
63
+ rectcmd .pos .y = decodeInt16 (recv_buf , 3 );
100
64
65
+ switch (size ) {
66
+ case 5 :
67
+ rectcmd .size .width = 1 ;
68
+ rectcmd .size .height = 1 ;
69
+ break ;
70
+ case 8 :
71
+ rectcmd .size .width = 1 ;
72
+ rectcmd .size .height = 1 ;
73
+ rectcmd .color .r = recv_buf [5 ];
74
+ rectcmd .color .g = recv_buf [6 ];
75
+ rectcmd .color .b = recv_buf [7 ];
76
+ break ;
77
+ case 9 :
78
+ rectcmd .size .width = decodeInt16 (recv_buf , 5 );
79
+ rectcmd .size .height = decodeInt16 (recv_buf , 7 );
80
+ break ;
81
+ default :
82
+ rectcmd .size .width = decodeInt16 (recv_buf , 5 );
83
+ rectcmd .size .height = decodeInt16 (recv_buf , 7 );
84
+ rectcmd .color .r = recv_buf [9 ];
85
+ rectcmd .color .g = recv_buf [10 ];
86
+ rectcmd .color .b = recv_buf [11 ];
87
+ break ;
88
+ }
89
+
90
+ draw_rectangle (& rectcmd );
91
+ return 1 ;
92
+ }
93
+
94
+ case draw_character_command : {
101
95
if (size != draw_character_command_datalength ) {
102
96
SDL_LogError (SDL_LOG_CATEGORY_ERROR ,
103
97
"Invalid draw character packet: expected length %d, got %d" ,
104
98
draw_character_command_datalength , size );
105
99
dump_packet (size , recv_buf );
106
100
return 0 ;
107
- break ;
108
- } else {
109
-
110
- struct draw_character_command charcmd = {
111
- recv_buf [1 ], // char
112
- {decodeInt16 (recv_buf , 2 ), decodeInt16 (recv_buf , 4 )}, // position x/y
113
- {recv_buf [6 ], recv_buf [7 ], recv_buf [8 ]}, // foreground r/g/b
114
- {recv_buf [9 ], recv_buf [10 ], recv_buf [11 ]}}; // background r/g/b
115
- draw_character (& charcmd );
116
- return 1 ;
117
101
}
102
+ struct draw_character_command charcmd = {
103
+ recv_buf [1 ], // char
104
+ {decodeInt16 (recv_buf , 2 ), decodeInt16 (recv_buf , 4 )}, // position x/y
105
+ {recv_buf [6 ], recv_buf [7 ], recv_buf [8 ]}, // foreground r/g/b
106
+ {recv_buf [9 ], recv_buf [10 ], recv_buf [11 ]}}; // background r/g/b
107
+ draw_character (& charcmd );
108
+ return 1 ;
109
+ }
118
110
119
- break ;
120
-
121
- case draw_oscilloscope_waveform_command :
122
-
111
+ case draw_oscilloscope_waveform_command : {
123
112
if (size < draw_oscilloscope_waveform_command_mindatalength ||
124
113
size > draw_oscilloscope_waveform_command_maxdatalength ) {
125
114
SDL_LogError (SDL_LOG_CATEGORY_ERROR ,
@@ -128,21 +117,17 @@ int process_command(uint8_t *data, uint32_t size) {
128
117
draw_oscilloscope_waveform_command_maxdatalength , size );
129
118
dump_packet (size , recv_buf );
130
119
return 0 ;
131
- break ;
132
- } else {
133
-
134
- struct draw_oscilloscope_waveform_command osccmd ;
135
-
136
- osccmd .color = (struct color ){recv_buf [1 ], recv_buf [2 ], recv_buf [3 ]}; // color r/g/b
137
- memcpy (osccmd .waveform , & recv_buf [4 ], size - 4 );
120
+ }
121
+ struct draw_oscilloscope_waveform_command osccmd ;
138
122
139
- osccmd .waveform_size = size - 4 ;
123
+ osccmd .color = (struct color ){recv_buf [1 ], recv_buf [2 ], recv_buf [3 ]}; // color r/g/b
124
+ memcpy (osccmd .waveform , & recv_buf [4 ], size - 4 );
140
125
141
- draw_waveform (& osccmd );
142
- return 1 ;
143
- }
126
+ osccmd .waveform_size = size - 4 ;
144
127
145
- break ;
128
+ draw_waveform (& osccmd );
129
+ return 1 ;
130
+ }
146
131
147
132
case joypad_keypressedstate_command : {
148
133
if (size != joypad_keypressedstate_command_datalength ) {
@@ -152,12 +137,10 @@ int process_command(uint8_t *data, uint32_t size) {
152
137
joypad_keypressedstate_command_datalength , size );
153
138
dump_packet (size , recv_buf );
154
139
return 0 ;
155
- break ;
156
140
}
157
141
158
142
// nothing is done with joypad key pressed packets for now
159
143
return 1 ;
160
- break ;
161
144
}
162
145
163
146
case system_info_command : {
@@ -188,14 +171,12 @@ int process_command(uint8_t *data, uint32_t size) {
188
171
set_font_mode (recv_buf [5 ]);
189
172
190
173
return 1 ;
191
- break ;
192
174
}
193
175
194
176
default :
195
- SDL_LogError (SDL_LOG_CATEGORY_ERROR , "Invalid packet\n " );
177
+ SDL_LogError (SDL_LOG_CATEGORY_ERROR , "Invalid packet" );
196
178
dump_packet (size , recv_buf );
197
179
return 0 ;
198
- break ;
199
180
}
200
181
return 1 ;
201
182
}
0 commit comments