![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Cubic Hand project for EECS 249A course.
Dependencies: MMA8451Q TSI cc3000_hostdriver_mbedsocket NVIC_set_all_priorities mbed Multi_WS2811
GloveWifi.cpp
- Committer:
- joseoyola
- Date:
- 2014-12-15
- Revision:
- 56:f95ec9baa4cb
- Parent:
- 45:812e60077a12
File content as of revision 56:f95ec9baa4cb:
#include "GloveWifi.h" #include "mbed.h" #include "cc3000.h" #include "TCPSocketConnection.h" #include "TCPSocketServer.h" #include "NVIC_set_all_priorities.h" #define SSID "CubeNet" #define PASSWORD "modelbased" #define ECHO_SERVER_ADDRESS "192.168.1.33" #define ECHO_SERVER_PORT 2000 #define MMA8451_I2C_ADDRESS (0x1d<<1) GloveWifi::GloveWifi(): DropCount(0) { } GloveWifi::~GloveWifi() { delete socket; delete wifi; } void GloveWifi::Init() { //Init from the cc3000 example DigitalOut PWR_EN1(PTB2); DigitalOut PWR_EN2(PTB3); // Wi-Go set current to 500mA since we're turning on the Wi-Fi PWR_EN1 = 0; PWR_EN2 = 1; NVIC_set_all_irq_priorities(0x3); 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 PORTA->PCR[16] |= PORT_PCR_ISF_MASK; PORTA->ISFR |= (1 << 16); } void GloveWifi::Connect() { //wifi = new cc3000(PTD4, PTC9, PTD0, SPI(PTD2, PTD3, PTD1), SSID, PASSWORD, WPA2, false); wifi = new cc3000(PTD4, PTC9, PTC4, SPI(PTC6, PTC7, PTC5), SSID, PASSWORD, WPA2, false); wifi->init(); if (wifi->connect() == -1) { printf("Failed to connect. Please verify connection details and try again. \r\n"); } else { printf("IP address: %s \r\n", wifi->getIPAddress()); } socket = new TCPSocketConnection; while (socket->connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT) < 0) { printf("Unable to connect to (%s) on port (%d) \r\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT); wait(1); } printf("Connected!\r\n"); socket->set_blocking(false, 10); } void GloveWifi::Disconnect() { socket->close(); wifi->disconnect(); delete socket; delete wifi; } void GloveWifi::Reconnect() { socket->close(); delete socket; socket = new TCPSocketConnection; while (socket->connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT) < 0) { printf("Unable to connect to (%s) on port (%d) \r\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT); wait(1); } socket->set_blocking(false, 10); //printf("Reconnected!\r\n"); } int GloveWifi::GetDataFromBuffer(char * buf, int size) { //printf("Buffer Size: %d\r\n", wifi->_simple_link.get_transmit_error()); int numR = 0; numR = socket->receive((char *)buf, size); if(numR == -1) { DropCount++; }else { DropCount = 0; } if(DropCount > 100) { Reconnect(); DropCount = 0; } return numR; } uint8_t GloveWifi::SendDataToGlove(uint8_t * buf, uint16_t size) { return socket->send((char *)buf, size); }