CC3000 test App

Dependencies:   CC3000HostDriver mbed

Committer:
dflet
Date:
Sat Sep 14 18:02:36 2013 +0000
Revision:
2:17c37c0b0534
Parent:
1:ee5703f58be3
Removed last change as its not required, problems I encountered were due to too many debug printouts.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:305844973572 1
dflet 0:305844973572 2
dflet 0:305844973572 3
dflet 0:305844973572 4 #include "mbed.h"
dflet 0:305844973572 5 #include "wlan.h"
dflet 0:305844973572 6 #include "cc3000.h"
dflet 0:305844973572 7 #include "CC3000Core.h"
dflet 0:305844973572 8 #include "hci.h"
dflet 0:305844973572 9 #include "CC3000TestApp.h"
dflet 0:305844973572 10 #include "spi.h"
dflet 0:305844973572 11 #include "DigitalClass.h"
dflet 0:305844973572 12
dflet 0:305844973572 13 extern volatile unsigned long ulSmartConfigFinished;
dflet 0:305844973572 14 volatile unsigned long //ulSmartConfigFinished,
dflet 0:305844973572 15 ulCC3000Connected,
dflet 0:305844973572 16 ulCC3000DHCP,
dflet 0:305844973572 17 OkToDoShutDown,
dflet 0:305844973572 18 ulCC3000DHCP_configured;
dflet 0:305844973572 19
dflet 0:305844973572 20 volatile unsigned char ucStopSmartConfig;
dflet 0:305844973572 21
dflet 0:305844973572 22 #define NETAPP_IPCONFIG_MAC_OFFSET (20)
dflet 0:305844973572 23 #define CC3000_APP_BUFFER_SIZE (5)
dflet 0:305844973572 24 #define CC3000_RX_BUFFER_OVERHEAD_SIZE (20)
dflet 0:305844973572 25
dflet 0:305844973572 26 DigitalClass Dio(p9, p10);
dflet 0:305844973572 27 InterruptIn irq(p9);
dflet 0:305844973572 28 /*
dflet 0:305844973572 29 unsigned char pucCC3000_Rx_Buffer[CC3000_APP_BUFFER_SIZE + CC3000_RX_BUFFER_OVERHEAD_SIZE];
dflet 0:305844973572 30 */
dflet 0:305844973572 31
dflet 0:305844973572 32 /* The original version of the function below had Serial.prints()
dflet 0:305844973572 33 to display an event, but since an async event can happen at any time,
dflet 0:305844973572 34 even in the middle of another Serial.print(), sometimes the sketch
dflet 0:305844973572 35 would lock up because we were trying to print in the middle of
dflet 0:305844973572 36 a print.
dflet 0:305844973572 37
dflet 0:305844973572 38 So now we just set a flag and write to a string, and the master
dflet 0:305844973572 39 loop can deal with it when it wants.
dflet 0:305844973572 40 */
dflet 0:305844973572 41 int8_t asyncNotificationWaiting=false;
dflet 0:305844973572 42 long lastAsyncEvent;
dflet 0:305844973572 43 int8_t dhcpIPAddress[4];
dflet 0:305844973572 44
dflet 0:305844973572 45
dflet 0:305844973572 46
dflet 0:305844973572 47
dflet 0:305844973572 48
dflet 0:305844973572 49
dflet 0:305844973572 50
dflet 0:305844973572 51
dflet 0:305844973572 52 /*-------------------------------------------------------------------
dflet 0:305844973572 53
dflet 0:305844973572 54 The TI library calls this routine when asynchronous events happen.
dflet 0:305844973572 55
dflet 0:305844973572 56 For example you tell the CC3000 to turn itself on and connect
dflet 0:305844973572 57 to an access point then your code can go on to do its own thing.
dflet 0:305844973572 58 When the CC3000 is done configuring itself (e.g. it gets an IP
dflet 0:305844973572 59 address from the DHCP server) it will call this routine so you
dflet 0:305844973572 60 can take appropriate action.
dflet 0:305844973572 61
dflet 0:305844973572 62 ---------------------------------------------------------------------*/
dflet 0:305844973572 63
dflet 0:305844973572 64
dflet 0:305844973572 65 void CC3000_AsynchCallback(long lEventType, char * data, unsigned char length) {
dflet 0:305844973572 66
dflet 0:305844973572 67 switch (lEventType) {
dflet 0:305844973572 68
dflet 0:305844973572 69 case HCI_EVNT_WLAN_ASYNC_SIMPLE_CONFIG_DONE:
dflet 0:305844973572 70 ulSmartConfigFinished = 1;
dflet 0:305844973572 71 ucStopSmartConfig = 1;
dflet 0:305844973572 72 printf("CC3000 Async event: Simple config done\r\n");
dflet 0:305844973572 73 break;
dflet 0:305844973572 74
dflet 0:305844973572 75 case HCI_EVNT_WLAN_UNSOL_CONNECT:
dflet 0:305844973572 76 ulCC3000Connected = 1;
dflet 0:305844973572 77 setCC3000MachineState(CC3000_INIT);
dflet 0:305844973572 78 printf("CC3000 Async event: Unsolicited connect\r\n");
dflet 0:305844973572 79 setCC3000MachineState(CC3000_ASSOC);
dflet 0:305844973572 80 break;
dflet 0:305844973572 81
dflet 0:305844973572 82 case HCI_EVNT_WLAN_UNSOL_DISCONNECT:
dflet 0:305844973572 83 ulCC3000Connected = 0;
dflet 0:305844973572 84 ulCC3000DHCP = 0;
dflet 0:305844973572 85 ulCC3000DHCP_configured = 0;
dflet 0:305844973572 86 unsetCC3000MachineState(CC3000_ASSOC);
dflet 0:305844973572 87 printf("CC3000 Async event: Unsolicted disconnect\r\n");
dflet 0:305844973572 88 break;
dflet 0:305844973572 89
dflet 0:305844973572 90 case HCI_EVNT_WLAN_UNSOL_DHCP:
dflet 0:305844973572 91 // Notes:
dflet 0:305844973572 92 // 1) IP config parameters are received swapped
dflet 0:305844973572 93 // 2) IP config parameters are valid only if status is OK, i.e. ulCC3000DHCP becomes 1
dflet 0:305844973572 94 // only if status is OK, the flag is set to 1 and the addresses are valid
dflet 0:305844973572 95 if ( *(data + NETAPP_IPCONFIG_MAC_OFFSET) == 0) {
dflet 0:305844973572 96 ulCC3000DHCP = 1;
dflet 0:305844973572 97 setCC3000MachineState(CC3000_IP_ALLOC);
dflet 0:305844973572 98 printf("CC3000 Async event: Got IP address via DHCP: ");
dflet 0:305844973572 99 printf("%i",data[3]); printf(".");
dflet 0:305844973572 100 printf("%i",data[2]); printf(".");
dflet 0:305844973572 101 printf("%i",data[1]); printf(".");
dflet 0:305844973572 102 printf("%i",data[0]);
dflet 0:305844973572 103 printf("\r\n");
dflet 0:305844973572 104 }
dflet 0:305844973572 105 else {
dflet 0:305844973572 106 ulCC3000DHCP = 0;
dflet 0:305844973572 107 printf("CC3000 Async event: Unsolicited DHCP, no IP address\r\n");
dflet 0:305844973572 108 }
dflet 0:305844973572 109 break;
dflet 0:305844973572 110
dflet 0:305844973572 111 case HCI_EVENT_CC3000_CAN_SHUT_DOWN:
dflet 0:305844973572 112 OkToDoShutDown = 1;
dflet 0:305844973572 113 printf("CC3000 Async event: OK to shut down\r\n");
dflet 0:305844973572 114 break;
dflet 0:305844973572 115
dflet 0:305844973572 116 }
dflet 0:305844973572 117 }
dflet 0:305844973572 118
dflet 0:305844973572 119
dflet 0:305844973572 120
dflet 0:305844973572 121 long ReadWlanInterruptPin(void) {
dflet 0:305844973572 122 int8_t val;
dflet 0:305844973572 123 //printf("WLAN_IRQ %i \r\n",Dio.WLAN_IRQ.read());
dflet 0:305844973572 124 val = Dio.WLAN_IRQ.read();
dflet 0:305844973572 125 return (long)val;
dflet 0:305844973572 126 }
dflet 0:305844973572 127
dflet 0:305844973572 128
dflet 0:305844973572 129 void WriteWlanPin( unsigned char val ) {
dflet 0:305844973572 130
dflet 0:305844973572 131 if (val) {
dflet 0:305844973572 132 Dio.WLAN_EN = 1;
dflet 0:305844973572 133 //printf("WLAN_EN %i \r\n",val);
dflet 0:305844973572 134 }
dflet 0:305844973572 135 else {
dflet 0:305844973572 136 Dio.WLAN_EN = 0;
dflet 0:305844973572 137 //printf("WLAN_EN %i \r\n",val);
dflet 0:305844973572 138 }
dflet 0:305844973572 139 }
dflet 0:305844973572 140
dflet 0:305844973572 141 void WlanInterruptEnable(void) {
dflet 1:ee5703f58be3 142
dflet 1:ee5703f58be3 143 int8_t val;
dflet 0:305844973572 144 irq.fall(&IntSpi);
dflet 1:ee5703f58be3 145
dflet 0:305844973572 146 //__enable_irq(); //Enable Interrupts
dflet 0:305844973572 147 //SPIInterruptsEnabled = 1;
dflet 1:ee5703f58be3 148 }
dflet 0:305844973572 149
dflet 0:305844973572 150
dflet 0:305844973572 151 void WlanInterruptDisable(void) {
dflet 0:305844973572 152
dflet 0:305844973572 153 irq.fall(NULL);
dflet 0:305844973572 154
dflet 0:305844973572 155 //__disable_irq(); //Disable Interrupts
dflet 0:305844973572 156 //SPIInterruptsEnabled = 0;
dflet 0:305844973572 157 }
dflet 0:305844973572 158
dflet 0:305844973572 159 char *SendFirmwarePatch(unsigned long *Length) {
dflet 0:305844973572 160 *Length = 0;
dflet 0:305844973572 161 return NULL;
dflet 0:305844973572 162 }
dflet 0:305844973572 163
dflet 0:305844973572 164
dflet 0:305844973572 165
dflet 0:305844973572 166 char *SendDriverPatch(unsigned long *Length) {
dflet 0:305844973572 167 *Length = 0;
dflet 0:305844973572 168 return NULL;
dflet 0:305844973572 169 }
dflet 0:305844973572 170
dflet 0:305844973572 171
dflet 0:305844973572 172 char *SendBootloaderPatch(unsigned long *Length) {
dflet 0:305844973572 173 *Length = 0;
dflet 0:305844973572 174 return NULL;
dflet 0:305844973572 175 }
dflet 0:305844973572 176
dflet 0:305844973572 177