#include "CONFIG.h" #if AIWB2 #include "stm32f10x.h" #include "Regist.h" #include "FlashSetup.h" #include #include #include #include #include "cJSON.h" #include "mbedtls_util.h" #include "Log_Module.h" #include "At_Module.h" #include "Common_Util.h" #include "Tuoreniot.h" #include "aiwb2.h" // 泵号 extern uint8_t mcu_id[8]; // 注册参数使用的网络名称,密码 char WIFI_RegistID[50]="AA"; char WIFI_RegistPASSWORD[30]="123456789"; // 注册参数 static struct TUORENIOT_RegistRequestStruct regist_request = { .version = 1, .networkType = 3, .networkProtocol = 1, .deviceId = "3431228A1936013C", .userId = "0001" }; ///*************************************** 注册信息打包函数 ***************************************/ //void TUORENIOT_PackRegistRequest(uint8_t * pack_data, uint16_t * pack_data_length, struct TUORENIOT_RegistRequestStruct * registParams) //{ // // //InitClientId_2(); // sprintf((char *)(pack_data + 2), "{\"version\":\"%d\",\"networkType\":\"%d\",\"networkProtocol\":\"%d\",\"productId\":\"%s\",\"deviceId\":\"%s\",\"userId\":\"%s\"}", // registParams->version, registParams->networkType, registParams->networkProtocol, registParams->productId, registParams->deviceId, registParams->userId); // ?′?óAT??á? // Log_Printf_Debug("%s\r\n", (char *)(pack_data + 2)); // // uint16_t datalen = utils_aes128_ECB_base64_enc_with_length(regist_key, (pack_data + 2)); // // pack_data[0] = datalen>>8;//头两个字节赋值字节长度 // pack_data[1] = datalen; // * pack_data_length = datalen + 2; //} // 函数声明 static void REGIST_Process(void); // 注册流程 static void REGIST_SetStatus(enum REGIST_StatusEnum status); // 设置注册状态 static void REGIST_SetResult(enum REGIST_ResultEnum result); // 设置注册结果 static void goto_start(void); // 开始 static void goto_success(void); // 成功 static void goto_failure(char * _info); // 失败 static void goto_finish(void); // 结束 enum Step{ STEP_START, // 开始 STEP_EXIT_SLEEP, // 退出睡眠 STEP_START_AT,//发送AT,检测模块是否唤醒 STEP_SET_QISDE_0,//关闭发送回显 STEP_SET_WORKMODE,//设置WIFI工作模式 STEP_SET_RECEIVEMODE,//设置socket接收模式 STEP_WIFI, //模块连接wifi STEP_OPEN,//打开客户端 STEP_SEND,//发送send STEP_WAIT,//等待 STEP_ENTER_SLEEP,// 进入深度睡眠 STEP_SUCCESS,// 成功 STEP_FAILURE,// 失败 STEP_FINISH,// 结束流程 STEP_EXIT_WIFICONNECT, // 关闭所有WIFI连接 STEP_QUERY_CGREG,//查询网络状态 }; // 步骤跳转时的监听 //static uint8_t STEP_QUERY_CGREG_times = 0; // 查询网络状态的次数 //static void initialize() //{ //// STEP_QUERY_CGREG_times = 0; //} static uint16_t goto_step_event(uint16_t ns) { // 重置aiwb2状态 aiwb2.reset(); // 流程控制 uint16_t step = ns; // if(ns == STEP_QUERY_CGREG && STEP_QUERY_CGREG_times++ >= 20) // { // goto_failure("查询网络状态的次数过多,联网失败"); // step = STEP_FAILURE; // } return step; } // 流程控制 static struct PCTRL_Struct pctrl = { .current_step = STEP_FINISH, .next_step = STEP_FINISH, .step_wait = STEP_WAIT, .goto_step_listener = goto_step_event, }; // 备注 static char info[40]; // 开始 static void goto_start(void) { // initialize(); PCTRL_GotoStep(&pctrl, STEP_START, "开始"); } // 成功 static void goto_success(void) { REGIST_SetResult(REGIST_Result_Success); PCTRL_GotoStep(&pctrl, STEP_SUCCESS, "成功"); } // 失败 static void goto_failure(char * _info) { REGIST_SetResult(REGIST_Result_Failure); memset(info, 0, sizeof(info)); strcpy(info, _info); PCTRL_GotoStep(&pctrl, STEP_FAILURE, "失败"); Log_Printf_Debug("info:%s!\r\n", info); } // 结束 static void goto_finish(void) { REGIST_SetStatus(REGIST_Status_Done); PCTRL_GotoStep(&pctrl, STEP_FINISH, "结束"); } // 注册状态 static enum REGIST_StatusEnum regist_status = REGIST_Status_None; // 注册结果 static enum REGIST_ResultEnum regist_result = REGIST_Result_None; // 设置注册状态 static void REGIST_SetStatus(enum REGIST_StatusEnum status) { regist_status = status; } // 获取注册状态 enum REGIST_StatusEnum REGIST_GetStatus(void) { return regist_status; } // 设置注册结果 static void REGIST_SetResult(enum REGIST_ResultEnum result) { regist_result = result; } // 获取注册结果 enum REGIST_ResultEnum REGIST_GetResult(void) { return regist_result; } // 重置注册 enum EXECUTE_ResultEnum REGIST_Reset(void) { if(REGIST_GetStatus() == REGIST_Status_Being) { Log_Printf_Debug("注册流程重置错误!\r\n"); return EXECUTE_Result_Failure; } REGIST_SetStatus(REGIST_Status_None); REGIST_SetResult(REGIST_Result_None); return EXECUTE_Result_Success; } // 开始注册 enum EXECUTE_ResultEnum REGIST_Start(void) { REGIST_Reset(); if(REGIST_GetStatus() != REGIST_Status_None) { Log_Printf_Debug("注册流程启动错误!\r\n"); return EXECUTE_Result_Failure; } goto_start(); REGIST_SetStatus(REGIST_Status_Being); return EXECUTE_Result_Success; } // 注册流程处理,放到大循环里 void REGIST_ProcessHandle(void) { if(REGIST_GetStatus() == REGIST_Status_Being) { REGIST_Process(); } } // 发送数据的逻辑 static enum Result result = Result_None; extern uint8_t conID; uint8_t TCPID = 4; //发送数据的流程 static void REGIST_Process(void) { // 流程 switch(pctrl.current_step) { case STEP_START: // 开始 PCTRL_GotoStep(&pctrl, STEP_EXIT_SLEEP, "退出休眠"); break; case STEP_EXIT_SLEEP: // 退出休眠 aiwb2.exit_sleep_io(); PCTRL_GotoStepWait(&pctrl, STEP_START_AT,350, "发送AT,检测模块是否唤醒"); break; case STEP_START_AT: //开始AT,检测模块是否唤醒 result = aiwb2.test_at(); if(result == Result_Success) { PCTRL_GotoStep(&pctrl, STEP_SET_QISDE_0, "关闭发送回显"); } else if(result == Result_Failed) { goto_failure("发送AT失败,模块未唤醒"); } break; case STEP_SET_QISDE_0: // 关闭发送回显 result = aiwb2.set_qisde(0); if(result == Result_Success) { PCTRL_GotoStep(&pctrl, STEP_SET_WORKMODE, "设置WIFI工作模式"); } else if(result == Result_Failed) { goto_failure("关闭发送回显失败"); } break; case STEP_SET_WORKMODE://设置WIFI工作模式 result = aiwb2.set_workmode(1,1); if(result == Result_Success) { PCTRL_GotoStepWait(&pctrl,STEP_SET_RECEIVEMODE, 3 , "设置socket接收模式"); } else if(result == Result_Failed) { goto_failure("设置WIFI工作模式失败"); } break; case STEP_SET_RECEIVEMODE://设置socket接收模式 result = aiwb2.set_receivingmode(1); if(result == Result_Success) { PCTRL_GotoStepWait(&pctrl,STEP_WIFI, 3 , "模块连接wifi"); } else if(result == Result_Failed) { goto_failure("设置socket接收模式失败"); } break; case STEP_WIFI: //模块连接wifi result = aiwb2.set_connect_WIFI(WIFI_RegistID, WIFI_RegistPASSWORD); if(result == Result_Success) { PCTRL_GotoStepWait(&pctrl,STEP_OPEN, 3 , "连接TCP"); } else if(result == Result_Failed) { goto_failure("模块连接wifi失败"); } break; case STEP_OPEN: // 打开客户端 result = aiwb2.open_socket(TCPID,REGIST_SERVER, REGIST_PORT); if(result == Result_Success) { PCTRL_GotoStep(&pctrl, STEP_SEND, "发送数据"); // 打包注册请求 memset(regist_data, 0, sizeof(regist_data)); TUORENIOT_PackRegistRequest(regist_data, ®ist_data_length, ®ist_request); Log_Printf_Debug("regist_data: \r\n"); Log_SendHex(regist_data, regist_data_length); Log_Printf_Debug("\r\n"); TUORENIOT_PrintfRegistRequestStruct(®ist_request); } else if(result == Result_Failed) { goto_failure("连接tcp失败"); } break; case STEP_SEND: // 发送send result = aiwb2.send(conID, regist_data, regist_data_length, ®ist_data_length); if(result == Result_Success) { int8_t res = TUORENIOT_AnalysisRegistData(regist_data, regist_data_length); if(res == 1) // 成功 { goto_success(); } else // 失败 { goto_failure("解析失败"); } } else if(result == Result_Failed) { goto_failure("注册数据处理失败"); } break; case STEP_WAIT: // 等待 PCTRL_Wait(&pctrl); break; case STEP_ENTER_SLEEP: // 进入深度睡眠 aiwb2.enter_sleep_io(); goto_finish(); break; case STEP_SUCCESS: // 成功 PCTRL_GotoStep(&pctrl, STEP_ENTER_SLEEP, "进入深度睡眠"); break; case STEP_FAILURE: // 失败 PCTRL_GotoStep(&pctrl, STEP_ENTER_SLEEP, "进入深度休眠"); break; case STEP_FINISH: // 结束流程STEP_FAILURE break; default: goto_failure("步骤不存在"); break; } } #endif