国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊(cè)
搜索

芯圣云米WIFI處理&OTA升級(jí) 51單片機(jī)源程序

[復(fù)制鏈接]
樓主
eng 發(fā)表于 2021-7-6 17:07:51 | 只看該作者 |倒序?yàn)g覽 |閱讀模式
本工程使用了云米的WIFI模塊,OTA通過(guò)XMODEM協(xié)議進(jìn)行通信
單片機(jī)源程序如下:
  1. //================================================================================
  2. #define  ALLOCATE_EXTERN
  3. #include "Include.h"


  4. //================================================================================
  5. void main()
  6. {
  7.     IO_Init();
  8.     SystemInit();
  9.     IO_Init();
  10.     Timer0_Init();
  11.     Uart1_Init();
  12.     EA = 1;

  13.     WDT_INIT();

  14.     Power_Up();

  15.     //LVD_Init();//上電讀取完Flash數(shù)據(jù)再打開(kāi)低壓檢測(cè),以免上一次數(shù)據(jù)未讀取出來(lái),就進(jìn)入掉電而寫(xiě)入正確數(shù)據(jù)
  16.     RSTFR = 0x00;

  17.     while(1)
  18.     {
  19.         CLR_WDT;

  20.         /* User code */
  21.         Task_Handle();
  22.     }
  23. }
復(fù)制代碼
  1. #include "Mi_Wifi.h"


  2. //命令
  3. #define COM_NULL            0       //無(wú)命令
  4. #define COM_MODEL           1       //發(fā)送設(shè)備型號(hào)
  5. #define COM_VERSION         2       //發(fā)送設(shè)備版本
  6. #define COM_BLE             3       //發(fā)送藍(lán)牙配置
  7. #define COM_GET_DOWN        4       //獲取下發(fā)指令
  8. #define COM_RESET           5       //發(fā)送復(fù)位指令
  9. #define COM_CONFIG          6       //發(fā)送配網(wǎng)指令
  10. #define COM_TEST            7       //發(fā)送產(chǎn)測(cè)指令
  11. #define COM_NET             8       //發(fā)送網(wǎng)絡(luò)查詢(xún)指令
  12. #define COM_GET_TIME        9       //發(fā)送獲取網(wǎng)絡(luò)時(shí)間指令
  13. #define COM_ACTIVE_UPLOAD   10      //主動(dòng)上報(bào)

  14. #define COM_PASSIVE_UPLOAD  0X81    //被動(dòng)上報(bào),(查詢(xún)或設(shè)置設(shè)置)
  15. #define COM_ERROR           0X82    //錯(cuò)誤上報(bào)

  16. //串口發(fā)送相關(guān)變量
  17. u8 xdata Tx_Buf[TX_BUF_LENGTH];     //發(fā)送緩沖區(qū)
  18. u8 idata Tx_Index;                  //發(fā)送索引(中斷發(fā)送時(shí)需要)
  19. u8 idata Tx_En;                     //發(fā)送允許狀態(tài),1=發(fā)送中,0=發(fā)送停止


  20. //命令處理相關(guān)變量
  21. u8 xdata Rx_Buf[RX_BUF_LENGTH];     //接收數(shù)據(jù)處理緩沖區(qū)
  22. u8 idata Rx_Index;                  //接收索引
  23. u8 idata Rx_Ok;                     //接收完成


  24. //其他變量
  25. u8 xdata Cur_Tx_Com;                //當(dāng)前發(fā)送的命令或數(shù)據(jù)
  26. u8 xdata Tx_Time;                   //發(fā)送循環(huán)時(shí)間
  27. u8 xdata Resend_Count;              //重發(fā)計(jì)數(shù)
  28. u8 xdata Wifi_Status;               //WIFI網(wǎng)絡(luò)狀態(tài)
  29. u8 xdata Wifi_Init_Flag;            //WIFI初始化狀態(tài)位
  30. u8 xdata Tx_Com_Loop;               //發(fā)送命令循環(huán),get_down,net,time


  31. //命令字符串
  32. u8 code Com_Null[] = "null";                        //無(wú)指令
  33. u8 code Com_Ble[] = "ble_config set 4529 0005";     //藍(lán)牙配置
  34. u8 code Com_Get_Down[] = "get_down";                //獲取下行指令
  35. u8 code Com_Reset[] = "reboot";                     //WIFI重啟
  36. u8 code Com_Config[] = "restore";                   //清除WIFI配置信息(配網(wǎng))
  37. u8 code Com_Test[] = "factory";                     //進(jìn)入廠(chǎng)測(cè)模式
  38. u8 code Com_Net[] = "net";                          //主動(dòng)獲取網(wǎng)絡(luò)狀態(tài)(注:該命令即將廢棄。獲取網(wǎng)絡(luò)狀態(tài)變化的更好方法,請(qǐng)見(jiàn)MIIO_net_change)
  39. u8 code Com_Get_Time[] = "time";                    //獲取網(wǎng)絡(luò)時(shí)間


  40. //普通字符串
  41. u8 code str_ok[] = "ok";
  42. u8 code str_none[] = "none";
  43. u8 code str_down[] = "down";
  44. u8 code str_get_properties[] = "get_properties";
  45. u8 code str_set_properties[] = "set_properties";
  46. u8 code str_MIIO_net_change[] = "MIIO_net_change";
  47. u8 code str_error[] = "error";
  48. u8 code str_update_fw[] = "update_fw";
  49. u8 code str_result[] = "result";
  50. u8 code str_properties_changed[] = "properties_changed";
  51. u8 code str_result_error[] = "result "error"";


  52. //網(wǎng)絡(luò)狀態(tài)
  53. u8 code str_unprov[] = "unprov";        //未配置
  54. u8 code str_offline[] = "offline";      //離線(xiàn)
  55. u8 code str_local[] = "local";          //本地鏈接
  56. u8 code str_cloud[] = "cloud";          //連上云
  57. u8 code str_updating[] = "updating";    //升級(jí)中
  58. u8 code str_uap[] = "uap";              //UAP模式


  59. //命令表,方便發(fā)送命令
  60. u8 code * code Com_Table[] =
  61. {
  62.     Com_Null,       //下標(biāo)0
  63.     Com_Model,      //下標(biāo)1
  64.     Com_Version,    //下標(biāo)2
  65.     Com_Ble,        //下標(biāo)3
  66.     Com_Get_Down,   //下標(biāo)4
  67.     Com_Reset,      //下標(biāo)5
  68.     Com_Config,     //下標(biāo)6
  69.     Com_Test,       //下標(biāo)7
  70.     Com_Net,        //下標(biāo)8
  71.     Com_Get_Time,   //下標(biāo)9
  72. };


  73. //串口TX中調(diào)內(nèi)調(diào)用
  74. void Uart_Tx()
  75. {
  76.     if(Tx_En == 0)
  77.     {
  78.         return;
  79.     }
  80.    
  81.     SBUF = Tx_Buf[Tx_Index];
  82.    
  83.     //判斷發(fā)送結(jié)束,不作越界判斷,自行把握發(fā)送數(shù)據(jù)長(zhǎng)度
  84.     if(Tx_Buf[Tx_Index] == '\r')
  85.     {
  86.         Tx_En = 0;
  87.     }
  88.     Tx_Index++;
  89. }


  90. //串口RX中斷內(nèi)調(diào)用,因?yàn)槭且粏?wèn)一答通信方式,所以使用這種方式接收
  91. void Uart_Rx(u8 Data)
  92. {
  93.     if(Rx_Ok)
  94.     {
  95.         return ;
  96.     }
  97.    
  98.     Rx_Buf[Rx_Index] = Data;//保存數(shù)據(jù)
  99.     Rx_Index++;

  100.     //防止溢出,主動(dòng)在接收緩沖區(qū)添加添加'\r'以結(jié)束接收,(一般不會(huì)出現(xiàn)此情況)
  101.     if(Rx_Index == RX_BUF_LENGTH)
  102.     {
  103.         Rx_Buf[RX_BUF_LENGTH - 1] = '\r';
  104.     }

  105.     //判斷幀接收完成(數(shù)據(jù)幀以字符'\r'結(jié)尾)
  106.     if(Rx_Buf[Rx_Index - 1] == '\r')
  107.     {
  108.         Rx_Ok = 1;
  109.     }
  110. }


  111. //wifi配置,需要時(shí)調(diào)用
  112. void Wifi_Config(u8 Config)
  113. {
  114.     switch(Config)
  115.     {
  116.         case WIFI_CONFIG_NET:
  117.             Wifi_Init_Flag |= 0x08;//進(jìn)入配網(wǎng)
  118.             break;
  119.         case WIFI_CONFIG_TEST:
  120.             Wifi_Init_Flag |= 0x04;//進(jìn)入產(chǎn)測(cè)
  121.             break;
  122.         case WIFI_CONFIG_RESET:
  123.             Wifi_Init_Flag |= 0x10;//復(fù)位
  124.             break;
  125.         default:
  126.             break;
  127.     }
  128. }



  129. //啟動(dòng)發(fā)送,利用串口發(fā)送中斷發(fā)送,提高CPU使用率
  130. void Begin_Send()
  131. {
  132.     Tx_Time = 11;//重置發(fā)送間隔時(shí)間n*10 ms
  133.     Tx_En = 1;//置位發(fā)送中
  134.     Tx_Index = 0;//清除發(fā)送索引
  135.     TI = 1;//人為設(shè)置跳入中斷,以啟動(dòng)發(fā)送
  136. }


  137. //布爾,整形,浮點(diǎn)值填充
  138. u8 Value_Fill(u8 xdata * data Tx_Ptr, Upload_Down data * data St_Temp)
  139. {
  140.     if(St_Temp->Type == TYPE_BOOL)
  141.     {
  142.         //布爾類(lèi)型數(shù)據(jù)填充上報(bào)
  143.         if(St_Temp->Value.Long_Data)
  144.         {
  145.             return sprintf(Tx_Ptr, " true");
  146.         }
  147.         else
  148.         {
  149.             return sprintf(Tx_Ptr, " false");
  150.         }
  151.     }
  152.     else if(St_Temp->Type == TYPE_INT)
  153.     {
  154.         //整形數(shù)據(jù)填充上報(bào)
  155.         return sprintf(Tx_Ptr, " %lu", St_Temp->Value.Long_Data);
  156.     }

  157.     //浮點(diǎn)數(shù)據(jù)填充上報(bào)
  158.     return sprintf(Tx_Ptr, " %g", St_Temp->Value.Float_Data);
  159. }


  160. //下發(fā),查詢(xún)屬性處理,填寫(xiě)發(fā)送數(shù)據(jù)時(shí),自行把握發(fā)送長(zhǎng)度,否則緩沖區(qū)溢出
  161. void Attribute_Handle(u8 Oper, Upload_Down data * data St_Temp, u8 xdata * data Str)
  162. {
  163.     u8 i;
  164.     u8 xdata * data Tx_Ptr = &Tx_Buf;

  165.     WIFI_DEBUG_OUT();//功能測(cè)試時(shí)使用,掛邏輯分析儀,看什么時(shí)候接收到數(shù)據(jù),處理后返回什么數(shù)據(jù),正常工程可屏蔽
  166.     St_Temp->Siid = 0;
  167.     St_Temp->Piid = 0;
  168.     Tx_Ptr += sprintf(Tx_Ptr, str_result);

  169.     while(*Str != '\r')//判斷字符串結(jié)束
  170.     {
  171.         //查找字符' '(空格)
  172.         if(*Str == ' ')
  173.         {
  174.             if(St_Temp->Siid == 0)
  175.             {
  176.                 St_Temp->Siid = atol(Str);
  177.                 Str++;
  178.                 continue;
  179.             }

  180.             if(St_Temp->Piid == 0)
  181.             {
  182.                 St_Temp->Piid = atol(Str);
  183.                 Str++;

  184.                 //設(shè)置字符串 down set_proterties 2 1 true\r
  185.                 //獲取字符串 down set_proterties 2 1\r
  186.                 //設(shè)置值時(shí)2 1后面會(huì)有' '+參數(shù),所以需要返回重新查找' ',而獲取值時(shí)2 1結(jié)束,所以不能再返回查找' ',而是直接去處理
  187.                 if(Oper == SET_VALUE)
  188.                 {
  189.                     continue;
  190.                 }
  191.             }

  192.             St_Temp->Error = 0;//清除錯(cuò)誤

  193.             //遍歷回調(diào)函數(shù)表,查找正確的處理函數(shù)
  194.             i = 0;

  195.             while(1)
  196.             {
  197.                 if(Wifi_Handle_Table[i] == 0)//判斷回調(diào)函數(shù)表結(jié)束
  198.                 {
  199.                     i = 0xff;
  200.                     break;//查找不到處理函數(shù)返回
  201.                 }

  202.                 if(Wifi_Handle_Table[i](Oper, St_Temp, Str + 1)) //回調(diào)函數(shù)調(diào)用
  203.                 {
  204.                     break;//正確處理后返回
  205.                 }

  206.                 i++;//指向下一個(gè)功能處理函數(shù)
  207.             }

  208.             Tx_Ptr += sprintf(Tx_Ptr, " %bu %bu", St_Temp->Siid, St_Temp->Piid); //填充SIID PIID

  209.             if(i == 0xff)
  210.             {
  211.                 //無(wú)此屬性上報(bào),格式:result siid piid -4003
  212.                 Tx_Ptr += sprintf(Tx_Ptr, " -4003");
  213.             }
  214.             else
  215.             {
  216.                 //查詢(xún),成功格式:result siid piid 0 value   失敗格式:result siid piid code(錯(cuò)誤碼)
  217.                 //下發(fā),成功格式:result siid piid 0         失敗格式:result siid piid code(錯(cuò)誤碼)
  218.                 Tx_Ptr += sprintf(Tx_Ptr, " %d", (s16)St_Temp->Error);//錯(cuò)誤碼填寫(xiě)

  219.                 if(Oper == GET_VALUE)
  220.                 {
  221.                     Tx_Ptr += Value_Fill(Tx_Ptr,St_Temp);//布爾,整形,浮點(diǎn)值填充
  222.                 }
  223.             }

  224.             //清除以重新獲取SIID PIID
  225.             St_Temp->Siid = 0;
  226.             St_Temp->Piid = 0;
  227.         }

  228.         Str++;//指向下一個(gè)字符
  229.     }

  230.     Cur_Tx_Com = COM_PASSIVE_UPLOAD;//被動(dòng)上報(bào)
  231.     Resend_Count = 0;//重發(fā)計(jì)數(shù)清零
  232.     *Tx_Ptr = '\r';//協(xié)議結(jié)束符
  233.     Begin_Send();
  234. }


  235. //主動(dòng)上報(bào)處理,填寫(xiě)發(fā)送數(shù)據(jù)時(shí),自行把握發(fā)送長(zhǎng)度,否則緩沖區(qū)溢出
  236. void Upload_Handle()
  237. {
  238.     u8 i = 0;
  239.     u8 Tx = 0;
  240.     Upload_Down St_Temp;
  241.     u8 xdata * data Tx_Ptr = &Tx_Buf;

  242.     while(1)
  243.     {
  244.         if(Wifi_Handle_Table[i] == 0x00)//判斷回調(diào)函數(shù)表結(jié)束
  245.         {
  246.             break;
  247.         }

  248.         if(Wifi_Handle_Table[i](SCAN_VALUE, &St_Temp, 0x00))//回調(diào)函數(shù)調(diào)用
  249.         {
  250.             //主動(dòng)上報(bào)格式:properties_changed siid piid value
  251.             if(Tx == 0)
  252.             {
  253.                 Tx = 1;
  254.                 Tx_Ptr += sprintf(Tx_Ptr, str_properties_changed); //填充properties_changed
  255.             }

  256.             Tx_Ptr += sprintf(Tx_Ptr, " %bu %bu", St_Temp.Siid, St_Temp.Piid); //填充SIID PIID
  257.             Tx_Ptr += Value_Fill(Tx_Ptr,&St_Temp);//布爾,整形,浮點(diǎn)值填充
  258.         }

  259.         i++;//指向下一個(gè)功能處理函數(shù)
  260.     }

  261.     if(Tx == 0)
  262.     {
  263.         return ;//無(wú)填充數(shù)據(jù)不進(jìn)行數(shù)據(jù)發(fā)送
  264.     }

  265.     Cur_Tx_Com = COM_ACTIVE_UPLOAD;//主動(dòng)上報(bào)
  266.     Resend_Count = 0;//重發(fā)計(jì)數(shù)清零
  267.     *Tx_Ptr = '\r';//協(xié)議結(jié)束符
  268.     Begin_Send();//啟動(dòng)發(fā)送
  269. }





  270. //WIFI狀態(tài)處理
  271. void Wifi_Status_Handle(u8 xdata * data String)
  272. {
  273.     if(My_Strcmp(String, str_cloud, 5))
  274.     {
  275.         //連接上服務(wù)器
  276.         Wifi_Status = NET_CLOUD;
  277.     }
  278.     else if(My_Strcmp(String, str_local, 5))
  279.     {
  280.         //本地連接
  281.         Wifi_Status = NET_LOCAL;
  282.     }
  283.     else if(My_Strcmp(String, str_unprov, 6))
  284.     {
  285.         //未配置
  286.         Wifi_Status = NET_UNPROV;
  287.     }
  288.     else if(My_Strcmp(String, str_offline, 7))
  289.     {
  290.         //離線(xiàn)
  291.         Wifi_Status = NET_OFFLINE;
  292.     }
  293.     else if(My_Strcmp(String, str_uap, 3))
  294.     {
  295.         //UAP模式
  296.         Wifi_Status = NET_UAP;
  297.     }
  298.     else if(My_Strcmp(String, str_updating, 8))
  299.     {
  300.         //升級(jí)中
  301.         Wifi_Status = NET_UPDATEING;
  302.     }
  303. }


  304. //WIFI下發(fā)指令處理
  305. void Rx_Handle()
  306. {
  307.     Upload_Down St_Temp;

  308.     u8 xdata * data Str = Rx_Buf;

  309.     //Tx_Time = 0;//接收到回復(fù)后可以立即發(fā)送下一次數(shù)據(jù),不管回復(fù)的是什么,,,正常使用沒(méi)問(wèn)題,但使用固件協(xié)議檢測(cè)會(huì)失敗,限制get_down指令間隔時(shí)間需要大于100ms

  310.     if(My_Strcmp(Str, str_ok, 2))
  311.     {
  312.         switch(Cur_Tx_Com)
  313.         {
  314.             case COM_MODEL:
  315.                 Wifi_Init_Flag |= 0x80;//model
  316.                 break;

  317.             case COM_VERSION:
  318.                 Wifi_Init_Flag |= 0x40;//版本應(yīng)答
  319.                 break;

  320.             case COM_BLE:
  321.                 Wifi_Init_Flag |= 0x20;//藍(lán)牙應(yīng)答
  322.                 break;

  323.             case COM_RESET:
  324.                 Wifi_Init_Flag &= ~0x10;//復(fù)位應(yīng)答
  325.                 break;

  326.             case COM_CONFIG:
  327.                 Wifi_Init_Flag &= ~0x08;//配網(wǎng)應(yīng)答
  328.                 break;

  329.             case COM_TEST:
  330.                 Wifi_Init_Flag &= ~0x04;//測(cè)試應(yīng)答
  331.                 break;
  332.         }

  333.         Cur_Tx_Com = COM_NULL;//清除當(dāng)前發(fā)送命令
  334.     }
  335.     else if(My_Strcmp(Str, str_down, 4))
  336.     {
  337.         //下發(fā)命令解析
  338.         Cur_Tx_Com = COM_NULL;

  339.         Str += 5;//跳過(guò)"down "

  340.         if(My_Strcmp(Str, str_none, 4))
  341.         {
  342.             //無(wú)指令
  343.         }
  344.         else if(My_Strcmp(Str, str_update_fw, 9))
  345.         {
  346.             //進(jìn)入升級(jí)模式
  347.             To_Update();
  348.         }
  349.         else if(My_Strcmp(Str, str_set_properties, 14))
  350.         {
  351.             //設(shè)置屬性
  352.             Str += 14;//跳過(guò)"set_properties "
  353.             Attribute_Handle(SET_VALUE, &St_Temp, Str);
  354.         }
  355.         else if(My_Strcmp(Str, str_get_properties, 14))
  356.         {
  357.             //獲取屬性
  358.             Str += 14;//跳過(guò)"get_properties"
  359.             Attribute_Handle(GET_VALUE, &St_Temp, Str);
  360.         }
  361.         else if(My_Strcmp(Str, str_MIIO_net_change, 15))
  362.         {
  363.             //被動(dòng)獲取網(wǎng)絡(luò)狀態(tài)
  364.             Wifi_Status_Handle(&Rx_Buf[21]);
  365.         }
  366.         else
  367.         {
  368.             //錯(cuò)誤
  369.             Cur_Tx_Com = COM_ERROR;//發(fā)送錯(cuò)誤命令
  370.             Resend_Count = 0;//重發(fā)計(jì)數(shù)清零
  371.             sprintf (&Tx_Buf, "%s\r", str_result_error);
  372.             Begin_Send();//啟動(dòng)發(fā)送
  373.         }
  374.     }
  375.     else if(My_Strcmp(Str, str_error, 5))
  376.     {
  377.         if(Cur_Tx_Com == COM_BLE)
  378.         {
  379.             Wifi_Init_Flag |= 0x04;//藍(lán)牙配置錯(cuò)誤或WIFI單模跳過(guò)藍(lán)牙配置
  380.         }
  381.     }
  382.     else if(Cur_Tx_Com == COM_NET)
  383.     {
  384.         //主動(dòng)獲取網(wǎng)絡(luò)狀態(tài)
  385.         Cur_Tx_Com = COM_NULL;//清除當(dāng)前發(fā)送命令
  386.         Wifi_Status_Handle(Str);
  387.     }
  388.     else if(Cur_Tx_Com == COM_GET_TIME)
  389.     {
  390.         //主動(dòng)獲取當(dāng)前時(shí)間(一般不需要處理,如果有北京時(shí)間顯示或其他依賴(lài)網(wǎng)絡(luò)時(shí)間的應(yīng)用時(shí)才需處理)
  391.         Cur_Tx_Com = COM_NULL;//清除當(dāng)前發(fā)送命令
  392.     }
  393. }


  394. //WIFI服務(wù)程序--10毫秒調(diào)用一次
  395. void Wifi_Service()
  396. {
  397.     if(Rx_Ok)
  398.     {
  399.         Rx_Handle();//調(diào)用處理
  400.         Rx_Index = 0;
  401.         Rx_Ok = 0;
  402.     }

  403.     //發(fā)送間隔時(shí)間控制
  404.     if(Tx_Time)
  405.     {
  406.         Tx_Time--;
  407.         return;
  408.     }

  409.     Tx_Com_Loop++;//循環(huán)

  410.     //重發(fā)次數(shù)控制,
  411.     if(Resend_Count >= 10)
  412.     {
  413.         Cur_Tx_Com = COM_NULL;//重發(fā)n次無(wú)響應(yīng)后清除
  414.     }

  415.     if(Cur_Tx_Com != COM_NULL)
  416.     {
  417.         Resend_Count++;//重發(fā)計(jì)數(shù)增加
  418.         Begin_Send();//直接重發(fā)Tx_Buf內(nèi)的數(shù)據(jù)
  419.         return ;
  420.     }

  421.     //發(fā)送相關(guān)信息
  422.     if((Wifi_Init_Flag & 0x80) == 0)
  423.     {
  424.         Cur_Tx_Com = COM_MODEL;//發(fā)送設(shè)備MODEL
  425.     }
  426.     else if((Wifi_Init_Flag & 0x40) == 0)
  427.     {
  428.         Cur_Tx_Com = COM_VERSION;//發(fā)送程序版本號(hào)
  429.     }
  430.     else if((Wifi_Init_Flag & 0x20) == 0)
  431.     {
  432.         Cur_Tx_Com = COM_BLE;//發(fā)送ble相關(guān)
  433.     }
  434.     else if(Wifi_Init_Flag & 0x10)
  435.     {
  436.         Cur_Tx_Com = COM_RESET;//發(fā)送復(fù)位
  437.     }
  438.     else if(Wifi_Init_Flag & 0x08)
  439.     {
  440.         Cur_Tx_Com = COM_CONFIG;//發(fā)送WIFI重置,進(jìn)入配網(wǎng)模式
  441.     }
  442.     else if(Wifi_Init_Flag & 0x04)
  443.     {
  444.         Cur_Tx_Com = COM_TEST;//發(fā)送WIFI進(jìn)入產(chǎn)測(cè)模式
  445.     }
  446.     else if(Tx_Com_Loop >= 10)
  447.     {
  448.         Tx_Com_Loop = 0;
  449.         Cur_Tx_Com = COM_NET;//主動(dòng)獲取網(wǎng)絡(luò)狀態(tài)
  450.     }
  451.     else if(Tx_Com_Loop == 5)
  452.     {
  453.         Cur_Tx_Com = COM_GET_TIME;//獲取時(shí)間
  454.     }
  455.     else
  456.     {
  457.         Cur_Tx_Com = COM_GET_DOWN;
  458.         //檢測(cè)數(shù)據(jù)變化并上報(bào)數(shù)據(jù),連接上網(wǎng)絡(luò)才檢測(cè)(連接上本地或者網(wǎng)絡(luò))
  459.         if((Wifi_Status == NET_LOCAL) || (Wifi_Status == NET_CLOUD))
  460.         {
  461.             Upload_Handle();//調(diào)用后如果需要主動(dòng)上報(bào)數(shù)據(jù)的話(huà),Cur_Tx_Com的值應(yīng)該是COM_ACTIVE_UPLOAD,并且數(shù)據(jù)已經(jīng)填充進(jìn)發(fā)送緩沖區(qū)了
  462.         }
  463.     }
  464.    
  465.     Resend_Count = 0;//重發(fā)計(jì)數(shù)清零
  466.     if(Cur_Tx_Com == COM_ACTIVE_UPLOAD)
  467.     {
  468.         Begin_Send();//啟動(dòng)發(fā)送
  469.         return;
  470.     }
  471.     sprintf(&Tx_Buf, "%s\r", Com_Table[Cur_Tx_Com]);//填充指令
  472.     Begin_Send();//啟動(dòng)發(fā)送
  473. }
復(fù)制代碼
HC89F3541(BOOTLOAD部分).7z (54.02 KB, 售價(jià): 1 E幣) HC89F3541-20210702(APP部分).7z (150.46 KB, 售價(jià): 1 E幣)
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

手機(jī)版|小黑屋|ELEOK |網(wǎng)站地圖

GMT+8, 2026-5-26 05:53

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復(fù) 返回頂部 返回列表