![](/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@28:3261015fdd17, 2014-12-11 (annotated)
- Committer:
- kalbers
- Date:
- Thu Dec 11 05:57:54 2014 +0000
- Revision:
- 28:3261015fdd17
- Parent:
- 26:42ae7eed0b68
- Child:
- 32:bf5f545621aa
Removed Print Statements from main while loop program.
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 | 15:b48ac00af0b8 | 79 | delete socket; |
kalbers | 15:b48ac00af0b8 | 80 | socket = new TCPSocketConnection; |
kalbers | 15:b48ac00af0b8 | 81 | while (socket->connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT) < 0) |
kalbers | 15:b48ac00af0b8 | 82 | { |
kalbers | 15:b48ac00af0b8 | 83 | printf("Unable to connect to (%s) on port (%d) \r\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT); |
kalbers | 15:b48ac00af0b8 | 84 | wait(1); |
kalbers | 15:b48ac00af0b8 | 85 | } |
kalbers | 19:e751d075e2e6 | 86 | socket->set_blocking(false, 10); |
kalbers | 28:3261015fdd17 | 87 | //printf("Reconnected!\r\n"); |
kalbers | 15:b48ac00af0b8 | 88 | } |
kalbers | 15:b48ac00af0b8 | 89 | |
kalbers | 19:e751d075e2e6 | 90 | int GloveWifi::GetDataFromBuffer(char * buf, int size) |
kalbers | 3:5f5d75cba8e1 | 91 | { |
kalbers | 15:b48ac00af0b8 | 92 | //printf("Buffer Size: %d\r\n", wifi->_simple_link.get_transmit_error()); |
kalbers | 19:e751d075e2e6 | 93 | int numR = 0; |
kalbers | 19:e751d075e2e6 | 94 | numR = socket->receive((char *)buf, size); |
kalbers | 19:e751d075e2e6 | 95 | if(numR == -1) |
kalbers | 19:e751d075e2e6 | 96 | { |
kalbers | 19:e751d075e2e6 | 97 | DropCount++; |
kalbers | 19:e751d075e2e6 | 98 | }else |
kalbers | 19:e751d075e2e6 | 99 | { |
kalbers | 19:e751d075e2e6 | 100 | DropCount = 0; |
kalbers | 19:e751d075e2e6 | 101 | } |
kalbers | 28:3261015fdd17 | 102 | if(DropCount > 100) |
kalbers | 19:e751d075e2e6 | 103 | { |
kalbers | 19:e751d075e2e6 | 104 | Reconnect(); |
kalbers | 19:e751d075e2e6 | 105 | DropCount = 0; |
kalbers | 19:e751d075e2e6 | 106 | } |
kalbers | 19:e751d075e2e6 | 107 | return numR; |
kalbers | 3:5f5d75cba8e1 | 108 | } |
kalbers | 3:5f5d75cba8e1 | 109 | |
kalbers | 3:5f5d75cba8e1 | 110 | uint8_t GloveWifi::SendDataToGlove(uint8_t * buf, uint16_t size) |
kalbers | 3:5f5d75cba8e1 | 111 | { |
kalbers | 13:c701f1122797 | 112 | return socket->send((char *)buf, size); |
kalbers | 3:5f5d75cba8e1 | 113 | } |
kalbers | 3:5f5d75cba8e1 | 114 | |
kalbers | 3:5f5d75cba8e1 | 115 |