Code to receive input from foot and hand module and sends data to computer as a key press

Dependencies:   USBDevice XBee mbed

Committer:
jgensel3
Date:
Mon Apr 24 04:15:13 2017 +0000
Revision:
0:bd28c60507b2
recieves from foot and hand module

Who changed what in which revision?

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