A27两个不同版本的UI合并到同一个工程
This commit is contained in:
@ -52,296 +52,8 @@ static uint8_t file_state = UART_FILE_NORMAL;//文件接收状态
|
||||
static uint8_t uup_file_type = UART_FILE_NORMAL;//文件接收状态
|
||||
uint8_t wifi_file_state = UART_FILE_NORMAL;//文件接收状态
|
||||
|
||||
#define BYTESPERPAGE 256
|
||||
#define PAGESPERSECTORS 32//32//16
|
||||
#define UUP_BUF_SIZE (BYTESPERPAGE * PAGESPERSECTORS)
|
||||
#define NEW_APPLDR_CHECKSUM_OFFSET 0x14
|
||||
static unsigned int checksum = 0,calc_checksum = 0xffffffff,test_checksum = 0xffffffff;
|
||||
|
||||
#define NEW_APPFOOSET 0x17F0000
|
||||
#define AMT630_BIN_MAX_SIZE 0x700000
|
||||
|
||||
static uint32_t uup_burn_offset;
|
||||
// static unsigned char uup_buf[4096];
|
||||
static unsigned char uup_buf[8192];
|
||||
static unsigned int uup_buf_len = 0;
|
||||
static unsigned int uup_buf_len_detection = 0;
|
||||
static uint8_t checksum_flag = 0;
|
||||
|
||||
static int test_flag = 0;
|
||||
// static int number = 0;
|
||||
static void ota_update(char *framebuf, size_t len)
|
||||
{
|
||||
unsigned int framelen;
|
||||
framelen = len;
|
||||
sfud_flash *sflash = sfud_get_device(0);
|
||||
if(strcmp(framebuf, "AT_OTA_FINISH") == 0){
|
||||
if(file_state == UART_FILE_FILEXFER)
|
||||
file_state = UART_FILE_FINISH;
|
||||
}
|
||||
|
||||
switch(file_state){
|
||||
case UART_FILE_NORMAL://检测是否是升级
|
||||
if(strcmp(framebuf, "AT_OTA_START") == 0)
|
||||
file_state = UART_FILE_TYPE;
|
||||
break;
|
||||
case UART_FILE_TYPE://检测传输文件类型
|
||||
if(strncmp(framebuf, "AT_OTA_TYPE=",12) == 0 && (framelen == 13)){
|
||||
uup_file_type = framebuf[12] - '0';
|
||||
printf("uup_file_type = %d .\r\n",uup_file_type);
|
||||
if(uup_file_type<6){
|
||||
//擦除flash
|
||||
uup_burn_offset = NEW_APPFOOSET;
|
||||
printf("start erase add %X , size %X .\r\n",uup_burn_offset,AMT630_BIN_MAX_SIZE);
|
||||
if(sfud_erase(sflash, uup_burn_offset, AMT630_BIN_MAX_SIZE)==SFUD_SUCCESS){
|
||||
vTaskDelay(100);
|
||||
printf("UART_FRAME_START sfud erase ok.\n");
|
||||
}else{
|
||||
vTaskDelay(100);
|
||||
printf("UART_FRAME_START sfud erase fail.\n");
|
||||
}
|
||||
checksum_flag = 1;
|
||||
calc_checksum = 0xffffffff;
|
||||
test_checksum = 0xffffffff;
|
||||
test_flag = 0;
|
||||
uup_buf_len =0;
|
||||
checksum = 0;
|
||||
// number = 0;
|
||||
file_state = UART_FILE_START;
|
||||
}else
|
||||
file_state = UART_FILE_NORMAL;
|
||||
}else{
|
||||
file_state = UART_FILE_NORMAL;
|
||||
}
|
||||
|
||||
break;
|
||||
case UART_FILE_START://第一包数据 用于获取当前数据包的校验和
|
||||
if (uup_file_type == UART_FILE_AMT630H) {//代码文件
|
||||
unsigned int magic = framebuf[0] | (framebuf[1] << 8) | (framebuf[2] << 16) | (framebuf[3] << 24);
|
||||
if (magic != UPFILE_APP_MAGIC) {
|
||||
printf("Wrong app file magic. 0x%08X\n",magic);
|
||||
file_state = UART_FILE_NORMAL;
|
||||
break;
|
||||
}
|
||||
unsigned char *tmp = framebuf + NEW_APPLDR_CHECKSUM_OFFSET;
|
||||
checksum = tmp[0] | (tmp[1] <<8) | (tmp[2] << 16) | (tmp[3] << 24);
|
||||
}else if (uup_file_type == UART_FILE_BOOTANIM) {//动画文件
|
||||
BANIHEADER *header = (BANIHEADER *)&framebuf[0];
|
||||
if (header->magic != MKTAG('B', 'A', 'N', 'I')) {
|
||||
printf("Wrong animation file magic.\n");
|
||||
file_state = UART_FILE_NORMAL;
|
||||
break;
|
||||
}
|
||||
checksum = header->checksum;
|
||||
}else if (uup_file_type == UART_FILE_ROM) {//资源文件
|
||||
RomHeader *header = (RomHeader *)&framebuf[0];
|
||||
if (header->magic != MKTAG('R', 'O', 'M', 'A')) {
|
||||
printf("Wrong resource file magic.\n");
|
||||
file_state = UART_FILE_NORMAL;
|
||||
break;
|
||||
}
|
||||
checksum = header->checksum;
|
||||
}
|
||||
printf("uup_file_type = %d ,No1.checksum = 0x%X\n",uup_file_type,checksum);
|
||||
|
||||
uup_buf_len_detection = (uup_buf_len + framelen)>UUP_BUF_SIZE?(UUP_BUF_SIZE-uup_buf_len):0;
|
||||
// printf("1-- framelen = %d uup_buf_len_detection = %d .\r\n",framelen,uup_buf_len_detection);
|
||||
if(!uup_buf_len_detection){
|
||||
memcpy(uup_buf + uup_buf_len, framebuf, framelen);
|
||||
uup_buf_len += framelen;
|
||||
if (uup_buf_len == UUP_BUF_SIZE) {
|
||||
if(!checksum_flag)
|
||||
test_checksum = xcrc32(uup_buf, UUP_BUF_SIZE, test_checksum);//计算校验和
|
||||
sfud_write(sflash, uup_burn_offset, UUP_BUF_SIZE, uup_buf);
|
||||
if(checksum_flag){
|
||||
if (uup_file_type == UART_FILE_AMT630H) {//代码文件
|
||||
unsigned int *tmp = (unsigned int *)(uup_buf + NEW_APPLDR_CHECKSUM_OFFSET);
|
||||
*tmp = 0;
|
||||
}else if (uup_file_type == UART_FILE_BOOTANIM) {//动画文件
|
||||
BANIHEADER *pheader = (BANIHEADER *)uup_buf;
|
||||
pheader->checksum = 0;
|
||||
}else if (uup_file_type == UART_FILE_ROM) {//资源文件
|
||||
RomHeader *pheader = (RomHeader *)uup_buf;
|
||||
pheader->checksum = 0;
|
||||
}
|
||||
checksum_flag = 0;
|
||||
test_flag = 1;
|
||||
|
||||
}
|
||||
|
||||
|
||||
calc_checksum = xcrc32(uup_buf, UUP_BUF_SIZE, calc_checksum);//计算校验和
|
||||
if(test_flag){
|
||||
test_checksum = calc_checksum;
|
||||
printf("test_checksum == calc_checksum 0x%08X.\r\n",test_checksum);
|
||||
test_flag = 0;
|
||||
}
|
||||
|
||||
|
||||
if(calc_checksum != test_checksum){
|
||||
printf("error!!!test_checksum=0x%08X,calc_checksum=0x%08X.\r\n",test_checksum,calc_checksum);
|
||||
}
|
||||
uup_buf_len =0;
|
||||
uup_burn_offset += UUP_BUF_SIZE;
|
||||
//number++;
|
||||
//printf("number =%d,checksum = 0x%08X.\n",number,calc_checksum,checksum);
|
||||
}
|
||||
}else{
|
||||
memcpy(uup_buf + uup_buf_len, framebuf, uup_buf_len_detection);
|
||||
uup_buf_len += uup_buf_len_detection;
|
||||
|
||||
if (uup_buf_len == UUP_BUF_SIZE) {
|
||||
if(!checksum_flag)
|
||||
test_checksum = xcrc32(uup_buf, UUP_BUF_SIZE, test_checksum);//计算校验和
|
||||
sfud_write(sflash, uup_burn_offset, UUP_BUF_SIZE, uup_buf);
|
||||
if(checksum_flag){
|
||||
if (uup_file_type == UART_FILE_AMT630H) {//代码文件
|
||||
unsigned int *tmp = (unsigned int *)(uup_buf + NEW_APPLDR_CHECKSUM_OFFSET);
|
||||
*tmp = 0;
|
||||
}else if (uup_file_type == UART_FILE_BOOTANIM) {//动画文件
|
||||
BANIHEADER *pheader = (BANIHEADER *)uup_buf;
|
||||
pheader->checksum = 0;
|
||||
}else if (uup_file_type == UART_FILE_ROM) {//资源文件
|
||||
RomHeader *pheader = (RomHeader *)uup_buf;
|
||||
pheader->checksum = 0;
|
||||
unsigned int *tmp = (unsigned int *)(uup_buf + 0x0F);
|
||||
}
|
||||
checksum_flag = 0;
|
||||
test_flag = 1;
|
||||
}
|
||||
|
||||
calc_checksum = xcrc32(uup_buf, UUP_BUF_SIZE, calc_checksum);//计算校验和
|
||||
if(test_flag){
|
||||
test_checksum = calc_checksum;
|
||||
printf("test_checksum == calc_checksum 0x%08X.\r\n",test_checksum);
|
||||
test_flag = 0;
|
||||
}
|
||||
if(calc_checksum != test_checksum){
|
||||
printf("error!!!test_checksum=0x%08X,calc_checksum=0x%08X.\r\n",test_checksum,calc_checksum);
|
||||
}
|
||||
uup_buf_len =0;
|
||||
uup_burn_offset += UUP_BUF_SIZE;
|
||||
//number++;
|
||||
//printf("number =%d,checksum = 0x%08X.\n",number,calc_checksum,checksum);
|
||||
}
|
||||
// printf("2-- (framelen - uup_buf_len_detection) = %d .\r\n",(framelen - uup_buf_len_detection));
|
||||
memcpy(uup_buf + uup_buf_len, framebuf, (framelen - uup_buf_len_detection));
|
||||
uup_buf_len += (framelen - uup_buf_len_detection);
|
||||
}
|
||||
// printf(">>UART_FILE_FILEXFER.\r\n");
|
||||
file_state = UART_FILE_FILEXFER;
|
||||
|
||||
break;
|
||||
case UART_FILE_FILEXFER://传输过程中
|
||||
|
||||
uup_buf_len_detection = (uup_buf_len + framelen)>UUP_BUF_SIZE?(UUP_BUF_SIZE-uup_buf_len):0;
|
||||
// printf("uup_buf_len_detection=%d.\r\n",uup_buf_len_detection);
|
||||
if(!uup_buf_len_detection){
|
||||
memcpy(uup_buf + uup_buf_len, framebuf, framelen);
|
||||
uup_buf_len += framelen;
|
||||
// printf("uup_buf_len = %d .\r\n",uup_buf_len);
|
||||
|
||||
if (uup_buf_len == UUP_BUF_SIZE) {
|
||||
if(!checksum_flag)
|
||||
test_checksum = xcrc32(uup_buf, UUP_BUF_SIZE, test_checksum);//计算校验和
|
||||
sfud_write(sflash, uup_burn_offset, UUP_BUF_SIZE, uup_buf);
|
||||
if(checksum_flag){
|
||||
if (uup_file_type == UART_FILE_AMT630H) {//代码文件
|
||||
unsigned int *tmp = (unsigned int *)(uup_buf + NEW_APPLDR_CHECKSUM_OFFSET);
|
||||
*tmp = 0;
|
||||
}else if (uup_file_type == UART_FILE_BOOTANIM) {//动画文件
|
||||
BANIHEADER *pheader = (BANIHEADER *)uup_buf;
|
||||
pheader->checksum = 0;
|
||||
}else if (uup_file_type == UART_FILE_ROM) {//资源文件
|
||||
RomHeader *pheader = (RomHeader *)uup_buf;
|
||||
pheader->checksum = 0;
|
||||
unsigned int *tmp = (unsigned int *)(uup_buf + 0x0F);
|
||||
}
|
||||
checksum_flag = 0;
|
||||
test_flag = 1;
|
||||
}
|
||||
|
||||
calc_checksum = xcrc32(uup_buf, UUP_BUF_SIZE, calc_checksum);//计算校验和
|
||||
if(test_flag){
|
||||
test_checksum = calc_checksum;
|
||||
printf("test_checksum == calc_checksum 0x%08X.\r\n",test_checksum);
|
||||
test_flag = 0;
|
||||
}
|
||||
if(calc_checksum != test_checksum){
|
||||
printf("error!!!test_checksum=0x%08X,calc_checksum=0x%08X.\r\n",test_checksum,calc_checksum);
|
||||
}
|
||||
uup_buf_len =0;
|
||||
uup_burn_offset += UUP_BUF_SIZE;
|
||||
//number++;
|
||||
//printf("number =%d,checksum = 0x%08X.\n",number,calc_checksum,checksum);
|
||||
}
|
||||
}else{
|
||||
memcpy(uup_buf + uup_buf_len, framebuf, uup_buf_len_detection);
|
||||
uup_buf_len += uup_buf_len_detection;
|
||||
// printf("2---------------- uup_buf_len = %d .\r\n",uup_buf_len);
|
||||
|
||||
if (uup_buf_len == UUP_BUF_SIZE) {
|
||||
if(!checksum_flag)
|
||||
test_checksum = xcrc32(uup_buf, UUP_BUF_SIZE, test_checksum);//计算校验和
|
||||
sfud_write(sflash, uup_burn_offset, UUP_BUF_SIZE, uup_buf);
|
||||
if(checksum_flag){
|
||||
if (uup_file_type == UART_FILE_AMT630H) {//代码文件
|
||||
unsigned int *tmp = (unsigned int *)(uup_buf + NEW_APPLDR_CHECKSUM_OFFSET);
|
||||
*tmp = 0;
|
||||
}else if (uup_file_type == UART_FILE_BOOTANIM) {//动画文件
|
||||
BANIHEADER *pheader = (BANIHEADER *)uup_buf;
|
||||
pheader->checksum = 0;
|
||||
}else if (uup_file_type == UART_FILE_ROM) {//资源文件
|
||||
RomHeader *pheader = (RomHeader *)uup_buf;
|
||||
pheader->checksum = 0;
|
||||
unsigned int *tmp = (unsigned int *)(uup_buf + 0x0F);
|
||||
}
|
||||
checksum_flag = 0;
|
||||
test_flag = 1;
|
||||
}
|
||||
|
||||
calc_checksum = xcrc32(uup_buf, UUP_BUF_SIZE, calc_checksum);//计算校验和
|
||||
if(test_flag){
|
||||
test_checksum = calc_checksum;
|
||||
printf("test_checksum == calc_checksum 0x%08X.\r\n",test_checksum);
|
||||
test_flag = 0;
|
||||
}
|
||||
if(calc_checksum != test_checksum){
|
||||
printf("error!!!test_checksum=0x%08X,calc_checksum=0x%08X.\r\n",test_checksum,calc_checksum);
|
||||
}
|
||||
uup_buf_len =0;
|
||||
uup_burn_offset += UUP_BUF_SIZE;
|
||||
// number++;
|
||||
// printf("number =%d,checksum = 0x%08X.\n",number,calc_checksum,checksum);
|
||||
}
|
||||
memcpy(uup_buf + uup_buf_len, framebuf, (framelen - uup_buf_len_detection));
|
||||
uup_buf_len += (framelen - uup_buf_len_detection);
|
||||
// printf("2----uup_buf_len = %d .\r\n",uup_buf_len);
|
||||
}
|
||||
// file_state = UART_FILE_FILEXFER;
|
||||
break;
|
||||
case UART_FILE_FINISH://传输完成
|
||||
if(uup_buf_len){//若最后一包数据不为0 则存数据并且继续计算校验和
|
||||
sfud_write(sflash, uup_burn_offset, uup_buf_len, uup_buf);
|
||||
test_checksum = xcrc32(uup_buf, uup_buf_len, test_checksum);//计算校验和
|
||||
calc_checksum = xcrc32(uup_buf, uup_buf_len, calc_checksum);
|
||||
printf("enter2 uup_buf_len =%d calc_checksum================0x%08X,test_checksum=0x%08X\n",uup_buf_len,calc_checksum,test_checksum);
|
||||
}
|
||||
printf("calc_checksum = 0x%08X,checksum = 0x%08X.\n",calc_checksum,checksum);
|
||||
printf("test_checksum=0x%08X.\r\n",test_checksum);
|
||||
if (calc_checksum != checksum) {
|
||||
printf("fail !!!!!!!!!!!!\n");
|
||||
}else
|
||||
printf("whole crc check after burn ok!\n");
|
||||
file_state = UART_FILE_NORMAL;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if(file_state != UART_FILE_FILEXFER)
|
||||
printf("now > file_state = %d .\r\n",file_state);
|
||||
}
|
||||
|
||||
static int uup_rx_state = 0;
|
||||
#define UUP_PACKET_SIZE 128
|
||||
#define UUP_MAX_FRAME_LEN (UUP_PACKET_SIZE + 16)
|
||||
@ -438,7 +150,6 @@ static void wifi_update_judge(char *uartrx, size_t len){
|
||||
uup_rx_state++;
|
||||
wifi_ota_request[6] = Get_sys_softwar_host();
|
||||
}else{
|
||||
|
||||
uup_rx_state = 0;
|
||||
}
|
||||
break;
|
||||
@ -559,15 +270,9 @@ static void wifi_ota_update(char *framebuf, size_t len)
|
||||
wifi_update_judge(framebuf,len);//升级判断
|
||||
printf("wifi_file_state > %d.\r\n",wifi_file_state);
|
||||
break;
|
||||
// case UART_FILE_TYPE://检测传输文件类型
|
||||
// break;
|
||||
case UART_FILE_START://升级流程
|
||||
wifi_update_technological_process(framebuf,len);//升级流程
|
||||
break;
|
||||
// case UART_FILE_FILEXFER://传输过程中
|
||||
// break;
|
||||
// case UART_FILE_FINISH://传输完成
|
||||
// break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -659,13 +364,8 @@ void app_wifi_update_demo(void)
|
||||
printf("client is disconnected\r\n");
|
||||
continue;
|
||||
}
|
||||
// printf("recv len:%d.\r\n", ret);
|
||||
if(timeout)
|
||||
timeout = 0;
|
||||
// if(ret<100)
|
||||
// printf("recv len:%d %s\r\n", ret, buf);
|
||||
// else
|
||||
// printf("recv len:%d.\r\n", ret);
|
||||
wifi_ota_update(buf,ret);
|
||||
memset(buf, 0, sizeof(buf));
|
||||
}
|
||||
@ -680,11 +380,7 @@ exit:
|
||||
|
||||
static void wifi_update_rx_thread(void *param)
|
||||
{
|
||||
// vTaskDelay(7000);
|
||||
// while(1){
|
||||
app_wifi_update_demo();
|
||||
// vTaskDelay(3000);
|
||||
// }
|
||||
app_wifi_update_demo();
|
||||
}
|
||||
|
||||
int wifi_update_init(void){
|
||||
@ -698,120 +394,3 @@ int wifi_update_init(void){
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
int test_udp_client(const char *ip_str, int port)
|
||||
{
|
||||
/* socket文件描述符 */
|
||||
int sock_fd = -1;
|
||||
|
||||
/* 建立udp socket */
|
||||
sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if(sock_fd < 0)
|
||||
{
|
||||
printf("client socket create failed.\r\n");
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* 设置address */
|
||||
struct sockaddr_in addr_serv;
|
||||
int len;
|
||||
memset(&addr_serv, 0, sizeof(addr_serv));
|
||||
addr_serv.sin_family = AF_INET;
|
||||
addr_serv.sin_addr.s_addr = inet_addr(ip_str);
|
||||
addr_serv.sin_port = htons(port);
|
||||
len = sizeof(addr_serv);
|
||||
|
||||
|
||||
int send_num;
|
||||
int recv_num;
|
||||
char send_buf[20] = "hey, who are you?";
|
||||
char recv_buf[20];
|
||||
|
||||
printf("###client send: %s\n", send_buf);
|
||||
|
||||
send_num = sendto(sock_fd, send_buf, strlen(send_buf), 0, (struct sockaddr *)&addr_serv, len);
|
||||
|
||||
if(send_num < 0)
|
||||
{
|
||||
printf("sendto erro\r\n");
|
||||
goto exit;
|
||||
}
|
||||
|
||||
recv_num = recvfrom(sock_fd, recv_buf, sizeof(recv_buf), 0, (struct sockaddr *)&addr_serv, (socklen_t *)&len);
|
||||
|
||||
if(recv_num <= 0)
|
||||
{
|
||||
printf("socket recv failed\r\n");
|
||||
goto exit;
|
||||
}
|
||||
|
||||
recv_buf[recv_num] = '\0';
|
||||
printf("client receive %d bytes: %s\n", recv_num, recv_buf);
|
||||
exit:
|
||||
|
||||
if (-1 != sock_fd)
|
||||
close(sock_fd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int test_udp_server(int port)
|
||||
{
|
||||
int sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if(sock_fd < 0)
|
||||
{
|
||||
printf("server socket create failed.\r\n");
|
||||
goto exit;
|
||||
}
|
||||
|
||||
struct sockaddr_in addr_serv;
|
||||
int len;
|
||||
memset(&addr_serv, 0, sizeof(struct sockaddr_in));
|
||||
addr_serv.sin_family = AF_INET;
|
||||
addr_serv.sin_port = htons(port);
|
||||
|
||||
addr_serv.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
len = sizeof(addr_serv);
|
||||
|
||||
if(bind(sock_fd, (struct sockaddr *)&addr_serv, sizeof(addr_serv)) < 0)
|
||||
{
|
||||
printf("bind error\r\n");
|
||||
goto exit;
|
||||
}
|
||||
|
||||
int recv_num;
|
||||
int send_num;
|
||||
char send_buf[20] = "i am server!";
|
||||
char recv_buf[20];
|
||||
struct sockaddr_in addr_client;
|
||||
|
||||
while(1)
|
||||
{
|
||||
printf("server wait:\n");
|
||||
|
||||
recv_num = recvfrom(sock_fd, recv_buf, sizeof(recv_buf), 0, (struct sockaddr *)&addr_client, (socklen_t *)&len);
|
||||
|
||||
if(recv_num < 0)
|
||||
{
|
||||
printf("recvfrom error:\r\n");
|
||||
goto exit;
|
||||
}
|
||||
|
||||
recv_buf[recv_num] = '\0';
|
||||
printf("server receive %d bytes: %s\n", recv_num, recv_buf);
|
||||
|
||||
send_num = sendto(sock_fd, send_buf, recv_num, 0, (struct sockaddr *)&addr_client, len);
|
||||
|
||||
if(send_num <= 0)
|
||||
{
|
||||
printf("sendto error:");
|
||||
break;
|
||||
}
|
||||
}
|
||||
exit:
|
||||
if (-1 != sock_fd)
|
||||
close(sock_fd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
@ -131,6 +131,19 @@ typedef struct __carplay_cfg_info
|
||||
|
||||
}carplay_cfg_info;
|
||||
|
||||
typedef struct _carlink_flash_io
|
||||
{
|
||||
uint32_t (*get_data_arae_size)(void* ctx);
|
||||
uint32_t (*get_flash_block_erase_size)(void* ctx);
|
||||
int32_t (*op_flash)(void* flash_handle, void* ctx, int open);
|
||||
int32_t (*read_data)(void* flash_handle, void *data, uint32_t length, uint32_t offset, void* ctx);
|
||||
int32_t (*write_data)(void* flash_handle, void *data, uint32_t length, uint32_t offset, void* ctx);
|
||||
void* ctx;
|
||||
void* flash_handle;
|
||||
} carlink_flash_io;
|
||||
void register_carlink_flash_io_interface(carlink_flash_io *handle);
|
||||
|
||||
#if 0
|
||||
typedef struct __auto_cfg_info
|
||||
{
|
||||
short width;//pixel
|
||||
@ -142,10 +155,10 @@ typedef struct __auto_cfg_info
|
||||
bool disable_carplay_audio;
|
||||
|
||||
} auto_cfg_info;
|
||||
|
||||
#endif
|
||||
|
||||
extern carplay_cfg_info *g_link_info;
|
||||
extern auto_cfg_info *g_auto_link_info;
|
||||
//extern auto_cfg_info *g_auto_link_info;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -726,6 +726,8 @@ extern int get_usb_mode();
|
||||
extern int ark_network_init(void);
|
||||
#endif
|
||||
|
||||
extern void Moto_speed_timer(void);
|
||||
|
||||
void awtk_thread(void *data)
|
||||
{
|
||||
printf("awtk thread start.\n");
|
||||
@ -774,10 +776,9 @@ void awtk_thread(void *data)
|
||||
#endif
|
||||
|
||||
/* uart rx demo */
|
||||
printf("MXC_A58 > UART3 OPEN.\r\n");
|
||||
uart_communicates_with_bt();
|
||||
printf("MXC_A58 > UART2 OPEN.\r\n");
|
||||
uart_rx_demo();
|
||||
|
||||
// uart_rx_demo();
|
||||
|
||||
|
||||
/* can demo */
|
||||
@ -861,6 +862,8 @@ void awtk_thread(void *data)
|
||||
// static float cell_value = 0;
|
||||
// static uint8_t cell_count = 0;
|
||||
|
||||
Moto_speed_timer();
|
||||
|
||||
while(1) {
|
||||
|
||||
#ifdef TASK_STATUS_MONITOR
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include "awtk.h"
|
||||
#include "can_protocol.h"
|
||||
#include "moto_config.h"
|
||||
|
||||
uint8_t tcs_twinkle = 0;
|
||||
uint8_t tcs_switch = 0;
|
||||
@ -22,33 +23,6 @@ void tcsswitch_event_handing(int *buf){
|
||||
if(tcs_data<=1)
|
||||
tcs_switch = tcs_data;
|
||||
}
|
||||
//101
|
||||
void speed_event_handing(int *buf){
|
||||
uint16_t eng_temp = 0;
|
||||
uint16_t data = 0;
|
||||
uint8_t state_data = 0;
|
||||
double buf_value = 0;
|
||||
*(buf++);
|
||||
*(buf++);
|
||||
*(buf++);
|
||||
*(buf++);
|
||||
|
||||
data = *(buf++) &0xFF;
|
||||
data = (*(buf++)&0xFF) | data<<8;
|
||||
|
||||
buf_value = data;
|
||||
if(buf_value>5280)
|
||||
buf_value = 255;
|
||||
else if(buf_value>2730)
|
||||
buf_value = ((buf_value*0.1)-273);
|
||||
else
|
||||
buf_value = 0;
|
||||
eng_temp = (int)buf_value;
|
||||
Set_sys_can_temp(eng_temp);
|
||||
state_data = *(buf++);
|
||||
Set_sys_can_state(state_data);
|
||||
|
||||
}
|
||||
|
||||
//0xA5
|
||||
void abs_dtc_event_handing(int *buf){
|
||||
@ -71,57 +45,3 @@ void ecu_dtc_event_handing2(int *buf){
|
||||
dtc[0] = *(buf++)&0xFF;
|
||||
Set_can_abs_dtc(dtc);
|
||||
}
|
||||
|
||||
uint8_t dtc_flag = 0;
|
||||
void A59_dtc_event_handing(int *buf){
|
||||
uint32_t sum,sum1,sum2;
|
||||
sum = 0;
|
||||
sum1 = *(buf++)&0xFF;
|
||||
*(buf++)&0xFF;
|
||||
sum2 = *(buf++)&0xFF;
|
||||
////低位再前
|
||||
//sum = sum1 | sum2<<8;
|
||||
//高位再前
|
||||
sum = sum1<<8 | sum2;
|
||||
// if (sum !=0)
|
||||
Set_sys_now_defect_code(sum);
|
||||
|
||||
dtc_flag = *(buf++)&0xFF;
|
||||
|
||||
sum = 0;
|
||||
sum1 = *(buf++)&0xFF;
|
||||
*(buf++)&0xFF;
|
||||
sum2 = *(buf++)&0xFF;
|
||||
sum = sum1<<8 | sum2;
|
||||
// if (sum !=0)
|
||||
Set_sys_his_defect_code(sum);
|
||||
|
||||
}
|
||||
|
||||
//101
|
||||
void A59_speed_event_handing(int *buf){
|
||||
uint16_t eng_temp = 0;
|
||||
uint16_t data = 0;
|
||||
uint8_t state_data = 0;
|
||||
double buf_value = 0;
|
||||
*(buf++);
|
||||
*(buf++);
|
||||
*(buf++);
|
||||
*(buf++);
|
||||
|
||||
data = *(buf++) &0xFF;
|
||||
data = (*(buf++)&0xFF) | data<<8;
|
||||
|
||||
buf_value = data;
|
||||
if(buf_value>5280)
|
||||
buf_value = 255;
|
||||
else if(buf_value>2730)
|
||||
buf_value = ((buf_value*0.1)-273);
|
||||
else
|
||||
buf_value = 0;
|
||||
eng_temp = (int)buf_value;
|
||||
Set_sys_can_temp(eng_temp);
|
||||
state_data = *(buf++);
|
||||
Set_sys_can_state(state_data);
|
||||
|
||||
}
|
||||
|
@ -142,4 +142,23 @@ void Moto_gpio_timer(void) {
|
||||
}
|
||||
|
||||
}
|
||||
TimerHandle_t xspeedTimer;
|
||||
|
||||
void vTimerSpeedback(TimerHandle_t xTimer) {
|
||||
speed_convert_mile_calculation();
|
||||
}
|
||||
|
||||
void Moto_speed_timer(void){
|
||||
xspeedTimer = xTimerCreate("MyspeeSTimer", // 定时器名称
|
||||
pdMS_TO_TICKS(100), // 定时器周期(1000毫秒)
|
||||
pdTRUE, // 自动重载定时器
|
||||
(void *)0, // 定时器 ID
|
||||
vTimerSpeedback); // 回调函数
|
||||
|
||||
// 启动定时器
|
||||
if (xTimerStart(xspeedTimer, 0) != pdPASS) {
|
||||
// 启动定时器失败的处理
|
||||
printf("xTimer error!!!!!!!!!!!!!!!!!.\r\n");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -448,11 +448,11 @@ int flash_copy_demo(void)
|
||||
printf("start copy flash ok.\n");
|
||||
for(i=0;i<new_appsize/IMAGE_RW_SIZE;i++)
|
||||
{
|
||||
printf("i = %d start read .\r\n",i);
|
||||
// printf("i = %d start read .\r\n",i);
|
||||
sfud_read(sflash, new_appoffset+IMAGE_RW_SIZE*i, IMAGE_RW_SIZE, buf);
|
||||
printf("start erase write .\r\n");
|
||||
// printf("start erase write .\r\n");
|
||||
sfud_erase_write(sflash, imageoff+IMAGE_RW_SIZE*i, IMAGE_RW_SIZE, buf);
|
||||
printf("start erase write ok.\r\n");
|
||||
// printf("start erase write ok.\r\n");
|
||||
Set_sys_pace(i+1);
|
||||
if(i==0)
|
||||
{
|
||||
|
@ -9,13 +9,15 @@
|
||||
#include "board.h"
|
||||
#include "keypad.h"
|
||||
#include "moto_adc.h"
|
||||
#include "moto_config.h"
|
||||
|
||||
|
||||
extern double total_mile;
|
||||
uint8_t data_error_flag = 0;
|
||||
extern uint8_t wifi_time_flag;
|
||||
|
||||
uint32_t flash_trip_mile = 0;
|
||||
uint32_t flash_total_mile = 0;
|
||||
|
||||
#define KEY_DATA_PRESS 0x01 // 短按
|
||||
#define KEY_DATA_LONG_PRESS 0x02 // 长按
|
||||
enum
|
||||
@ -62,6 +64,11 @@ uint8_t getBit4Value(uint8_t count, int bitPosition) {
|
||||
return (count >> bitPosition) & 0xf;
|
||||
}
|
||||
|
||||
// 封装的函数,获取5个bit组合成的值
|
||||
uint8_t getBit5Value(uint8_t count, int bitPosition) {
|
||||
return (count >> bitPosition) & 0x1f;
|
||||
}
|
||||
|
||||
double adc_voltage_calculation(void){
|
||||
double value = 0;
|
||||
|
||||
@ -77,7 +84,7 @@ double adc_voltage_calculation(void){
|
||||
|
||||
//MOTO通讯 设备信息+时间戳解析协议
|
||||
void device_data_analysis(uint8_t *buf){
|
||||
// printf("device information............................................\r\n");
|
||||
printf("device information............................................\r\n");
|
||||
uint8_t data;
|
||||
uint8_t sum1,sum2,sum3,sum4;
|
||||
uint32_t save_total_mile,save_trip_mile;
|
||||
@ -87,12 +94,12 @@ void device_data_analysis(uint8_t *buf){
|
||||
char produce[5] = {0};
|
||||
char mac[6] = {0};
|
||||
data = *(buf++);
|
||||
if(data!=0xAA)
|
||||
return;
|
||||
// if(data!=0xAA)
|
||||
// return;
|
||||
|
||||
data = *(buf++);
|
||||
if(data!=0x55)
|
||||
return;
|
||||
// if(data!=0x55)
|
||||
// return;
|
||||
|
||||
//设备相关信息
|
||||
data = *(buf++);//0x01
|
||||
|
Reference in New Issue
Block a user