| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380 |
- #include "FreeRTOS.h"
- #include "board.h"
- #include "chip.h"
- #include "test_demo.h"
- #ifdef WIFI_SUPPORT
- #if WIFI_TEST
- //#define RELTECK_WIFI_AP_MODE
- #include "FreeRTOS_Sockets.h"
- #include "FreeRTOS_IP.h"
- #include "FreeRTOS_DHCP.h"
- #include "carlink_ey.h"
- #include "carlink_video.h"
- #include "iperf_task.h"
- #include "iot_wifi.h"
- #include "FreeRTOS_DHCP_Server.h"
- struct test_header
- {
- uint16_t id;
- uint16_t payload_len;
- };
- #ifdef RELTECK_WIFI_AP_MODE
- static const uint8_t ucIPAddress[4] = {192, 168, 13, 1};
- #else
- static const uint8_t ucIPAddress[4] = {192, 168, 13, 37};
- #endif
- static const uint8_t ucNetMask[4] = {255, 255, 255, 0};
- //static const uint8_t ucGatewayAddress[4] = {192, 168, 13, 1};
- static const uint8_t ucGatewayAddress[4] = {192, 168, 13, 1};
- static const uint8_t ucDNSServerAddress[4] = {8, 8, 8, 8};
- //static const uint8_t ucMACAddress[6] = {0x00, 0x0c, 0x29, 0x5d, 0x2e, 0x03};
- //static const uint8_t ucMACAddress[6] = {0x68, 0xb9, 0xd3, 0xc1, 0x28, 0x03};
- static const uint8_t ucMACAddress[6] = {0x30, 0x4a, 0x26, 0x78, 0xfd, 0x12};
- uint8_t wifi_data_buffer[65536] = {0};
- extern void ark_test_h264_dec();
- extern int wifi_sta_test_proc();
- extern int wifi_ap_test_proc();
- #if 0
- static int vCreateTCPServerSocket( void )
- {
- SocketSet_t xFD_Set;
- struct freertos_sockaddr xAddress, xRemoteAddr;
- Socket_t xSockets = FREERTOS_INVALID_SOCKET, xClientSocket = FREERTOS_INVALID_SOCKET;
- socklen_t xClientLength = sizeof( xAddress );
- static const TickType_t xNoTimeOut = portMAX_DELAY;
- BaseType_t ret = -1;
- BaseType_t xResult;
- struct test_header header;
- uint8_t header_buf[4];
- uint8_t* header_buf_ptr;
- const int header_len = sizeof(struct test_header);
- int header_buf_len = 0;
- uint8_t *h264SrcBuf = NULL;
- uint8_t *h264SrcBufPtr = NULL;
- int32_t h264SrcSize = 0, h264SrcSizePos = 0;
- uint8_t err_flag = 0;int i;
- video_frame_s* frame = NULL;
- xFD_Set = FreeRTOS_CreateSocketSet();
- xSockets = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_STREAM, FREERTOS_IPPROTO_TCP );
- configASSERT( xSockets != FREERTOS_INVALID_SOCKET );
- FreeRTOS_setsockopt( xSockets,
- 0,
- FREERTOS_SO_RCVTIMEO,
- &xNoTimeOut,
- sizeof( xNoTimeOut ) );
- xAddress.sin_port = ( uint16_t ) 11111;
- xAddress.sin_port = FreeRTOS_htons( xAddress.sin_port );
- FreeRTOS_bind( xSockets, &xAddress, sizeof( xAddress ) );
- FreeRTOS_listen( xSockets, 1 );
- //ark_test_h264_dec();
- carlink_ey_video_init();
- while (1) {
- FreeRTOS_FD_CLR(xSockets, xFD_Set, eSELECT_READ);
- FreeRTOS_FD_SET(xSockets, xFD_Set, eSELECT_READ);
- if (xClientSocket && xClientSocket != FREERTOS_INVALID_SOCKET) {
- FreeRTOS_FD_CLR(xClientSocket, xFD_Set, eSELECT_READ);
- FreeRTOS_FD_SET( xClientSocket, xFD_Set, eSELECT_READ );
- }
- xResult = FreeRTOS_select( xFD_Set, portMAX_DELAY );
- if (xResult < 0) {
- break;
- }
- if( FreeRTOS_FD_ISSET ( xSockets, xFD_Set ) ) {
- xClientSocket = FreeRTOS_accept( xSockets, &xRemoteAddr, &xClientLength);
- if( ( xClientSocket != NULL ) && ( xClientSocket != FREERTOS_INVALID_SOCKET ) ) {
- uint8_t pucBuffer[32] = {0};
- FreeRTOS_FD_CLR(xClientSocket, xFD_Set, eSELECT_READ);
- FreeRTOS_FD_SET(xClientSocket, xFD_Set, eSELECT_READ);
- FreeRTOS_GetRemoteAddress( xClientSocket, ( struct freertos_sockaddr * ) &xRemoteAddr );
- FreeRTOS_inet_ntoa(xRemoteAddr.sin_addr, pucBuffer );
- printf("Carlink: Received a connection from %s:%u\n", pucBuffer, FreeRTOS_ntohs(xRemoteAddr.sin_port));
- }
- continue;
- } else if( FreeRTOS_FD_ISSET ( xClientSocket, xFD_Set ) ) {
- header_buf_ptr = header_buf;
- header_buf_len = header_len;
- err_flag = 0;
- while (header_buf_len > 0) {
- err_flag = 0;
- ret = FreeRTOS_recv(xClientSocket, (void*)header_buf_ptr, header_buf_len, 0);
- if (ret < 0) {
- err_flag = 1;
- printf("FreeRTOS_recv header err:%d\r\n", ret);
- break;
- }
- header_buf_ptr += ret;
- header_buf_len -= ret;
- }
- if (err_flag) {
- FreeRTOS_FD_CLR(xClientSocket, xFD_Set, eSELECT_READ);
- FreeRTOS_closesocket(xClientSocket);
- xClientSocket = FREERTOS_INVALID_SOCKET;
- video_frame_s* dummy = NULL;
- notify_h264_frame_ready(&dummy);
- continue;
- }
- /*printf("##header:");
- for (i = 0; i < header_len; i++) {
- printf("%02x ", header_buf[i]);
- }printf("\r\n");*/
- //READ_LE16(header_buf, header.id);
- //READ_LE16(header_buf + 2, header.payload_len);
- header.id = (header_buf[0] | (header_buf[1] << 8));
- header.payload_len = (header_buf[2] | (header_buf[3] << 8));
- printf("recv id:%d len:%d\r\n", header.id, header.payload_len);
- int retry_cnt = 0;
- h264SrcSize = header.payload_len;
- get_retry:
- frame = get_h264_frame_buf();
- if (NULL == frame) {
- printf("h264 frame is empty\r\n");
- vTaskDelay(pdMS_TO_TICKS(10));
- goto get_retry;
- //continue;
- }
- h264SrcSizePos = h264SrcSize;
- h264SrcBufPtr = frame->cur;
- h264SrcBuf = frame->cur;
- frame->len = h264SrcSize;
- err_flag = 0;
- while (h264SrcSizePos > 0) {
- //printf("h264SrcSizePos:%d\r\n", h264SrcSizePos);
- ret = FreeRTOS_recv( xClientSocket, (void *)h264SrcBufPtr, h264SrcSizePos, 0);
- //printf("lBytes:%d h264SrcSizePos:%d\r\n", lBytes, h264SrcSizePos);
- if (ret < 0) {
- printf("FreeRTOS_recv err:%d\r\n", ret);
- err_flag = 1;
- break;
- }
- h264SrcBufPtr += ret;
- h264SrcSizePos -= ret;
- }/*printf("read finished\r\n");
- printf("payload:");
- for (i = 0; i < 16; i++) {
- printf("%02x ", h264SrcBuf[i]);
- }printf("\r\n");*/
- if (err_flag) {
- FreeRTOS_FD_CLR(xClientSocket, xFD_Set, eSELECT_READ);
- FreeRTOS_closesocket(xClientSocket);
- xClientSocket = FREERTOS_INVALID_SOCKET;
- video_frame_s* dummy = NULL;
- notify_h264_frame_ready(&dummy);
- continue;
- }
- notify_h264_frame_ready(&frame);
- }
- }
- FreeRTOS_closesocket(xClientSocket);
- FreeRTOS_closesocket(xSockets);
- }
- #else
- static int vCreateTCPServerSocket( void )
- {
- SocketSet_t xFD_Set;
- struct freertos_sockaddr xAddress, xRemoteAddr;
- Socket_t xSockets = FREERTOS_INVALID_SOCKET, xClientSocket = FREERTOS_INVALID_SOCKET;
- socklen_t xClientLength = sizeof( xAddress );
- static const TickType_t xNoTimeOut = portMAX_DELAY;
- BaseType_t ret = -1;
- BaseType_t xResult;
- xFD_Set = FreeRTOS_CreateSocketSet();
- xSockets = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_STREAM, FREERTOS_IPPROTO_TCP );
- configASSERT( xSockets != FREERTOS_INVALID_SOCKET );
- FreeRTOS_setsockopt( xSockets,
- 0,
- FREERTOS_SO_RCVTIMEO,
- &xNoTimeOut,
- sizeof( xNoTimeOut ) );
- xAddress.sin_port = ( uint16_t ) 11111;
- xAddress.sin_port = FreeRTOS_htons( xAddress.sin_port );
- FreeRTOS_bind( xSockets, &xAddress, sizeof( xAddress ) );
- FreeRTOS_listen( xSockets, 1 );
- //ark_test_h264_dec();
- carlink_ey_video_init();
- while (1) {
- FreeRTOS_FD_CLR(xSockets, xFD_Set, eSELECT_READ);
- FreeRTOS_FD_SET(xSockets, xFD_Set, eSELECT_READ);
- if (xClientSocket && xClientSocket != FREERTOS_INVALID_SOCKET) {
- FreeRTOS_FD_CLR(xClientSocket, xFD_Set, eSELECT_READ);
- FreeRTOS_FD_SET( xClientSocket, xFD_Set, eSELECT_READ );
- }
- xResult = FreeRTOS_select( xFD_Set, portMAX_DELAY );
- if (xResult < 0) {
- break;
- }
- if( FreeRTOS_FD_ISSET ( xSockets, xFD_Set ) ) {
- xClientSocket = FreeRTOS_accept( xSockets, &xRemoteAddr, &xClientLength);
- if( ( xClientSocket != NULL ) && ( xClientSocket != FREERTOS_INVALID_SOCKET ) ) {
- char pucBuffer[32] = {0};
- FreeRTOS_FD_CLR(xClientSocket, xFD_Set, eSELECT_READ);
- FreeRTOS_FD_SET(xClientSocket, xFD_Set, eSELECT_READ);
- FreeRTOS_GetRemoteAddress( xClientSocket, ( struct freertos_sockaddr * ) &xRemoteAddr );
- FreeRTOS_inet_ntoa(xRemoteAddr.sin_addr, pucBuffer );
- printf("Carlink: Received a connection from %s:%u\n", pucBuffer, FreeRTOS_ntohs(xRemoteAddr.sin_port));
- }
- continue;
- } else if( FreeRTOS_FD_ISSET ( xClientSocket, xFD_Set ) ) {
- ret = FreeRTOS_recv(xClientSocket, wifi_data_buffer, sizeof wifi_data_buffer, 0);
- if (ret > 0) {
- printf("recv buf size:%d\r\n", ret);
- } else {
- printf("FreeRTOS_recv err:%d\r\n", ret);
- FreeRTOS_FD_CLR(xClientSocket, xFD_Set, eSELECT_READ);
- FreeRTOS_closesocket(xClientSocket);
- xClientSocket = FREERTOS_INVALID_SOCKET;
- continue;
- }
- }
- }
- FreeRTOS_closesocket(xClientSocket);
- FreeRTOS_closesocket(xSockets);
- return 0;
- }
- #endif
- #if ( ipconfigUSE_DHCP_HOOK != 0 )
- eDHCPCallbackAnswer_t xApplicationDHCPHook2( eDHCPCallbackPhase_t eDHCPPhase,
- uint32_t ulIPAddress )
- {
- eDHCPCallbackAnswer_t eReturn;
- //uint32_t ulStaticIPAddress, ulStaticNetMask;
- char ip_str[20] = {0};
- sprintf(ip_str, "%d.%d.%d.%d\r\n", (ulIPAddress >> 0) & 0xFF,
- (ulIPAddress >> 8) & 0xFF, (ulIPAddress >> 16) & 0xFF, (ulIPAddress >> 24) & 0xFF);
- printf("\r\n eDHCPPhase:%d ulIPAddress:%s state:%d \r\n", eDHCPPhase, ip_str, getDhcpClientState());
- if (getDhcpClientState() == 0)
- return eDHCPStopNoChanges;
- switch( eDHCPPhase )
- {
- case eDHCPPhasePreDiscover :
- eReturn = eDHCPContinue;
- break;
- case eDHCPPhasePreRequest :
- #if 0
- ulStaticIPAddress = FreeRTOS_inet_addr_quick( ucIPAddress[0],
- ucIPAddress[1],
- ucIPAddress[2],
- ucIPAddress[3] );
- ulStaticNetMask = FreeRTOS_inet_addr_quick( ucNetMask[0],
- ucNetMask[1],
- ucNetMask[2],
- ucNetMask[3] );
- ulStaticIPAddress &= ulStaticNetMask;
- ulIPAddress &= ulStaticNetMask;
- if( ulStaticIPAddress == ulIPAddress ) {
- eReturn = eDHCPUseDefaults;
- } else {
- eReturn = eDHCPContinue;
- }
- #else
- eReturn = eDHCPContinue;
- #endif
- break;
- default :
- eReturn = eDHCPContinue;
- break;
- }
- return eReturn;
- }
- #endif
- void wifi_test_event_handler( WIFIEvent_t * xEvent )
- {
- WIFIEventType_t xEventType = xEvent->xEventType;
- if (0) {
- } else if (eWiFiEventConnected == xEventType) {// meter is sta
- printf("\r\n The meter is connected to ap \r\n");
- } else if (eWiFiEventDisconnected == xEventType) {// meter is sta
- printf("\r\n The meter is disconnected from ap \r\n");
- } else if (eWiFiEventAPStationConnected == xEventType) {// meter is ap
- printf("\r\n The meter in AP is connected by a sta \r\n");
- } else if (eWiFiEventAPStationDisconnected == xEventType) {// meter is ap
- printf("\r\n The sta is disconnected from the meter \r\n");
- }
- }
- void wifi_demo_test(void)
- {
- BaseType_t ret = 0;
- unsigned int status;
- uint32_t IPAddress = (32 << 24) | (13 << 16) | (168 << 8) | (192 << 0);
- for (;;) {
- if (mmcsd_wait_sdio_ready(portMAX_DELAY)) {
- printf("detect sdio device\r\n");
- break;
- }
- }
- #ifndef RELTECK_WIFI_AP_MODE
- setDhcpClientState(1);
- #endif
- ret = ret;
- //vTaskDelay(pdMS_TO_TICKS(5000));//wait connect
- ret = FreeRTOS_IPInit(ucIPAddress, ucNetMask, ucGatewayAddress,ucDNSServerAddress, ucMACAddress);
- //ark_wlan_init();
- #ifdef RELTECK_WIFI_AP_MODE
- wifi_ap_test_proc();
- #else
- WIFI_RegisterEvent(eWiFiEventMax, wifi_test_event_handler);
- wifi_sta_test_proc();
- #endif
- //vTaskDelay(pdMS_TO_TICKS(8000));
- while(0) {
- //printf("send ping\r\n");
- FreeRTOS_SendPingRequest(IPAddress, 8, 1000);
- vTaskDelay(pdMS_TO_TICKS(1000));
- }
- vTaskDelay(pdMS_TO_TICKS(1000));
- #ifdef RELTECK_WIFI_AP_MODE
- setDhcpClientState(0);
- IPAddress = (20 << 24) | (13 << 16) | (168 << 8) | (192 << 0);
- dhcpserver_start(ucIPAddress, IPAddress, 10);
- #else
- setDhcpClientState(1);
- #endif
- //vCreateTCPServerSocket();
- vIPerfInstall();
- }
- #endif
- #endif
|