Updated CC30000 example from David Sidrane
This commit is contained in:
parent
9df979417f
commit
081396c18d
@ -684,4 +684,6 @@
|
||||
* apps/Makefile: Need to include external/Make.defs if we want
|
||||
allow external applications to participate in the NuttX
|
||||
configuration. Suggested by gdi@embedders.org (2013-10-14).
|
||||
* apps/examplex/cc3300: Updates as part of larger re-organizaion
|
||||
of CC3000 logic by David Sidrane (2013-10-16).
|
||||
|
||||
|
@ -23,25 +23,20 @@
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
#include "board.h"
|
||||
#include <stdbool.h>
|
||||
#include <nuttx/wireless/cc3000/wlan.h>
|
||||
#include <nuttx/wireless/cc3000/hci.h>
|
||||
#include <nuttx/wireless/cc3000/spi.h>
|
||||
#include <arch/board/kl_wifi.h>
|
||||
|
||||
#include <nuttx/wireless/cc3000.h>
|
||||
|
||||
volatile unsigned long ulSmartConfigFinished,
|
||||
ulCC3000Connected,
|
||||
ulCC3000DHCP,
|
||||
OkToDoShutDown,
|
||||
ulCC3000DHCP_configured;
|
||||
ulCC3000Connected,
|
||||
ulCC3000DHCP,
|
||||
OkToDoShutDown,
|
||||
ulCC3000DHCP_configured;
|
||||
|
||||
volatile uint8_t ucStopSmartConfig;
|
||||
|
||||
|
||||
|
||||
#define NETAPP_IPCONFIG_MAC_OFFSET (20)
|
||||
#define CC3000_APP_BUFFER_SIZE (5)
|
||||
#define CC3000_RX_BUFFER_OVERHEAD_SIZE (20)
|
||||
@ -50,7 +45,6 @@ volatile uint8_t ucStopSmartConfig;
|
||||
uint8_t 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
|
||||
@ -60,11 +54,11 @@ uint8_t pucCC3000_Rx_Buffer[CC3000_APP_BUFFER_SIZE + CC3000_RX_BUFFER_OVERHEAD_S
|
||||
So now we just set a flag and write to a string, and the master
|
||||
loop can deal with it when it wants.
|
||||
*/
|
||||
|
||||
uint8_t asyncNotificationWaiting = false;
|
||||
long lastAsyncEvent;
|
||||
uint8_t dhcpIPAddress[4];
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
|
||||
The TI library calls this routine when asynchronous events happen.
|
||||
@ -77,65 +71,65 @@ uint8_t dhcpIPAddress[4];
|
||||
|
||||
---------------------------------------------------------------------*/
|
||||
|
||||
|
||||
void CC3000_AsyncCallback(long lEventType, char * data, uint8_t length)
|
||||
{
|
||||
lastAsyncEvent = lEventType;
|
||||
|
||||
lastAsyncEvent = lEventType;
|
||||
switch (lEventType)
|
||||
{
|
||||
case HCI_EVNT_WLAN_ASYNC_SIMPLE_CONFIG_DONE:
|
||||
ulSmartConfigFinished = 1;
|
||||
ucStopSmartConfig = 1;
|
||||
asyncNotificationWaiting=true;
|
||||
break;
|
||||
|
||||
switch (lEventType) {
|
||||
case HCI_EVNT_WLAN_UNSOL_CONNECT:
|
||||
ulCC3000Connected = 1;
|
||||
asyncNotificationWaiting=true;
|
||||
break;
|
||||
|
||||
case HCI_EVNT_WLAN_ASYNC_SIMPLE_CONFIG_DONE:
|
||||
ulSmartConfigFinished = 1;
|
||||
ucStopSmartConfig = 1;
|
||||
asyncNotificationWaiting=true;
|
||||
break;
|
||||
case HCI_EVNT_WLAN_UNSOL_DISCONNECT:
|
||||
ulCC3000Connected = 0;
|
||||
ulCC3000DHCP = 0;
|
||||
ulCC3000DHCP_configured = 0;
|
||||
asyncNotificationWaiting=true;
|
||||
break;
|
||||
|
||||
case HCI_EVNT_WLAN_UNSOL_CONNECT:
|
||||
ulCC3000Connected = 1;
|
||||
asyncNotificationWaiting=true;
|
||||
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
|
||||
|
||||
case HCI_EVNT_WLAN_UNSOL_DISCONNECT:
|
||||
ulCC3000Connected = 0;
|
||||
ulCC3000DHCP = 0;
|
||||
ulCC3000DHCP_configured = 0;
|
||||
asyncNotificationWaiting=true;
|
||||
break;
|
||||
if (*(data + NETAPP_IPCONFIG_MAC_OFFSET) == 0)
|
||||
{
|
||||
ulCC3000DHCP = 1;
|
||||
dhcpIPAddress[0] = data[3];
|
||||
dhcpIPAddress[1] = data[2];
|
||||
dhcpIPAddress[2] = data[1];
|
||||
dhcpIPAddress[3] = data[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
ulCC3000DHCP = 0;
|
||||
dhcpIPAddress[0] = 0;
|
||||
dhcpIPAddress[1] = 0;
|
||||
dhcpIPAddress[2] = 0;
|
||||
dhcpIPAddress[3] = 0;
|
||||
}
|
||||
asyncNotificationWaiting=true;
|
||||
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;
|
||||
dhcpIPAddress[0] = data[3];
|
||||
dhcpIPAddress[1] = data[2];
|
||||
dhcpIPAddress[2] = data[1];
|
||||
dhcpIPAddress[3] = data[0];
|
||||
}
|
||||
else {
|
||||
ulCC3000DHCP = 0;
|
||||
dhcpIPAddress[0] = 0;
|
||||
dhcpIPAddress[1] = 0;
|
||||
dhcpIPAddress[2] = 0;
|
||||
dhcpIPAddress[3] = 0;
|
||||
}
|
||||
asyncNotificationWaiting=true;
|
||||
break;
|
||||
|
||||
case HCI_EVENT_CC3000_CAN_SHUT_DOWN:
|
||||
OkToDoShutDown = 1;
|
||||
asyncNotificationWaiting=true;
|
||||
break;
|
||||
|
||||
default:
|
||||
asyncNotificationWaiting=true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
case HCI_EVENT_CC3000_CAN_SHUT_DOWN:
|
||||
OkToDoShutDown = 1;
|
||||
asyncNotificationWaiting=true;
|
||||
break;
|
||||
|
||||
default:
|
||||
asyncNotificationWaiting=true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
|
||||
@ -146,46 +140,24 @@ void CC3000_AsyncCallback(long lEventType, char * data, uint8_t length)
|
||||
|
||||
---------------------------------------------------------------------*/
|
||||
|
||||
char *SendFirmwarePatch(unsigned long *Length) {
|
||||
*Length = 0;
|
||||
return NULL;
|
||||
char *SendFirmwarePatch(unsigned long *Length)
|
||||
{
|
||||
*Length = 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
char *SendDriverPatch(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;
|
||||
char *SendBootloaderPatch(unsigned long *Length)
|
||||
{
|
||||
*Length = 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
|
||||
The TI library calls these routines to enable or disable interrupts
|
||||
on the WLAN_IRQ pin.
|
||||
|
||||
Originally WlanInterruptEnable() called attachInterrupt() and
|
||||
WlanInterruptDisable() called detachInterrupt() but the library
|
||||
was occationally locking up here, so now these routines just
|
||||
set a flag. The interrupt routine will always fire but if the
|
||||
flag isn't set it just returns immediately.
|
||||
|
||||
--------------------------------------------------------------------*/
|
||||
|
||||
void WlanInterruptEnable(void) {
|
||||
SPIInterruptsEnabled = 1;
|
||||
}
|
||||
|
||||
|
||||
void WlanInterruptDisable(void) {
|
||||
SPIInterruptsEnabled = 0;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
|
||||
This is my routine to simplify CC3000 startup.
|
||||
@ -196,21 +168,14 @@ void WlanInterruptDisable(void) {
|
||||
|
||||
--------------------------------------------------------------------*/
|
||||
|
||||
void CC3000_Init(void) {
|
||||
void CC3000_Init(void)
|
||||
{
|
||||
wireless_archinitialize();
|
||||
|
||||
SPIInterruptsEnabled = 0;
|
||||
CC3000_wlan_init( CC3000_AsyncCallback,
|
||||
SendFirmwarePatch,
|
||||
SendDriverPatch,
|
||||
SendBootloaderPatch);
|
||||
|
||||
Wlan_Setup();
|
||||
|
||||
wlan_init( CC3000_AsyncCallback,
|
||||
SendFirmwarePatch,
|
||||
SendDriverPatch,
|
||||
SendBootloaderPatch,
|
||||
ReadWlanInterruptPin,
|
||||
WlanInterruptEnable,
|
||||
WlanInterruptDisable,
|
||||
WriteWlanEnablePin);
|
||||
|
||||
wlan_start(0);
|
||||
wlan_start(0);
|
||||
}
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user