|
@@ -5,11 +5,12 @@
|
5
|
5
|
* Author: parkyj
|
6
|
6
|
*/
|
7
|
7
|
|
|
8
|
+#include <stdint.h>
|
|
9
|
+#include <stdbool.h>
|
8
|
10
|
|
9
|
11
|
#include "main.h"
|
10
|
|
-#include <stdbool.h>
|
11
|
12
|
#include "MBIC_Bootloader.h"
|
12
|
|
-
|
|
13
|
+#include "CRC16.h"
|
13
|
14
|
#define MARK_START_POSITION 0
|
14
|
15
|
#define TYPE_START_POSITION 9
|
15
|
16
|
#define FILE_TYPE_START_POSITION 10
|
|
@@ -87,9 +88,9 @@ BootLoaderDataCheck_st MBIC_FileDataCheck(uint8_t* data){
|
87
|
88
|
}
|
88
|
89
|
for(i = i; i < 43; i++){
|
89
|
90
|
if(MBIC_FileName2[i-30] != data[i]){
|
90
|
|
- printf("Data Diff %c\r\n",data[i]);
|
91
|
|
- printf("MBIC_FileName2[%d] : %x, data[%d] : %x\r\n",i - 30,MBIC_FileName2[i - 30],i,data[i]);
|
92
|
|
- return ret;
|
|
91
|
+// printf("Data Diff %c\r\n",data[i]);
|
|
92
|
+// printf("MBIC_FileName2[%d] : %x, data[%d] : %x\r\n",i - 30,MBIC_FileName2[i - 30],i,data[i]);
|
|
93
|
+ // return ret;
|
93
|
94
|
}
|
94
|
95
|
else
|
95
|
96
|
printf("File Name Data Success %c\r\n",data[i]);
|
|
@@ -125,57 +126,79 @@ BootLoaderDataCheck_st MBIC_FileDataCheck(uint8_t* data){
|
125
|
126
|
return ret;
|
126
|
127
|
}
|
127
|
128
|
|
|
129
|
+/*
|
|
130
|
+ MBIC Basic Header merge function
|
|
131
|
+ Data : Response Data
|
|
132
|
+ Length : Response Data Length
|
|
133
|
+ CRCINDEX : CRC INDEX Number
|
128
|
134
|
|
129
|
|
-uint8_t* MBIC_HeaderMergeFunction(uint8_t* data, uint32_t CrcIndex)
|
|
135
|
+*/
|
|
136
|
+uint8_t* MBIC_HeaderMergeFunction(uint8_t* data,uint16_t Length )
|
130
|
137
|
{
|
131
|
|
- byte[] ret = new byte[data.Length + 22 + 3];
|
132
|
|
- UInt16 CRCData = CRC16_Generate(data,data.Length);
|
133
|
|
-
|
134
|
|
- ret[(int)MBICProt_st.MBIC_PAYLOADSTART + CrcIndex + 0] = Convert.ToByte((CRCData & 0xFF00) >> 8);
|
135
|
|
- ret[(int)MBICProt_st.MBIC_PAYLOADSTART + CrcIndex + 1] = Convert.ToByte((CRCData & 0x00FF));
|
136
|
|
- ret[(int)MBICProt_st.MBIC_PAYLOADSTART + CrcIndex + 2] = 0x03;
|
|
138
|
+ uint8_t ret[Length + 22 + 3];/*Data Length + Header Length + Tail Length*/
|
|
139
|
+ uint16_t CRCData = CRC16_Generate(data,Length);
|
|
140
|
+ uint16_t cmd = data[MBIC_CMD_0];
|
|
141
|
+ /*CRC Create*/
|
|
142
|
+ ret[MBIC_PAYLOADSTART + Length + 0] = ((CRCData & 0xFF00) >> 8);
|
|
143
|
+ ret[MBIC_PAYLOADSTART + Length + 1] = ((CRCData & 0x00FF));
|
|
144
|
+ ret[MBIC_PAYLOADSTART + Length + 2] = 0x03;
|
|
145
|
+ /*Data Mark Create*/
|
|
146
|
+ ret[MBIC_PREAMBLE_0] = MBIC_PREAMBLE0;
|
|
147
|
+ ret[MBIC_PREAMBLE_1] = MBIC_PREAMBLE1;
|
|
148
|
+ ret[MBIC_PREAMBLE_2] = MBIC_PREAMBLE2;
|
|
149
|
+ ret[MBIC_PREAMBLE_3] = MBIC_PREAMBLE3;
|
|
150
|
+ /*Data Subid Create*/
|
|
151
|
+ ret[MBIC_SUBUID_0] = MBIC_SUBUID0;
|
|
152
|
+ ret[MBIC_SUBUID_1] = MBIC_SUBUID1;
|
137
|
153
|
|
138
|
|
- ret[(int)MBICProt_st.MBIC_PREAMBLE_0] = MBIC_PREAMBLE0;
|
139
|
|
- ret[(int)MBICProt_st.MBIC_PREAMBLE_1] = MBIC_PREAMBLE1;
|
140
|
|
- ret[(int)MBICProt_st.MBIC_PREAMBLE_2] = MBIC_PREAMBLE2;
|
141
|
|
- ret[(int)MBICProt_st.MBIC_PREAMBLE_3] = MBIC_PREAMBLE3;
|
|
154
|
+ ret[MBIC_RCODE_0] = data[MBIC_RCODE_0];
|
142
|
155
|
|
143
|
|
- ret[(int)MBICProt_st.MBIC_SUBUID_0] = MBIC_SUBUID0;
|
144
|
|
- ret[(int)MBICProt_st.MBIC_SUBUID_1] = MBIC_SUBUID1;
|
|
156
|
+ ret[MBIC_TRID_0] = data[MBIC_TRID_0];
|
|
157
|
+ ret[MBIC_TRID_1] = data[MBIC_TRID_1];
|
145
|
158
|
|
146
|
|
- ret[(int)MBICProt_st.MBIC_RCODE_0] = 0;
|
|
159
|
+ ret[MBIC_SEQSUM_0] = data[MBIC_SEQSUM_0];
|
147
|
160
|
|
148
|
|
- ret[(int)MBICProt_st.MBIC_TRID_0] = 0;
|
149
|
|
- ret[(int)MBICProt_st.MBIC_TRID_1] = 0;
|
|
161
|
+ ret[MBIC_TTL_0] = data[MBIC_TTL_0];
|
150
|
162
|
|
151
|
|
- ret[(int)MBICProt_st.MBIC_SEQSUM_0] = 0;
|
|
163
|
+ ret[MBIC_TIME_0] = data[MBIC_TIME_0];
|
|
164
|
+ ret[MBIC_TIME_1] = data[MBIC_TIME_1];
|
|
165
|
+ ret[MBIC_TIME_2] = data[MBIC_TIME_2];
|
|
166
|
+ ret[MBIC_TIME_3] = data[MBIC_TIME_3];
|
|
167
|
+ ret[MBIC_TIME_4] = data[MBIC_TIME_4];
|
|
168
|
+ ret[MBIC_TIME_5] = data[MBIC_TIME_5];
|
|
169
|
+ ret[MBIC_ERRRESPONSE_0] = MBIC_ERRRESPONSE;
|
152
|
170
|
|
153
|
|
- ret[(int)MBICProt_st.MBIC_TTL_0] = 0;
|
154
|
171
|
|
155
|
|
- ret[(int)MBICProt_st.MBIC_TIME_0] = 0;
|
156
|
|
- ret[(int)MBICProt_st.MBIC_TIME_1] = 0;
|
157
|
|
- ret[(int)MBICProt_st.MBIC_TIME_2] = 0;
|
158
|
|
- ret[(int)MBICProt_st.MBIC_TIME_3] = 0;
|
159
|
|
- ret[(int)MBICProt_st.MBIC_TIME_4] = 0;
|
160
|
|
- ret[(int)MBICProt_st.MBIC_TIME_5] = 0;
|
161
|
|
- ret[(int)MBICProt_st.MBIC_ERRRESPONSE_0] = MBIC_ERRRESPONSE;
|
162
|
172
|
|
163
|
|
- ret[(int)MBICProt_st.MBIC_CMD_0] = MBIC_ERRRESPONSE;
|
|
173
|
+
|
164
|
174
|
|
165
|
|
- ret[(int)MBICProt_st.MBIC_LENGTH_0] = MBIC_ERRRESPONSE;
|
166
|
|
- ret[(int)MBICProt_st.MBIC_LENGTH_1] = MBIC_ERRRESPONSE;
|
|
175
|
+ ret[MBIC_LENGTH_0] = (Length & 0xFF00) << 8;
|
|
176
|
+ ret[MBIC_LENGTH_1] = Length & 0x00FF;
|
167
|
177
|
|
168
|
|
- ret[(int)MBICProt_st.MBIC_HEADERCHECKSUM_0] = Chksum_Create(ret);
|
169
|
|
-
|
170
|
|
- for(int i = 0; i < data.Length; i ++)
|
171
|
|
- ret[(int)MBICProt_st.MBIC_PAYLOADSTART + i] = data[i];
|
|
178
|
+ ret[MBIC_HEADERCHECKSUM_0] = Chksum_Create(ret);
|
|
179
|
+ /*Data Move*/
|
|
180
|
+ for(int i = 0; i < Length; i++){
|
|
181
|
+ data[MBIC_HEADER_SIZE + i] = data[i];
|
|
182
|
+ }
|
|
183
|
+ for(int i = 0; i < MBIC_HEADER_SIZE; i++){
|
|
184
|
+ data[i] = ret[i];
|
|
185
|
+ }
|
|
186
|
+ for(int i = MBIC_HEADER_SIZE + Length; i < MBIC_HEADER_SIZE + MBIC_TAIL_SIZE + Length; i++){
|
|
187
|
+ data[i] = ret[i];
|
|
188
|
+ }
|
|
189
|
+// for(uint16_t i = 0; i < Length; i ++)
|
|
190
|
+// ret[MBIC_PAYLOADSTART + i] = data[i];
|
172
|
191
|
|
173
|
|
- return ret;
|
|
192
|
+ return data;
|
174
|
193
|
}
|
175
|
194
|
|
176
|
195
|
void MBIC_Bootloader_FirmwareUpdate(uint8_t* data){
|
177
|
|
- uint8_t datatype = data[MBIC_PAYLOADSTART];
|
178
|
|
-
|
|
196
|
+ uint8_t MBIC_DownLoadData[0xFFFF];
|
|
197
|
+ uint16_t cmd = data[MBIC_CMD_0];
|
|
198
|
+ static uint8_t Download_Option = 0;
|
|
199
|
+ uint16_t index = 0;
|
|
200
|
+ static uint32_t Curr_Download_DataIndex = 0;
|
|
201
|
+ static uint32_t Prev_Download_DataIndex = 0;
|
179
|
202
|
#if 0 // PYJ.2020.06.04_BEGIN --
|
180
|
203
|
uint8_t dataTest[1024] = {
|
181
|
204
|
0x4A,0x54,0x2D,0x4E,0x52,0x44,0x41,0x53,0x20,0x20,0x00,0x00,
|
|
@@ -191,28 +214,123 @@ void MBIC_Bootloader_FirmwareUpdate(uint8_t* data){
|
191
|
214
|
};
|
192
|
215
|
|
193
|
216
|
#endif // PYJ.2020.06.04_END --
|
194
|
|
- MBIC_FileDataCheck(&data[MBIC_PAYLOADSTART]);
|
|
217
|
+ MBIC_FileDataCheck(data);
|
195
|
218
|
|
196
|
|
-
|
197
|
219
|
// printf("RX");
|
198
|
220
|
// for(int i = 0; i < 128; i++)
|
199
|
221
|
// printf("%c",*data++);
|
200
|
|
- switch(datatype){
|
|
222
|
+ switch(cmd){
|
201
|
223
|
case MBIC_Notice_REQ:
|
202
|
|
-
|
|
224
|
+ cmd = MBIC_Notice_RSP;
|
|
225
|
+ /*TOTAL FRAME NUMBER*/
|
|
226
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 0];
|
|
227
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 1];
|
|
228
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 2];
|
|
229
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 3];
|
|
230
|
+ /*DOWNLOAD OPTION*/
|
|
231
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 4];
|
|
232
|
+ Download_Option = data[MBIC_PAYLOADSTART + 4];
|
|
233
|
+ /*DOWNLOAD DELAY REQUEST*/
|
|
234
|
+ data[MBIC_PAYLOADSTART + index++] = 3;
|
|
235
|
+ /*DOWNLOAD Reserve*/
|
|
236
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
237
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
238
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
239
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
240
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
241
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
203
|
242
|
break;
|
204
|
243
|
case MBIC_Download_DATA_REQ:
|
205
|
|
-
|
206
|
|
- break;
|
|
244
|
+ cmd = MBIC_Download_DATA_RSP;
|
|
245
|
+ /*TOTAL FRAME NUMBER*/
|
|
246
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 0];
|
|
247
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 1];
|
|
248
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 2];
|
|
249
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 3];
|
|
250
|
+ /*Current Download Frame Number*/
|
|
251
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 4];
|
|
252
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 5];
|
|
253
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 6];
|
|
254
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 7];
|
|
255
|
+ Curr_Download_DataIndex = data[MBIC_PAYLOADSTART + 4] << 24;
|
|
256
|
+ Curr_Download_DataIndex += data[MBIC_PAYLOADSTART + 5] << 16;
|
|
257
|
+ Curr_Download_DataIndex += data[MBIC_PAYLOADSTART + 6] << 8;
|
|
258
|
+ Curr_Download_DataIndex += data[MBIC_PAYLOADSTART + 7];
|
|
259
|
+ /*DOWNLOAD Reserve*/
|
|
260
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
261
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
262
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
263
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
264
|
+ for(uint32_t i = Prev_Download_DataIndex; i < Curr_Download_DataIndex; i++){
|
|
265
|
+ MBIC_DownLoadData[i] = data[index + i];
|
|
266
|
+ printf("MBIC_DownLoadData[i] : %x",MBIC_DownLoadData[i]);
|
|
267
|
+ }
|
|
268
|
+
|
|
269
|
+ Prev_Download_DataIndex = Curr_Download_DataIndex;
|
|
270
|
+ break;
|
207
|
271
|
case MBIC_Download_Confirm_REQ:
|
208
|
|
-
|
|
272
|
+ cmd = MBIC_Download_Confirm_RSP;
|
|
273
|
+ /*TOTAL FRAME NUMBER*/
|
|
274
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 0];
|
|
275
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 1];
|
|
276
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 2];
|
|
277
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 3];
|
|
278
|
+ /*DOWNLOAD OPTION*/
|
|
279
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 4];
|
|
280
|
+ Download_Option = data[MBIC_PAYLOADSTART + 4];
|
|
281
|
+ /*DOWNLOAD DELAY REQUEST*/
|
|
282
|
+ data[MBIC_PAYLOADSTART + index++] = 3;
|
|
283
|
+ /*DOWNLOAD Reserve*/
|
|
284
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
285
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
286
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
287
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
288
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
289
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
209
|
290
|
break;
|
210
|
291
|
case MBIC_Complete_Notice_REQ_REQ:
|
211
|
|
-
|
212
|
|
- break;
|
|
292
|
+ cmd = MBIC_Complete_Notice_RSP;
|
|
293
|
+ /*TOTAL FRAME NUMBER*/
|
|
294
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 0];
|
|
295
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 1];
|
|
296
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 2];
|
|
297
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 3];
|
|
298
|
+ /*DOWNLOAD OPTION*/
|
|
299
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 4];
|
|
300
|
+ Download_Option = data[MBIC_PAYLOADSTART + 4];
|
|
301
|
+ /*DOWNLOAD DELAY REQUEST*/
|
|
302
|
+ data[MBIC_PAYLOADSTART + index++] = 3;
|
|
303
|
+ /*DOWNLOAD Reserve*/
|
|
304
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
305
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
306
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
307
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
308
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
309
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
310
|
+ break;
|
213
|
311
|
case MBIC_Reboot_Notice_REQ:
|
214
|
|
-
|
215
|
|
- break;
|
|
312
|
+ cmd = MBIC_Reboot_Notice_RSP;
|
|
313
|
+ /*TOTAL FRAME NUMBER*/
|
|
314
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 0];
|
|
315
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 1];
|
|
316
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 2];
|
|
317
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 3];
|
|
318
|
+ /*DOWNLOAD OPTION*/
|
|
319
|
+ data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 4];
|
|
320
|
+ Download_Option = data[MBIC_PAYLOADSTART + 4];
|
|
321
|
+ /*DOWNLOAD DELAY REQUEST*/
|
|
322
|
+ data[MBIC_PAYLOADSTART + index++] = 3;
|
|
323
|
+ /*DOWNLOAD Reserve*/
|
|
324
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
325
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
326
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
327
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
328
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
329
|
+ data[MBIC_PAYLOADSTART + index++] = 0;
|
|
330
|
+ break;
|
|
331
|
+ default:
|
|
332
|
+ return;
|
216
|
333
|
}
|
217
|
|
-
|
|
334
|
+ data[MBIC_CMD_0] = cmd;
|
|
335
|
+ MBIC_HeaderMergeFunction(data,index); // reponse
|
218
|
336
|
}
|