![](/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@7:79cd3cf6daea, 2014-12-05 (annotated)
- Committer:
- kalbers
- Date:
- Fri Dec 05 21:55:25 2014 +0000
- Revision:
- 7:79cd3cf6daea
- Parent:
- 3:5f5d75cba8e1
- Child:
- 13:c701f1122797
Fixed memory leak with cc3000 class new declaration.
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 | 3:5f5d75cba8e1 | 11 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
kalbers | 3:5f5d75cba8e1 | 12 | |
kalbers | 3:5f5d75cba8e1 | 13 | |
kalbers | 3:5f5d75cba8e1 | 14 | using namespace mbed_cc3000; |
kalbers | 3:5f5d75cba8e1 | 15 | |
kalbers | 3:5f5d75cba8e1 | 16 | |
kalbers | 3:5f5d75cba8e1 | 17 | GloveWifi::GloveWifi() : |
kalbers | 3:5f5d75cba8e1 | 18 | ECHO_SERVER_ADDRESS("192.168.1.33"), |
kalbers | 3:5f5d75cba8e1 | 19 | ECHO_SERVER_PORT(2000) |
kalbers | 3:5f5d75cba8e1 | 20 | { |
kalbers | 3:5f5d75cba8e1 | 21 | } |
kalbers | 3:5f5d75cba8e1 | 22 | |
kalbers | 3:5f5d75cba8e1 | 23 | GloveWifi::~GloveWifi() |
kalbers | 3:5f5d75cba8e1 | 24 | { |
kalbers | 3:5f5d75cba8e1 | 25 | } |
kalbers | 3:5f5d75cba8e1 | 26 | |
kalbers | 3:5f5d75cba8e1 | 27 | void GloveWifi::Init() |
kalbers | 3:5f5d75cba8e1 | 28 | { |
kalbers | 3:5f5d75cba8e1 | 29 | |
kalbers | 3:5f5d75cba8e1 | 30 | pc = new Serial(USBTX, USBRX); |
kalbers | 3:5f5d75cba8e1 | 31 | //Init from the cc3000 example |
kalbers | 3:5f5d75cba8e1 | 32 | DigitalOut PWR_EN1(PTB2); |
kalbers | 3:5f5d75cba8e1 | 33 | DigitalOut PWR_EN2(PTB3); |
kalbers | 3:5f5d75cba8e1 | 34 | |
kalbers | 3:5f5d75cba8e1 | 35 | // Wi-Go set current to 500mA since we're turning on the Wi-Fi |
kalbers | 3:5f5d75cba8e1 | 36 | PWR_EN1 = 0; |
kalbers | 3:5f5d75cba8e1 | 37 | PWR_EN2 = 1; |
kalbers | 3:5f5d75cba8e1 | 38 | |
kalbers | 3:5f5d75cba8e1 | 39 | NVIC_set_all_irq_priorities(0x3); |
kalbers | 3:5f5d75cba8e1 | 40 | NVIC_SetPriority(SPI0_IRQn, 0x0); // Wi-Fi SPI interrupt must be higher priority than SysTick |
kalbers | 3:5f5d75cba8e1 | 41 | NVIC_SetPriority(PORTA_IRQn, 0x1); |
kalbers | 3:5f5d75cba8e1 | 42 | NVIC_SetPriority(SysTick_IRQn, 0x2); // SysTick set to lower priority than Wi-Fi SPI bus interrupt |
kalbers | 3:5f5d75cba8e1 | 43 | PORTA->PCR[16] |= PORT_PCR_ISF_MASK; |
kalbers | 3:5f5d75cba8e1 | 44 | PORTA->ISFR |= (1 << 16); |
kalbers | 3:5f5d75cba8e1 | 45 | |
kalbers | 3:5f5d75cba8e1 | 46 | pc->baud(115200); |
kalbers | 3:5f5d75cba8e1 | 47 | } |
kalbers | 3:5f5d75cba8e1 | 48 | |
kalbers | 3:5f5d75cba8e1 | 49 | void GloveWifi::Connect() |
kalbers | 3:5f5d75cba8e1 | 50 | { |
kalbers | 3:5f5d75cba8e1 | 51 | //TODO: Make this call (or recall) the initial constructor. |
kalbers | 3:5f5d75cba8e1 | 52 | wifi = new cc3000(PTD4, PTC9, PTD0, SPI(PTD2, PTD3, PTD1), SSID, PASSWORD, WPA2, false); |
kalbers | 3:5f5d75cba8e1 | 53 | wifi->init(); |
kalbers | 3:5f5d75cba8e1 | 54 | if (wifi->connect() == -1) |
kalbers | 3:5f5d75cba8e1 | 55 | { |
kalbers | 3:5f5d75cba8e1 | 56 | printf("Failed to connect. Please verify connection details and try again. \r\n"); |
kalbers | 3:5f5d75cba8e1 | 57 | } else |
kalbers | 3:5f5d75cba8e1 | 58 | { |
kalbers | 3:5f5d75cba8e1 | 59 | printf("IP address: %s \r\n", wifi->getIPAddress()); |
kalbers | 3:5f5d75cba8e1 | 60 | } |
kalbers | 3:5f5d75cba8e1 | 61 | while (socket.connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT) < 0) |
kalbers | 3:5f5d75cba8e1 | 62 | { |
kalbers | 3:5f5d75cba8e1 | 63 | printf("Unable to connect to (%s) on port (%d) \r\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT); |
kalbers | 3:5f5d75cba8e1 | 64 | wait(1); |
kalbers | 3:5f5d75cba8e1 | 65 | } |
kalbers | 3:5f5d75cba8e1 | 66 | socket.set_blocking(true); |
kalbers | 3:5f5d75cba8e1 | 67 | printf("Connected!\r\n"); |
kalbers | 3:5f5d75cba8e1 | 68 | } |
kalbers | 3:5f5d75cba8e1 | 69 | |
kalbers | 3:5f5d75cba8e1 | 70 | void GloveWifi::Disconnect() |
kalbers | 3:5f5d75cba8e1 | 71 | { |
kalbers | 3:5f5d75cba8e1 | 72 | socket.close(); |
kalbers | 3:5f5d75cba8e1 | 73 | wifi->disconnect(); |
kalbers | 7:79cd3cf6daea | 74 | delete wifi; |
kalbers | 3:5f5d75cba8e1 | 75 | } |
kalbers | 3:5f5d75cba8e1 | 76 | |
kalbers | 3:5f5d75cba8e1 | 77 | uint8_t GloveWifi::GetDataFromBuffer(uint8_t * buf, uint16_t size) |
kalbers | 3:5f5d75cba8e1 | 78 | { |
kalbers | 3:5f5d75cba8e1 | 79 | return socket.receive((char *)buf, size); |
kalbers | 3:5f5d75cba8e1 | 80 | } |
kalbers | 3:5f5d75cba8e1 | 81 | |
kalbers | 3:5f5d75cba8e1 | 82 | uint8_t GloveWifi::SendDataToGlove(uint8_t * buf, uint16_t size) |
kalbers | 3:5f5d75cba8e1 | 83 | { |
kalbers | 3:5f5d75cba8e1 | 84 | return socket.send((char *)buf, size); |
kalbers | 3:5f5d75cba8e1 | 85 | } |
kalbers | 3:5f5d75cba8e1 | 86 | |
kalbers | 3:5f5d75cba8e1 | 87 |