Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of cc3100_Test_Demo by
Revision 8:e79bacf664cc, committed 2017-05-26
- Comitter:
- artpes
- Date:
- Fri May 26 19:26:11 2017 +0000
- Parent:
- 7:0687d16b9781
- Commit message:
- Fork
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
simplelink/cc3100_sl_common.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Thu Sep 03 13:43:50 2015 +0000 +++ b/main.cpp Fri May 26 19:26:11 2017 +0000 @@ -1,301 +1,59 @@ -/* - * main.c - sample application to switch to AP mode and ping client - * - * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/ - * - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the - * distribution. - * - * Neither the name of Texas Instruments Incorporated nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -/* - * Application Name - Getting started with Wi-Fi Access-Point mode - * Application Overview - This sample application demonstrates how - * to configure CC3100 in Access-Point mode. Any - * WLAN station in its range can connect/communicate - * to/with it as per the standard networking protocols. - * On a successful connection, the device ping's the - * connected station. - * Application Details - http://processors.wiki.ti.com/index.php/CC31xx_Getting_Started_with_WLAN_AP - * doc\examples\getting_started_with_wlan_ap.pdf - */ - #include "cc3100_simplelink.h" #include "cc3100_sl_common.h" - #include "fPtr_func.h" #include "cc3100.h" #include "cc3100_spi.h" #include "myBoardInit.h" +#include "cc3100_socket.h" +#include "cc3100_driver.h" +#include "cc3100_nonos.h" +#include "mbed.h" +//#include "ethernet.h" +//#include "rtos.h" +//#include "EthernetInterface.h" using namespace mbed_cc3100; -#if (THIS_BOARD == MBED_BOARD_LPC1768) -//cc3100 _cc3100(p9, p10, p8, SPI(p5, p6, p7));//LPC1768 irq, nHib, cs, mosi, miso, sck +#define SL_STOP_TIMEOUT 0xFF + +/* IP addressed of server side socket. Should be in long format, + * E.g: 0xc0a8010a == 192.168.1.10 */ +//#define IP_ADDR 0xc0a82b69 //192.168.43.105 +#define PORT_NUM 50001 /* Port number to be used */ + +#define BUF_SIZE 1400 +#define NO_OF_PACKETS 1000 + cc3100 _cc3100(p9, p10, p8, SPI(p11, p12, p13));//LPC1768 irq, nHib, cs, mosi, miso, sck Serial pc(USBTX, USBRX);//lpc1768 -#elif (THIS_BOARD == ST_MBED_NUCLEOF411) -cc3100 _cc3100(PA_9, PC_7, PB_6, SPI(PA_7, PA_6, PA_5));//nucleoF411 irq, nHib, cs, mosi, miso, sck -Serial pc(SERIAL_TX, SERIAL_RX);//nucleoF411 -#elif (THIS_BOARD == ST_MBED_NUCLEOF401) -cc3100 _cc3100(PA_9, PC_7, PB_6, SPI(PA_7, PA_6, PA_5));//nucleoF401 irq, nHib, cs, mosi, miso, sck -Serial pc(SERIAL_TX, SERIAL_RX);//nucleoF401 -#elif (THIS_BOARD == EA_MBED_LPC4088) -cc3100 _cc3100(p9, p10, p8, SPI(p5, p6, p7));//LPC4088 irq, nHib, cs, mosi, miso, sck -Serial pc(USBTX, USBRX);//EA_lpc4088 -#elif (THIS_BOARD == ST_MBED_NUCLEOF103) -cc3100 _cc3100(PA_9, PC_7, PB_6, SPI(PA_7, PA_6, PA_5));//nucleoF103 irq, nHib, cs, mosi, miso, sck -Serial pc(SERIAL_TX, SERIAL_RX); -#elif (THIS_BOARD == Seeed_Arch_Max) -cc3100 _cc3100(PD_12, PD_13, PD_11, SPI(PB_5, PB_4, PB_3));//Seeed_Arch_Max irq, nHib, cs, mosi, miso, sck -Serial pc(USBTX, USBRX); -#else - -#endif - -#define APPLICATION_VERSION "1.2.0" - -/* - * GLOBAL VARIABLES -- Start - */ -int32_t demo = 0; - -/* - * GLOBAL VARIABLES -- End - */ +DigitalOut myled1(LED1); +DigitalOut myled2(LED2); +DigitalOut myled3(LED3); +DigitalOut myled4(LED4); -/* - * STATIC FUNCTION DEFINITIONS -- Start - */ - -static void displayBanner(); -/* - * STATIC FUNCTION DEFINITIONS -- End - */ - -void station_app(void); -void AP_app(void); - -/* - * Application's entry point - */ - - -int main(void) { - - pc.baud(115200); - - int32_t retVal = -1; - - retVal = _cc3100.initializeAppVariables(); - ASSERT_ON_ERROR(retVal); - - displayBanner(); +//GLOBAL VARIABLES -- Start +int32_t demo = 0; +//GLOBAL VARIABLES -- End - _cc3100.CLR_STATUS_BIT(g_Status, STATUS_BIT_PING_DONE); - g_PingPacketsRecv = 0; - - /* - * Following function configures the device to default state by cleaning - * the persistent settings stored in NVMEM (viz. connection profiles & - * policies, power policy etc) - * - * Applications may choose to skip this step if the developer is sure - * that the device is in its default state at start of application - * - * Note that all profiles and persistent settings that were done on the - * device will be lost - */ - retVal = _cc3100.configureSimpleLinkToDefaultState(); - - if(retVal < 0) { - if (DEVICE_NOT_IN_STATION_MODE == retVal) - printf(" Failed to configure the device to its default state \n\r"); - LOOP_FOREVER(); - } - - printf(" Device is configured in it's default state \n\r"); - - /* - * Assumption is that the device is configured in station mode already - * and it is in its default state - */ - /* Initializing the CC3100 device */ - - if(!(demo ==1)){ - retVal = _cc3100.sl_Start(0, 0, 0); - - if ((retVal < 0) || (ROLE_STA != retVal) ){ - printf(" Failed to start the device \n\r"); - LOOP_FOREVER(); - } - - printf(" Device started as STATION \n\r"); - } - - if(demo == 0 ){ - station_app(); - }else{ - AP_app(); - } - return 0; -} - -/*! - \brief This function displays the application's banner - - \param None - - \return None -*/ static void displayBanner() { - if(!demo){ - printf("\n\r\n\r"); - printf(" Getting started with WLAN access-point application - Version "); - printf("%s",APPLICATION_VERSION); - printf("\n\r*******************************************************************************\n\r"); - - }else{ - printf("\n\r\n\r"); - printf(" Getting started with station application - Version "); - printf(" %s", APPLICATION_VERSION); - printf("\n\r*******************************************************************************\n\r"); - } + printf("\n\r\n\r"); + printf("***********Getting started with station application***********"); + printf("\n\r*******************************************************************************\n\r"); } -void AP_app(void){ - - SlPingStartCommand_t PingParams = {0}; - SlPingReport_t Report = {0}; -// SlNetCfgIpV4Args_t ipV4 = {0}; -// SlNetAppDhcpServerBasicOpt_t dhcpParams = {0}; - uint8_t SecType = 0; - int32_t role = ROLE_STA; - int32_t retVal = -1; - - /* - * Assumption is that the device is configured in station mode already - * and it is in its default state - */ - role = _cc3100.sl_Start(0, 0, 0); - if (ROLE_AP == role) { - /* If the device is in AP mode, we need to wait for this event before doing anything */ - while(!_cc3100.IS_IP_ACQUIRED(g_Status,STATUS_BIT_IP_ACQUIRED)) { - _cc3100._nonos._SlNonOsMainLoopTask(); - } - } else { - /* Configure CC3100 to start in AP mode */ - retVal = _cc3100._wlan.sl_WlanSetMode(ROLE_AP); - if(retVal < 0) - LOOP_FOREVER(); - - /* Configure the SSID of the CC3100 */ - retVal = _cc3100._wlan.sl_WlanSet(SL_WLAN_CFG_AP_ID, WLAN_AP_OPT_SSID, - strlen(SSID_AP_MODE), (uint8_t *)SSID_AP_MODE); - if(retVal < 0) - LOOP_FOREVER(); - - SecType = SEC_TYPE_AP_MODE; - /* Configure the Security parameter the AP mode */ - retVal = _cc3100._wlan.sl_WlanSet(SL_WLAN_CFG_AP_ID, WLAN_AP_OPT_SECURITY_TYPE, 1, (uint8_t *)&SecType); - if(retVal < 0) - LOOP_FOREVER(); - - retVal = _cc3100._wlan.sl_WlanSet(SL_WLAN_CFG_AP_ID, WLAN_AP_OPT_PASSWORD, strlen(PASSWORD_AP_MODE), (uint8_t *)PASSWORD_AP_MODE); - if(retVal < 0) - LOOP_FOREVER(); - - retVal = _cc3100.sl_Stop(SL_STOP_TIMEOUT); - if(retVal < 0) - LOOP_FOREVER(); - - _cc3100.CLR_STATUS_BIT(g_Status, STATUS_BIT_IP_ACQUIRED); - - role = _cc3100.sl_Start(0, 0, 0); - if (ROLE_AP == role) { - /* If the device is in AP mode, we need to wait for this event before doing anything */ - while(!_cc3100.IS_IP_ACQUIRED(g_Status,STATUS_BIT_IP_ACQUIRED)) { - _cc3100._nonos._SlNonOsMainLoopTask(); - } - } else { - printf(" Device couldn't be configured in AP mode \n\r"); - LOOP_FOREVER(); - } - } - printf(" Device started as Access Point\n\r"); - - /* Wait */ - printf(" Waiting for clients to connect...!\n\r"); - while((!_cc3100.IS_IP_LEASED(g_Status,STATUS_BIT_IP_LEASED)) || (!_cc3100.IS_STA_CONNECTED(g_Status,STATUS_BIT_STA_CONNECTED))) { - _cc3100._nonos._SlNonOsMainLoopTask(); - } - printf(" Client connected to the device \n\r"); - printf(" Pinging...! \n\r"); - - /* Set the ping parameters */ - PingParams.PingIntervalTime = PING_INTERVAL; - PingParams.PingSize = PING_SIZE; - PingParams.PingRequestTimeout = PING_TIMEOUT; - PingParams.TotalNumberOfAttempts = PING_ATTEMPTS; - PingParams.Flags = 0; - PingParams.Ip = g_StationIP; /* Fill the station IP address connected to CC3100 */ - - /* Ping client connected to CC3100 */ - retVal = _cc3100._netapp.sl_NetAppPingStart((SlPingStartCommand_t*)&PingParams, SL_AF_INET, (SlPingReport_t*)&Report, &SimpleLinkPingReport); - if(retVal < 0) - LOOP_FOREVER(); - - /* Wait */ - while(!_cc3100.IS_PING_DONE(g_Status,STATUS_BIT_PING_DONE)) { - _cc3100._nonos._SlNonOsMainLoopTask(); - } - - if (0 == g_PingPacketsRecv) { - printf(" A STATION couldn't connect to the device \n\r"); - //ASSERT_ON_ERROR(LAN_CONNECTION_FAILED); - printf(" ERROR code %d\n\r", LAN_CONNECTION_FAILED); - } - - printf(" Device and the station are successfully connected \n\r"); - //return SUCCESS; -} - -void station_app(void){ - +//******************************STATION_MODE*********************************************** +//***************************************************************************************** +void station_app() +{ int32_t retVal = -1; /* Connecting to WLAN AP */ retVal = _cc3100.establishConnectionWithAP(); + //printf("retVal 000: %d\n\r",retVal); if(retVal < 0) { printf(" Failed to establish connection w/ an AP \n\r"); @@ -305,13 +63,14 @@ printf(" Pinging...! \n\r"); retVal = _cc3100.checkLanConnection(); + //printf("retVal 001: %d\n\r",retVal); if(retVal < 0) { printf(" Device couldn't connect to LAN \n\r"); LOOP_FOREVER(); } - printf(" Device successfully connected to the LAN\r\n"); - + printf(" Device successfully connected to the LAN\n\r"); + /* retVal = _cc3100.checkInternetConnection(); if(retVal < 0) { @@ -319,7 +78,238 @@ LOOP_FOREVER(); } - printf(" Device successfully connected to the internet \n\r"); -} + printf(" Device successfully connected to the internet \n\r");*/ +} +//****************************END_STATION_MODE********************************************* +//***************************************************************************************** +void led(int result){ + + if (result > 0) + { + myled1 = 1; + wait(0.05); + myled1 = 0; + wait(0.05); + /* + myled2 = 1; + wait(0.05); + myled2 = 0; + wait(0.05); + myled3 = 1; + wait(0.05); + myled3 = 0; + wait(0.05); + myled4 = 1; + wait(0.05); + myled4 = 0; + wait(0.05); + } + else + { myled1 = 0; + myled2 = 0; + myled3 = 0; + myled4 = 0; + } +*/ +} + } + +//osThreadDef(led, osPriorityNormal, DEFAULT_STACK_SIZE); +static int32_t BsdTcpServer(uint16_t Port) +{ + + SlSockAddrIn_t Addr; + SlSockAddrIn_t LocalAddr; + char stringa[3]; + //int16_t idx = 0; + int16_t AddrSize = 0; + int16_t SockID = 0; + int32_t Status = 0; + int16_t newSockID = 0; + int16_t LoopCount = 0; + //int16_t SlSockAddrIn_t = 0; + int16_t recvSize = 0; + //Thread thread; + +/* + for (idx=0 ; idx<BUF_SIZE ; idx++) + { + uBuf.BsdBuf[idx] = (_u8)(idx % 10); + } +*/ + /*int a = 0; + a = ethernet(); + printf("\nEth funzia : %d \n\r",a)*/ + + LocalAddr.sin_family = SL_AF_INET; + LocalAddr.sin_port = _cc3100._socket.sl_Htons(PORT_NUM); + LocalAddr.sin_addr.s_addr = 0; + //int port = 1; + //osThreadCreate(osThread(led), (void *) port); + //thread.start(led(1)); + + SockID = _cc3100._socket.sl_Socket(SL_AF_INET,SL_SOCK_STREAM, 0); + if( SockID < 0 ) + { + printf(" \n[TCP Server] Create socket Error \n\r"); + ASSERT_ON_ERROR(SockID); + } + else + printf("\nCreate socket \n\r"); + + + AddrSize = sizeof(SlSockAddrIn_t); + Status = _cc3100._socket.sl_Bind(SockID, (SlSockAddr_t *)&LocalAddr, AddrSize); + if( Status < 0 ) + { + _cc3100._socket.sl_Close(SockID); + printf(" \n[TCP Server] Socket address assignment Error \n\r"); + ASSERT_ON_ERROR(Status); + } + else + printf("\nSocket address assignment \n\r"); + + Status = _cc3100._socket.sl_Listen(SockID, 0); + if( Status < 0 ) + { + _cc3100._socket.sl_Close(SockID); + printf("\n [TCP Server] Listen Error \n\r"); + ASSERT_ON_ERROR(Status); + } + else + printf("\nListen for a Connection \n\r"); + + newSockID = _cc3100._socket.sl_Accept(SockID, (SlSockAddr_t *)&Addr,(SlSocklen_t*)&AddrSize); + if( newSockID < 0 ) + { + _cc3100._socket.sl_Close(SockID); + printf("\n [TCP Server] Accept connection Error \n\r"); + ASSERT_ON_ERROR(newSockID); + } + else + printf("\nAccept connection \n\r"); + + while (LoopCount < NO_OF_PACKETS) + { + //TODO : sarebbe da chiamare la funzione led() con un altro thread così da farla girare in background + //led(1); + recvSize = BUF_SIZE; + //printf("RecvSize = %d \n\r",recvSize); + do + { + Status = _cc3100._socket.sl_Recv(newSockID, &(stringa), strlen("a"), 0); + led(1); + if( Status <= 0 ) + { + _cc3100._socket.sl_Close(newSockID); + _cc3100._socket.sl_Close(SockID); + //led(1); + printf(" \n[TCP Server] Data recv Error. Close socket %d \n\n\r",SockID); + //ASSERT_ON_ERROR(TCP_RECV_ERROR); + + /*-----Accept new connection----------*/ + SockID = _cc3100._socket.sl_Socket(SL_AF_INET,SL_SOCK_STREAM, 0); + printf("----------Create new socket---------- \n\n\r"); + AddrSize = sizeof(SlSockAddrIn_t); + Status = _cc3100._socket.sl_Bind(SockID, (SlSockAddr_t *)&LocalAddr, AddrSize); + printf("----------Socket address assignment---------- \n\n\r"); + Status = _cc3100._socket.sl_Listen(SockID, 0); + printf("----------Listen for a new Connection---------- \n\n\r"); + newSockID = _cc3100._socket.sl_Accept(SockID, (SlSockAddr_t *)&Addr,(SlSocklen_t*)&AddrSize); + printf("----------Accept new connection---------- \n\n\r"); + led(1); + } + + //printf("Status = %d \n\r",Status); + recvSize -= Status; + //printf("RecvSize = %d \n\r",recvSize); + printf("%s",stringa); + //led(1); + //char thanks [] = "Data received"; + //_cc3100._socket.sl_Send(SockID, &(thanks), strlen(thanks), 0); + + } + while(recvSize > 0); + + LoopCount++; + } + + Status = _cc3100._socket.sl_Close(newSockID); + ASSERT_ON_ERROR(Status); + + Status = _cc3100._socket.sl_Close(SockID); + ASSERT_ON_ERROR(Status); + + return SUCCESS; + +} + +//**************************_START_APPLICATION_********************************* +int main(void) +{ + pc.baud(115200); + + + + int32_t retVal = -1; + + retVal = _cc3100.initializeAppVariables(); + + displayBanner(); + + _cc3100.CLR_STATUS_BIT(g_Status, STATUS_BIT_PING_DONE); + g_PingPacketsRecv = 0; + //printf("\n\r FUNZIONE CLR_STATUS_BIT ESEGUITA CON SUCCESSO\n\r"); + + //retVal = _cc3100.configureSimpleLinkToDefaultState(); + + //printf("\n\rRetval 2: %d \n\r ",retVal); + + if(retVal < 0) { + if (DEVICE_NOT_IN_STATION_MODE == retVal) + printf(" Failed to configure the device to its default state \n\r"); + + LOOP_FOREVER(); + } + + printf("\n\rDevice is configured in it's default state \n\r"); + /*printf("\n\r******************************************************************************************************\n\r"); + printf("\n\r*****_DA_QUI_IN_POI_SCELTA_TIPO_FUNZIONE_IN_BASE_AL_VALORE_demo_*****\n\r"); + printf("\n\r******************************************************************************************************\n\r");*/ + + /* + * Assumption is that the device is configured in station mode already + * and it is in its default state + */ + /* Initializing the CC3100 device */ + + retVal = _cc3100.sl_Start(0, 0, 0); + + if ((retVal < 0) || (ROLE_STA != retVal) ) + { + printf(" Failed to start the device \n\r"); + LOOP_FOREVER(); + } + + printf("\n\r Device started as STATION \n\r"); + + + station_app(); + + printf("Establishing connection with TCP server \n\r"); + /*Before proceeding, please make sure to have a server waiting on PORT_NUM*/ + retVal = BsdTcpServer(PORT_NUM); + if(retVal < 0) + printf(" Failed to establishing connection with TCP server \n\r"); + else + printf(" Connection with TCP server established successfully \n\r"); + + return 0; + + + + +} +
--- a/simplelink/cc3100_sl_common.h Thu Sep 03 13:43:50 2015 +0000 +++ b/simplelink/cc3100_sl_common.h Fri May 26 19:26:11 2017 +0000 @@ -65,10 +65,10 @@ * Values for below macros shall be modified per the access-point's (AP) properties * SimpleLink device will connect to following AP when the application is executed */ -#define SSID_NAME "**********" +#define SSID_NAME "APAP" //#define SSID_NAME "OpenWrt" /* Access point name to connect to. */ #define SEC_TYPE SL_SEC_TYPE_WPA_WPA2 /* Security type of the Access point */ -#define PASSKEY "**********" +#define PASSKEY "hansolone" //#define PASSKEY "**********" /* Password in case of secure AP */ #define PASSKEY_LEN strlen(PASSKEY) /* Password length in case of secure AP */