app_1_8_1.c 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. /****************************************************************************
  2. *
  3. * Copy right: 2020-, Copyrigths of QIXIANG TECH Ltd.
  4. * File name: app.c
  5. * Description: QX app source file
  6. * History: Rev1.0 2020-10-16
  7. * Athuor: chenjie
  8. *
  9. ****************************************************************************/
  10. //include
  11. #include "bsp.h"
  12. #include "bsp_custom.h"
  13. #include "osasys.h"
  14. #include "ostask.h"
  15. #include "queue.h"
  16. #include "ps_event_callback.h"
  17. #include "app.h"
  18. #include "cmisim.h"
  19. #include "cmimm.h"
  20. #include "cmips.h"
  21. #include "sockets.h"
  22. #include "psifevent.h"
  23. #include "ps_lib_api.h"
  24. #include "lwip/netdb.h"
  25. #include <cis_def.h>
  26. #include "debug_log.h"
  27. #include "slpman_ec616.h"
  28. #include "plat_config.h"
  29. //define
  30. // app task static stack and control block
  31. #define PROC_TASK_STACK_SIZE (1024)
  32. //uart def
  33. #define Uart_Send_LEN (8)
  34. #define Uart_Rece_LEN (16)
  35. #define RTE_UART_RX_IO_MODE RTE_UART1_RX_IO_MODE
  36. //statement variable
  37. extern ARM_DRIVER_USART Driver_USART1;
  38. static ARM_DRIVER_USART *USARTdrv = &Driver_USART1;
  39. /** \brief usart receive buffer */
  40. uint8_t Uart_Data_buffer[8];
  41. /** \brief usart send buffer */
  42. /** \brief receive timeout flag */
  43. volatile bool isRecvTimeout = false;
  44. /** \brief receive complete flag */
  45. volatile bool isRecvComplete = false;
  46. uint8_t process0SlpHandler = 0xff;
  47. uint8_t process1SlpHandler = 0xff;
  48. uint8_t process2SlpHandler = 0xff;
  49. /** \brief 电压传输 */
  50. typedef enum
  51. {
  52. PROCESS1_STATE_IDLE = 0,
  53. PROCESS1_STATE_WORK,
  54. PROCESS1_STATE_SLEEP
  55. }process1SM;
  56. typedef enum
  57. {
  58. PROCESS2_STATE_IDLE = 0,
  59. PROCESS2_STATE_WORK,
  60. PROCESS2_STATE_SLEEP
  61. }process2SM;
  62. static StaticTask_t gProcessTask0;
  63. static UINT8 gProcessTaskStack0[PROC_TASK_STACK_SIZE];
  64. static StaticTask_t gProcessTask1;
  65. static UINT8 gProcessTaskStack1[PROC_TASK_STACK_SIZE];
  66. static StaticTask_t gProcessTask2;
  67. static UINT8 gProcessTaskStack2[PROC_TASK_STACK_SIZE];
  68. process1SM gProc1State = PROCESS1_STATE_IDLE;
  69. process2SM gProc2State = PROCESS2_STATE_IDLE;
  70. #define PROC1_STATE_SWITCH(a) (gProc1State = a)
  71. #define PROC2_STATE_SWITCH(a) (gProc2State = a)
  72. static void process0AppTask(void* arg)
  73. {
  74. uint32_t inParam = 0xAABBCCDD;
  75. uint32_t cnt;
  76. slpManSetPmuSleepMode(true,SLP_HIB_STATE,false);
  77. slpManApplyPlatVoteHandle("process0slp",&process0SlpHandler);
  78. slpManSlpState_t slpstate = slpManGetLastSlpState();
  79. UINT8 Can_index = 0;
  80. UINT8 Uart_index = 0;
  81. while(1)
  82. {
  83. osDelay(10);//10ms
  84. Can_index++;
  85. Uart_index++;
  86. if (Uart_index >10)//Uart 100ms 调用一次
  87. {
  88. PROC2_STATE_SWITCH(PROCESS2_STATE_WORK);
  89. Uart_index = 0;
  90. }
  91. if (Can_index >=100)//Can 1000ms 调用一次
  92. {
  93. PROC1_STATE_SWITCH(PROCESS1_STATE_WORK);
  94. Can_index = 0;
  95. }
  96. }
  97. }
  98. void TcpCallBack(void)
  99. {
  100. #ifdef USING_PRINTF
  101. printf("[%d]TcpCallBacl",__LINE__);
  102. #endif
  103. }
  104. static void process1AppTask(void* arg)
  105. {
  106. int TcpConnectID = -1;
  107. int TcpSendID = 0;
  108. time_t timesec;
  109. OsaUtcTimeTValue timestracture;
  110. uint8_t TcpSendBuffer[92] = {0x23,0x23,0x02,0xFE,0x47,0x59,0x54,0x45,0x53,0x54,
  111. 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
  112. 0x31,0x01,0x00,0x43,0x14,0x0B,0x07,0x0E,0x39,0x37,
  113. 0x8C,0x14,0x0B,0x07,0x0E,0x39,0x37,0x1A,0x00,0x00,
  114. 0x00,0x00,0x00,0x02,0x15,0x02,0x15,0x03,0x43,0x64,
  115. 0x0E,0x00,0x00,0x00,0x00,0x0E,0x53,0x0E,0x53,0x0E,
  116. 0x53,0x0E,0x53,0x0E,0x53,0x0E,0x53,0x0E,0x53,0x0E,
  117. 0x53,0x0E,0x53,0x0E,0x53,0x0E,0x53,0x0E,0x53,0x0E,
  118. 0x53,0x0E,0x53,0x05,0x13,0x13,0x13,0x13,0x13,0x00,
  119. 0x00,0x2D};
  120. PROC1_STATE_SWITCH(PROCESS1_STATE_IDLE);
  121. CHAR serverip[] = "47.97.127.222";
  122. UINT16 serverport = 8712;
  123. while(1)
  124. {
  125. switch(gProc1State)
  126. {
  127. case PROCESS1_STATE_IDLE:
  128. {
  129. FaultDisplay(LED_TURN_OFF);
  130. break;
  131. }
  132. case PROCESS1_STATE_WORK:
  133. {
  134. while(TcpConnectID<=0)
  135. {
  136. TcpConnectID = tcpipConnectionCreate(1,PNULL,PNULL,serverip,serverport,TcpCallBack);
  137. }
  138. TcpSendID = tcpipConnectionSend(TcpConnectID,TcpSendBuffer,92,PNULL,PNULL,PNULL);
  139. appGetSystemTimeSecsSync(&timesec);
  140. appGetSystemTimeUtcSync(&timestracture);
  141. #ifdef USING_PRINTF
  142. printf("[%d]TcpConnectID:%d \r\n",__LINE__,TcpConnectID);
  143. #endif
  144. #ifdef USING_PRINTF
  145. printf("[%d]TcpSendID:%d \r\n",__LINE__,TcpSendID);
  146. #endif
  147. #ifdef USING_PRINTF
  148. printf("[%d]Time:%d \r\n",__LINE__,timesec);
  149. #endif
  150. #ifdef USING_PRINTF
  151. printf("[%d]Time1:%x TIme2:%x \r\n",__LINE__,timestracture.UTCtimer1,timestracture.UTCtimer2);
  152. #endif
  153. ECOMM_TRACE(UNILOG_PLA_APP, ec_autoReg102, P_SIG, 0, "ECOMM_Test");
  154. FaultDisplay(LED_TURN_ON);
  155. PROC1_STATE_SWITCH(PROCESS1_STATE_SLEEP);
  156. break;
  157. }
  158. case PROCESS1_STATE_SLEEP:
  159. {
  160. break;
  161. }
  162. }
  163. }
  164. }
  165. /**
  166. \fn process0Init(void)
  167. \brief process0Init function.
  168. \return
  169. */
  170. void process0Init(void)
  171. {
  172. osThreadAttr_t task_attr;
  173. #ifndef USING_PRINTF
  174. if(BSP_GetPlatConfigItemValue(PLAT_CONFIG_ITEM_LOG_CONTROL) != 0)
  175. {
  176. HAL_UART_RecvFlowControl(false);
  177. }
  178. #endif
  179. memset(&task_attr,0,sizeof(task_attr));
  180. memset(gProcessTaskStack0, 0xA5,PROC_TASK_STACK_SIZE);
  181. task_attr.name = "Process0AppTask";
  182. task_attr.stack_mem = gProcessTaskStack0;
  183. task_attr.stack_size = PROC_TASK_STACK_SIZE;
  184. task_attr.priority = osPriorityNormal;//osPriorityBelowNormal;
  185. task_attr.cb_mem = &gProcessTask0;//task control block
  186. task_attr.cb_size = sizeof(StaticTask_t);//size of task control block
  187. osThreadNew(process0AppTask, NULL, &task_attr);
  188. }
  189. /**
  190. \fn process1Init(void)
  191. \brief process1Init function.
  192. \return
  193. */
  194. void process1Init(void)
  195. {
  196. osThreadAttr_t task_attr;
  197. #ifndef USING_PRINTF
  198. if(BSP_GetPlatConfigItemValue(PLAT_CONFIG_ITEM_LOG_CONTROL) != 0)
  199. {
  200. HAL_UART_RecvFlowControl(false);
  201. }
  202. #endif
  203. memset(&task_attr,0,sizeof(task_attr));
  204. memset(gProcessTaskStack1, 0xA5,PROC_TASK_STACK_SIZE);
  205. task_attr.name = "Process1AppTask";
  206. task_attr.stack_mem = gProcessTaskStack1;
  207. task_attr.stack_size = PROC_TASK_STACK_SIZE;
  208. task_attr.priority = osPriorityNormal;//osPriorityBelowNormal;
  209. task_attr.cb_mem = &gProcessTask1;//task control block
  210. task_attr.cb_size = sizeof(StaticTask_t);//size of task control block
  211. osThreadNew(process1AppTask, NULL, &task_attr);
  212. }
  213. /**
  214. \fn process2Init(void)
  215. \brief process2Init function.
  216. \return
  217. */
  218. void process2Init(void)
  219. {
  220. osThreadAttr_t task_attr;
  221. memset(&task_attr,0,sizeof(task_attr));
  222. memset(gProcessTaskStack2, 0xA5,PROC_TASK_STACK_SIZE);
  223. task_attr.name = "Process2AppTask";
  224. task_attr.stack_mem = gProcessTaskStack2;
  225. task_attr.stack_size = PROC_TASK_STACK_SIZE;
  226. task_attr.priority = osPriorityNormal;//osPriorityBelowNormal;
  227. task_attr.cb_mem = &gProcessTask2;//task control block
  228. task_attr.cb_size = sizeof(StaticTask_t);//size of task control block
  229. osThreadNew(process2AppTask, NULL, &task_attr);
  230. }
  231. /**
  232. \fn appInit(void)
  233. \brief appInit function.
  234. \return
  235. */
  236. void appInit(void *arg)
  237. {
  238. process0Init();
  239. process1Init();
  240. process2Init();
  241. }
  242. /**
  243. \fn int main_entry(void)
  244. \brief main entry function.
  245. \return
  246. */
  247. void main_entry(void) {
  248. BSP_CommonInit();
  249. osKernelInitialize();
  250. registerAppEntry(appInit, NULL);
  251. if (osKernelGetState() == osKernelReady)
  252. {
  253. osKernelStart();
  254. }
  255. while(1);
  256. }