Cubic Hand project for EECS 249A course.

Dependencies:   MMA8451Q TSI cc3000_hostdriver_mbedsocket NVIC_set_all_priorities mbed Multi_WS2811

Committer:
joseoyola
Date:
Mon Dec 15 23:55:15 2014 +0000
Revision:
56:f95ec9baa4cb
Parent:
45:812e60077a12
Changes to LedCube.h and LedCube.cpp; ; Renamed ledCube.h and ledCube.cpp to LedCube.h and LedCube.cpp, added documentation to both, added logic to move cube to allow changing size regardless of current position.

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