CC3000 test App
Dependencies: CC3000HostDriver mbed
Diff: CC3000Core.cpp
- Revision:
- 0:305844973572
- Child:
- 1:ee5703f58be3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CC3000Core.cpp Fri Aug 02 15:14:41 2013 +0000 @@ -0,0 +1,174 @@ + + + +#include "mbed.h" +#include "wlan.h" +#include "cc3000.h" +#include "CC3000Core.h" +#include "hci.h" +#include "CC3000TestApp.h" +#include "spi.h" +#include "DigitalClass.h" + +extern volatile unsigned long ulSmartConfigFinished; +volatile unsigned long //ulSmartConfigFinished, + ulCC3000Connected, + ulCC3000DHCP, + OkToDoShutDown, + ulCC3000DHCP_configured; + +volatile unsigned char ucStopSmartConfig; + +#define NETAPP_IPCONFIG_MAC_OFFSET (20) +#define CC3000_APP_BUFFER_SIZE (5) +#define CC3000_RX_BUFFER_OVERHEAD_SIZE (20) + +DigitalClass Dio(p9, p10); +InterruptIn irq(p9); +/* +unsigned char pucCC3000_Rx_Buffer[CC3000_APP_BUFFER_SIZE + CC3000_RX_BUFFER_OVERHEAD_SIZE]; +*/ + +/* The original version of the function below had Serial.prints() + to display an event, but since an async event can happen at any time, + even in the middle of another Serial.print(), sometimes the sketch + would lock up because we were trying to print in the middle of + a print. + + So now we just set a flag and write to a string, and the master + loop can deal with it when it wants. +*/ +int8_t asyncNotificationWaiting=false; +long lastAsyncEvent; +int8_t dhcpIPAddress[4]; + + + + + + + + +/*------------------------------------------------------------------- + + The TI library calls this routine when asynchronous events happen. + + For example you tell the CC3000 to turn itself on and connect + to an access point then your code can go on to do its own thing. + When the CC3000 is done configuring itself (e.g. it gets an IP + address from the DHCP server) it will call this routine so you + can take appropriate action. + +---------------------------------------------------------------------*/ + + +void CC3000_AsynchCallback(long lEventType, char * data, unsigned char length) { + + switch (lEventType) { + + case HCI_EVNT_WLAN_ASYNC_SIMPLE_CONFIG_DONE: + ulSmartConfigFinished = 1; + ucStopSmartConfig = 1; + printf("CC3000 Async event: Simple config done\r\n"); + break; + + case HCI_EVNT_WLAN_UNSOL_CONNECT: + ulCC3000Connected = 1; + setCC3000MachineState(CC3000_INIT); + printf("CC3000 Async event: Unsolicited connect\r\n"); + setCC3000MachineState(CC3000_ASSOC); + break; + + case HCI_EVNT_WLAN_UNSOL_DISCONNECT: + ulCC3000Connected = 0; + ulCC3000DHCP = 0; + ulCC3000DHCP_configured = 0; + unsetCC3000MachineState(CC3000_ASSOC); + printf("CC3000 Async event: Unsolicted disconnect\r\n"); + break; + + case HCI_EVNT_WLAN_UNSOL_DHCP: + // Notes: + // 1) IP config parameters are received swapped + // 2) IP config parameters are valid only if status is OK, i.e. ulCC3000DHCP becomes 1 + // only if status is OK, the flag is set to 1 and the addresses are valid + if ( *(data + NETAPP_IPCONFIG_MAC_OFFSET) == 0) { + ulCC3000DHCP = 1; + setCC3000MachineState(CC3000_IP_ALLOC); + printf("CC3000 Async event: Got IP address via DHCP: "); + printf("%i",data[3]); printf("."); + printf("%i",data[2]); printf("."); + printf("%i",data[1]); printf("."); + printf("%i",data[0]); + printf("\r\n"); + } + else { + ulCC3000DHCP = 0; + printf("CC3000 Async event: Unsolicited DHCP, no IP address\r\n"); + } + break; + + case HCI_EVENT_CC3000_CAN_SHUT_DOWN: + OkToDoShutDown = 1; + printf("CC3000 Async event: OK to shut down\r\n"); + break; + + } + } + + + +long ReadWlanInterruptPin(void) { + int8_t val; + //printf("WLAN_IRQ %i \r\n",Dio.WLAN_IRQ.read()); + val = Dio.WLAN_IRQ.read(); + return (long)val; + } + + +void WriteWlanPin( unsigned char val ) { + + if (val) { + Dio.WLAN_EN = 1; + //printf("WLAN_EN %i \r\n",val); + } + else { + Dio.WLAN_EN = 0; + //printf("WLAN_EN %i \r\n",val); + } + } + +void WlanInterruptEnable(void) { + irq.fall(&IntSpi); + //__enable_irq(); //Enable Interrupts + //SPIInterruptsEnabled = 1; + } + + +void WlanInterruptDisable(void) { + + irq.fall(NULL); + + //__disable_irq(); //Disable Interrupts + //SPIInterruptsEnabled = 0; + } + + char *SendFirmwarePatch(unsigned long *Length) { + *Length = 0; + return NULL; + } + + + +char *SendDriverPatch(unsigned long *Length) { + *Length = 0; + return NULL; + } + + +char *SendBootloaderPatch(unsigned long *Length) { + *Length = 0; + return NULL; + } + + \ No newline at end of file