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();    }}
原创粉丝点击