diff --git a/APP_Framework/Framework/connection/at_agent.h b/APP_Framework/Framework/connection/at_agent.h index 573ed1f9c..2455146e4 100755 --- a/APP_Framework/Framework/connection/at_agent.h +++ b/APP_Framework/Framework/connection/at_agent.h @@ -26,12 +26,6 @@ #include #include -#if defined(CONNECTION_ADAPTER_4G) && defined(TOOL_USING_OTA) -#define ENTM_RECV_MAX 1024 -#else -#define ENTM_RECV_MAX 256 -#endif - #define REPLY_TIME_OUT 10 enum ReceiveMode @@ -76,6 +70,7 @@ struct ATAgent #endif pthread_t at_handler; + #define ENTM_RECV_MAX 2048 char entm_recv_buf[ENTM_RECV_MAX]; uint32 entm_recv_len; enum ReceiveMode receive_mode; diff --git a/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/.defconfig b/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/.defconfig index 95c11b65a..7d4fa4771 100644 --- a/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/.defconfig +++ b/Ubiquitous/XiZi_IIoT/board/xidatong-arm32/.defconfig @@ -67,7 +67,7 @@ CONFIG___STACKSIZE__=4096 # CONFIG_RESOURCES_SERIAL=y CONFIG_SERIAL_USING_DMA=y -CONFIG_SERIAL_RB_BUFSZ=128 +CONFIG_SERIAL_RB_BUFSZ=256 CONFIG_RESOURCES_PIN=y # diff --git a/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/ota.c b/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/ota.c index 0c26a69a1..9bf31420b 100644 --- a/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/ota.c +++ b/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/ota.c @@ -131,16 +131,18 @@ static uint32_t calculate_crc32(uint32_t addr, uint32_t len) static uint16_t calculate_crc16(uint8_t * data, uint32_t len) { uint16_t reg_crc=0xFFFF; - while(len--) { + while(len--) + { reg_crc ^= *data++; - for (int j=0;j<8;j++) { + for(int j=0;j<8;j++) + { if(reg_crc & 0x01) reg_crc=reg_crc >>1 ^ 0xA001; else reg_crc=reg_crc >>1; } } - printf(" crc = [0x%x]\n",reg_crc); + printf("crc = [0x%x]\n",reg_crc); return reg_crc; } @@ -490,7 +492,8 @@ static int ota_data_recv(struct Adapter* adapter) int try_times = 10; int frame_cnt = 0; - while(1) { + while(1) + { memset(&recv_msg, 0, sizeof(struct ota_data)); ret = AdapterDeviceRecv(adapter, &recv_msg, sizeof(struct ota_data)); if(ret >= 0 && recv_msg.header.frame_flag == 0x5A5A) @@ -506,14 +509,13 @@ static int ota_data_recv(struct Adapter* adapter) printf("total [%d]frames [%d]Bytes crc[%x],receive successful,\n",frame_cnt,recv_msg.header.total_len,recv_msg.frame.crc); memset(reply, 0, 16); memcpy(reply, "ok", strlen("ok")); - AdapterDeviceSend(adapter, reply, strlen(reply)); ret = 0; break; } frame_cnt = recv_msg.frame.frame_id; - if (recv_msg.frame.crc == calculate_crc16(recv_msg.frame.frame_data,recv_msg.frame.frame_len)) + if(recv_msg.frame.crc == calculate_crc16(recv_msg.frame.frame_data,recv_msg.frame.frame_len)) { printf("current [%d] frame,length[%d] Bytes.\n",frame_cnt,recv_msg.frame.frame_len); /*写入flash待实现*/ @@ -529,7 +531,8 @@ send_ok_again: memcpy(reply, "ok", strlen("ok")); ret = AdapterDeviceSend(adapter, reply, strlen(reply)); - if(ret < 0){ + if(ret < 0) + { printf("send ok failed.\n"); goto send_ok_again; } @@ -558,7 +561,8 @@ try_again: } } - if(0 == ret) { + if(0 == ret) + { printf("ota file done,start application.\n"); //传输完成需要干什么; } @@ -593,12 +597,12 @@ void app_ota_by_4g(void) while(1) { memset(&recv_msg, 0, sizeof(struct ota_data)); - /* step1: Confirm the start signal of transmission*/ + /* step1:Confirm the start signal of transmission. */ printf("waiting for start msg...\n"); ret = AdapterDeviceRecv(adapter, &recv_msg, sizeof(struct ota_data)); if(ret >= 0 && recv_msg.header.frame_flag == 0x5A5A) { - if (0 == strncmp("aiit_ota_start",recv_msg.frame.frame_data, strlen("aiit_ota_start"))) + if(0 == strncmp("aiit_ota_start",recv_msg.frame.frame_data, strlen("aiit_ota_start"))) { memset(reply, 0, 16); memcpy(reply, "ready", strlen("ready")); @@ -610,10 +614,10 @@ send_ready_again: goto send_ready_again; } printf("start receive ota file.\n"); - /* step2: start receive bin file,first wait for 5s*/ - PrivTaskDelay(5000); + /* step2:start receive bin file,first wait for 4s. */ + PrivTaskDelay(4000); ret = ota_data_recv(adapter); - if (0 != ret) + if(0 != ret) { memset(reply, 0, 16); memcpy(reply, "ota_restart", strlen("ota_restart")); diff --git a/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/ota.h b/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/ota.h index b257dd3ae..46b63d56b 100644 --- a/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/ota.h +++ b/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/ota.h @@ -25,7 +25,7 @@ #define JUMP_FAILED_FLAG 0XABABABAB #define JUMP_SUCCESS_FLAG 0XCDCDCDCD -#define LENGTH 256 //每帧数据的数据包长度 +#define LENGTH 1024 //每帧数据的数据包长度 typedef enum { OTA_STATUS_IDLE = 0, // 空闲状态,没有进行OTA升级 diff --git a/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/server_tcp.c b/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/server_tcp.c index 108e9e896..0dbca44b7 100644 --- a/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/server_tcp.c +++ b/Ubiquitous/XiZi_IIoT/tool/bootloader/ota/server_tcp.c @@ -38,9 +38,9 @@ #include -#define PORT 7777 //socket端口号 -#define SIZE 100 //socket链接限制为100 -#define LENGTH 256 //每帧数据的数据包长度 +#define PORT 7777 //socket端口号 +#define SIZE 100 //socket链接限制为100 +#define LENGTH 1024 //每帧数据的数据包长度 #define BIN_PATH "/home/aep05/wgz/XiZi-xidatong-arm32-app.bin" //bin包的路径 struct ota_header_t @@ -79,16 +79,18 @@ static int clientfd[SIZE] = {0}; // 客户端的socketfd,100个元素,clientfd static uint16_t calculate_crc16(uint8_t * data, uint32_t len) { uint16_t reg_crc=0xFFFF; - while(len--) { + while(len--) + { reg_crc ^= *data++; - for (int j=0;j<8;j++) { + for(int j=0;j<8;j++) + { if(reg_crc & 0x01) reg_crc=reg_crc >>1 ^ 0xA001; else reg_crc=reg_crc >>1; } } - printf(" crc = [0x%x]\n",reg_crc); + printf("crc = [0x%x]\n",reg_crc); return reg_crc; } @@ -108,7 +110,7 @@ void sockt_init(void) serverfd = socket(AF_INET,SOCK_STREAM,0); - if (serverfd == -1) + if(serverfd == -1) { perror("创建socket失败"); exit(-1); @@ -121,8 +123,10 @@ void sockt_init(void) /*显示当前TCP server的*/ getifaddrs(&ifap); - for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) { - if (ifa->ifa_addr->sa_family == AF_INET) { + for(ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) + { + if(ifa->ifa_addr->sa_family == AF_INET) + { sa = (struct sockaddr_in *) ifa->ifa_addr; ipaddr = inet_ntoa(sa->sin_addr); printf("Interface: %s\tAddress: %s\n", ifa->ifa_name, ipaddr); @@ -140,14 +144,14 @@ void sockt_init(void) exit(-1); } - if (bind(serverfd,(struct sockaddr*)&addr,sizeof(addr)) == -1) + if(bind(serverfd,(struct sockaddr*)&addr,sizeof(addr)) == -1) { perror("绑定失败"); exit(-1); } //监听最大连接数 - if (listen(serverfd,SIZE) == -1) + if(listen(serverfd,SIZE) == -1) { perror("设置监听失败"); exit(-1); @@ -177,13 +181,14 @@ void ota_start_signal(int fd) printf("send start signal.\n"); ret = send(fd, &data, sizeof(data), MSG_NOSIGNAL); - if (ret > 0){ + if(ret > 0) + { printf("send %s[%d] Bytes\n",data.frame.frame_data,ret); } memset(buf, 0, 32); length = recv(fd, buf, sizeof(buf), 0); - if (length > 0 && (0 == strncmp(buf, "ready", length))) + if(length > 0 && (0 == strncmp(buf, "ready", length))) { printf("recv buf %s length %d\n",buf,length); break; @@ -219,17 +224,21 @@ int ota_file_send(int fd) int file_length = 0; char * file_buf = NULL; - if (stat(BIN_PATH, &st) == 0) { + if(stat(BIN_PATH, &st) == 0) + { //获取文件大小(以字节为单位) file_frame_cnt = (st.st_size%LENGTH != 0)? (st.st_size/LENGTH + 1):(st.st_size/LENGTH); printf("File size is %ld bytes,file frame count is %d!\n", st.st_size, file_frame_cnt); - }else{ + } + else + { printf("get file size failed.\n"); return -1; } file_fd = fopen(BIN_PATH, "r"); - if (NULL == file_fd){ + if(NULL == file_fd) + { printf("open file failed.\n"); return -1; } @@ -255,7 +264,8 @@ int ota_file_send(int fd) send_again: printf("ota send current[%d] frame.\n",frame_cnt); length = send(fd, &data, sizeof(data), MSG_NOSIGNAL); - if(length < 0){ + if(length < 0) + { printf("send [%d] frame faile.go to send again\n",frame_cnt); goto send_again; } @@ -263,7 +273,8 @@ send_again: recv_again: memset(buf, 0, 32); length = recv(fd, buf, sizeof(buf), 0); - if(length < 0 ){ + if(length < 0 ) + { printf("[%d] frame waiting for ok timeout,receive again.\n",frame_cnt); goto recv_again; } @@ -294,7 +305,7 @@ recv_again: } /* finally,crc check total bin file.*/ - if (ret == 0) + if(ret == 0) { printf("total send file length[%d] Bytes [%d] frames.\n",file_length,frame_cnt); printf("now crc check total bin file.\n"); @@ -305,14 +316,16 @@ recv_again: data.header.frame_flag = 0x5A5A; file_fd = fopen(BIN_PATH, "r"); - if (NULL == file_fd){ + if(NULL == file_fd) + { printf("open file failed.\n"); return -1; } fseek(file_fd, 0, SEEK_SET); length = fread(file_buf,1, file_length, file_fd); printf("read file length = %d\n",length); - if(length > 0) { + if(length > 0) + { data.frame.frame_id = frame_cnt; data.header.total_len = file_length; data.frame.frame_len = strlen("aiit_ota_end"); @@ -323,7 +336,8 @@ recv_again: send_end_signal: printf("send aiit_ota_end signal.\n"); length = send(fd, &data, sizeof(data), MSG_NOSIGNAL); - if(length < 0){ + if(length < 0) + { printf("send end signal faile,send end signal again\n"); goto send_end_signal; } @@ -374,16 +388,19 @@ void* server_thread(void* p) int length = 0; printf("pthread = %d\n",fd); - sleep(5); + sleep(3); ota_start_signal(fd); sleep(5); while(1) { ret = ota_file_send(fd); - if (ret == 0) { + if(ret == 0) + { printf("ota file send successful.\n"); break; - } else { + } + else + { /* ota failed then restart the ota process */ continue; } @@ -410,13 +427,13 @@ void server(void) socklen_t len = sizeof(fromaddr); int fd = accept(serverfd,(struct sockaddr*)&fromaddr,&len);//调用accept进入堵塞状态,等待客户端的连接 - if (fd == -1) + if(fd == -1) { printf("The client connection is wrong...\n"); continue; } - for (i = 0;i < SIZE;i++) + for(i = 0;i < SIZE;i++) { if(clientfd[i] == 0) { @@ -429,7 +446,7 @@ void server(void) break; } - if (SIZE == i) + if(SIZE == i) { //发送给客户端聊天室满了 char* str = "Devices full";