123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #include "net.h"
- #include "iec104.h"
- #include "iec10x.h"
- static err_t bms_test_process(int fd, void *data, int len)
- {
- INT8U response[2] = {0xBB, 0xAA};
- if ((len == 2) && (((INT8U *)data)[0] == 0xAA) && (((INT8U *)data)[1] == 0xBB))
- {
- send(fd, (void *)response, sizeof(response), 0);
- }
- return 1;
- }
- static err_t bms_net_process(int fd)
- {
- Iec10x_Scheduled(fd);
- Iec104_StateMachine();
- return 1;
- }
- void net_task(void)
- {
- INT8U buf[500];
- INT32S ret = 0;
- INT32S sockfd = -1, newfd = -1;
- INT32U len = 0;
- struct sockaddr_in svr_addr, clt_addr;
- INT16U Iec104_RecvLen;
- svr_addr.sin_family = AF_INET;
- svr_addr.sin_port = htons(TCP_PORT);
- svr_addr.sin_addr.s_addr = htons(INADDR_ANY);
- while (1)
- {
- sockfd = socket(AF_INET, SOCK_STREAM, 0);
- if (sockfd < 0)
- {
- continue;
- }
- ret = bind(sockfd, (struct sockaddr *)&svr_addr, sizeof(svr_addr));
- if (ret < 0)
- {
- lwip_close(sockfd);
- sockfd = -1;
- continue;
- }
- ret = listen(sockfd, 1);
- if (ret < 0)
- {
- lwip_close(sockfd);
- continue;
- }
- len = sizeof(clt_addr);
- newfd = accept(sockfd, NULL, NULL);
- while (-1 != newfd)
- {
- ret = recv(newfd, buf, sizeof(buf) - 1, 0);
- if (ret <= 0)
- {
- printf("the other side has been closed (%d).\n", sizeof(buf) - 1);
- lwip_close(newfd);
- newfd = -1;
- break;
- }
- bms_net_process(newfd);
- LOG("#####################received \n");
- DumpHEX(buf, read(newfd, buf, 1500));
- Iex104_Receive(buf, read(newfd, buf, 1500));
- }
- lwip_close(sockfd);
- sockfd = -1;
- // OSTimeDly(10);
- }
- }
|