Machine Cloud

Dependencies:   XBee mbed-rtos

Committer:
ddollar
Date:
Fri Aug 16 16:49:34 2013 +0000
Revision:
2:3fb7c06efa1e
Parent:
1:f5eafb42e9e4
model handling

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ddollar 0:260d7796eb25 1 #include <string.h>
ddollar 0:260d7796eb25 2 #include "MachineCloud.h"
ddollar 0:260d7796eb25 3
ddollar 2:3fb7c06efa1e 4 MachineCloud::MachineCloud() {
ddollar 2:3fb7c06efa1e 5 init(0x1000);
ddollar 0:260d7796eb25 6 }
ddollar 0:260d7796eb25 7
ddollar 2:3fb7c06efa1e 8 MachineCloud::MachineCloud(uint16_t router) {
ddollar 2:3fb7c06efa1e 9 init(router);
ddollar 0:260d7796eb25 10 }
ddollar 0:260d7796eb25 11
ddollar 2:3fb7c06efa1e 12 void MachineCloud::init(uint16_t router) {
ddollar 0:260d7796eb25 13 m_router = router;
ddollar 0:260d7796eb25 14 }
ddollar 0:260d7796eb25 15
ddollar 0:260d7796eb25 16 int MachineCloud::connect() {
ddollar 0:260d7796eb25 17 m_xbee = new XBee(p9, p10);
ddollar 0:260d7796eb25 18 return 0;
ddollar 0:260d7796eb25 19 }
ddollar 0:260d7796eb25 20
ddollar 0:260d7796eb25 21 int MachineCloud::disconnect() {
ddollar 0:260d7796eb25 22 m_xbee = NULL;
ddollar 0:260d7796eb25 23 return 0;
ddollar 0:260d7796eb25 24 }
ddollar 0:260d7796eb25 25
ddollar 0:260d7796eb25 26 int MachineCloud::on_receive(MachineCloudCallback *function) {
ddollar 0:260d7796eb25 27 m_receiverFunction = function;
ddollar 0:260d7796eb25 28 m_receiverObject = NULL;
ddollar 0:260d7796eb25 29 return 0;
ddollar 0:260d7796eb25 30 }
ddollar 0:260d7796eb25 31
ddollar 0:260d7796eb25 32 int MachineCloud::on_receive(MachineCloudReceiver *object) {
ddollar 0:260d7796eb25 33 m_receiverFunction = NULL;
ddollar 0:260d7796eb25 34 m_receiverObject = object;
ddollar 0:260d7796eb25 35 return 0;
ddollar 0:260d7796eb25 36 }
ddollar 0:260d7796eb25 37
ddollar 0:260d7796eb25 38 int MachineCloud::send(char *key, char *value) {
ddollar 0:260d7796eb25 39 m_lock.lock();
ddollar 0:260d7796eb25 40
ddollar 0:260d7796eb25 41 int size = strlen(key) + strlen(value) + 1;
ddollar 0:260d7796eb25 42 char *message = (char *)malloc(size);
ddollar 0:260d7796eb25 43 sprintf(message, "%s=%s", key, value);
ddollar 0:260d7796eb25 44
ddollar 0:260d7796eb25 45 uint8_t payload[size];
ddollar 0:260d7796eb25 46 for (int i=0; i<size; i++) {
ddollar 0:260d7796eb25 47 payload[i] = message[i];
ddollar 0:260d7796eb25 48 }
ddollar 0:260d7796eb25 49
ddollar 0:260d7796eb25 50 free(message);
ddollar 0:260d7796eb25 51
ddollar 0:260d7796eb25 52 TxStatusResponse txStatus = TxStatusResponse();
ddollar 0:260d7796eb25 53 Tx16Request tx = Tx16Request(m_router, payload, sizeof(payload));
ddollar 0:260d7796eb25 54 m_xbee->send(tx);
ddollar 0:260d7796eb25 55
ddollar 1:f5eafb42e9e4 56 m_lock.unlock();
ddollar 1:f5eafb42e9e4 57
ddollar 0:260d7796eb25 58 return 0;
ddollar 0:260d7796eb25 59 }
ddollar 0:260d7796eb25 60
ddollar 0:260d7796eb25 61 void MachineCloud::receive(char *key, char *value) {
ddollar 0:260d7796eb25 62 if (m_receiverFunction) (*m_receiverFunction)(key, value);
ddollar 0:260d7796eb25 63 if (m_receiverObject) m_receiverObject->receive(key, value);
ddollar 0:260d7796eb25 64 }
ddollar 0:260d7796eb25 65
ddollar 0:260d7796eb25 66 Rx16Response rx16 = Rx16Response();
ddollar 0:260d7796eb25 67
ddollar 0:260d7796eb25 68 int MachineCloud::loop() {
ddollar 0:260d7796eb25 69 m_xbee->readPacket();
ddollar 0:260d7796eb25 70
ddollar 0:260d7796eb25 71 if (m_xbee->getResponse().isAvailable()) {
ddollar 0:260d7796eb25 72 switch (m_xbee->getResponse().getApiId()) {
ddollar 0:260d7796eb25 73 case RX_16_RESPONSE:
ddollar 0:260d7796eb25 74 Rx16Response rx16 = Rx16Response();
ddollar 0:260d7796eb25 75 m_xbee->getResponse().getRx16Response(rx16);
ddollar 0:260d7796eb25 76 char *data = (char *)malloc(rx16.getDataLength() + 1);
ddollar 0:260d7796eb25 77 for (int i=0; i<rx16.getDataLength(); i++) {
ddollar 0:260d7796eb25 78 data[i] = rx16.getData(i);
ddollar 0:260d7796eb25 79 }
ddollar 0:260d7796eb25 80 data[rx16.getDataLength()] = 0;
ddollar 0:260d7796eb25 81 char *key = strtok(data, "=");
ddollar 0:260d7796eb25 82 char *val = strtok(NULL, "=");
ddollar 0:260d7796eb25 83 receive(key, val);
ddollar 0:260d7796eb25 84 free(data);
ddollar 0:260d7796eb25 85 }
ddollar 0:260d7796eb25 86 }
ddollar 0:260d7796eb25 87
ddollar 0:260d7796eb25 88
ddollar 0:260d7796eb25 89 return 0;
ddollar 0:260d7796eb25 90 }