Machine Cloud
Revision 0:260d7796eb25, committed 2013-08-09
- Comitter:
- ddollar
- Date:
- Fri Aug 09 19:29:51 2013 +0000
- Child:
- 1:f5eafb42e9e4
- Commit message:
- initial commit
Changed in this revision
--- /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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/MachineCloud.h Fri Aug 09 19:29:51 2013 +0000
@@ -0,0 +1,67 @@
+/* Copyright (C) 2013 David Dollar, MIT License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef MACHINECLOUD_H_
+#define MACHINECLOUD_H_
+
+#include <stdint.h>
+#include "rtos.h"
+#include "XBee.h"
+
+typedef void MachineCloudCallback(char *, char *);
+
+class MachineCloudReceiver {
+ public:
+ virtual void receive(char *, char *) = NULL;
+};
+
+class MachineCloud {
+
+ public:
+
+ // constructor
+ MachineCloud();
+ MachineCloud(uint16_t router);
+
+ // connect to the machine cloud
+ int connect();
+ int disconnect();
+
+ // receive callback
+ int on_receive(MachineCloudCallback *function);
+ int on_receive(MachineCloudReceiver *object);
+
+ // send a message
+ int send(char *key, char *value);
+
+ // runloop
+ int loop();
+
+ private:
+
+ void init(uint16_t router);
+ void receive(char *key, char *value);
+
+ Mutex m_lock;
+ MachineCloudCallback *m_receiverFunction;
+ MachineCloudReceiver *m_receiverObject;
+ uint16_t m_router;
+ XBee *m_xbee;
+};
+
+#endif /* MACHINECLOUD_H_ */
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/XBee.lib Fri Aug 09 19:29:51 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/ddollar/code/XBee/#73d051b01344
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Fri Aug 09 19:29:51 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed-rtos/#869ef732a8a2