Cubic Hand project for EECS 249A course.

Dependencies:   MMA8451Q TSI cc3000_hostdriver_mbedsocket NVIC_set_all_priorities mbed Multi_WS2811

Committer:
kalbers
Date:
Thu Dec 11 14:04:49 2014 +0000
Revision:
45:812e60077a12
Parent:
35:b6fb5dd65a98
Added a socket Close to reconnect in GloveWifi.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kalbers 3:5f5d75cba8e1 1 #include "GloveWifi.h"
kalbers 3:5f5d75cba8e1 2 #include "mbed.h"
kalbers 3:5f5d75cba8e1 3 #include "cc3000.h"
kalbers 3:5f5d75cba8e1 4 #include "TCPSocketConnection.h"
kalbers 3:5f5d75cba8e1 5 #include "TCPSocketServer.h"
kalbers 3:5f5d75cba8e1 6 #include "NVIC_set_all_priorities.h"
kalbers 3:5f5d75cba8e1 7
kalbers 3:5f5d75cba8e1 8 #define SSID "CubeNet"
kalbers 3:5f5d75cba8e1 9 #define PASSWORD "modelbased"
kalbers 3:5f5d75cba8e1 10
kalbers 13:c701f1122797 11 #define ECHO_SERVER_ADDRESS "192.168.1.33"
kalbers 13:c701f1122797 12 #define ECHO_SERVER_PORT 2000
kalbers 13:c701f1122797 13 #define MMA8451_I2C_ADDRESS (0x1d<<1)
kalbers 3:5f5d75cba8e1 14
kalbers 19:e751d075e2e6 15 GloveWifi::GloveWifi():
kalbers 19:e751d075e2e6 16 DropCount(0)
kalbers 3:5f5d75cba8e1 17 {
kalbers 3:5f5d75cba8e1 18 }
kalbers 3:5f5d75cba8e1 19
kalbers 3:5f5d75cba8e1 20 GloveWifi::~GloveWifi()
kalbers 3:5f5d75cba8e1 21 {
kalbers 13:c701f1122797 22 delete socket;
kalbers 13:c701f1122797 23 delete wifi;
kalbers 3:5f5d75cba8e1 24 }
kalbers 3:5f5d75cba8e1 25
kalbers 3:5f5d75cba8e1 26 void GloveWifi::Init()
kalbers 3:5f5d75cba8e1 27 {
kalbers 3:5f5d75cba8e1 28
kalbers 3:5f5d75cba8e1 29 //Init from the cc3000 example
kalbers 3:5f5d75cba8e1 30 DigitalOut PWR_EN1(PTB2);
kalbers 3:5f5d75cba8e1 31 DigitalOut PWR_EN2(PTB3);
kalbers 3:5f5d75cba8e1 32
kalbers 3:5f5d75cba8e1 33 // Wi-Go set current to 500mA since we're turning on the Wi-Fi
kalbers 3:5f5d75cba8e1 34 PWR_EN1 = 0;
kalbers 3:5f5d75cba8e1 35 PWR_EN2 = 1;
kalbers 3:5f5d75cba8e1 36
kalbers 3:5f5d75cba8e1 37 NVIC_set_all_irq_priorities(0x3);
kalbers 3:5f5d75cba8e1 38 NVIC_SetPriority(SPI0_IRQn, 0x0); // Wi-Fi SPI interrupt must be higher priority than SysTick
kalbers 3:5f5d75cba8e1 39 NVIC_SetPriority(PORTA_IRQn, 0x1);
kalbers 3:5f5d75cba8e1 40 NVIC_SetPriority(SysTick_IRQn, 0x2); // SysTick set to lower priority than Wi-Fi SPI bus interrupt
kalbers 3:5f5d75cba8e1 41 PORTA->PCR[16] |= PORT_PCR_ISF_MASK;
kalbers 3:5f5d75cba8e1 42 PORTA->ISFR |= (1 << 16);
kalbers 3:5f5d75cba8e1 43 }
kalbers 3:5f5d75cba8e1 44
kalbers 3:5f5d75cba8e1 45 void GloveWifi::Connect()
kalbers 3:5f5d75cba8e1 46 {
kalbers 13:c701f1122797 47
naren 14:0c4a26dc6873 48 //wifi = new cc3000(PTD4, PTC9, PTD0, SPI(PTD2, PTD3, PTD1), SSID, PASSWORD, WPA2, false);
naren 14:0c4a26dc6873 49 wifi = new cc3000(PTD4, PTC9, PTC4, SPI(PTC6, PTC7, PTC5), SSID, PASSWORD, WPA2, false);
kalbers 3:5f5d75cba8e1 50 wifi->init();
kalbers 3:5f5d75cba8e1 51 if (wifi->connect() == -1)
kalbers 3:5f5d75cba8e1 52 {
kalbers 3:5f5d75cba8e1 53 printf("Failed to connect. Please verify connection details and try again. \r\n");
kalbers 3:5f5d75cba8e1 54 } else
kalbers 3:5f5d75cba8e1 55 {
kalbers 3:5f5d75cba8e1 56 printf("IP address: %s \r\n", wifi->getIPAddress());
kalbers 3:5f5d75cba8e1 57 }
kalbers 15:b48ac00af0b8 58 socket = new TCPSocketConnection;
kalbers 13:c701f1122797 59 while (socket->connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT) < 0)
kalbers 3:5f5d75cba8e1 60 {
kalbers 3:5f5d75cba8e1 61 printf("Unable to connect to (%s) on port (%d) \r\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT);
kalbers 3:5f5d75cba8e1 62 wait(1);
kalbers 3:5f5d75cba8e1 63 }
kalbers 3:5f5d75cba8e1 64 printf("Connected!\r\n");
kalbers 19:e751d075e2e6 65 socket->set_blocking(false, 10);
kalbers 15:b48ac00af0b8 66
kalbers 3:5f5d75cba8e1 67 }
kalbers 3:5f5d75cba8e1 68
kalbers 3:5f5d75cba8e1 69 void GloveWifi::Disconnect()
kalbers 3:5f5d75cba8e1 70 {
kalbers 13:c701f1122797 71 socket->close();
kalbers 3:5f5d75cba8e1 72 wifi->disconnect();
kalbers 13:c701f1122797 73 delete socket;
kalbers 7:79cd3cf6daea 74 delete wifi;
kalbers 3:5f5d75cba8e1 75 }
kalbers 3:5f5d75cba8e1 76
kalbers 15:b48ac00af0b8 77 void GloveWifi::Reconnect()
kalbers 15:b48ac00af0b8 78 {
kalbers 45:812e60077a12 79 socket->close();
kalbers 15:b48ac00af0b8 80 delete socket;
kalbers 15:b48ac00af0b8 81 socket = new TCPSocketConnection;
kalbers 15:b48ac00af0b8 82 while (socket->connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT) < 0)
kalbers 15:b48ac00af0b8 83 {
kalbers 15:b48ac00af0b8 84 printf("Unable to connect to (%s) on port (%d) \r\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT);
kalbers 15:b48ac00af0b8 85 wait(1);
kalbers 15:b48ac00af0b8 86 }
kalbers 19:e751d075e2e6 87 socket->set_blocking(false, 10);
kalbers 35:b6fb5dd65a98 88 //printf("Reconnected!\r\n");
kalbers 15:b48ac00af0b8 89 }
kalbers 15:b48ac00af0b8 90
kalbers 19:e751d075e2e6 91 int GloveWifi::GetDataFromBuffer(char * buf, int size)
kalbers 3:5f5d75cba8e1 92 {
kalbers 15:b48ac00af0b8 93 //printf("Buffer Size: %d\r\n", wifi->_simple_link.get_transmit_error());
kalbers 19:e751d075e2e6 94 int numR = 0;
kalbers 19:e751d075e2e6 95 numR = socket->receive((char *)buf, size);
kalbers 19:e751d075e2e6 96 if(numR == -1)
kalbers 19:e751d075e2e6 97 {
kalbers 19:e751d075e2e6 98 DropCount++;
kalbers 19:e751d075e2e6 99 }else
kalbers 19:e751d075e2e6 100 {
kalbers 19:e751d075e2e6 101 DropCount = 0;
kalbers 19:e751d075e2e6 102 }
kalbers 35:b6fb5dd65a98 103 if(DropCount > 100)
kalbers 19:e751d075e2e6 104 {
kalbers 19:e751d075e2e6 105 Reconnect();
kalbers 19:e751d075e2e6 106 DropCount = 0;
kalbers 19:e751d075e2e6 107 }
kalbers 19:e751d075e2e6 108 return numR;
kalbers 3:5f5d75cba8e1 109 }
kalbers 3:5f5d75cba8e1 110
kalbers 3:5f5d75cba8e1 111 uint8_t GloveWifi::SendDataToGlove(uint8_t * buf, uint16_t size)
kalbers 3:5f5d75cba8e1 112 {
kalbers 13:c701f1122797 113 return socket->send((char *)buf, size);
kalbers 3:5f5d75cba8e1 114 }
kalbers 3:5f5d75cba8e1 115
kalbers 3:5f5d75cba8e1 116