Cubic Hand project for EECS 249A course.
Dependencies: MMA8451Q TSI cc3000_hostdriver_mbedsocket NVIC_set_all_priorities mbed Multi_WS2811
GloveWifi.cpp@56:f95ec9baa4cb, 2014-12-15 (annotated)
- 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?
User | Revision | Line number | New 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 |