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.
main.cpp
00001 /* 00002 * main.c - sample application to switch to AP mode and ping client 00003 * 00004 * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/ 00005 * 00006 * 00007 * Redistribution and use in source and binary forms, with or without 00008 * modification, are permitted provided that the following conditions 00009 * are met: 00010 * 00011 * Redistributions of source code must retain the above copyright 00012 * notice, this list of conditions and the following disclaimer. 00013 * 00014 * Redistributions in binary form must reproduce the above copyright 00015 * notice, this list of conditions and the following disclaimer in the 00016 * documentation and/or other materials provided with the 00017 * distribution. 00018 * 00019 * Neither the name of Texas Instruments Incorporated nor the names of 00020 * its contributors may be used to endorse or promote products derived 00021 * from this software without specific prior written permission. 00022 * 00023 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00024 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00025 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 00026 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 00027 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00028 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00029 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00030 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00031 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00032 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00033 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00034 * 00035 */ 00036 00037 /* 00038 * Application Name - Getting started with Wi-Fi Access-Point mode 00039 * Application Overview - This sample application demonstrates how 00040 * to configure CC3100 in Access-Point mode. Any 00041 * WLAN station in its range can connect/communicate 00042 * to/with it as per the standard networking protocols. 00043 * On a successful connection, the device ping's the 00044 * connected station. 00045 * Application Details - http://processors.wiki.ti.com/index.php/CC31xx_Getting_Started_with_WLAN_AP 00046 * doc\examples\getting_started_with_wlan_ap.pdf 00047 */ 00048 00049 #include "cc3100_simplelink.h" 00050 #include "cc3100_sl_common.h" 00051 00052 #include "fPtr_func.h" 00053 #include "cc3100.h" 00054 #include "cc3100_spi.h" 00055 #include "myBoardInit.h" 00056 00057 using namespace mbed_cc3100; 00058 00059 #if (THIS_BOARD == MBED_BOARD_LPC1768) 00060 //cc3100 _cc3100(p9, p10, p8, SPI(p5, p6, p7));//LPC1768 irq, nHib, cs, mosi, miso, sck 00061 cc3100 _cc3100(p9, p10, p8, SPI(p11, p12, p13));//LPC1768 irq, nHib, cs, mosi, miso, sck 00062 Serial pc(USBTX, USBRX);//lpc1768 00063 #elif (THIS_BOARD == ST_MBED_NUCLEOF411) 00064 cc3100 _cc3100(PA_9, PC_7, PB_6, SPI(PA_7, PA_6, PA_5));//nucleoF411 irq, nHib, cs, mosi, miso, sck 00065 Serial pc(SERIAL_TX, SERIAL_RX);//nucleoF411 00066 #elif (THIS_BOARD == ST_MBED_NUCLEOF401) 00067 cc3100 _cc3100(PA_9, PC_7, PB_6, SPI(PA_7, PA_6, PA_5));//nucleoF401 irq, nHib, cs, mosi, miso, sck 00068 Serial pc(SERIAL_TX, SERIAL_RX);//nucleoF401 00069 #elif (THIS_BOARD == EA_MBED_LPC4088) 00070 cc3100 _cc3100(p9, p10, p8, SPI(p5, p6, p7));//LPC4088 irq, nHib, cs, mosi, miso, sck 00071 Serial pc(USBTX, USBRX);//EA_lpc4088 00072 #elif (THIS_BOARD == ST_MBED_NUCLEOF103) 00073 cc3100 _cc3100(PA_9, PC_7, PB_6, SPI(PA_7, PA_6, PA_5));//nucleoF103 irq, nHib, cs, mosi, miso, sck 00074 Serial pc(SERIAL_TX, SERIAL_RX); 00075 #elif (THIS_BOARD == Seeed_Arch_Max) 00076 cc3100 _cc3100(PD_12, PD_13, PD_11, SPI(PB_5, PB_4, PB_3));//Seeed_Arch_Max irq, nHib, cs, mosi, miso, sck 00077 Serial pc(USBTX, USBRX); 00078 #else 00079 00080 #endif 00081 00082 #define APPLICATION_VERSION "1.2.0" 00083 00084 /* 00085 * GLOBAL VARIABLES -- Start 00086 */ 00087 int32_t demo = 0; 00088 00089 /* 00090 * GLOBAL VARIABLES -- End 00091 */ 00092 00093 00094 /* 00095 * STATIC FUNCTION DEFINITIONS -- Start 00096 */ 00097 00098 static void displayBanner(); 00099 /* 00100 * STATIC FUNCTION DEFINITIONS -- End 00101 */ 00102 00103 void station_app(void); 00104 void AP_app(void); 00105 00106 /* 00107 * Application's entry point 00108 */ 00109 00110 00111 int main(void) { 00112 00113 pc.baud(115200); 00114 00115 int32_t retVal = -1; 00116 00117 retVal = _cc3100.initializeAppVariables(); 00118 ASSERT_ON_ERROR(retVal); 00119 00120 displayBanner(); 00121 00122 _cc3100.CLR_STATUS_BIT(g_Status, STATUS_BIT_PING_DONE); 00123 g_PingPacketsRecv = 0; 00124 00125 /* 00126 * Following function configures the device to default state by cleaning 00127 * the persistent settings stored in NVMEM (viz. connection profiles & 00128 * policies, power policy etc) 00129 * 00130 * Applications may choose to skip this step if the developer is sure 00131 * that the device is in its default state at start of application 00132 * 00133 * Note that all profiles and persistent settings that were done on the 00134 * device will be lost 00135 */ 00136 retVal = _cc3100.configureSimpleLinkToDefaultState(); 00137 00138 if(retVal < 0) { 00139 if (DEVICE_NOT_IN_STATION_MODE == retVal) 00140 printf(" Failed to configure the device to its default state \n\r"); 00141 00142 LOOP_FOREVER(); 00143 } 00144 00145 printf(" Device is configured in it's default state \n\r"); 00146 00147 /* 00148 * Assumption is that the device is configured in station mode already 00149 * and it is in its default state 00150 */ 00151 /* Initializing the CC3100 device */ 00152 00153 if(!(demo ==1)){ 00154 retVal = _cc3100.sl_Start(0, 0, 0); 00155 00156 if ((retVal < 0) || (ROLE_STA != retVal) ){ 00157 printf(" Failed to start the device \n\r"); 00158 LOOP_FOREVER(); 00159 } 00160 00161 printf(" Device started as STATION \n\r"); 00162 } 00163 00164 if(demo == 0 ){ 00165 station_app(); 00166 }else{ 00167 AP_app(); 00168 } 00169 return 0; 00170 } 00171 00172 /*! 00173 \brief This function displays the application's banner 00174 00175 \param None 00176 00177 \return None 00178 */ 00179 static void displayBanner() 00180 { 00181 if(!demo){ 00182 printf("\n\r\n\r"); 00183 printf(" Getting started with WLAN access-point application - Version "); 00184 printf("%s",APPLICATION_VERSION); 00185 printf("\n\r*******************************************************************************\n\r"); 00186 00187 }else{ 00188 printf("\n\r\n\r"); 00189 printf(" Getting started with station application - Version "); 00190 printf(" %s", APPLICATION_VERSION); 00191 printf("\n\r*******************************************************************************\n\r"); 00192 } 00193 } 00194 00195 void AP_app(void){ 00196 00197 SlPingStartCommand_t PingParams = {0}; 00198 SlPingReport_t Report = {0}; 00199 // SlNetCfgIpV4Args_t ipV4 = {0}; 00200 // SlNetAppDhcpServerBasicOpt_t dhcpParams = {0}; 00201 00202 uint8_t SecType = 0; 00203 int32_t role = ROLE_STA; 00204 int32_t retVal = -1; 00205 00206 /* 00207 * Assumption is that the device is configured in station mode already 00208 * and it is in its default state 00209 */ 00210 role = _cc3100.sl_Start(0, 0, 0); 00211 if (ROLE_AP == role) { 00212 /* If the device is in AP mode, we need to wait for this event before doing anything */ 00213 while(!_cc3100.IS_IP_ACQUIRED(g_Status,STATUS_BIT_IP_ACQUIRED)) { 00214 _cc3100._nonos._SlNonOsMainLoopTask(); 00215 } 00216 } else { 00217 /* Configure CC3100 to start in AP mode */ 00218 retVal = _cc3100._wlan.sl_WlanSetMode(ROLE_AP); 00219 if(retVal < 0) 00220 LOOP_FOREVER(); 00221 00222 /* Configure the SSID of the CC3100 */ 00223 retVal = _cc3100._wlan.sl_WlanSet(SL_WLAN_CFG_AP_ID, WLAN_AP_OPT_SSID, 00224 strlen(SSID_AP_MODE), (uint8_t *)SSID_AP_MODE); 00225 if(retVal < 0) 00226 LOOP_FOREVER(); 00227 00228 SecType = SEC_TYPE_AP_MODE; 00229 /* Configure the Security parameter the AP mode */ 00230 retVal = _cc3100._wlan.sl_WlanSet(SL_WLAN_CFG_AP_ID, WLAN_AP_OPT_SECURITY_TYPE, 1, (uint8_t *)&SecType); 00231 if(retVal < 0) 00232 LOOP_FOREVER(); 00233 00234 retVal = _cc3100._wlan.sl_WlanSet(SL_WLAN_CFG_AP_ID, WLAN_AP_OPT_PASSWORD, strlen(PASSWORD_AP_MODE), (uint8_t *)PASSWORD_AP_MODE); 00235 if(retVal < 0) 00236 LOOP_FOREVER(); 00237 00238 retVal = _cc3100.sl_Stop(SL_STOP_TIMEOUT); 00239 if(retVal < 0) 00240 LOOP_FOREVER(); 00241 00242 _cc3100.CLR_STATUS_BIT(g_Status, STATUS_BIT_IP_ACQUIRED); 00243 00244 role = _cc3100.sl_Start(0, 0, 0); 00245 if (ROLE_AP == role) { 00246 /* If the device is in AP mode, we need to wait for this event before doing anything */ 00247 while(!_cc3100.IS_IP_ACQUIRED(g_Status,STATUS_BIT_IP_ACQUIRED)) { 00248 _cc3100._nonos._SlNonOsMainLoopTask(); 00249 } 00250 } else { 00251 printf(" Device couldn't be configured in AP mode \n\r"); 00252 LOOP_FOREVER(); 00253 } 00254 } 00255 printf(" Device started as Access Point\n\r"); 00256 00257 /* Wait */ 00258 printf(" Waiting for clients to connect...!\n\r"); 00259 while((!_cc3100.IS_IP_LEASED(g_Status,STATUS_BIT_IP_LEASED)) || (!_cc3100.IS_STA_CONNECTED(g_Status,STATUS_BIT_STA_CONNECTED))) { 00260 _cc3100._nonos._SlNonOsMainLoopTask(); 00261 } 00262 printf(" Client connected to the device \n\r"); 00263 printf(" Pinging...! \n\r"); 00264 00265 /* Set the ping parameters */ 00266 PingParams.PingIntervalTime = PING_INTERVAL; 00267 PingParams.PingSize = PING_SIZE; 00268 PingParams.PingRequestTimeout = PING_TIMEOUT; 00269 PingParams.TotalNumberOfAttempts = PING_ATTEMPTS; 00270 PingParams.Flags = 0; 00271 PingParams.Ip = g_StationIP; /* Fill the station IP address connected to CC3100 */ 00272 00273 /* Ping client connected to CC3100 */ 00274 retVal = _cc3100._netapp.sl_NetAppPingStart((SlPingStartCommand_t*)&PingParams, SL_AF_INET, (SlPingReport_t*)&Report, &SimpleLinkPingReport); 00275 if(retVal < 0) 00276 LOOP_FOREVER(); 00277 00278 /* Wait */ 00279 while(!_cc3100.IS_PING_DONE(g_Status,STATUS_BIT_PING_DONE)) { 00280 _cc3100._nonos._SlNonOsMainLoopTask(); 00281 } 00282 00283 if (0 == g_PingPacketsRecv) { 00284 printf(" A STATION couldn't connect to the device \n\r"); 00285 //ASSERT_ON_ERROR(LAN_CONNECTION_FAILED); 00286 printf(" ERROR code %d\n\r", LAN_CONNECTION_FAILED); 00287 } 00288 00289 printf(" Device and the station are successfully connected \n\r"); 00290 //return SUCCESS; 00291 } 00292 00293 void station_app(void){ 00294 00295 int32_t retVal = -1; 00296 00297 /* Connecting to WLAN AP */ 00298 retVal = _cc3100.establishConnectionWithAP(); 00299 if(retVal < 0) 00300 { 00301 printf(" Failed to establish connection w/ an AP \n\r"); 00302 LOOP_FOREVER(); 00303 } 00304 printf(" Connection established w/ AP and IP is acquired \n\r"); 00305 00306 printf(" Pinging...! \n\r"); 00307 retVal = _cc3100.checkLanConnection(); 00308 if(retVal < 0) 00309 { 00310 printf(" Device couldn't connect to LAN \n\r"); 00311 LOOP_FOREVER(); 00312 } 00313 printf(" Device successfully connected to the LAN\r\n"); 00314 00315 retVal = _cc3100.checkInternetConnection(); 00316 if(retVal < 0) 00317 { 00318 printf(" Device couldn't connect to the internet \n\r"); 00319 LOOP_FOREVER(); 00320 } 00321 00322 printf(" Device successfully connected to the internet \n\r"); 00323 } 00324 00325
Generated on Sun Jul 17 2022 07:25:50 by
1.7.2