Machine Cloud
Diff: MachineCloud.cpp
- Revision:
- 0:260d7796eb25
- Child:
- 1:f5eafb42e9e4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MachineCloud.cpp Fri Aug 09 19:29:51 2013 +0000 @@ -0,0 +1,88 @@ +#include <string.h> +#include "MachineCloud.h" + +MachineCloud::MachineCloud() { + init(0x1000); +} + +MachineCloud::MachineCloud(uint16_t router) { + init(router); +} + +void MachineCloud::init(uint16_t router) { + m_router = router; +} + +int MachineCloud::connect() { + m_xbee = new XBee(p9, p10); + return 0; +} + +int MachineCloud::disconnect() { + m_xbee = NULL; + return 0; +} + +int MachineCloud::on_receive(MachineCloudCallback *function) { + m_receiverFunction = function; + m_receiverObject = NULL; + return 0; +} + +int MachineCloud::on_receive(MachineCloudReceiver *object) { + m_receiverFunction = NULL; + m_receiverObject = object; + return 0; +} + +int MachineCloud::send(char *key, char *value) { + m_lock.lock(); + + int size = strlen(key) + strlen(value) + 1; + char *message = (char *)malloc(size); + sprintf(message, "%s=%s", key, value); + + uint8_t payload[size]; + for (int i=0; i<size; i++) { + payload[i] = message[i]; + } + + free(message); + + TxStatusResponse txStatus = TxStatusResponse(); + Tx16Request tx = Tx16Request(m_router, payload, sizeof(payload)); + m_xbee->send(tx); + + return 0; +} + +void MachineCloud::receive(char *key, char *value) { + if (m_receiverFunction) (*m_receiverFunction)(key, value); + if (m_receiverObject) m_receiverObject->receive(key, value); +} + +Rx16Response rx16 = Rx16Response(); + +int MachineCloud::loop() { + m_xbee->readPacket(); + + if (m_xbee->getResponse().isAvailable()) { + switch (m_xbee->getResponse().getApiId()) { + case RX_16_RESPONSE: + Rx16Response rx16 = Rx16Response(); + m_xbee->getResponse().getRx16Response(rx16); + char *data = (char *)malloc(rx16.getDataLength() + 1); + for (int i=0; i<rx16.getDataLength(); i++) { + data[i] = rx16.getData(i); + } + data[rx16.getDataLength()] = 0; + char *key = strtok(data, "="); + char *val = strtok(NULL, "="); + receive(key, val); + free(data); + } + } + + + return 0; +} \ No newline at end of file