at_module.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /** ******************************************************************************
  2. * @file AT_Module.h
  3. * @author 度云未来 DOIOT
  4. * @brief 针对公司模块AT指令的处理库
  5. ******************************************************************************
  6. * @attention
  7. * <h2><center>&copy; Copyright (c) 2019 成都度云未来
  8. * All rights reserved.</center></h2>
  9. * 注意:本程序针对cubemx 生成的hal库程序快速开发
  10. * 环境:keil5.0
  11. * STM32Cube FW_F1 V1.8.0
  12. ********************************************************************************/
  13. //#define Ask_arry_size 2
  14. #define Ask_arry_len 20
  15. //[Ask_arry_size][Ask_arry_len]
  16. typedef struct{
  17. /*发送的指令 */
  18. char *SEND_CMD;
  19. /*应该响应的指令 */
  20. char *ASK[Ask_arry_len];
  21. /*需要校验的指令数 */
  22. uint32_t crc_size;
  23. /*指令等待超时时间*/
  24. uint32_t timeout;
  25. /*重发次数*/
  26. uint32_t REF_Count;
  27. /*失败时要跳转的指令位置*/
  28. uint32_t jump;
  29. /*支持注册一个发送前奏回调函数*/
  30. void (*BeforeCpltCallback)();
  31. /*支持注册一个发送且校验完成完成回调函数,参数默认为rx_buff*/
  32. void (*AfterCpltCallback)(char *rx_buff);
  33. /*支持注册一个错误处理校验函数,参数默认为rx_buff*/
  34. void (*ErrorCpltCallback)(char *rx_buff);
  35. /*完成后延时*/
  36. uint32_t delay_time;
  37. }AT_CMD; /*发送指令结构体*/
  38. /*开模组长度char数组的宏*/
  39. #if 0
  40. #define MODULE_RDA_MAXlen 128
  41. #define rxbuff(name) char(name)[MODULE_RDA_MAXlen]={0}
  42. #define clear(name) memset(name,0,MODULE_RDA_MAXlen)
  43. #else
  44. #define MODULE_RDA_MAXlen 160
  45. #define rxbuff(name) char(name)[MODULE_RDA_MAXlen]={0}
  46. #define clear(name) memset(name,0,MODULE_RDA_MAXlen)
  47. #endif
  48. /**@brief 开始启动AT任务*/
  49. uint8_t AT_TASK_START(AT_CMD task[],uint8_t Size);
  50. #define cmd_length 256 /*响应指令最大长度*/
  51. /**@brief 发送且阻塞读取校验*/
  52. uint8_t Module_SEND_CRC(char* send_cmd,char *ack_str,uint32_t overtime);
  53. /**@brief 发送且阻塞读取校验,支持多组参数*/
  54. uint8_t Module_SEND_A_CRC(char* send_cmd,char cmd_arry[][cmd_length],uint8_t arry_size,uint8_t crc_size);
  55. /**@brief 阻塞读取并校验*/
  56. uint8_t Module_Read_A_CRC(char cmd_arry[],uint32_t overtime);
  57. /**@brief 阻塞轮询,校验成功后返回*/
  58. uint8_t AT_CMD_Polling(char *send_cmd,char*ack,uint32_t Polling_delay,uint32_t overtime);
  59. /*-字符处理函数------【旧版】---------------------------------------------------------------------------------*/
  60. /**@brief 以字符包裹为标志提取子串*/
  61. uint8_t AT_GET_Data(char * buff,uint8_t * get_data,char*sign,uint8_t Number_of_groups);
  62. /**@brief 以子串包裹为标志提取子串*/
  63. uint8_t AT_GET_Data_2Param(char * buff,uint8_t get_data[],char*head,char*tail);
  64. /**@brief 把标志位的子串替换为要替换的子串*/
  65. uint8_t AT_Data_Replace(char buff[],char *str1, char *str2);
  66. /**@brief AT_GET_Data_Param_number :指定的标志位开始,提取后面的数据,直到遇到\r,\n,*/
  67. uint8_t AT_GET_Data_Param(char * buff,uint8_t get_data[],char*head);
  68. /**@brief AT_Extract_numbers:把导入的数组提纯为纯数字*/
  69. uint8_t AT_Extract_numbers(char buff[]);
  70. /**@brief AT_Extract_numbers :导入的数组提纯为纯字符和数字*/
  71. uint8_t AT_Extract_numbers_letters(char buff[]);
  72. /**@brief AT_Remove_spaces :去掉空字符,\r,\n,space */
  73. uint8_t AT_Remove_spaces(char buff[]);
  74. #define HAL_Delay(x)
  75. #define AT_INFO(fmt,arg...) //trace_otp_trace1(uart_msg_send, 4, fmt, ##arg);
  76. //printf("<<-EEPROM-INFO->> "fmt"\n",##arg)
  77. #define AT_ERROR(fmt,arg...) //printf("<<-EEPROM-ERROR->> "fmt"\n",##arg)
  78. #define AT_DEBUG(fmt,arg...) /*do{\
  79. if(EEPROM_DEBUG_ON)\
  80. printf("<<-EEPROM-DEBUG->> [%d]"fmt"\n",__LINE__, ##arg);\
  81. }while(0)*/
  82. /*调试打印 */
  83. #define debug_printf(fmt,arg...) printf("<<-at_debug_printf->> "fmt"\r\n",##arg)
  84. /*往模组打印*/
  85. #define module_printf(fmt,arg...) trace_otp_trace1(uart_msg_send, UART_ME3616, fmt, ##arg);
  86. int Module_Blocking_Read(char *buffer, u32 timeout);