上传数据给后台,失败重发三次
#include <cstdio>
#include <unistd.h>
#include <cstring>
#include <cstdlib>
#define GB_VIN_LEN 17
typedef unsigned char UCHAR;
typedef struct{
bool bcm_reg_status; //regist status between MCU and BCM
char ecu_configure[10];
char tcu_function_configure[20];
bool isUpdateing; //TBOX update status
char* tcu_id; //TCU ID
char* vin; //VIN Code
char* mcu_sw_ver; //MCU Software version
char* mcu_hw_ver; //MCU Hardware version
char* develop_id; //DEVELOP ID
int tcuid_len; //TCU ID length
int vin_len; //VIN Code Length
int mcuswver_len; //MCU Software version length
int mcuhwver_len; //MCU Hardware version length
int develop_id_len; //DEVELOP ID length
}McuInfo;
McuInfo mcuInfo;
static char const* govResultFile= "govResult.conf";
bool isDfServerRcvGovRegsResult;
void printRawData( const char *head,UCHAR const * data, int len)
{
int i;
char *p;
char *buffer;
int bufferSize = 3 * (len + 1);
buffer = (char*)malloc(bufferSize);
if(!buffer)
{
return;
}
p = buffer;
memset(p, 0, bufferSize);
for(i=0; i<len; i++)
{
sprintf(p, "%02X ", data[i]);
p += 3;
}
printf( "RAW:%s%s\n", head,buffer);
free(buffer);
}
UCHAR BCC(unsigned char *upCreatBcc_Data, unsigned int uCreatBcc_Data_len)
{
int bcc=0;
unsigned int i;
for (i = 2; i<uCreatBcc_Data_len; i++)
bcc ^= upCreatBcc_Data[i];
return bcc;
}
void sendGovRegStatusToL2(char status) {
unsigned char sendData[32] = {0};
int sendDataIndex = 0;
unsigned char bcc;
sendData[sendDataIndex] = 0x23;
sendDataIndex++;
sendData[sendDataIndex] = 0x23; //起始位
sendDataIndex++;
sendData[sendDataIndex] = 0x0A; //命令单元
sendDataIndex++;
memcpy(&sendData[sendDataIndex],mcuInfo.vin,GB_VIN_LEN); //vin
sendDataIndex += GB_VIN_LEN;
sendData[sendDataIndex] = 0xff; // 终端软件版本号
sendDataIndex++;
sendData[sendDataIndex] = 0x01; //加密方式
sendDataIndex++;
sendData[sendDataIndex] = 0x00;
sendDataIndex++;
sendData[sendDataIndex] = 0x01; //数据长度
sendDataIndex++;
sendData[sendDataIndex] = status;
sendDataIndex++;
bcc = BCC(sendData, sendDataIndex);
sendData[sendDataIndex] = bcc;
sendDataIndex++;
printRawData("origin data:", sendData, sendDataIndex);
// if(sendToTspSocket_df(sendData,sendDataIndex) == true)
// {
// printf("send success\n");
// }else{
// printf("send err\n");
// }
}
void sendGovRegStatusToL2Times(char status) {
FILE *fp = NULL;
char *str = &status;
fp = fopen( govResultFile , "w" );
if (fp){
fwrite(str, 1 , 1, fp );
fflush(fp);
fsync(fileno(fp));
fclose(fp);
}
//连续发3条,收到回复后不发
for (int i = 0; i < 3 ; ++i) {
sendGovRegStatusToL2(status);
sleep(2);//挂起2s,等待企业平台回复
if(isDfServerRcvGovRegsResult){
char rmCmd [128];
memset(rmCmd, 0, sizeof(rmCmd));
sprintf(rmCmd, "rm -rf %s", govResultFile);
system(rmCmd);
printf("tzy test remove gov result file successful");;
break;
}
}
}
//用在唤醒后发送国家平台激活结果给企业平台
void sendGovRegStatusToL2Times() {
FILE *fp = NULL;
char buffer [1]= {0x00};
char status = 0x00;
fp = fopen(govResultFile, "r");
if (fp){
size_t len = fread(buffer, 1, 1, fp);
status = *buffer;
printf("status = 0x%.2x, len = %lu", status,len);
fflush(fp);
fsync(fileno(fp));
fclose(fp);
}
//连续发3条,收到回复后不发
for (int i = 0; i <3 ; ++i) {
sendGovRegStatusToL2(status);
sleep(2);//挂起2s,等待企业平台回复
if(isDfServerRcvGovRegsResult){
char rmCmd [128];
memset(rmCmd, 0, sizeof(rmCmd));
sprintf(rmCmd, "rm -rf %s", govResultFile);
system(rmCmd);
printf("tzy test remove gov result file successful wakeup");
break;
}
}
}
int main(){
mcuInfo.vin_len = 17;
mcuInfo.vin = (char *)malloc(mcuInfo.vin_len);
if (mcuInfo.vin == NULL)
{
return -1;
}
memset(mcuInfo.vin,0,mcuInfo.vin_len);
sendGovRegStatusToL2Times(01);
return 0;
}