cc3000 simple socket demo (not using EthernetInterface) !
Dependencies: NVIC_set_all_priorities cc3000_hostdriver_mbedsocket mbed
Info
Simple Socket demo application for the wireless CC3000 module.
Warning
The on-board Firmware must be updated to mbed enable the wireless module.
Goto the Component page to get the FirmwareUpdate tool (scroll down to the FirmwareUpdate topic).
Setup
Note
It is recommended to run an initial test WITHOUT security settings.
Changing network parameters in main.h
- Setup a wireless router with a non-secure wireless connection using the wireless settings stored in
main.h
or setSSIDto your wireless router SSID. For now, do not changeUSE_SMART_CONFIGandAP_KEY,
only changeAP_SECURITYto NONE.
// use smart config #define USE_SMART_CONFIG 0 // Default SSID Settings #define AP_KEY "test" #define AP_SECURITY NONE #define SSID "test"
- By default, DHCP is used to obtain the IP address.
When you want to use a fixed IP address, setIP_ALLOC_METHOD USE_STATIC_IPand enter your preferred values forSTATIC_IP_OCT_x(device IP address) andSTATIC_GW_OCT4(4th number of your gateway IP address) .
See the next chapter on how to useUSE_SMART_CONFIG.
Setting up the Python script
- Download Python 2.7 from http://www.python.org/download/
Install it on a computer connected to the router you previously set up (wireless or wired).
- Download this Python script to the Python2.7 folder (credit : Jim Carver from Avnet).
- Compile the
CC3000_Simple_Socket_democode and save it to your board.
Running the application for the first time
- Open a terminal program (eg: TeraTerm) and connect to your board (serial speed : 115200 baud).
- Press the reset button on your board.
- Following startup screen will appear :
Note
The version info can be different.
the dots in the MAC address will show your CC3000's real MAC address.
cc3000 simple socket demo.
MAC address + cc3000 info
MAC address ..:..:..:..:..:..
FTC 0
PP_version 3.4
SERV_PACK 1.11
DRV_VER 7.14.24
FW_VER 7.12.14
User's AP setup: SSID: "test", Password: "test", Security: 3
<0> Normal run. SmartConfig will
start if no valid connection exists.
<1> Connect using fixed SSID without AP_KEY: test
<2> Connect using fixed SSID with AP_KEY: test
<8> Erase all stored profiles.
<9> SmartConfig.
- For the initial test, select option
<1>(Connect using fixed SSID without AP_KEY: ...). - If all goes well, the following screen is shown (the IP address can be different):
Attempting SSID Connection. DHCP request Waiting for dhcp to be set. Waiting for dhcp to be set. DHCP assigned IP Address = 192.168.1.100
- On the computer where you installed Python2.7:
- Make sure the connection between your computer and the wireless router is active.
- Open a DOS prompt and go to the folder where Python2.7 is installed.
- Type following command :
python wigo_test.py -a 192.168.0.101 -p 15000
Note
Don't forget to replace the IP address with the real IP address assigned by DHCP to the CC3000 module.
If a connection is established, the DOS window will show
----------------- run tcp client ----------------- connected to remote ip=192.168.0.101 remote port=15000 Press ENTER ....
In return the controller board will send following info to the serial port:
Connection from: 192.168.1.101
When we press Enter in the DOS window, the controller board will send following info to the serial port:
Connection from: 192.168.0.10 Received: Hello Wi-Go Sending the message to the server.
And the DOS window will show:
recv from : data: Hello Python
Using option <2>
- In your wireless router, change the non-secure wireless connection to WEP, WPA or WPA2 and enter a security key.
- In
main.h, updateAP_SECURITYandAP_KEYwith the values you set in your wireless router.
Valid values forAP_SECURITYare :NONE,WEP,WPAandWPA2
- Recompile the code and save it to your board. Reconnect the terminal program and press reset on your board.
- When the selection menu appears, choose option
<2>.
The communication sequence for option <2> is identical as described for option <1> but now a secure connection is used.
Using the application's options <0>, <8> and <9>
- Options
<0>(Normal run) and<9>(SmartConfig) are very similar.
They both allow us to connect the CC3000 to another wireless network, without changing the pre-configured wireless settings stored inmain.h.
Option<0>will only start SmartConfig if no valid connection exists (First Time Config),
but if the CC3000 was previously configured using SmartConfig, it will automatically connect using the stored wireless network profile.
- Option
<8>: As there are only 7 profile slots available, this option can be used to erase all stored profiles.
- Option
<9>allows the user to switch to another wireless connection.
This connection is stored in one of the 7 profiles. More info on profile priorities is available here.
See TI's pages on how to use the SmartConfig tool:
- Preferred method : Configuration using the SmartConfig tool
- SmartConfig download: Smart Config and Home Automation
- iOS app : available at Apple app store.
- Android app : Open the Smart Config and Home Automation link and install the Android SmartConfig Application on a PC.
This file contains the source code as well as the compiled APK file.
The APK file is stored inti\CC3000AndroidApp\SmartConfigCC3X\bin.
- iOS app : available at Apple app store.
- Alternate method (no longer works since firmware upgrade 1.11 - only kept as a reference):
Configuration without the SmartConfig tool
This page also contains info on the First Time Config Probe and Beacon Definition
Revision 1:99076f2d9408, committed 2013-09-13
- Comitter:
- Kojto
- Date:
- Fri Sep 13 18:02:03 2013 +0000
- Parent:
- 0:ce33c63eefe5
- Child:
- 2:c8cdcef31933
- Commit message:
- tcp server addition
Changed in this revision
--- a/cc3000_HostDriver.lib Sun Sep 08 18:31:33 2013 +0000 +++ b/cc3000_HostDriver.lib Fri Sep 13 18:02:03 2013 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/Kojto/code/cc3000_HostDriver/#b1f1be2cdbc9 +http://mbed.org/users/Kojto/code/cc3000_HostDriver/#f8b31c6e96d6
--- a/doTCPIP.cpp Sun Sep 08 18:31:33 2013 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,176 +0,0 @@
-#include "doTCPIP.h"
-#include "cc3000.h"
-#include "main.h"
-
-using namespace mbed_cc3000;
-
-extern cc3000 wigo;
-
-//volatile uint8_t newData;
-// int32_t server_running;
-//uint8_t ForceFixedSSID;
-//int8_t runSmartConfig; // Flag indicating whether user requested to perform Smart Config
-//volatile uint32_t ulCC3000Connected;
-uint8_t ConnectUsingSmartConfig;
-uint8_t myMAC[8];
-tUserFS userFS;
-
-int8_t requestBuffer[REQ_BUFFER_SIZE];
-//int32_t LAN_Connected = 0;
-
-uint8_t SmartConfigProfilestored = 0xff;
-
-#ifndef CC3000_UNENCRYPTED_SMART_CONFIG
- const uint8_t smartconfigkey[] = {0x73,0x6d,0x61,0x72,0x74,0x63,0x6f,0x6e,0x66,0x69,0x67,0x41,0x45,0x53,0x31,0x36};
-#else
- const uint8_t smartconfigkey = NULL;
-#endif
-
-/** \brief Flag indicating whether to print CC3000 Connection info */
-
-//Device name - used for Smart config in order to stop the Smart phone configuration process
-uint8_t DevServname[] = "CC3000";
-//volatile uint32_t SendmDNSAdvertisment;
-
-
-/* TODO */
-void create_tcp_connection(int32_t port)
-{
- const char python_msg[] = "Hello Python\n";
- int32_t stat;
- int32_t sock;
- //new TCP socket descriptor
- int32_t newsock;
- //destination address
- sockaddr destAddr;
- //local address
- sockaddr LocalAddr;
- socklen_t addrlen;
- memset(&LocalAddr, 0, 8);
- LocalAddr.family = AF_INET;
- LocalAddr.data[0] = (port >> 8) & 0xff;
- LocalAddr.data[1] = port & 0xff;
- memset (&LocalAddr.data[2], 0, 4);
- sock = wigo._socket.socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- while(sock == -1) sock = wigo._socket.socket(AF_INET, SOCK_DGRAM, IPPROTO_TCP);
- wigo._socket.bind(sock,&LocalAddr,sizeof(sockaddr));
- wigo._socket.listen(sock, 1);
- addrlen = sizeof(destAddr);
- while(1)
- {
- newsock = -2;
- printf("Server waiting for connection to Python\n");
- LED_D2_ON;
- while((newsock == -1) || (newsock == -2))
- {
- newsock = wigo._socket.accept(sock,&destAddr, &addrlen);
- }
- printf("Connected\n");
- //receive TCP data
- if(newsock >= 0)
- {
- wigo._socket.recv(newsock, requestBuffer,20,0);
- printf("Input = %s\n", requestBuffer);
- stat = -2;
- stat = wigo._socket.send(newsock, python_msg, strlen(python_msg), 0);
- printf("status= %d\n", stat);
- LED_D2_OFF;
- } else printf("bad socket= %d\n", newsock);
- wigo._socket.closesocket(newsock);
- printf("Done, press any key to repeat\n");
- getchar();
-// printf("\x1B[2J"); //VT100 erase screen
-// printf("\x1B[H"); //VT100 home
- }
-}
-
-void start_smart_config() {
- wigo.start_smart_config(smartconfigkey);
-}
-
-void init_tcp(void)
-{
- int t;
- tNetappIpconfigRetArgs ipinfo2;
-
- check_dhcp();
- //while(checkWiFiConnected() == false);
- // If connectivity is good, run the primary functionality
- // while(1)
- // {
- // if (checkWiFiConnected()) break;
- // wait(1);
- // }
-// printf("Connected\n");
- // If we're not blocked by accept or others, obtain the latest status
- wigo.get_ip_config(&ipinfo2); // data is returned in the ipinfo2 structure
- printf("\n*** Wi-Go board DHCP assigned IP Address = %d.%d.%d.%d\n", ipinfo2.aucIP[3], ipinfo2.aucIP[2], ipinfo2.aucIP[1], ipinfo2.aucIP[0]);
- LED_D3_ON;
-
- t = wigo._socket.mdnsAdvertiser(1, DevServname, sizeof(DevServname));
- printf("mDNS Status= %x\n", t);
-}
-
-void run_tcp_server(void)
-{
- LED_D3_OFF;
- LED_D2_OFF;
- printf("\n\nStarting TCP/IP Server\n");
- init_tcp();
- create_tcp_connection(TCPIP_PORT);
-}
-
-bool check_dhcp(void)
-{
- int32_t t;
- //static uint8_t obtainIpInfoFlag = FALSE;
-
- // Wait until for dhcp
- while (wigo.is_dhcp_configured() == false)
- {
- wait_ms(500);
- printf("waiting\n");
- }
-
- // Check if we are in a connected state. If so, set flags and LED
- //if (wigo.is_connected() == true)
- //{
- //if (obtainIpInfoFlag == FALSE)
- //{
- // obtainIpInfoFlag = TRUE; // Set flag so we don't constantly turn the LED on
- //LED_D3_ON;
- //If Smart Config was performed, we need to send complete notification to the configure (Smart Phone App)
- // if (ConnectUsingSmartConfig==1)
- // {
- // ConnectUsingSmartConfig = 0;
- // SmartConfigProfilestored = SMART_CONFIG_SET;
- // }
-
- //}
- t = wigo._socket.mdnsAdvertiser(1, DevServname, sizeof(DevServname));
- printf("mDNS Status= %x\n", t);
- return true;
- //}
- //return FALSE;
-}
-
-void do_FTC(void)
-{
- printf("Running First Time Configuration\n");
- // server_running = 1;
- //runSmartConfig = 1;
- start_smart_config();
- init_tcp();
- RED_OFF;
- GREEN_OFF;
- BLUE_OFF;
- userFS.FTC = 1;
- wigo._nvmem.write( NVMEM_USER_FILE_1_FILEID, sizeof(userFS), 0, (uint8_t *) &userFS);
- //runSmartConfig = 0;
- SmartConfigProfilestored = SMART_CONFIG_SET;
- wigo._wlan.stop();
- printf("FTC finished\n");
-}
-
-
-
--- a/doTCPIP.h Sun Sep 08 18:31:33 2013 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,111 +0,0 @@
-/****************************************************************************
-*
-* doTCPIP.h - CC3000 TCP/IP
-* Copyright (C) 2011 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.
-*
-*****************************************************************************/
-
-#ifndef DOTCPIP_H
-#define DOTCPIP_H
-
-#include "cc3000.h"
-
-/** TCP/IP Functions
-*
-*/
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#define SMART_CONFIG_SET 0x55
-#define TCPIP_PORT 15000
-
-#define USE_DHCP 1
-#define USE_STATIC_IP 2
-
-#define NONE 0
-#define WEP 1
-#define WPA 2
-#define WPA2 3
-
-// Modify the following settings as necessary for your Wi-Fi Network setup:
-#define IP_ALLOC_METHOD USE_DHCP // for DHCP assigned IP address
-//#define IP_ALLOC_METHOD USE_STATIC_IP // for static IP address
-
-// Default SSID Settings
-#define AP_KEY "87654321"
-#define AP_SECURITY WPA2 // WPA2 must be enabled for use with iPhone or Android phone hotspot!
-#define SSID "test"
-//#define AP_SECURITY NONE // no security but will connect quicker!
-#define STATIC_IP_OCT1 192
-#define STATIC_IP_OCT2 168
-#define STATIC_IP_OCT3 0
-#define STATIC_IP_OCT4 103
-
-#define STATIC_GW_OCT4 1 // Static Gateway address = STATIC_IP_OCT1.STATIC_IP_OCT2.STATIC_IP_OCT3.STATIC_GW_OCT4
-
-#define REQ_BUFFER_SIZE 400
-
-// typedef struct {
-// uint8_t FTC; // First time config performed
-// uint8_t PP_version[2]; // Patch Programmer version
-// uint8_t SERV_PACK[2]; // Service Pack Version
-// uint8_t DRV_VER[3]; // Driver Version
-// uint8_t FW_VER[3]; // Firmware Version
-// uint8_t validCIK; // CIK[] is valid (Client Interface Key)
-// uint8_t CIK[40];
-// } userFS_t;
-
-extern mbed_cc3000::tUserFS userFS;
-
-// extern volatile uint32_t ulSmartConfigFinished,ulCC3000DHCP, OkToDoShutDown, ulCC3000DHCP_configured;
-// extern int32_t server_running;
-// extern volatile uint8_t newData;
-// extern uint8_t ForceFixedSSID;
-// extern int8_t runSmartConfig;
-// extern int8_t requestBuffer[];
- extern uint8_t myMAC[8];
- extern uint8_t SmartConfigProfilestored;
-
-// extern void StartSmartConfig(void);
-
-bool check_dhcp(void);
-void start_smart_config(void);
-void create_tcp_connection(int32_t port);
-void init_tcp(void);
-void run_tcp_server(void);
-void do_FTC(void);
-
-#endif // DOTCPIP_H
--- a/main.cpp Sun Sep 08 18:31:33 2013 +0000
+++ b/main.cpp Fri Sep 13 18:02:03 2013 +0000
@@ -1,13 +1,27 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
#include "mbed.h"
#include "KL25Z_irq_prio.h"
#include "cc3000.h"
-#include "doTCPIP.h"
+#include "tcp_ip_demo.h"
#include "main.h"
using namespace mbed_cc3000;
-// Serial USB port
-Serial pc(USBTX, USBRX);
+#if (WIGO_BOARD)
// Wi-Go battery charger control
DigitalOut PWR_EN1(PTB2);
DigitalOut PWR_EN2(PTB3);
@@ -18,14 +32,15 @@
DigitalOut led1 (PTB8);
DigitalOut led2 (PTB9);
DigitalOut led3 (PTB10);
-// Wi-go cc3000
+#endif
+
+Serial pc(USBTX, USBRX);
cc3000 wigo(PTA16, PTA13, PTD0, SPI(PTD2, PTD3, PTC5), PORTA_IRQn);
-/* TODO REMOVE -> new function with all priorities as well */
-#define WLAN_ISF_PCR PORTA->PCR[16]
-#define WLAN_ISF_ISFR PORTA->ISFR
-#define WLAN_ISF_MASK (1<<16)
-
+/** Initialize LED (only for Wi-go board)
+ * \param none
+ * \return none
+ */
void initLEDs(void)
{
RED_OFF;
@@ -36,6 +51,10 @@
LED_D3_OFF;
}
+/** Print cc3000 information
+ * \param none
+ * \return none
+ */
void print_cc3000_info() {
wigo.get_user_file_info((uint8_t *)&userFS, sizeof(userFS));
wigo.get_mac_address(myMAC);
@@ -48,83 +67,49 @@
printf("FW_VER %i.%i.%i\n",userFS.FW_VER[0], userFS.FW_VER[1], userFS.FW_VER[2]);
}
-int32_t set_static_dhcp(void)
-{
- uint8_t pucIP_Addr[4];
- uint8_t pucIP_DefaultGWAddr[4];
- uint8_t pucSubnetMask[4];
- uint8_t pucDNS[4];
-
- // Subnet mask is assumed to be 255.255.255.0
- pucSubnetMask[0] = 0xFF;
- pucSubnetMask[1] = 0xFF;
- pucSubnetMask[2] = 0xFF;
- pucSubnetMask[3] = 0x0;
-
- // CC3000's IP
- pucIP_Addr[0] = STATIC_IP_OCT1;
- pucIP_Addr[1] = STATIC_IP_OCT2;
- pucIP_Addr[2] = STATIC_IP_OCT3;
- pucIP_Addr[3] = STATIC_IP_OCT4;
-
- // Default Gateway/Router IP
- // 192.168.1.1
- pucIP_DefaultGWAddr[0] = STATIC_IP_OCT1;
- pucIP_DefaultGWAddr[1] = STATIC_IP_OCT2;
- pucIP_DefaultGWAddr[2] = STATIC_IP_OCT3;
- pucIP_DefaultGWAddr[3] = STATIC_GW_OCT4;
-
- // We assume the router is also a DNS server
- pucDNS[0] = STATIC_IP_OCT1;
- pucDNS[1] = STATIC_IP_OCT2;
- pucDNS[2] = STATIC_IP_OCT3;
- pucDNS[3] = STATIC_GW_OCT4;
-
- wigo._netapp.dhcp((uint32_t *)pucIP_Addr,
- (uint32_t *)pucSubnetMask,
- (uint32_t *)pucIP_DefaultGWAddr,
- (uint32_t *)pucDNS);
-
- // reset the CC3000 to apply Static Setting
- wigo._wlan.stop();
- wait(1);
- wigo._wlan.start(0);
-
- // Mask out all non-required events from CC3000
- wigo._wlan.set_event_mask(HCI_EVNT_WLAN_KEEPALIVE|
- HCI_EVNT_WLAN_UNSOL_INIT|
- HCI_EVNT_WLAN_ASYNC_PING_REPORT);
- return(0);
-}
-
+/** Connect to SSID with security
+ * \param ssid Name of SSID
+ * \param key Password
+ * \param sec_mode Security mode
+ * \return none
+ */
void connect_to_ssid(uint8_t *ssid, uint8_t *key, uint8_t sec_mode) {
printf("Connecting to SSID: %s. Timeout is 10s.\n",ssid);
if (wigo.connect_to_AP(ssid, key, sec_mode) == true) {
printf("Connected\n");
} else {
- printf("Connection timed-out (error).\n");
+ printf("Connection timed-out (error). Please restart.\n");
+ while(1);
}
}
+/** Connect to SSID without security
+ * \param ssid Name of SSID
+ * \return none
+ */
void connect_to_ssid(uint8_t *ssid) {
wigo.connect_open(ssid);
}
+/** Main function
+ * \param none
+ * \return int
+ */
int main() {
- // set current to 500mA since we're turning on the Wi-Fi
- PWR_EN1 = 0;
- PWR_EN2 = 1;
+ // Wi-Go set current to 500mA since we're turning on the Wi-Fi
+ SET_PWR_EN1;
+ SET_PWR_EN2;
- pc.baud (115200);
+ pc.baud(115200);
- NVIC_SetAllPriority(3); // Set ALL interrupt priorities to level 3
+ /* KL25 specific code */
+ NVIC_SetAllPriority(3);
NVIC_SetPriority(SPI0_IRQn, 0x0); // Wi-Fi SPI interrupt must be higher priority than SysTick
NVIC_SetPriority(PORTA_IRQn, 0x1);
NVIC_SetPriority(SysTick_IRQn, 0x2); // SysTick set to lower priority than Wi-Fi SPI bus interrupt
- // Clear pending interrupt
- WLAN_ISF_PCR |= PORT_PCR_ISF_MASK;
- WLAN_ISF_ISFR |= WLAN_ISF_MASK;
+ CLEAR_PCR_INTERRUPT;
+ CLEAN_PORT_INTERRUPT;
GREEN_ON;
wigo.start(0);
@@ -151,44 +136,28 @@
#ifdef AP_KEY
connect_to_ssid((uint8_t *)SSID,(uint8_t *)AP_KEY,AP_SECURITY); /* TODO rewrite to const vraiables - NOT MACROS */
#else
- connect_to_ssid(SSID);
+ connect_to_ssid((uint8_t *)SSID);
#endif
#else
- connect_to_ssid(SSID);
+ connect_to_ssid((uint8_t *)SSID);
#endif
break;
case '2':
- //server_running = 1;
- //runSmartConfig = 1;
+ printf("Starting Smart Config configuration.\n");
start_smart_config();
- init_tcp();
- //server_running = 1;
- RED_OFF;
- GREEN_OFF;
- BLUE_OFF;
- printf("Press the reset button on your board and select 1...\n");
- while(1)
- {
- GREEN_ON;
- wait_ms(500);
- GREEN_OFF;
- wait_ms(500);
- }
+ init_dhcp();
+
+ printf("Press the reset button on your board and select 0...\n");
+ while(1);
default:
printf("Wrong selection.\n");
printf("Reset the board and try again.\n");
break;
}
- //server_running = 0;
SmartConfigProfilestored = SMART_CONFIG_SET;
RED_OFF;
GREEN_OFF;
BLUE_OFF;
- //dynamic dhcp is set by default
-#if IP_ALLOC_METHOD == USE_STATIC_IP
- set_static_dhcp();
-#endif
-
run_tcp_server(); // Run TCP/IP Connection to host
}
--- a/main.h Sun Sep 08 18:31:33 2013 +0000 +++ b/main.h Fri Sep 13 18:02:03 2013 +0000 @@ -1,6 +1,25 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef MAIN_H #define MAIN_H +#define WIGO_BOARD 1 + +#if (WIGO_BOARD == 1) + extern DigitalOut ledr; extern DigitalOut ledg; extern DigitalOut ledb; @@ -27,4 +46,47 @@ #define LED_D3_ON led3 = 0; #define LED_D3_TOGGLE led3 = !led3; +#define SET_PWR_EN1 PWR_EN1 = 0 +#define SET_PWR_EN2 PWR_EN2 = 1 + +#define WLAN_ISF_PCR PORTA->PCR[16] +#define WLAN_ISF_ISFR PORTA->ISFR +#define WLAN_ISF_MASK (1<<16) + +#define CLEAR_PCR_INTERRUPT WLAN_ISF_PCR|=PORT_PCR_ISF_MASK; +#define CLEAN_PORT_INTERRUPT WLAN_ISF_ISFR|=WLAN_ISF_MASK; + +#else + +#define CLEAR_PCR_INTERRUPT +#define CLEAN_PORT_INTERRUPT + +#define RED_OFF +#define RED_ON +#define RED_TOGGLE +#define GREEN_OFF +#define GREEN_ON +#define GREEN_TOGGLE +#define BLUE_OFF +#define BLUE_ON +#define BLUE_TOGGLE +#define LED_D1_OFF +#define LED_D1_ON +#define LED_D1_TOGGLE +#define LED_D2_OFF +#define LED_D2_ON +#define LED_D2_TOGGLE +#define LED_D3_OFF +#define LED_D3_ON +#define LED_D3_TOGGLE + +#define SET_PWR_EN1 +#define SET_PWR_EN2 + +#define WLAN_ISF_PCR +#define WLAN_ISF_ISFR +#define WLAN_ISF_MASK + #endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tcp_ip_demo.cpp Fri Sep 13 18:02:03 2013 +0000
@@ -0,0 +1,197 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "tcp_ip_demo.h"
+#include "cc3000.h"
+#include "main.h"
+
+using namespace mbed_cc3000;
+
+extern cc3000 wigo;
+
+uint8_t ConnectUsingSmartConfig;
+uint8_t myMAC[8];
+tUserFS userFS;
+
+uint8_t SmartConfigProfilestored = 0xff;
+
+#ifndef CC3000_UNENCRYPTED_SMART_CONFIG
+ const uint8_t smartconfigkey[] = {0x73,0x6d,0x61,0x72,0x74,0x63,0x6f,0x6e,0x66,0x69,0x67,0x41,0x45,0x53,0x31,0x36};
+#else
+ const uint8_t smartconfigkey = 0;
+#endif
+
+/* Device name - used for Smart config in order to stop the Smart phone configuration process */
+static uint8_t DevServname[] = "CC3000";
+static int8_t requestBuffer[REQ_BUFFER_SIZE];
+
+/** Start tcp server
+ * \param port Port for server
+ * \return none
+ */
+void create_tcp_connection(int32_t port) {
+ const char python_msg[] = "Hello Python\n";
+ int32_t stat;
+ cc3000_server server = wigo.create_tcp_server(0, 15000);
+
+ server.bind();
+ server.listen(1); /* backlog = 1 */
+ while (1) {
+ stat = server.accept();
+ printf("Connected\n");
+ if (stat >= 0) {
+ server.receive(requestBuffer,20,0);
+ printf("Input = %s\n", requestBuffer);
+ stat = server.send((void *)python_msg, strlen(python_msg), 0);
+ printf("status= %d\n", stat);
+ } else {
+ printf("bad socket= %d\n", stat);
+ }
+ server.close();
+ printf("Done, press any key to repeat\n");
+ getchar();
+ }
+}
+
+/** Start smart config
+ * \param none
+ * \return none
+ */
+void start_smart_config() {
+ wigo.start_smart_config(smartconfigkey);
+}
+
+/** Initialize
+ * \param none
+ * \return none
+ */
+void init_dhcp(void)
+{
+ int32_t t;
+ tNetappIpconfigRetArgs ipinfo2;
+
+ //dynamic dhcp is set by default
+#if IP_ALLOC_METHOD == USE_STATIC_IP
+ set_static_dhcp();
+#endif
+ check_dhcp();
+
+ // If we're not blocked by accept or others, obtain the latest status
+ wigo.get_ip_config(&ipinfo2); // data is returned in the ipinfo2 structure
+ printf("\n*** Wi-Go board DHCP assigned IP Address = %d.%d.%d.%d\n", ipinfo2.aucIP[3], ipinfo2.aucIP[2], ipinfo2.aucIP[1], ipinfo2.aucIP[0]);
+
+ t = wigo._socket.mdnsAdvertiser(1, DevServname, sizeof(DevServname));
+ printf("mDNS Status= %x\n", t);
+}
+
+/** Waits for dhcp to be set
+ * \param none
+ * \return none
+ */
+void check_dhcp(void)
+{
+ int32_t t;
+
+ while (wigo.is_dhcp_configured() == false)
+ {
+ wait_ms(500);
+ printf("Waiting for dhcp to be set.\n");
+ }
+
+ t = wigo._socket.mdnsAdvertiser(1, DevServname, sizeof(DevServname));
+ printf("mDNS Status= %x\n", t);
+}
+
+/** Sets static DHCP (auto dhpc by default)
+ * \param none
+ * \return none
+ */
+void set_static_dhcp(void)
+{
+ uint8_t pucIP_Addr[4];
+ uint8_t pucIP_DefaultGWAddr[4];
+ uint8_t pucSubnetMask[4];
+ uint8_t pucDNS[4];
+
+ // Subnet mask is assumed to be 255.255.255.0
+ pucSubnetMask[0] = 0xFF;
+ pucSubnetMask[1] = 0xFF;
+ pucSubnetMask[2] = 0xFF;
+ pucSubnetMask[3] = 0x0;
+
+ // CC3000's IP
+ pucIP_Addr[0] = STATIC_IP_OCT1;
+ pucIP_Addr[1] = STATIC_IP_OCT2;
+ pucIP_Addr[2] = STATIC_IP_OCT3;
+ pucIP_Addr[3] = STATIC_IP_OCT4;
+
+ // Default Gateway/Router IP
+ // 192.168.1.1
+ pucIP_DefaultGWAddr[0] = STATIC_IP_OCT1;
+ pucIP_DefaultGWAddr[1] = STATIC_IP_OCT2;
+ pucIP_DefaultGWAddr[2] = STATIC_IP_OCT3;
+ pucIP_DefaultGWAddr[3] = STATIC_GW_OCT4;
+
+ // We assume the router is also a DNS server
+ pucDNS[0] = STATIC_IP_OCT1;
+ pucDNS[1] = STATIC_IP_OCT2;
+ pucDNS[2] = STATIC_IP_OCT3;
+ pucDNS[3] = STATIC_GW_OCT4;
+
+ wigo._netapp.dhcp((uint32_t *)pucIP_Addr,
+ (uint32_t *)pucSubnetMask,
+ (uint32_t *)pucIP_DefaultGWAddr,
+ (uint32_t *)pucDNS);
+
+ // reset the CC3000 to apply Static Setting
+ wigo._wlan.stop();
+ wait(1);
+ wigo._wlan.start(0);
+
+ // Mask out all non-required events from CC3000
+ wigo._wlan.set_event_mask(HCI_EVNT_WLAN_KEEPALIVE|
+ HCI_EVNT_WLAN_UNSOL_INIT|
+ HCI_EVNT_WLAN_ASYNC_PING_REPORT);
+}
+
+/** Executes functions for tcp/ip server
+ * \param none
+ * \return none
+ */
+void run_tcp_server(void)
+{
+ init_dhcp();
+ printf("\n\nStarting TCP/IP Server\n");
+ create_tcp_connection(TCPIP_PORT);
+}
+
+/** First time configuration
+ * \param none
+ * \return none
+ */
+void do_FTC(void)
+{
+ printf("Running First Time Configuration\n");
+ start_smart_config();
+ init_dhcp();
+ userFS.FTC = 1;
+ wigo.set_user_file_info((uint8_t *)&userFS, sizeof(userFS));
+ SmartConfigProfilestored = SMART_CONFIG_SET;
+ wigo._wlan.stop();
+ printf("FTC finished.\n");
+}
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tcp_ip_demo.h Fri Sep 13 18:02:03 2013 +0000 @@ -0,0 +1,61 @@ +#ifndef DOTCPIP_H +#define DOTCPIP_H + +#include "cc3000.h" + +/** TCP/IP Functions +* +*/ +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + +#define SMART_CONFIG_SET 0x55 +#define TCPIP_PORT 15000 + +#define USE_DHCP 1 +#define USE_STATIC_IP 2 + +#define NONE 0 +#define WEP 1 +#define WPA 2 +#define WPA2 3 + +// Modify the following settings as necessary for your Wi-Fi Network setup: +#define IP_ALLOC_METHOD USE_DHCP // for DHCP assigned IP address +//#define IP_ALLOC_METHOD USE_STATIC_IP // for static IP address + +// Default SSID Settings +#define AP_KEY "87654321" +#define AP_SECURITY WPA2 // WPA2 must be enabled for use with iPhone or Android phone hotspot! +#define SSID "test" +//#define AP_SECURITY NONE // no security but will connect quicker! +#define STATIC_IP_OCT1 192 +#define STATIC_IP_OCT2 168 +#define STATIC_IP_OCT3 0 +#define STATIC_IP_OCT4 103 + +#define STATIC_GW_OCT4 1 // Static Gateway address = STATIC_IP_OCT1.STATIC_IP_OCT2.STATIC_IP_OCT3.STATIC_GW_OCT4 + +#define REQ_BUFFER_SIZE 400 + + +extern mbed_cc3000::tUserFS userFS; + +extern uint8_t myMAC[8]; +extern uint8_t SmartConfigProfilestored; + + +void check_dhcp(void); +void start_smart_config(void); +void create_tcp_connection(int32_t port); +void init_dhcp(void); +void run_tcp_server(void); +void do_FTC(void); +void set_dhcp(void); + +#endif // DOTCPIP_H


SimpleLink Wi-Fi CC3000