sadf

Dependencies:   LSM9DS1_Library_cal mbed XBee

Fork of FootSensor by Justin Gensel

Committer:
jgensel3
Date:
Mon Apr 24 04:05:46 2017 +0000
Revision:
3:2d6ff72599f1
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jgensel3 3:2d6ff72599f1 1 #ifndef WProtocol_h
jgensel3 3:2d6ff72599f1 2 #define WProtocol_h
jgensel3 3:2d6ff72599f1 3
jgensel3 3:2d6ff72599f1 4 #include "XBee/XBee.h"
jgensel3 3:2d6ff72599f1 5 #include <mbed.h>
jgensel3 3:2d6ff72599f1 6
jgensel3 3:2d6ff72599f1 7 #define HOST_ADDRESS 0x0003
jgensel3 3:2d6ff72599f1 8
jgensel3 3:2d6ff72599f1 9 enum Direction {DIR_UP, DIR_DOWN, DIR_LEFT, DIR_RIGHT, DIR_NONE};
jgensel3 3:2d6ff72599f1 10 enum WMessageType {FOOT_STEP, HAND_GESTURE};
jgensel3 3:2d6ff72599f1 11
jgensel3 3:2d6ff72599f1 12 typedef struct WMessage {
jgensel3 3:2d6ff72599f1 13 WMessageType type;
jgensel3 3:2d6ff72599f1 14 Direction direction;
jgensel3 3:2d6ff72599f1 15 } WMessage_t;
jgensel3 3:2d6ff72599f1 16
jgensel3 3:2d6ff72599f1 17 class WirelessModule {
jgensel3 3:2d6ff72599f1 18 public:
jgensel3 3:2d6ff72599f1 19 WirelessModule(PinName tx, PinName rx, WMessageType type) :
jgensel3 3:2d6ff72599f1 20 uart(tx, rx), xbee(uart),
jgensel3 3:2d6ff72599f1 21 tx16req(HOST_ADDRESS, (uint8_t *) &message, sizeof(message))
jgensel3 3:2d6ff72599f1 22 {
jgensel3 3:2d6ff72599f1 23 uart.baud(9600);
jgensel3 3:2d6ff72599f1 24 message.type = type;
jgensel3 3:2d6ff72599f1 25 }
jgensel3 3:2d6ff72599f1 26
jgensel3 3:2d6ff72599f1 27 int sendDirection(Direction dir) {
jgensel3 3:2d6ff72599f1 28 message.direction = dir;
jgensel3 3:2d6ff72599f1 29 xbee.send(tx16req);
jgensel3 3:2d6ff72599f1 30 return 0;
jgensel3 3:2d6ff72599f1 31 }
jgensel3 3:2d6ff72599f1 32 private:
jgensel3 3:2d6ff72599f1 33 RawSerial uart;
jgensel3 3:2d6ff72599f1 34 XBee xbee;
jgensel3 3:2d6ff72599f1 35 WMessage_t message;
jgensel3 3:2d6ff72599f1 36 Tx16Request tx16req;
jgensel3 3:2d6ff72599f1 37 };
jgensel3 3:2d6ff72599f1 38
jgensel3 3:2d6ff72599f1 39 class WirelessHost {
jgensel3 3:2d6ff72599f1 40 public:
jgensel3 3:2d6ff72599f1 41 WirelessHost(PinName tx, PinName rx) : uart(tx, rx), xbee(uart) {}
jgensel3 3:2d6ff72599f1 42
jgensel3 3:2d6ff72599f1 43 int waitForMessage(WMessage_t *store) {
jgensel3 3:2d6ff72599f1 44 xbee.readPacket(5000);
jgensel3 3:2d6ff72599f1 45
jgensel3 3:2d6ff72599f1 46 if (xbee.getResponse().isError()) {
jgensel3 3:2d6ff72599f1 47 // API error
jgensel3 3:2d6ff72599f1 48 return -99;
jgensel3 3:2d6ff72599f1 49 }
jgensel3 3:2d6ff72599f1 50
jgensel3 3:2d6ff72599f1 51 if (xbee.getResponse().isAvailable()) {
jgensel3 3:2d6ff72599f1 52 if (xbee.getResponse().getApiId() != RX_16_RESPONSE) {
jgensel3 3:2d6ff72599f1 53 // Unexpected API message
jgensel3 3:2d6ff72599f1 54 return -5;
jgensel3 3:2d6ff72599f1 55 }
jgensel3 3:2d6ff72599f1 56
jgensel3 3:2d6ff72599f1 57 // Retrieve response
jgensel3 3:2d6ff72599f1 58 xbee.getResponse().getRx16Response(rx16resp);
jgensel3 3:2d6ff72599f1 59
jgensel3 3:2d6ff72599f1 60 // Validate packet length
jgensel3 3:2d6ff72599f1 61 if (rx16resp.getDataLength() == sizeof(WMessage_t)) {
jgensel3 3:2d6ff72599f1 62 // Store the payload
jgensel3 3:2d6ff72599f1 63 memcpy(store, rx16resp.getData(), sizeof(WMessage_t));
jgensel3 3:2d6ff72599f1 64 return 0;
jgensel3 3:2d6ff72599f1 65 } else {
jgensel3 3:2d6ff72599f1 66 // Unexpected payload format
jgensel3 3:2d6ff72599f1 67 return -10;
jgensel3 3:2d6ff72599f1 68 }
jgensel3 3:2d6ff72599f1 69 } else {
jgensel3 3:2d6ff72599f1 70 // No Response
jgensel3 3:2d6ff72599f1 71 return -1;
jgensel3 3:2d6ff72599f1 72 }
jgensel3 3:2d6ff72599f1 73 }
jgensel3 3:2d6ff72599f1 74
jgensel3 3:2d6ff72599f1 75 private:
jgensel3 3:2d6ff72599f1 76 RawSerial uart;
jgensel3 3:2d6ff72599f1 77 XBee xbee;
jgensel3 3:2d6ff72599f1 78 Rx16Response rx16resp;
jgensel3 3:2d6ff72599f1 79 };
jgensel3 3:2d6ff72599f1 80
jgensel3 3:2d6ff72599f1 81 #endif