The Cayenne MQTT mbed Library provides functions to easily connect to the Cayenne IoT project builder.

Fork of Cayenne-MQTT-mbed by myDevicesIoT

Committer:
jburhenn
Date:
Fri Oct 07 17:21:45 2016 +0000
Revision:
0:09ef59d2d0f7
Child:
11:532406b58e8f
Initial commit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jburhenn 0:09ef59d2d0f7 1 /*
jburhenn 0:09ef59d2d0f7 2 The MIT License(MIT)
jburhenn 0:09ef59d2d0f7 3
jburhenn 0:09ef59d2d0f7 4 Cayenne MQTT Client Library
jburhenn 0:09ef59d2d0f7 5 Copyright (c) 2016 myDevices
jburhenn 0:09ef59d2d0f7 6
jburhenn 0:09ef59d2d0f7 7 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
jburhenn 0:09ef59d2d0f7 8 documentation files(the "Software"), to deal in the Software without restriction, including without limitation
jburhenn 0:09ef59d2d0f7 9 the rights to use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies of the Software,
jburhenn 0:09ef59d2d0f7 10 and to permit persons to whom the Software is furnished to do so, subject to the following conditions :
jburhenn 0:09ef59d2d0f7 11 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
jburhenn 0:09ef59d2d0f7 12 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
jburhenn 0:09ef59d2d0f7 13 WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR
jburhenn 0:09ef59d2d0f7 14 COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
jburhenn 0:09ef59d2d0f7 15 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
jburhenn 0:09ef59d2d0f7 16 */
jburhenn 0:09ef59d2d0f7 17
jburhenn 0:09ef59d2d0f7 18 #ifndef _MQTTNETWORK_h
jburhenn 0:09ef59d2d0f7 19 #define _MQTTNETWORK_h
jburhenn 0:09ef59d2d0f7 20
jburhenn 0:09ef59d2d0f7 21 #include "mbed.h"
jburhenn 0:09ef59d2d0f7 22 #include "TCPSocketConnection.h"
jburhenn 0:09ef59d2d0f7 23
jburhenn 0:09ef59d2d0f7 24 /**
jburhenn 0:09ef59d2d0f7 25 * Networking class for use with MQTTClient.
jburhenn 0:09ef59d2d0f7 26 * @param Interface A network interface class with the methods: init, connect and disconnect.
jburhenn 0:09ef59d2d0f7 27 */
jburhenn 0:09ef59d2d0f7 28 template<class Interface>
jburhenn 0:09ef59d2d0f7 29 class MQTTNetwork
jburhenn 0:09ef59d2d0f7 30 {
jburhenn 0:09ef59d2d0f7 31 public:
jburhenn 0:09ef59d2d0f7 32 /**
jburhenn 0:09ef59d2d0f7 33 * Construct the network interface.
jburhenn 0:09ef59d2d0f7 34 * @param[in] interface The network interface to use
jburhenn 0:09ef59d2d0f7 35 */
jburhenn 0:09ef59d2d0f7 36 MQTTNetwork(Interface& interface) : _interface(interface) {
jburhenn 0:09ef59d2d0f7 37 }
jburhenn 0:09ef59d2d0f7 38
jburhenn 0:09ef59d2d0f7 39 /**
jburhenn 0:09ef59d2d0f7 40 * Connect the network interface.
jburhenn 0:09ef59d2d0f7 41 * @param[in] hostname Host for connection
jburhenn 0:09ef59d2d0f7 42 * @param[in] port Port for connection
jburhenn 0:09ef59d2d0f7 43 * @param[in] timeout_ms Timeout for the read operation, in milliseconds
jburhenn 0:09ef59d2d0f7 44 * @return 0 on success, -1 on failure.
jburhenn 0:09ef59d2d0f7 45 */
jburhenn 0:09ef59d2d0f7 46 int connect(char* hostname, int port, int timeout_ms = 1000) {
jburhenn 0:09ef59d2d0f7 47 _interface.connect();
jburhenn 0:09ef59d2d0f7 48 _socket.set_blocking(false, timeout_ms);
jburhenn 0:09ef59d2d0f7 49 return _socket.connect(hostname, port);
jburhenn 0:09ef59d2d0f7 50 }
jburhenn 0:09ef59d2d0f7 51
jburhenn 0:09ef59d2d0f7 52 /**
jburhenn 0:09ef59d2d0f7 53 * Disconnect the network interface.
jburhenn 0:09ef59d2d0f7 54 * @return true if disconnect was successful, false otherwise
jburhenn 0:09ef59d2d0f7 55 */
jburhenn 0:09ef59d2d0f7 56 bool disconnect()
jburhenn 0:09ef59d2d0f7 57 {
jburhenn 0:09ef59d2d0f7 58 _socket.close();
jburhenn 0:09ef59d2d0f7 59 return _interface.disconnect();
jburhenn 0:09ef59d2d0f7 60 }
jburhenn 0:09ef59d2d0f7 61
jburhenn 0:09ef59d2d0f7 62 /**
jburhenn 0:09ef59d2d0f7 63 * Check if connected.
jburhenn 0:09ef59d2d0f7 64 * @return true if connected, false otherwise
jburhenn 0:09ef59d2d0f7 65 */
jburhenn 0:09ef59d2d0f7 66 bool connected()
jburhenn 0:09ef59d2d0f7 67 {
jburhenn 0:09ef59d2d0f7 68 return _socket.is_connected();
jburhenn 0:09ef59d2d0f7 69 }
jburhenn 0:09ef59d2d0f7 70
jburhenn 0:09ef59d2d0f7 71 /**
jburhenn 0:09ef59d2d0f7 72 * Read data from the network.
jburhenn 0:09ef59d2d0f7 73 * @param[out] buffer Buffer that receives the data
jburhenn 0:09ef59d2d0f7 74 * @param[in] len Buffer length
jburhenn 0:09ef59d2d0f7 75 * @param[in] timeout_ms Timeout for the read operation, in milliseconds
jburhenn 0:09ef59d2d0f7 76 * @return 1 for success, any other value for error
jburhenn 0:09ef59d2d0f7 77 */
jburhenn 0:09ef59d2d0f7 78 int read(unsigned char* buffer, int len, int timeout_ms) {
jburhenn 0:09ef59d2d0f7 79 _socket.set_blocking(false, timeout_ms);
jburhenn 0:09ef59d2d0f7 80 return _socket.receive((char*)buffer, len);
jburhenn 0:09ef59d2d0f7 81 }
jburhenn 0:09ef59d2d0f7 82
jburhenn 0:09ef59d2d0f7 83 /**
jburhenn 0:09ef59d2d0f7 84 * Write data to the network.
jburhenn 0:09ef59d2d0f7 85 * @param[in] buffer Buffer that contains data to write
jburhenn 0:09ef59d2d0f7 86 * @param[in] len Number of bytes to write
jburhenn 0:09ef59d2d0f7 87 * @param[in] timeout_ms Timeout for the write operation, in milliseconds
jburhenn 0:09ef59d2d0f7 88 * @return Number of bytes written on success, a negative value for error
jburhenn 0:09ef59d2d0f7 89 */
jburhenn 0:09ef59d2d0f7 90 int write(unsigned char* buffer, int len, int timeout_ms) {
jburhenn 0:09ef59d2d0f7 91 _socket.set_blocking(false, timeout_ms);
jburhenn 0:09ef59d2d0f7 92 return _socket.send((char*)buffer, len);
jburhenn 0:09ef59d2d0f7 93 }
jburhenn 0:09ef59d2d0f7 94
jburhenn 0:09ef59d2d0f7 95 private:
jburhenn 0:09ef59d2d0f7 96 Interface& _interface;
jburhenn 0:09ef59d2d0f7 97 TCPSocketConnection _socket;
jburhenn 0:09ef59d2d0f7 98 };
jburhenn 0:09ef59d2d0f7 99
jburhenn 0:09ef59d2d0f7 100 #endif