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