Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 |