A5133 收发临时协议添加 595/1 595/head 596/target/1
authorSnickerSun <snickersun@163.com>
Fri, 26 Jul 2024 14:04:53 +0000 (22:04 +0800)
committerSnickerSun <snickersun@163.com>
Fri, 26 Jul 2024 14:04:53 +0000 (22:04 +0800)
code/sdk/drivers/peripheral/a5133/A5133Main.c
code/sdk/drivers/peripheral/a5133/service/a5133_service.cpp

index b7a43aa..39fa3a8 100644 (file)
@@ -56,6 +56,8 @@ Uint8        *Uartptr;
 \r
 Uint8           CmdBuf[25];\r
 Uint8           tmpbuf[80];\r
+Uint8           tmpbuf_rx[80];\r
+uint8_t      tmpbuf_len=0;\r
 Uint16          Err_Loss;\r
 Uint16      Err_Frame;\r
 Uint32          Err_BitCnt;\r
@@ -93,23 +95,27 @@ static uint8_t send_data_index = 0;
 \r
 errcode_t a5133_set_send_data(uint8_t *senddata,uint8_t datalen)\r
 {\r
-       if ( datalen > 62 || datalen == 0  || senddata == NULL)\r
+       if ( datalen > (64-1-8) || datalen == 0  || senddata == NULL)\r
                return ERRCODE_FAIL;\r
 \r
        if (send_data_index == 0)\r
        {\r
-               memset(send_data[1],0,64);\r
-               memcpy(send_data,senddata,datalen);\r
-               uint16_t crc =  CRC16_XMODEM(send_data[1],62); \r
-               send_data[1][62] = ((uint8_t*)&crc)[0];\r
-               send_data[1][63] = ((uint8_t*)&crc)[1];\r
+               uint8_t* p_senddata=send_data[1];\r
+               memset(p_senddata,0,sizeof(send_data[0]));\r
+               p_senddata[0]=datalen;\r
+               memcpy(p_senddata+1,senddata,datalen);\r
+               uint16_t crc =  CRC16_XMODEM(p_senddata,datalen); \r
+               p_senddata[datalen+1] = ((uint8_t*)&crc)[0];\r
+               p_senddata[datalen+1+1] = ((uint8_t*)&crc)[1];\r
                send_data_index = 1;\r
        }else{\r
-               memset(send_data[0],0,64);\r
-               memcpy(send_data,senddata,datalen);\r
-               uint16_t crc =  CRC16_XMODEM(send_data[0],62); \r
-               send_data[0][62] = ((uint8_t*)&crc)[0];\r
-               send_data[0][63] = ((uint8_t*)&crc)[1];\r
+               uint8_t * p_senddata=send_data[0];\r
+               memset(p_senddata,0,sizeof(send_data[0]));\r
+               p_senddata[0]=datalen;\r
+               memcpy(p_senddata+1,senddata,datalen);\r
+               uint16_t crc =  CRC16_XMODEM(p_senddata,datalen); \r
+               p_senddata[datalen+1] = ((uint8_t*)&crc)[0];\r
+               p_senddata[datalen+1+1] = ((uint8_t*)&crc)[1];\r
                send_data_index = 0;\r
        }\r
 \r
@@ -121,12 +127,12 @@ void a5133_main(Uint8 Flag_MASTER,uint8_t channel)
 \r
        a5133_power_on();\r
        LOS_Msleep(10);\r
-       if(RF_Init())/* init RF */\r
+       while(RF_Init())/* init RF */\r
        {\r
        // Err_State();\r
-               PRINT("RF_Init Failed\n");\r
+               PRINT("RF_Init Failed retry!\n");\r
 \r
-               return;\r
+               LOS_Msleep(1000);\r
        }       \r
 \r
 \r
@@ -493,7 +499,7 @@ static void dump_tmpbuf(void)
 \r
 void a5133_get_rxdata(uint8_t *databuf,uint8_t len)\r
 {\r
-    memcpy_s(databuf,len,tmpbuf,strlen((const char*)tmpbuf));\r
+    memcpy_s(databuf,len,tmpbuf_rx,sizeof(tmpbuf_rx));\r
 }\r
 \r
 /*********************************************************************\r
@@ -523,14 +529,26 @@ void RxPacket(void)
        //crccheck\r
 \r
        a5133_gpio_scs_set_value(1);\r
-       uint16_t crc = CRC16_XMODEM(tmpbuf,62);\r
-       uint16_t recv_crc =  *(uint16_t*)&tmpbuf[62];\r
-       PRINT("crc[%X] , recv_crc %X\n",crc,recv_crc);\r
-       if (crc != recv_crc)\r
+       uint8_t datalen = tmpbuf[8];\r
+       if (datalen >0 && datalen <= (64-8-1))\r
        {\r
-               err = 1;\r
+               uint16_t crc = CRC16_XMODEM(&tmpbuf[1+8],datalen);\r
+               uint16_t recv_crc =  *(uint16_t*)&tmpbuf[1+datalen+8];\r
+               PRINT("crc[%X] , recv_crc %X\n",crc,recv_crc);\r
+               if (crc != recv_crc)\r
+               {\r
+                       err = 1;\r
+               }else{\r
+                       tmpbuf_len = datalen;\r
+                       memset(tmpbuf_rx, 0 ,sizeof(tmpbuf_rx));\r
+                       memcpy(tmpbuf_rx, &tmpbuf[1+8],datalen);\r
+               }\r
+               printf("=====RxPacket \n");\r
+               \r
+       }else{\r
+               err = 1 ;\r
+               printf("=====RxPacket failed \n");\r
        }\r
-       printf("=====RxPacket \n");\r
        dump_tmpbuf();\r
        if (err)//packet error\r
                Err_Frame++;\r
index 4829f95..d0e1162 100644 (file)
@@ -121,14 +121,12 @@ void send_a5133_cmd_msg(int cmd)
     }
     
 }
-
 static void a5133_service_check_task(void  *arg)
 {
     unused(arg);
     int32_t ret;
     uint32_t mail;
     uint32_t msgsize = (uint32_t)sizeof(A5133_CMD_TYPE_T);
-    a5133_service_running_stat  = true;
 
     a5133_gpio_init();
     PRINT("a5133_service_check_task !\r\n");
@@ -147,22 +145,33 @@ static void a5133_service_check_task(void  *arg)
 
         if (mail == A5133_SERVICE_CMD_TYPE_RUN_MASTER)
         {
-            PRINT("A5133_SERVICE_CMD_TYPE_RUN_MASTER \n");
-            a5133_service_timer_start_check(50);
-            a5133_main(MASTER,80);
+            if (a5133_service_running_stat == false)
+            {
+                a5133_service_running_stat  = true;
+                a5133_service_timer_start_check(50);
+                a5133_main(MASTER,80);
+                PRINT("A5133_SERVICE_CMD_TYPE_RUN_MASTER \n");
+            }else{
+                PRINT("A5133_SERVICE_CMD_TYPE_RUN_MASTER already Started  \n");
+            }
+            
         }else if (mail == A5133_SERVICE_CMD_TYPE_RUN_SLAVE)
         {
-            
-            PRINT("A5133_SERVICE_CMD_TYPE_RUN_SLAVE \n");
-            a5133_service_timer_start_check(50);
-            a5133_main(SLAVE,80);
+            if (a5133_service_running_stat == false)
+            {
+                a5133_service_running_stat  = true;
+                a5133_service_timer_start_check(50);
+                a5133_main(SLAVE,80);
+                PRINT("A5133_SERVICE_CMD_TYPE_RUN_SLAVE \n");
+            }else{
+                PRINT("A5133_SERVICE_CMD_TYPE_RUN_SLAVE already Started  \n");
+            }            
         }else if (mail == A5133_SERVICE_CMD_TYPE_TIMER_CHECK)
         {
             
         }
     }
     a5133_server_break_flag = 0;
-    a5133_service_running_stat = false;
 }
 void create_a5133_queue(void)
 {