Machine Cloud
MachineCloud.cpp@2:3fb7c06efa1e, 2013-08-16 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |