CC3200-UDP-Client
来源:互联网 发布:linux系统克隆教程 编辑:程序博客网 时间:2024/06/14 17:19
下面的代码是udp_socket工程的main()函数,运行前须知道UDP通信的机制。该程序是客户端的程序,运行前需要开启服务器和端口。
在CC3200SDK-1.2.0上测试可用,下面是主函数文件的代码:
//*****************************************************************************//已实现UDP发送,接受 发送包、大小可自定义//*****************************************************************************#include <stdlib.h>#include <string.h>#include "simplelink.h"#include "wlan.h"#include "hw_ints.h"#include "hw_types.h"#include "hw_memmap.h"#include "rom.h"#include "rom_map.h"#include "interrupt.h"#include "prcm.h"#include "utils.h"#include "uart.h"#include "udma_if.h"#include "common.h" /*此程序运行的是站点模式,需在此头文件中设置要连接AP(热点)的名称和密码以及加密方式*/#ifndef NOTERM#include "uart_if.h"#endif#include "pinmux.h"#define APPLICATION_NAME "UDP Socket"#define APPLICATION_VERSION "1.1.1"#define IP_ADDR 0x771dc9c2 /* 119.29.104.72 设置服务器地址,需为其二进制形式 */#define PORT_NUM 8911 //设置服务器端口号#define BUF_SIZE 5 //发送缓冲区#define BUF_SIZE_1 9 //接受缓冲区#define UDP_PACKET_COUNT 1#define TIMES 3#define UDP_SEND 1 //允许发送宏#define UDP_RECV 1 //允许接受宏typedef enum{ SOCKET_CREATE_ERROR = -0x7D0, BIND_ERROR = SOCKET_CREATE_ERROR - 1, SEND_ERROR = BIND_ERROR - 1, RECV_ERROR = SEND_ERROR -1, SOCKET_CLOSE = RECV_ERROR -1, DEVICE_NOT_IN_STATION_MODE = SOCKET_CLOSE - 1, STATUS_CODE_MAX = -0xBB8}e_AppStatusCodes;int BsdUdpClient(unsigned short usPort);static long WlanConnect();static void DisplayBanner();static void BoardInit();static void InitializeAppVariables();static long ConfigureSimpleLinkToDefaultState();volatile unsigned long g_ulStatus = 0;//SimpleLink Statusunsigned long g_ulGatewayIP = 0; //Network Gateway IP addressunsigned char g_ucConnectionSSID[SSID_LEN_MAX+1]; //Connection SSIDunsigned char g_ucConnectionBSSID[BSSID_LEN_MAX]; //Connection BSSIDunsigned long g_ulDestinationIp = IP_ADDR; // Client IP addressunsigned int g_uiPortNum = PORT_NUM;volatile unsigned long g_ulPacketCount = UDP_PACKET_COUNT;unsigned char g_ucSimplelinkstarted = 0;unsigned long g_ulIpAddr = 0;char g_cBsdBuf[BUF_SIZE];char g_cBsdBuf_2[BUF_SIZE_1];#if defined(ccs) || defined(gcc)extern void (* const g_pfnVectors[])(void);#endif#if defined(ewarm)extern uVectorEntry __vector_table;#endifvoid SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent){ if(!pWlanEvent) { return; } switch(pWlanEvent->Event) { case SL_WLAN_CONNECT_EVENT: { SET_STATUS_BIT(g_ulStatus, STATUS_BIT_CONNECTION); memcpy(g_ucConnectionSSID,pWlanEvent->EventData. STAandP2PModeWlanConnected.ssid_name, pWlanEvent->EventData.STAandP2PModeWlanConnected.ssid_len); memcpy(g_ucConnectionBSSID, pWlanEvent->EventData.STAandP2PModeWlanConnected.bssid, SL_BSSID_LENGTH); UART_PRINT("[WLAN EVENT] STA Connected to the AP: %s , " "BSSID: %x:%x:%x:%x:%x:%x\n\r", g_ucConnectionSSID,g_ucConnectionBSSID[0], g_ucConnectionBSSID[1],g_ucConnectionBSSID[2], g_ucConnectionBSSID[3],g_ucConnectionBSSID[4], g_ucConnectionBSSID[5]); } break; case SL_WLAN_DISCONNECT_EVENT: { slWlanConnectAsyncResponse_t* pEventData = NULL; CLR_STATUS_BIT(g_ulStatus, STATUS_BIT_CONNECTION); CLR_STATUS_BIT(g_ulStatus, STATUS_BIT_IP_AQUIRED); pEventData = &pWlanEvent->EventData.STAandP2PModeDisconnected; if(SL_WLAN_DISCONNECT_USER_INITIATED_DISCONNECTION == pEventData->reason_code) { UART_PRINT("[WLAN EVENT]Device disconnected from the AP: %s," "BSSID: %x:%x:%x:%x:%x:%x on application's request \n\r", g_ucConnectionSSID,g_ucConnectionBSSID[0], g_ucConnectionBSSID[1],g_ucConnectionBSSID[2], g_ucConnectionBSSID[3],g_ucConnectionBSSID[4], g_ucConnectionBSSID[5]); } else { UART_PRINT("[WLAN ERROR]Device disconnected from the AP AP: %s," "BSSID: %x:%x:%x:%x:%x:%x on an ERROR..!! \n\r", g_ucConnectionSSID,g_ucConnectionBSSID[0], g_ucConnectionBSSID[1],g_ucConnectionBSSID[2], g_ucConnectionBSSID[3],g_ucConnectionBSSID[4], g_ucConnectionBSSID[5]); } memset(g_ucConnectionSSID,0,sizeof(g_ucConnectionSSID)); memset(g_ucConnectionBSSID,0,sizeof(g_ucConnectionBSSID)); } break; default: { UART_PRINT("[WLAN EVENT] Unexpected event [0x%x]\n\r", pWlanEvent->Event); } break; }}void SimpleLinkNetAppEventHandler(SlNetAppEvent_t *pNetAppEvent){ if(!pNetAppEvent) { return; } switch(pNetAppEvent->Event) { case SL_NETAPP_IPV4_IPACQUIRED_EVENT: { SlIpV4AcquiredAsync_t *pEventData = NULL; SET_STATUS_BIT(g_ulStatus, STATUS_BIT_IP_AQUIRED); pEventData = &pNetAppEvent->EventData.ipAcquiredV4; g_ulIpAddr = pEventData->ip; g_ulGatewayIP = pEventData->gateway; UART_PRINT("[NETAPP EVENT] IP Acquired: IP=%d.%d.%d.%d , " "Gateway=%d.%d.%d.%d\n\r", SL_IPV4_BYTE(g_ulIpAddr,3), SL_IPV4_BYTE(g_ulIpAddr,2), SL_IPV4_BYTE(g_ulIpAddr,1), SL_IPV4_BYTE(g_ulIpAddr,0), SL_IPV4_BYTE(g_ulGatewayIP,3), SL_IPV4_BYTE(g_ulGatewayIP,2), SL_IPV4_BYTE(g_ulGatewayIP,1), SL_IPV4_BYTE(g_ulGatewayIP,0)); } break; default: { UART_PRINT("[NETAPP EVENT] Unexpected event [0x%x] \n\r", pNetAppEvent->Event); } break; }}void SimpleLinkHttpServerCallback(SlHttpServerEvent_t *pHttpEvent, SlHttpServerResponse_t *pHttpResponse){ // Unused in this application}void SimpleLinkGeneralEventHandler(SlDeviceEvent_t *pDevEvent){ if(!pDevEvent) { return; } UART_PRINT("[GENERAL EVENT] - ID=[%d] Sender=[%d]\n\n", pDevEvent->EventData.deviceEvent.status, pDevEvent->EventData.deviceEvent.sender);}void SimpleLinkSockEventHandler(SlSockEvent_t *pSock){ // This application doesn't work w/ socket - Events are not expected}static void InitializeAppVariables(){ g_ulStatus = 0; g_ulGatewayIP = 0; memset(g_ucConnectionSSID,0,sizeof(g_ucConnectionSSID)); memset(g_ucConnectionBSSID,0,sizeof(g_ucConnectionBSSID)); g_ulDestinationIp = IP_ADDR; g_uiPortNum = PORT_NUM; g_ulPacketCount = UDP_PACKET_COUNT;}static long ConfigureSimpleLinkToDefaultState(){ SlVersionFull ver = {0}; _WlanRxFilterOperationCommandBuff_t RxFilterIdMask = {0}; unsigned char ucVal = 1; unsigned char ucConfigOpt = 0; unsigned char ucConfigLen = 0; unsigned char ucPower = 0; long lRetVal = -1; long lMode = -1; lMode = sl_Start(0, 0, 0); ASSERT_ON_ERROR(lMode); if (ROLE_STA != lMode) { if (ROLE_AP == lMode) { while(!IS_IP_ACQUIRED(g_ulStatus)) {#ifndef SL_PLATFORM_MULTI_THREADED _SlNonOsMainLoopTask(); #endif } } lRetVal = sl_WlanSetMode(ROLE_STA); ASSERT_ON_ERROR(lRetVal); lRetVal = sl_Stop(0xFF); ASSERT_ON_ERROR(lRetVal); lRetVal = sl_Start(0, 0, 0); ASSERT_ON_ERROR(lRetVal); if (ROLE_STA != lRetVal) { return DEVICE_NOT_IN_STATION_MODE; } } ucConfigOpt = SL_DEVICE_GENERAL_VERSION; ucConfigLen = sizeof(ver); lRetVal = sl_DevGet(SL_DEVICE_GENERAL_CONFIGURATION, &ucConfigOpt, &ucConfigLen, (unsigned char *)(&ver)); ASSERT_ON_ERROR(lRetVal); UART_PRINT("Host Driver Version: %s\n\r",SL_DRIVER_VERSION); UART_PRINT("Build Version %d.%d.%d.%d.31.%d.%d.%d.%d.%d.%d.%d.%d\n\r", ver.NwpVersion[0],ver.NwpVersion[1],ver.NwpVersion[2],ver.NwpVersion[3], ver.ChipFwAndPhyVersion.FwVersion[0],ver.ChipFwAndPhyVersion.FwVersion[1], ver.ChipFwAndPhyVersion.FwVersion[2],ver.ChipFwAndPhyVersion.FwVersion[3], ver.ChipFwAndPhyVersion.PhyVersion[0],ver.ChipFwAndPhyVersion.PhyVersion[1], ver.ChipFwAndPhyVersion.PhyVersion[2],ver.ChipFwAndPhyVersion.PhyVersion[3]); lRetVal = sl_WlanPolicySet(SL_POLICY_CONNECTION, SL_CONNECTION_POLICY(1, 0, 0, 0, 1), NULL, 0); ASSERT_ON_ERROR(lRetVal); lRetVal = sl_WlanProfileDel(0xFF); ASSERT_ON_ERROR(lRetVal); lRetVal = sl_WlanDisconnect(); if(0 == lRetVal) { while(IS_CONNECTED(g_ulStatus)) {#ifndef SL_PLATFORM_MULTI_THREADED _SlNonOsMainLoopTask(); #endif } } lRetVal = sl_NetCfgSet(SL_IPV4_STA_P2P_CL_DHCP_ENABLE,1,1,&ucVal); ASSERT_ON_ERROR(lRetVal); ucConfigOpt = SL_SCAN_POLICY(0); lRetVal = sl_WlanPolicySet(SL_POLICY_SCAN , ucConfigOpt, NULL, 0); ASSERT_ON_ERROR(lRetVal); ucPower = 0; lRetVal = sl_WlanSet(SL_WLAN_CFG_GENERAL_PARAM_ID, WLAN_GENERAL_PARAM_OPT_STA_TX_POWER, 1, (unsigned char *)&ucPower); ASSERT_ON_ERROR(lRetVal); lRetVal = sl_WlanPolicySet(SL_POLICY_PM , SL_NORMAL_POLICY, NULL, 0); ASSERT_ON_ERROR(lRetVal); lRetVal = sl_NetAppMDNSUnRegisterService(0, 0); ASSERT_ON_ERROR(lRetVal); memset(RxFilterIdMask.FilterIdMask, 0xFF, 8); lRetVal = sl_WlanRxFilterSet(SL_REMOVE_RX_FILTER, (_u8 *)&RxFilterIdMask, sizeof(_WlanRxFilterOperationCommandBuff_t)); ASSERT_ON_ERROR(lRetVal); lRetVal = sl_Stop(SL_STOP_TIMEOUT); ASSERT_ON_ERROR(lRetVal); InitializeAppVariables(); return lRetVal; // Success}int IpAddressParser(char *ucCMD){ int i=0; unsigned int uiUserInputData; unsigned long ulUserIpAddress = 0; char *ucInpString; ucInpString = strtok(ucCMD, "."); uiUserInputData = (int)strtoul(ucInpString,0,10); while(i<4) { if((ucInpString != NULL) && (uiUserInputData < 256)) { ulUserIpAddress |= uiUserInputData; if(i < 3) ulUserIpAddress = ulUserIpAddress << 8; ucInpString=strtok(NULL,"."); uiUserInputData = (int)strtoul(ucInpString,0,10); i++; } else { return -1; } } g_ulDestinationIp = ulUserIpAddress; return SUCCESS;}int BsdUdpClient(unsigned short usPort){ short sTestBufLen; short sTestBufLen_1; SlSockAddrIn_t sAddr; int iAddrSize; int iSockID; int iStatus; unsigned long lLoopCount = 0; char g_cBsdBuf[BUF_SIZE] = "abcd"; char g_cBsdBuf_1[BUF_SIZE_1]; sTestBufLen = BUF_SIZE; sTestBufLen_1 = BUF_SIZE_1; sAddr.sin_family = SL_AF_INET; sAddr.sin_port = sl_Htons((unsigned short)usPort); sAddr.sin_addr.s_addr = sl_Htonl((unsigned int)g_ulDestinationIp); iAddrSize = sizeof(SlSockAddrIn_t); iSockID = sl_Socket(SL_AF_INET,SL_SOCK_DGRAM, 0); if( iSockID < 0 ) { ASSERT_ON_ERROR(SOCKET_CREATE_ERROR); } while (lLoopCount < g_ulPacketCount) {#if UDP_SEND ==1 iStatus = sl_SendTo(iSockID, g_cBsdBuf, sTestBufLen, 0, (SlSockAddr_t *)&sAddr, iAddrSize); if( iStatus <= 0 ) { sl_Close(iSockID); ASSERT_ON_ERROR(SEND_ERROR); } lLoopCount++; UART_PRINT("Sent %s packets successfully\n\r",g_cBsdBuf);// UART_PRINT("Sent %u packets successfully\n\r",g_ulPacketCount);#endif#if UDP_RECV ==1 iStatus = sl_RecvFrom(iSockID, g_cBsdBuf_1, sTestBufLen_1, 0, ( SlSockAddr_t *)&sAddr, (SlSocklen_t*)&iAddrSize ); memcpy(g_cBsdBuf_2,g_cBsdBuf_1,BUF_SIZE_1*sizeof(char)); if( iStatus < 0 ) { sl_Close(iSockID); ASSERT_ON_ERROR(RECV_ERROR); } lLoopCount++; UART_PRINT("Recv %s packets successfully\n\r",g_cBsdBuf_1);// UART_PRINT("Recv %u packets successfully\n\r",g_ulPacketCount);#endif } sl_Close(iSockID); return SUCCESS;}static long WlanConnect(){ SlSecParams_t secParams = {0}; long lRetVal = 0; secParams.Key = (signed char*)SECURITY_KEY; secParams.KeyLen = strlen(SECURITY_KEY); secParams.Type = SECURITY_TYPE; lRetVal = sl_WlanConnect((signed char*)SSID_NAME, strlen(SSID_NAME), 0, \ &secParams, 0); ASSERT_ON_ERROR(lRetVal); while((!IS_CONNECTED(g_ulStatus)) || (!IS_IP_ACQUIRED(g_ulStatus))) {#ifndef SL_PLATFORM_MULTI_THREADED _SlNonOsMainLoopTask();#endif } return SUCCESS;}static voidDisplayBanner(char * AppName){ UART_PRINT("\n\n\n\r"); UART_PRINT("\t\t *************************************************\n\r"); UART_PRINT("\t\t CC3200 %s Application \n\r", AppName); UART_PRINT("\t\t *************************************************\n\r"); UART_PRINT("\n\n\n\r");}static voidBoardInit(void){#ifndef USE_TIRTOS#if defined(ccs) || defined(gcc) MAP_IntVTableBaseSet((unsigned long)&g_pfnVectors[0]);#endif#if defined(ewarm) MAP_IntVTableBaseSet((unsigned long)&__vector_table);#endif#endif MAP_IntMasterEnable(); MAP_IntEnable(FAULT_SYSTICK); PRCMCC3200MCUInit();}void main(){ long lRetVal = -1; int times; BoardInit(); UDMAInit(); PinMuxConfig(); InitTerm(); DisplayBanner(APPLICATION_NAME); InitializeAppVariables(); lRetVal = ConfigureSimpleLinkToDefaultState(); if(lRetVal < 0) { if (DEVICE_NOT_IN_STATION_MODE == lRetVal) UART_PRINT("Failed to configure the device in its default state \n\r"); LOOP_FOREVER(); } UART_PRINT("Device is configured in default state \n\r"); lRetVal = sl_Start(0, 0, 0); if (lRetVal < 0 || lRetVal != ROLE_STA) { UART_PRINT("Failed to start the device \n\r"); LOOP_FOREVER(); } UART_PRINT("Device started as STATION \n\r"); UART_PRINT("Connecting to AP: %s ...\r\n",SSID_NAME); lRetVal = WlanConnect(); if(lRetVal < 0) { UART_PRINT("Failed to establish connection w/ an AP \n\r"); LOOP_FOREVER(); } UART_PRINT("Connected to AP: %s \n\r",SSID_NAME); UART_PRINT("Device IP: %d.%d.%d.%d\n\r\n\r", SL_IPV4_BYTE(g_ulIpAddr,3), SL_IPV4_BYTE(g_ulIpAddr,2), SL_IPV4_BYTE(g_ulIpAddr,1), SL_IPV4_BYTE(g_ulIpAddr,0)); times = TIMES; while(times>0) { lRetVal = BsdUdpClient(PORT_NUM); if(lRetVal < 0) { ERR_PRINT(lRetVal); LOOP_FOREVER(); } times = times-1; } UART_PRINT("Exiting Application ...\n\r"); lRetVal = sl_Stop(SL_STOP_TIMEOUT); while (1) { _SlNonOsMainLoopTask(); }}
阅读全文
0 0
- CC3200-UDP-Client
- TI—CC3200【2】通过UDP传输音频
- udp client 例程
- Python UDP Server Client
- 简单的UDP-Client
- UDP server,client 代码
- UDP Server/Client
- UDP编程·client
- UDP client.c
- 【代码积累】UDP client
- UDP Client《——》UDP Server
- UDP Client Server Echo Example
- JAVA UDP Server/Client Sample
- udp socket,Client端程序
- Simple UDP server and client
- Python网络编程--UDP Client
- C# UDP Client 端口重用
- 简单 TCP UDP server client
- 浙大PAT甲级-1019
- bzoj 2429 聪明的猴子
- android系统编译
- Redis API-全局命令
- 函数的重载
- CC3200-UDP-Client
- 正则表达式高级技巧及实例详解
- js分享代码(新浪微博,腾讯微博,QQ空间,QQ好友)
- mac下配置maven环境
- Visual Studio提示“无法启动IIS Express Web服务器”的解决方法
- 前端.什么是冒泡和阻止冒泡的原因和方法
- 分享
- bzoj1036树的统计Count(LCT)
- java解析python插件,jython打包部署报错org.python.core.PyException: null