c. 定义通用head file
#ifdef PLATFORM_MSP //special for MSP 16bit
typedef unsigned char u8_t;
typedef signed char s8_t;
typedef unsigned int u16_t;
typedef signed int s16_t;
typedef unsigned long u32_t;
typedef signed long s32_t;
#else //Win32 Linux Unix ---Client 32bit-platform
typedef unsigned char u8_t;
typedef signed char s8_t;
typedef unsigned short u16_t;
typedef signed short s16_t;
typedef unsigned int u32_t;
typedef signed int s32_t;
#endif
//packet id define for client/MSP
#define PKTID_GENERAL 'G0'
#define PKTID_CHANGE_MODE (PKTID_GENERAL+0 ) //change mode between (XXXXserver/ SYSburnserver/ HTTPserver)
#define PKTID_DUMP_FLASH (PKTID_GENERAL+1 ) //download ANY datas from any positon in flash-mem Data-Zone
....
typedef struct struReqHead_XXX{
u32_t key; // key for security
u16_t order; // same as order_code (see above) = PKTID_...
u16_t len;
}struReqHead;
if( (fin= fopen( argv[1], "rt" )) == NULL )
{ printf( "The file %s was not opened\n",argv[1]); return -1; }
if ((version=atoi(argv[2]))==0)
{ printf( "\tversion should not be ZERO!\n"; return -1; }
int linecnt=0;
block.len=0;
block.addr=0;
while ( fgets( line, 100, fin) != NULL)
{ if (line[0]=='@') { if (block.len>0) write_block(&block); memcpy(addr_str,&line[1],4);//get addr block.addr=hex2uint(addr_str); block.len=0; } else if (line[0]=='q') { if (block.len>0) write_block(&block); break; //end of code } else { int len=asc2char(&line[0],&line_bin[0]); if ((block.len+len)>=MAX_BLOCK_LEN) { int num=MAX_BLOCK_LEN-block.len; memcpy(&block.buff[block.len],&line_bin[0],num); block.len=MAX_BLOCK_LEN; write_block(&block);
fclose(fin);
//save to file
if ((fout=fopen(fout_name,"wb") ==NULL)
{ printf( "The file %s can not be created\n",fout_name); return -1; }
fwrite(&TotalBlock[0],TotalBlock_Len,1,fout);
fflush(fout);
fclose(fout);
printf("\tdone.(OK)\n",argv[1],fout_name);
return 0;
}
b. 升级程序:将新版文件通过socket通讯来在线升级(编码前---保护版权哦)
BOOL CSystemBurner::OnSocketReceive(int iErrorCode)
{
try
{ if (iErrorCode) { printf("SocketReceive error\n";Close();return FALSE; }
char cBuffer[1024]; int iRecv=Receive(cBuffer,sizeof(cBuffer));