|
@@ -1,324 +0,0 @@
|
|
|
-#include "net4g.h"
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-extern UART_HandleTypeDef huart3;
|
|
|
-extern UART_HandleTypeDef huart4;
|
|
|
-extern UART_HandleTypeDef huart5;
|
|
|
-extern UART_HandleTypeDef huart1;
|
|
|
-
|
|
|
-uint8_t step_4G = 0;
|
|
|
-bool resetML307A =false;
|
|
|
-
|
|
|
-
|
|
|
-uint32_t g_ML307ACnt =0; // 接收计数
|
|
|
-uint8_t g_ML307A_8buf[200] ={0} ;
|
|
|
-uint8_t g_ML307A_8buf_Down[200]={0};
|
|
|
-
|
|
|
-uint8_t u4RecvFlag = 0; // 串口4接收标志串口接收完成标志
|
|
|
-//char g_ML307A_8buf_Down[100] = {0}; // 接收缓存
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-uint8_t ML307A_Init(void)
|
|
|
-{
|
|
|
-
|
|
|
- //startDTU=false;
|
|
|
-// int txLen = sprintf((char *)recvBuff, "ML307A_Init...\r\n");
|
|
|
-// HAL_UART_Transmit(&huart1,recvBuff,txLen,(txLen-1));
|
|
|
-// uint8_t result = 0;
|
|
|
-#ifdef debug4GInfo
|
|
|
- #if debug4GInfo == 1
|
|
|
- printf("ML307A_Init...\r\n");
|
|
|
- #endif
|
|
|
-#endif
|
|
|
- switch(step_4G)
|
|
|
- {
|
|
|
- case 0:
|
|
|
- if(sendCmd("AT\r\n","OK", 10, 5)) // 测试AT指令功能是否正常
|
|
|
- {
|
|
|
- step_4G++;
|
|
|
-#ifdef debug4GInfo
|
|
|
- #if debug4GInfo == 1
|
|
|
- printf("CMD:AT\t##Reply message matching\r\n");
|
|
|
- #endif
|
|
|
-#endif
|
|
|
- //start4G=false;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
-#ifdef debug4GInfo
|
|
|
- #if debug4GInfo == 1
|
|
|
- printf("Err:AT\r\n");
|
|
|
- #endif
|
|
|
-#endif
|
|
|
- reset_4G();
|
|
|
- break;
|
|
|
- }
|
|
|
-// case 1:
|
|
|
-// if(sendCmd("AT+CPIN?\r\n","+CPIN: READY\r\n\r\nOK", 20, 2)) // 查询SIM卡是否正常,返回ready则表示SIM卡正常
|
|
|
-// {
|
|
|
-// step_4G++;
|
|
|
-// int txLen = sprintf((char *)recvBuff, "CPIN OK\r\n");
|
|
|
-// HAL_UART_Transmit(&huart1,recvBuff,txLen,(txLen-1));
|
|
|
-// }
|
|
|
-// else
|
|
|
-// {
|
|
|
-// printf("Err:AT+CPIN?\r\n"); // 20秒内,无法识别SIM状态,重启模块
|
|
|
-// reset_4G();
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case 2:
|
|
|
-// if(sendCmd("AT+CREG?\r\n","+CREG: 0,1", 90, 2)) // 查询模组是否注册上GSM网络
|
|
|
-// {
|
|
|
-// step_4G++;
|
|
|
-// int txLen = sprintf((char *)recvBuff, "CREG OK\r\n");
|
|
|
-// HAL_UART_Transmit(&huart1,recvBuff,txLen,(txLen-1));
|
|
|
-// }
|
|
|
-// else
|
|
|
-// {
|
|
|
-// printf("Err:AT+CREG?\r\n"); // 90秒内,没有注册上CS业务,重启模块
|
|
|
-// reset_4G();
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case 3:
|
|
|
-// if(sendCmd("AT+CGREG?\r\n","+CGREG: 0,1", 60, 2)) // 查询模组是否注册上GPRS网络
|
|
|
-// {
|
|
|
-// step_4G++;
|
|
|
-// }
|
|
|
-// else
|
|
|
-// {
|
|
|
-// printf("Err:AT+CGREG?\r\n"); // 60秒内,没有注册上PS业务
|
|
|
-// reset();
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case 4:
|
|
|
-// if(sendCmd("AT+QICSGP=1,1,\"CMNET\",\"\",\"\",1\r\n", "OK", 40, 3)) // 查询模组是否注册上GPRS网络
|
|
|
-// {
|
|
|
-// result = ML307A_NetConfig();
|
|
|
-// }
|
|
|
-// else
|
|
|
-// {
|
|
|
-// printf("Err:AT+QICSGP=1,1\r\n"); // 如果3次都没停止成功或超过40秒没有回应,则重启模块
|
|
|
-// reset();
|
|
|
-// break;
|
|
|
-// }
|
|
|
- }
|
|
|
- //return result;
|
|
|
- return 1;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-uint8_t ML307A_NetConfig(void)
|
|
|
-{
|
|
|
- //uint8_t result = 0;
|
|
|
-// if(sendCmd("AT+QIDEACT=1\r\n", "OK", 40, 1)) // 在激活GPRS场景之前先关闭GPRS场景,确保连接正确
|
|
|
-// {
|
|
|
-// if(sendCmd("AT+QIACT=1\r\n", "OK", 150, 1)) // 激活移动场景
|
|
|
-// {
|
|
|
-// ML307A_Connect();
|
|
|
-// }
|
|
|
-// else // 等待150秒后,没有响应重启模块
|
|
|
-// {
|
|
|
-// printf("Err:AT+QIACT=1\r\n"); // 重启模块
|
|
|
-// reset();
|
|
|
-// }
|
|
|
- return 1;
|
|
|
-// }
|
|
|
-// else // 等待40秒后,没有响应重启模块
|
|
|
-// {
|
|
|
-// printf("Err:AT+QIDEACT=1\r\n"); // 重启模块
|
|
|
-// reset();
|
|
|
-// return 0;
|
|
|
-// }
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- @brief 连接TCP服务器
|
|
|
- @param 无
|
|
|
- @return 无
|
|
|
-*/
|
|
|
-void ML307A_Connect(void)
|
|
|
-{
|
|
|
- if(sendCmd("AT+QIOPEN=1,0,\"TCP\",\"180.97.81.180\",53540,0,1\r\n", "+QIOPEN:", 150, 5))
|
|
|
- {
|
|
|
- printf("Connect Success\r\n");
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- printf("Err:AT+QIOPEN=1,0\r\n");
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- @brief 发送数据到TCP服务器
|
|
|
- @param pString -[in] 发送数据
|
|
|
- @return 无
|
|
|
-*/
|
|
|
-void ML307A_Send(char *pString)
|
|
|
-{
|
|
|
- if(sendCmd("AT+QISEND=0\r\n", ">", 60, 1))
|
|
|
- {
|
|
|
- if(sendCmd("AT+QISEND=0,0\r\n", "\r\nOK", 5, 24)) // 2分钟后(每5秒查询一次,共24次)
|
|
|
- {
|
|
|
- /* 发送数据成功,对方收到数据 */
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- printf("Err:AT+QISEND=0\r\n");
|
|
|
- if(sendCmd("AT+QICLOSE=0\r\n", "OK", 10, 1)) // TCP连接出现异常,关闭TCP连接
|
|
|
- {
|
|
|
- printf("AT+QICLOSE\r\n");
|
|
|
- ML307A_Connect();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- reset_4G(); // 等待10秒,没有响应重启模块
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- reset_4G(); // 等待60秒,没有响应重启模块
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-/**
|
|
|
- @brief 从TCP服务器接收数据
|
|
|
- @param pRecvDataBuf -[out] 接收数据
|
|
|
- @return 接收数据长度
|
|
|
-*/
|
|
|
-uint32_t ML307A_Receive(char *pRecvDataBuf)
|
|
|
-{
|
|
|
- uint32_t recvDataLen = 0;
|
|
|
- if(u4RecvFlag) // 如果串口接收完成
|
|
|
- {
|
|
|
- if(strstr((const char *)g_ML307A_8buf_Down, "+QIURC: \"recv\",0,") != NULL) // 如果检索到关键词
|
|
|
- {
|
|
|
- memcpy(pRecvDataBuf, g_ML307A_8buf_Down, g_ML307ACnt);
|
|
|
- recvDataLen = g_ML307ACnt;
|
|
|
- }
|
|
|
- clearBuffer();
|
|
|
- }
|
|
|
- return recvDataLen;
|
|
|
-}
|
|
|
-
|
|
|
-void USART_SendString(UART_HandleTypeDef *huart, char *str)
|
|
|
-{
|
|
|
-
|
|
|
- HAL_UART_Transmit(huart, (uint8_t*)str, strlen(str), 0xFFFF);
|
|
|
- HAL_UART_Transmit(&huart1, (uint8_t*)str, strlen(str), 0xFFFF);//485
|
|
|
- HAL_UART_Transmit(&huart3, (uint8_t*)str, strlen(str), 0xFFFF);//ttl
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-void USART_SendHexArray(UART_HandleTypeDef *huart, uint8_t *data, int length)
|
|
|
-{
|
|
|
-
|
|
|
- HAL_UART_Transmit(huart,data, length, 0xFFFF);
|
|
|
- HAL_UART_Transmit(&huart1,data, length, 0xFFFF);//485
|
|
|
- HAL_UART_Transmit(&huart3, data, length, 0xFFFF);//ttl
|
|
|
-}
|
|
|
-
|
|
|
-/*********************************************************************
|
|
|
- * LOCAL FUNCTIONS
|
|
|
- */
|
|
|
-/**
|
|
|
- @brief 发送AT命令
|
|
|
- @param pCmd -[in] 命令字符串
|
|
|
- @param pRes -[in] 需要检测的返回命令字符串
|
|
|
- @param timeOut -[in] 等待时间
|
|
|
- @param sendNum -[in] 命令发送次数
|
|
|
- @return 1 - 成功;0 - 失败
|
|
|
-*/
|
|
|
-uint8_t sendCmd(char *pCmd, char *pRes, uint32_t timeOut, uint8_t sendNum)
|
|
|
-{
|
|
|
- uint8_t i = 0;
|
|
|
- uint32_t time;
|
|
|
- clearBuffer(); // 清空缓存
|
|
|
- for(i = 0; i < sendNum; i++)
|
|
|
- {
|
|
|
- time = timeOut * 10;
|
|
|
- USART_SendString(&huart4, pCmd);
|
|
|
-// int txLen = sprintf((char *)recvBuff, "Send AT >>%s",pCmd);
|
|
|
-// HAL_UART_Transmit(&huart1,recvBuff,txLen,(txLen-1));
|
|
|
-#ifdef debug4GInfo
|
|
|
- #if debug4GInfo == 1
|
|
|
- printf("Send AT >>%s",pCmd);
|
|
|
- #endif
|
|
|
-#endif
|
|
|
-
|
|
|
- while(time--)
|
|
|
- {
|
|
|
- if(u4RecvFlag) // 如果串口接收完成
|
|
|
- {
|
|
|
- HAL_Delay(10);
|
|
|
-// int txLen = sprintf((char *)recvBuff, "R_AT >>%s<<",g_ML307A_8buf_Down);
|
|
|
-// HAL_UART_Transmit(&huart1,recvBuff,txLen,(txLen-1));
|
|
|
-// HAL_UART_Transmit(&huart3,recvBuff,txLen,(txLen-1));
|
|
|
-// HAL_UART_Transmit(&huart4, (uint8_t *)g_ML307A_8buf_Down, recvLength, HAL_MAX_DELAY);
|
|
|
-#ifdef debug4GInfo
|
|
|
- #if debug4GInfo == 1
|
|
|
- printf("RE>>%s",g_ML307A_8buf_Down);
|
|
|
- #endif
|
|
|
-#endif
|
|
|
- if(strstr((const char *)g_ML307A_8buf_Down, pRes) != NULL) // 如果检索到关键词
|
|
|
- {
|
|
|
- //printf("%s", g_ML307A_8buf_Down);
|
|
|
- return 1;
|
|
|
- }
|
|
|
- else{
|
|
|
-
|
|
|
- u4RecvFlag = 0;
|
|
|
- //printf("null %s", g_ML307A_8buf_Down);
|
|
|
- }
|
|
|
- }
|
|
|
- HAL_Delay(100); // 等待100毫秒
|
|
|
- }
|
|
|
-
|
|
|
- clearBuffer();
|
|
|
- }
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- @brief 清空缓存
|
|
|
- @param 无
|
|
|
- @return 无
|
|
|
-*/
|
|
|
-void clearBuffer(void)
|
|
|
-{
|
|
|
- recvLength = 0;//清除计数
|
|
|
- recvDndFlag = 0;//清除接收结束标志位
|
|
|
-
|
|
|
- memset(g_ML307A_8buf_Down, 0, 500);
|
|
|
- memset(g_ML307A_8buf_Down, 0, 500);
|
|
|
-
|
|
|
- u4RecvFlag = 0;
|
|
|
- printf("bufclear\r\n");
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-/**
|
|
|
- @brief 重启模块
|
|
|
- @param 无
|
|
|
- @return 无
|
|
|
-*/
|
|
|
-void reset_4G(void)
|
|
|
-{
|
|
|
- printf("reset_4g\n");
|
|
|
- step_4G = 0;
|
|
|
- resetML307A = true;
|
|
|
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
|
|
|
- HAL_Delay(5000);
|
|
|
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
|
|
|
-}
|
|
|
-
|
|
|
-
|