Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.12 KB | None | 0 0
  1. /**
  2. * \file ecuAppl_TCPHandler.c
  3. * \brief TCP Handler functions
  4. * \details Implements the functions for TCP Handler module
  5. * \author Cosmin Marcu
  6. * \date 18.11.2017
  7. * \version 1.0.1
  8. */
  9.  
  10. /* Includes */
  11. #include "ecuAppl_TCPHandler.h"
  12. #include "ecuAppl_Pot.h"
  13. #include "lwip/inet.h"
  14. #include "lwip/init.h"
  15. #include "lwip/netif.h"
  16. #include "lwip/ip.h"
  17. #include "lwip/api.h"
  18. #include "lwip/debug.h"
  19. #include "lwip/stats.h"
  20. #include "lwip/tcp.h"
  21. #include "lwip/udp.h"
  22.  
  23.  
  24. /**
  25. * \ingroup ecuAppl_TCP
  26. * \defgroup tcp_defines TCP Handler Defines
  27. * Preprocessor defines for TCP Handler module
  28. * @{
  29. */
  30. /* Defines */
  31. #define TCPHANDLER_FUNC_MEMALLOC(x) mem_malloc(x) //!< LWIP mem_alloc
  32. #define TCPHANDLER_FUNC_MEMFREE(x) mem_free(x) //!< LWIP mem_free
  33. #define TCPHANDLER_FUNC_TCP_SETPRIO(x,y) tcp_setprio(x,y) //!< LWIP tcp_setprio
  34. #define TCPHANDLER_FUNC_TCP_ARG(x,y) tcp_arg(x,y) //!< LWIP tcp_arg
  35. #define TCPHANDLER_FUNC_TCP_SENT(x,y) tcp_sent(x,y) //!< LWIP tcp_sent
  36. #define TCPHANDLER_FUNC_TCP_RECV(x,y) tcp_recv(x,y) //!< LWIP tcp_recv
  37. #define TCPHANDLER_FUNC_TCP_RECVED(x,y) tcp_recved(x,y) //!< LWIP tcp_recved
  38. #define TCPHANDLER_FUNC_TCP_ERR(x,y) tcp_err(x,y) //!< LWIP tcp_err
  39. #define TCPHANDLER_FUNC_TCP_POLL(x,y,z) tcp_poll(x,y,z) //!< LWIP tcp_poll
  40. #define TCPHANDLER_FUNC_TCP_CLOSE(x) tcp_close(x) //!< LWIP tcp_close
  41. #define TCPHANDLER_FUNC_TCP_NEW(x) tcp_new() //!< LWIP tcp_new
  42. #define TCPHANDLER_FUNC_TCP_BIND(x,y,z) tcp_bind(x,y,z) //!< LWIP tcp_bind
  43. #define TCPHANDLER_FUNC_TCP_LISTEN(x) tcp_listen(x) //!< LWIP tcp_listen
  44. #define TCPHANDLER_FUNC_TCP_ACCEPT(x,y) tcp_accept(x,y) //!< LWIP tcp_accept
  45. #define TCPHANDLER_FUNC_PBUF_REF(x) pbuf_ref(x) //!< LWIP pbuf_ref
  46. #define TCPHANDLER_FUNC_PBUF_FREE(x) pbuf_free(x) //!< LWIP pbuf_free
  47. #define TCPHANDLER_FUNC_PBUF_CHAIN(x,y) pbuf_chain(x,y) //!< LWIP pbuf_chain
  48.  
  49. /**@} end of group tcp_defines */
  50.  
  51. /**
  52. * \ingroup ecuAppl_TCP
  53. * \defgroup tcp_typedefs TCP Handler Types
  54. * Types definition for TCP Handler module
  55. * @{
  56. */
  57. #define T_S_TCPHANDLER_PCB struct tcp_pcb //!< TCP PCB structure
  58. #define T_S_TCPHANDLER_PBUF struct pbuf //!< TCP PBUF structure
  59. #define T_E_TCPHANDLER_ERROR err_t //!< TCP error
  60.  
  61. /**
  62. * @brief Defines TCP RX states
  63. */
  64. typedef enum E_TCPHANDLER_RX_STATE {
  65. E_TCPHANDLER_RX_STATE_NONE = 0, //!< Rx Idle state
  66. E_TCPHANDLER_RX_STATE_ACCEPTED, //!< Rx Accepted state
  67. E_TCPHANDLER_RX_STATE_RECEIVED, //!< Rx Receiving state
  68. E_TCPHANDLER_RX_STATE_CLOSING //!< Rx Closing state
  69. } T_E_TCPHANDLER_RX_STATE;
  70.  
  71. /**
  72. * @brief TCP RX structure
  73. */
  74. typedef struct {
  75. T_UBYTE ub_State; //!< Connection state
  76. T_UBYTE ub_Retries; //!< Number of retries
  77. T_S_TCPHANDLER_PCB *ps_PCB; //!< PCB pointer
  78. T_S_TCPHANDLER_PBUF *ps_PBUF; //!< PBUF pointer
  79. } T_S_TCPHANDLER_CONNECTION;
  80. /**@} end of group tcp_typedefs */
  81.  
  82. /**
  83. * \ingroup ecuAppl_TCP
  84. * \defgroup tcp_variables TCP Handler Variables
  85. * Global/shared TCP Handler module variables
  86. * @{
  87. */
  88. /* Private variables */
  89. PRIVATE_DATA T_S_TCPHANDLER_PCB *prs_PCB; //!< Global PCB structure
  90. /**@} end of group tcp_variables */
  91. double raub_buf[4];
  92. /**
  93. * \ingroup ecuAppl_TCP
  94. * \defgroup tcp_functions TCP Handler Functions
  95. * Functions definitions for TCP Handler module
  96. * @{
  97. */
  98. /* Private functions definition */
  99. PRIVATE_FCT T_E_TCPHANDLER_ERROR ecuAppl_TCPHandler_Accept(void *pv_arg, T_S_TCPHANDLER_PCB *lps_NewPCB, T_E_TCPHANDLER_ERROR le_Error);
  100. PRIVATE_FCT T_E_TCPHANDLER_ERROR ecuAppl_TCPHandler_Receive(void *pv_arg, T_S_TCPHANDLER_PCB *lps_PCB, T_S_TCPHANDLER_PBUF *lps_PBUF, T_E_TCPHANDLER_ERROR le_Error);
  101. PRIVATE_FCT void ecuAppl_TCPHandler_Error(void *pv_arg, T_E_TCPHANDLER_ERROR le_Error);
  102. PRIVATE_FCT T_E_TCPHANDLER_ERROR ecuAppl_TCPHandler_Sent(void *pv_arg, T_S_TCPHANDLER_PCB *lps_PCB, T_UWORD luw_Length);
  103. PRIVATE_FCT void ecuAppl_TCPHandler_Send(T_S_TCPHANDLER_PCB *lps_PCB, T_S_TCPHANDLER_CONNECTION *lps_Conn);
  104. PRIVATE_FCT void ecuAppl_TCPHandler_Close(T_S_TCPHANDLER_PCB *lps_PCB, T_S_TCPHANDLER_CONNECTION *lps_Conn);
  105.  
  106. static void udpecho_raw_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port);
  107. void udpecho_raw_server_init(u16_t port);
  108.  
  109. /**
  110. * \brief Callback for TCP accept connections
  111. * \param pv_arg Pointer to arguments
  112. * \param lps_NewPCB New PCB structure
  113. * \param le_Error TCP error
  114. * \return ERR_OK if memory allocated successfully
  115. * ERR_MEM otherwise
  116. */
  117. PRIVATE_FCT T_E_TCPHANDLER_ERROR ecuAppl_TCPHandler_Accept(void *pv_arg, T_S_TCPHANDLER_PCB *lps_NewPCB, T_E_TCPHANDLER_ERROR le_Error)
  118. {
  119. T_E_TCPHANDLER_ERROR le_Return;
  120. T_S_TCPHANDLER_CONNECTION *lps_Connection;
  121.  
  122. LWIP_UNUSED_ARG(pv_arg);
  123. LWIP_UNUSED_ARG(le_Error);
  124.  
  125. /* commonly observed practice to call tcp_setprio(), why? */
  126. TCPHANDLER_FUNC_TCP_SETPRIO(lps_NewPCB, TCP_PRIO_MIN);
  127.  
  128. lps_Connection = (T_S_TCPHANDLER_CONNECTION *)TCPHANDLER_FUNC_MEMALLOC(sizeof(T_S_TCPHANDLER_CONNECTION));
  129. if (lps_Connection != NULL)
  130. {
  131. lps_Connection->ub_State = E_TCPHANDLER_RX_STATE_ACCEPTED;
  132. lps_Connection->ps_PCB = lps_NewPCB;
  133. lps_Connection->ub_Retries = 0;
  134. lps_Connection->ps_PBUF = NULL;
  135. /* pass newly allocated lps_Connection to our callbacks */
  136. TCPHANDLER_FUNC_TCP_ARG(lps_NewPCB, lps_Connection);
  137. TCPHANDLER_FUNC_TCP_RECV(lps_NewPCB, ecuAppl_TCPHandler_Receive);
  138. TCPHANDLER_FUNC_TCP_ERR(lps_NewPCB, ecuAppl_TCPHandler_Error);
  139. // TCPHANDLER_FUNC_TCP_POLL(newpcb, echo_poll, 0);
  140. le_Return = ERR_OK;
  141. }
  142. else
  143. {
  144. le_Return = ERR_MEM;
  145. }
  146. return le_Return;
  147. }
  148.  
  149. /**
  150. * \brief Callback for TCP receive
  151. * \param pv_arg Pointer to arguments
  152. * \param lps_PCB PCB structure
  153. * \param lps_PBUF PBUF structure
  154. * \param le_Error TCP error
  155. * \return ERR_OK if packet received successfully
  156. * ERR_MEM otherwise
  157. */
  158. PRIVATE_FCT T_E_TCPHANDLER_ERROR ecuAppl_TCPHandler_Receive(void *pv_arg, T_S_TCPHANDLER_PCB *lps_PCB, T_S_TCPHANDLER_PBUF *lps_PBUF, T_E_TCPHANDLER_ERROR le_Error)
  159. {
  160. T_S_TCPHANDLER_CONNECTION *lps_Connection;
  161. T_E_TCPHANDLER_ERROR le_Return;
  162. T_S_TCPHANDLER_PBUF *lps_LocalPBUF;
  163. T_UBYTE laub_buf[9] = {'R', 'E', 'C', 'V',' ','o','k','\n','\r'};
  164.  
  165. lps_Connection = (T_S_TCPHANDLER_CONNECTION *)pv_arg;
  166. if (lps_PBUF == NULL)
  167. {
  168. /* remote host closed connection */
  169. lps_Connection->ub_State = E_TCPHANDLER_RX_STATE_CLOSING;
  170. if(lps_Connection->ps_PBUF == NULL)
  171. {
  172. /* we're done sending, close it */
  173. ecuAppl_TCPHandler_Close(lps_PCB, lps_Connection);
  174. }
  175. else
  176. {
  177. /* we're not done yet */
  178. //TODO: add send data
  179. TCPHANDLER_FUNC_TCP_SENT(lps_PCB, ecuAppl_TCPHandler_Sent);
  180. ecuAppl_TCPHandler_Send(lps_PCB, lps_Connection);
  181. }
  182. le_Return = ERR_OK;
  183. }
  184. else if(le_Error != ERR_OK)
  185. {
  186. /* cleanup, for unknown reason */
  187. if (lps_PBUF != NULL)
  188. {
  189. lps_Connection->ps_PBUF = NULL;
  190. TCPHANDLER_FUNC_PBUF_FREE(lps_PBUF);
  191. }
  192. le_Return = le_Error;
  193. }
  194. else if(lps_Connection->ub_State == E_TCPHANDLER_RX_STATE_ACCEPTED)
  195. {
  196. /* first data chunk in p->payload */
  197. lps_Connection->ub_State = E_TCPHANDLER_RX_STATE_RECEIVED;
  198. /* store reference to incoming pbuf (chain) */
  199. lps_Connection->ps_PBUF = lps_PBUF;
  200. lps_Connection->ps_PBUF->payload = laub_buf;
  201. lps_Connection->ps_PBUF->len = 9u;
  202. lps_Connection->ps_PBUF->tot_len = 9u;
  203. /* install send completion notifier */
  204. //TODO: add send data
  205. TCPHANDLER_FUNC_TCP_SENT(lps_PCB, ecuAppl_TCPHandler_Sent);
  206. ecuAppl_TCPHandler_Send(lps_PCB, lps_Connection);
  207. le_Return = ERR_OK;
  208. }
  209. else if (lps_Connection->ub_State == E_TCPHANDLER_RX_STATE_RECEIVED)
  210. {
  211. /* read some more data */
  212. if(lps_Connection->ps_PBUF == NULL)
  213. {
  214. lps_Connection->ps_PBUF = lps_PBUF;
  215. //TODO: add send data
  216. lps_Connection->ps_PBUF->payload = laub_buf;
  217. lps_Connection->ps_PBUF->len = 9u;
  218. lps_Connection->ps_PBUF->tot_len = 9u;
  219. TCPHANDLER_FUNC_TCP_SENT(lps_PCB, ecuAppl_TCPHandler_Sent);
  220. ecuAppl_TCPHandler_Send(lps_PCB, lps_Connection);
  221. }
  222. else
  223. {
  224. /* chain pbufs to the end of what we recv'ed previously */
  225. lps_LocalPBUF = lps_Connection->ps_PBUF;
  226. TCPHANDLER_FUNC_PBUF_CHAIN(lps_LocalPBUF,lps_PBUF);
  227. }
  228. le_Return = ERR_OK;
  229. }
  230. else if(lps_Connection->ub_State == E_TCPHANDLER_RX_STATE_CLOSING)
  231. {
  232. /* odd case, remote side closing twice */
  233. TCPHANDLER_FUNC_TCP_RECVED(lps_PCB, lps_PBUF->tot_len);
  234. lps_Connection->ps_PBUF = NULL;
  235. TCPHANDLER_FUNC_PBUF_FREE(lps_PBUF);
  236. le_Return = ERR_OK;
  237. }
  238. else
  239. {
  240. /* unknown lps_Connection->state */
  241. TCPHANDLER_FUNC_TCP_RECVED(lps_PCB, lps_PBUF->tot_len);
  242. lps_Connection->ps_PBUF = NULL;
  243. TCPHANDLER_FUNC_PBUF_FREE(lps_PBUF);
  244. le_Return = ERR_OK;
  245. }
  246. return le_Return;
  247. }
  248.  
  249. /**
  250. * \brief Callback for TCP error
  251. * \param pv_arg Pointer to arguments
  252. * \param le_Error TCP error
  253. * \return None
  254. */
  255. PRIVATE_FCT void ecuAppl_TCPHandler_Error(void *pv_arg, T_E_TCPHANDLER_ERROR le_Error)
  256. {
  257. T_S_TCPHANDLER_CONNECTION *lps_Connection;
  258.  
  259. LWIP_UNUSED_ARG(le_Error);
  260.  
  261. lps_Connection = (T_S_TCPHANDLER_CONNECTION *)pv_arg;
  262. if (lps_Connection != NULL)
  263. {
  264. /* Free connection memory */
  265. TCPHANDLER_FUNC_MEMFREE(lps_Connection);
  266. }
  267. }
  268.  
  269. /**
  270. * \brief Callback for TCP sent
  271. * \param pv_arg Pointer to arguments
  272. * \param lps_PCB PCB structure
  273. * \param luw_Length Packet length (unused)
  274. * \return ERR_OK if packet received successfully
  275. * ERR_MEM otherwise
  276. */
  277. PRIVATE_FCT T_E_TCPHANDLER_ERROR ecuAppl_TCPHandler_Sent(void *pv_arg, T_S_TCPHANDLER_PCB *lps_PCB, T_UWORD luw_Length)
  278. {
  279. T_S_TCPHANDLER_CONNECTION *lps_Connection;
  280.  
  281. LWIP_UNUSED_ARG(luw_Length);
  282.  
  283. lps_Connection = (T_S_TCPHANDLER_CONNECTION *)pv_arg;
  284. lps_Connection->ub_Retries = 0;
  285.  
  286. if(lps_Connection->ps_PBUF != NULL)
  287. {
  288. /* still got pbufs to send */
  289. TCPHANDLER_FUNC_TCP_SENT(lps_PCB, ecuAppl_TCPHandler_Sent);
  290. ecuAppl_TCPHandler_Send(lps_PCB, lps_Connection);
  291. }
  292. else
  293. {
  294. /* no more pbufs to send */
  295. if(lps_Connection->ub_State == E_TCPHANDLER_RX_STATE_CLOSING)
  296. {
  297. ecuAppl_TCPHandler_Close(lps_PCB, lps_Connection);
  298. }
  299. }
  300. return ERR_OK;
  301. }
  302.  
  303. /**
  304. * \brief Callback for TCP sent
  305. * \param lps_PCB PCB strucure
  306. * \param lps_Conn Connection handler
  307. * \return None
  308. */
  309. PRIVATE_FCT void ecuAppl_TCPHandler_Send(T_S_TCPHANDLER_PCB *lps_PCB, T_S_TCPHANDLER_CONNECTION *lps_Conn)
  310. {
  311. T_S_TCPHANDLER_PBUF *lps_PBUF;
  312. T_E_TCPHANDLER_ERROR le_WriteError = ERR_OK;
  313. T_UWORD luw_Len = 0u;
  314. T_UBYTE lub_isFree = FALSE;
  315.  
  316. while ((le_WriteError == ERR_OK) && (lps_Conn->ps_PBUF != NULL) && (lps_Conn->ps_PBUF->len <= tcp_sndbuf(lps_PCB)))
  317. {
  318. lps_PBUF = lps_Conn->ps_PBUF;
  319. /* enqueue data for transmission */
  320. le_WriteError = tcp_write(lps_PCB, lps_PBUF->payload, lps_PBUF->len, 1);
  321. if (le_WriteError == ERR_OK)
  322. {
  323. luw_Len = lps_PBUF->len;
  324. /* continue with next pbuf in chain (if any) */
  325. lps_Conn->ps_PBUF = lps_PBUF->next;
  326. if(lps_Conn->ps_PBUF != NULL)
  327. {
  328. /* new reference! */
  329. TCPHANDLER_FUNC_PBUF_REF(lps_Conn->ps_PBUF);
  330. }
  331. /* chop first pbuf from chain */
  332. do
  333. {
  334. /* try hard to free pbuf */
  335. lub_isFree = TCPHANDLER_FUNC_PBUF_FREE(lps_PBUF);
  336. }
  337. while(lub_isFree == FALSE);
  338. /* we can read more data now */
  339. TCPHANDLER_FUNC_TCP_RECVED(lps_PCB, luw_Len);
  340. }
  341. else if(le_WriteError == ERR_MEM)
  342. {
  343. /* we are low on memory, try later / harder, defer to poll */
  344. lps_Conn->ps_PBUF = lps_PBUF;
  345. }
  346. else
  347. {
  348. /* other problem ?? */
  349. }
  350. }
  351. }
  352.  
  353. /**
  354. * \brief Callback for TCP sent
  355. * \param lps_PCB PCB strucure
  356. * \param lps_Conn Connection handler
  357. * \return None
  358. */
  359. PRIVATE_FCT void ecuAppl_TCPHandler_Close(T_S_TCPHANDLER_PCB *lps_PCB, T_S_TCPHANDLER_CONNECTION *lps_Conn)
  360. {
  361. TCPHANDLER_FUNC_TCP_ARG(lps_PCB, NULL);
  362. TCPHANDLER_FUNC_TCP_SENT(lps_PCB, NULL);
  363. TCPHANDLER_FUNC_TCP_RECV(lps_PCB, NULL);
  364. TCPHANDLER_FUNC_TCP_ERR(lps_PCB, NULL);
  365. TCPHANDLER_FUNC_TCP_POLL(lps_PCB, NULL, 0);
  366.  
  367. if (lps_Conn != NULL)
  368. {
  369. /* Free connection memory */
  370. TCPHANDLER_FUNC_MEMFREE(lps_Conn);
  371. }
  372. TCPHANDLER_FUNC_TCP_CLOSE(lps_PCB);
  373. }
  374.  
  375. union u_t {
  376. T_UBYTE buffer[8];
  377. double d;
  378. };
  379.  
  380. static T_UBYTE global_state = 0;
  381.  
  382. void rcpot_SetState (T_UBYTE state)
  383. {
  384. global_state = state;
  385. }
  386.  
  387.  
  388.  
  389. static void udpecho_raw_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port)
  390. {
  391. struct pbuf pl;
  392. double tau1;
  393. double tau2;
  394. double luw_PotValue;
  395. static double setpoint1 = 0;
  396. static double setpoint2 = 0;
  397.  
  398. static float err_arr1[2] = {0, 0};
  399. static float err_sum1 = 0;
  400. static float err_arr2[2] = {0, 0};
  401. static float err_sum2 = 0;
  402.  
  403.  
  404.  
  405.  
  406. setpoint1 = (double)(ecuAppl_Pot_GetPotValue());
  407. // Scale
  408. setpoint1 = setpoint1/(3300) * 2*3.14;
  409. setpoint1 = setpoint1 - 3.14;
  410.  
  411.  
  412. setpoint2 = (double)(ecuAppl_Pot_GetPotValue());
  413.  
  414. setpoint2 = setpoint2/(3300) * 2*3.14;
  415. setpoint2 = setpoint2 - 3.14;
  416.  
  417.  
  418.  
  419. // setpoint = setpoint/(3300);
  420. // setpoint = setpoint - 1;
  421.  
  422. // Clamp
  423. float min_clamp = -3.14;
  424. float max_clamp = 3.14;
  425. // setpoint = min(max(setpoint, min_clamp), max_clamp);
  426.  
  427.  
  428. LWIP_UNUSED_ARG(arg);
  429. if(p == NULL)
  430. return;
  431.  
  432. union u_t q1;
  433. union u_t q2;
  434. union u_t time;
  435.  
  436. T_UBYTE *bigBuffer;
  437. bigBuffer = p->payload;
  438.  
  439. memcpy(q1.buffer,&bigBuffer[0],8);
  440. memcpy(q2.buffer,&bigBuffer[8],8);
  441. memcpy(time.buffer,&bigBuffer[16],8);
  442.  
  443. err_arr1[1] = err_arr1[0];
  444. err_arr2[1] = err_arr2[0];
  445.  
  446. err_arr1[0] = setpoint1 - q1.d;
  447. err_arr2[0] = setpoint2 - q2.d;
  448.  
  449. err_sum1 += err_arr1[0];
  450. err_sum2 += err_arr2[0];
  451.  
  452.  
  453. float dt = 0.01;
  454. // tau1
  455. float kp1 = 3.7805;
  456. float kd1 = 0.6301;
  457. // float ki1 = 1;
  458.  
  459. tau1 = kp1 * err_arr1[0] + kd1 * (err_arr1[0] - err_arr1[1]) / dt;
  460. // tau1 += + ki1*dt*err_sum1;
  461.  
  462. // tau2
  463. float kp2 = 3.7805;
  464. float kd2 = 0.6301;
  465. //float ki2 = 1;
  466.  
  467. tau2 = kp2 * err_arr2[0] + kd2 * (err_arr2[0] - err_arr2[1]) / dt;
  468. // tau2 += + ki2*dt*err_sum2;
  469.  
  470. raub_buf[0] = tau1;
  471. raub_buf[1] = tau2;
  472. raub_buf[2] = setpoint1;
  473. raub_buf[3] = setpoint2;
  474.  
  475. pl.flags = p->flags;
  476. pl.len = 32;
  477. pl.next = NULL;
  478. pl.payload = &raub_buf[0];
  479. pl.ref = p->ref;
  480. pl.tot_len = 32u;
  481. pl.len = 32u;
  482. // p->payload = raub_buf;
  483. // p->len = 8u;
  484. // p->tot_len = 8u;
  485. // T_UBYTE *lub_byte = p->payload;
  486. // T_UBYTE lub_size = p->len;
  487. udp_sendto(pcb, &pl, addr, 4000);
  488. pbuf_free(p);
  489. }
  490.  
  491. /*-----------------------------------------------------------------------------------*/
  492. void udpecho_raw_server_init(u16_t port)
  493. {
  494. struct udp_pcb *pcb;
  495.  
  496. pcb = udp_new();
  497. udp_bind(pcb, IP_ADDR_ANY, port);
  498.  
  499. /* no need to loop forever */
  500. udp_recv(pcb , udpecho_raw_recv, pcb);
  501. }
  502.  
  503. /**
  504. * \brief Initializes TCP Handler module
  505. * \return none
  506. */
  507. void ecuAppl_TCPHandler_Init(T_UWORD luw_Port)
  508. {
  509. T_E_TCPHANDLER_ERROR le_Error;
  510.  
  511. udpecho_raw_server_init(4000);
  512. prs_PCB = TCPHANDLER_FUNC_TCP_NEW();
  513. if (prs_PCB != NULL)
  514. {
  515.  
  516.  
  517. le_Error = TCPHANDLER_FUNC_TCP_BIND(prs_PCB, IP_ADDR_ANY, luw_Port);
  518. if (le_Error == ERR_OK)
  519. {
  520. prs_PCB = TCPHANDLER_FUNC_TCP_LISTEN(prs_PCB);
  521. TCPHANDLER_FUNC_TCP_ACCEPT(prs_PCB, ecuAppl_TCPHandler_Accept);
  522. }
  523. else
  524. {
  525. /* abort? output diagnostic? */
  526. }
  527. }
  528. else
  529. {
  530. /* abort? output diagnostic? */
  531. }
  532. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement