Changeset 180
- Timestamp:
- Mar 28, 2016, 2:28:23 PM (8 years ago)
- Location:
- rtos_arduino/trunk/arduino_lib/libraries/Milkcocoa_Arduino_SDK
- Files:
-
- 2 deleted
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
rtos_arduino/trunk/arduino_lib/libraries/Milkcocoa_Arduino_SDK/Adafruit_MQTT.cpp
r144 r180 35 35 else 36 36 DEBUG_PRINTER.print(" "); 37 #if 0 37 38 DEBUG_PRINTER.print(F(" [0x")); 38 39 if (buffer[i] < 0x10) … … 41 42 DEBUG_PRINTER.print("], "); 42 43 if (i % 8 == 7) DEBUG_PRINTER.println(); 44 #endif 43 45 } 44 46 DEBUG_PRINTER.println(); -
rtos_arduino/trunk/arduino_lib/libraries/Milkcocoa_Arduino_SDK/Client_ESP8266.h
r170 r180 23 23 #include "ESP8266.h" 24 24 25 #define ESP8266CLIENT_BUFFER_LEN 51226 27 25 class ESP8266Client: public Client, public ESP8266 { 28 29 26 public: 27 ESP8266Client(void) { 28 pbuffer = &rx_buffer[0]; 29 } 30 30 31 /* 31 32 * @retval 0 : faild … … 34 35 int connect(IPAddress ip, uint16_t port) { 35 36 String ip_str; 36 bufferlen= 0; 37 ip_str.concat(ip[0]); 38 ip_str.concat("."); 39 ip_str.concat(ip[1]); 40 ip_str.concat("."); 41 ip_str.concat(ip[2]); 42 ip_str.concat("."); 37 ip_str.concat(ip[0]); ip_str.concat("."); 38 ip_str.concat(ip[1]); ip_str.concat("."); 39 ip_str.concat(ip[2]); ip_str.concat("."); 43 40 ip_str.concat(ip[3]); 44 _connected = (createTCP(ip_str, port))? 1 : 0; 45 return (int)_connected; 41 return (createTCP(ip_str, port))? 1 : 0; 46 42 }; 47 43 48 44 int connect(const char *host, uint16_t port) { 49 45 String ip_str(host); 50 bufferlen= 0; 51 _connected = (createTCP(ip_str, port))? 1 : 0; 52 return (int)_connected; 46 return (createTCP(ip_str, port))? 1 : 0; 53 47 }; 54 48 … … 56 50 if(send(&data, 1)){ 57 51 return 1; 58 } 59 else { 60 return 0; 61 } 52 } 53 return 0; 62 54 }; 55 63 56 size_t write(const uint8_t *buf, size_t size){ 64 57 if(send(buf, size)){ 65 58 return size; 66 59 } 67 else {68 return 0;69 }70 };71 int available(){72 if (bufferlen > 0) {73 return 1;74 }75 if (dataAvailable()) {76 bufferlen = recv(buffer, ESP8266CLIENT_BUFFER_LEN);77 pbuffer = buffer;78 //In case of that data is available but it is not valid data(not +IPD,...),79 //connection is closed by server.(send "CLOSED")80 if(bufferlen == 0){81 _connected = 0;82 releaseTCP();83 return 0;84 }85 return 1;86 }87 60 return 0; 88 61 }; 62 63 int available(){ 64 return isDataAvailable(); 65 }; 66 89 67 int read(){ 90 if (bufferlen == 0) {91 bufferlen = recv(buffer, ESP8266CLIENT_BUFFER_LEN);92 pbuffer = buffer;68 uint8_t data; 69 if(recv(&data, 1) == 1) { 70 return data; 93 71 } 94 if (bufferlen > 0){ 95 bufferlen--; 96 return *pbuffer++; 97 } 98 else { 99 return (int)-1; 100 } 72 return (int)-1; 101 73 }; 102 int read(uint8_t *buf, size_t size){return recv(buf, size);}; 103 int peek(){return 1;}; 74 75 int read(uint8_t *buf, size_t size){ 76 return recv(buf, size); 77 }; 78 79 int peek(){ 80 return pbuffer->peek(); 81 }; 82 104 83 void flush(){}; 105 84 void stop(){releaseTCP();}; 106 uint8_t connected(){return _connected;};107 operator bool(){return (bool)(_connected == 1);};85 uint8_t connected(){return (isConnected())? 1 : 0;}; 86 operator bool(){return isConnected();}; 108 87 private: 109 uint8_t _connected; 110 uint8_t buffer[ESP8266CLIENT_BUFFER_LEN]; 111 uint8_t bufferlen; 112 uint8_t *pbuffer; 88 ESP8266_RingBuffer *pbuffer; 113 89 }; 114 90 -
rtos_arduino/trunk/arduino_lib/libraries/Milkcocoa_Arduino_SDK/Milkcocoa.cpp
r144 r180 35 35 DataElement::DataElement(char *json_string) { 36 36 paJsonObj = aJson.parse(json_string); 37 params = aJson.getObjectItem(paJsonObj, "params"); 37 params = aJson.getObjectItem(paJsonObj, "params"); 38 38 } 39 39 … … 56 56 } 57 57 58 char *DataElement::getString(const char *key) {58 bool DataElement::getString(const char *key, char **pdata) { 59 59 aJsonObject* obj = aJson.getObjectItem(params, key); 60 return obj->valuestring; 61 } 62 63 int DataElement::getInt(const char *key) { 60 if((obj == NULL) || (obj->type != aJson_String)) {return false;} 61 *pdata = obj->valuestring; 62 return true; 63 } 64 65 bool DataElement::getInt(const char *key, int *pdata) { 66 aJsonObject* obj = aJson.getObjectItem(params, key); 67 if((obj == NULL) || (obj->type != aJson_Int)) {return false;} 68 *pdata = obj->valueint; 69 return true; 70 } 71 72 bool DataElement::getFloat(const char *key, float *pdata) { 64 73 aJsonObject* obj = aJson.getObjectItem(params, key); 65 if(obj == NULL) 66 Serial.println("obj is NULL"); 67 return obj->valueint; 68 } 69 70 float DataElement::getFloat(const char *key) { 71 aJsonObject* obj = aJson.getObjectItem(params, key); 72 return obj->valuefloat; 73 } 74 74 if((obj == NULL) || (obj->type != aJson_Float)) {return false;} 75 *pdata = obj->valuefloat; 76 return true; 77 } 75 78 76 79 char *DataElement::toCharArray() { … … 106 109 } 107 110 108 void Milkcocoa::connect() { 109 int ret; 111 /* 112 * tmout 113 * 1- : Connect try time. 114 * 0 : retry Forever 115 * Return code 116 * 0 : Success 117 * other : Error code (see Adafruit_MQTT::connectErrorString()) 118 */ 119 int8_t Milkcocoa::connect(int32_t tmout) { 120 int8_t ret; 121 int32_t retry = 0; 110 122 111 123 if (mqtt->connected()) { 112 return ;113 } 114 115 Serial.print("Connecting to MQTT... ");124 return 0; 125 } 126 127 MILKCOCOA_DEBUG_PRINTLN("Connecting to MQTT... "); 116 128 117 129 while ((ret = mqtt->connect()) != 0) { // connect will return 0 for connected 118 Serial.println(mqtt->connectErrorString(ret)); 119 Serial.println(ret); 120 Serial.println("Retrying MQTT connection in 5 seconds..."); 121 mqtt->disconnect(); 122 delay(5000); // wait 5 seconds 123 } 124 Serial.println("MQTT Connected!"); 125 } 126 127 bool Milkcocoa::push(const char *path, DataElement *pdataelement) { 130 mqtt->disconnect(); 131 // Timeout 132 if ((tmout != 0) && (++retry == tmout)) { 133 return ret; 134 } 135 delay(MILKCOCOA_CONNECT_DELAY_MS); 136 } 137 MILKCOCOA_DEBUG_PRINTLN("MQTT Connected!"); 138 139 return 0; 140 } 141 142 int8_t Milkcocoa::push(const char *path, DataElement *pdataelement, uint16_t timeout) { 128 143 char topic[100]; 129 boolret;144 int8_t ret; 130 145 char *send_array; 146 147 if((ret = connect(timeout)) != 0){return ret;} 148 131 149 sprintf(topic, "%s/%s/push", app_id, path); 132 150 Adafruit_MQTT_Publish pushPublisher = Adafruit_MQTT_Publish(mqtt, topic); 133 151 send_array = pdataelement->toCharArray(); 134 ret = pushPublisher.publish(send_array);152 ret = (pushPublisher.publish(send_array))? 0 : MILKCOCOA_PUSH_ERRORNO; 135 153 free(send_array); 136 154 return ret; 137 155 } 138 156 139 bool Milkcocoa::send(const char *path, DataElement *pdataelement) {157 int8_t Milkcocoa::send(const char *path, DataElement *pdataelement, uint16_t timeout) { 140 158 char topic[100]; 141 bool ret; 142 char *send_array; 159 int8_t ret; 160 char *send_array; 161 162 if((ret = connect(timeout)) != 0){return ret;} 163 143 164 sprintf(topic, "%s/%s/send", app_id, path); 144 165 Adafruit_MQTT_Publish pushPublisher = Adafruit_MQTT_Publish(mqtt, topic); 145 166 send_array = pdataelement->toCharArray(); 146 ret = pushPublisher.publish(send_array);167 ret = (pushPublisher.publish(send_array))? 0 : MILKCOCOA_PUSH_ERRORNO; 147 168 free(send_array); 148 169 return ret; 149 170 } 150 171 151 void Milkcocoa::loop() { 152 connect(); 172 /* 173 * Return code 174 * 0 : Success 175 * other : Error code 176 * -1,1-6 : see Adafruit_MQTT::connectErrorString() 177 */ 178 int8_t Milkcocoa::loop(uint16_t timeout) { 179 int8_t ret; 180 181 if((ret = connect(timeout)) != 0){return ret;} 182 153 183 Adafruit_MQTT_Subscribe *subscription; 154 184 while ((subscription = mqtt->readSubscription(1000))) { … … 161 191 } 162 192 } 193 194 return 0; 163 195 } 164 196 -
rtos_arduino/trunk/arduino_lib/libraries/Milkcocoa_Arduino_SDK/Milkcocoa.h
r144 r180 32 32 33 33 #define MILKCOCOA_SUBSCRIBERS 8 34 #define MILKCOCOA_CONNECT_DELAY_MS 5000 35 36 #define MILKCOCOA_PUSH_ERRORNO -2 37 #define MILKCOCOA_SEND_ERRORNO -2 38 39 //#define MILKCOCOA_DEBUG 40 41 #define DEBUG_PRINTER Serial 42 43 #ifdef MILKCOCOA_DEBUG 44 #define MILKCOCOA_DEBUG_PRINT(...) { DEBUG_PRINTER.print(__VA_ARGS__); } 45 #define MILKCOCOA_DEBUG_PRINTLN(...) { DEBUG_PRINTER.println(__VA_ARGS__); } 46 #define MILKCOCOA_DEBUG_PRINTBUFFER(buffer, len) { printBuffer(buffer, len); } 47 #else 48 #define MILKCOCOA_DEBUG_PRINT(...) {} 49 #define MILKCOCOA_DEBUG_PRINTLN(...) {} 50 #define MILKCOCOA_DEBUG_PRINTBUFFER(buffer, len) {} 51 #endif 34 52 35 53 class DataElement { … … 42 60 void setValue(const char *key, double v); 43 61 char *toCharArray(); 44 char *getString(const char *key);45 int getInt(const char *key);46 float getFloat(const char *key);62 bool getString(const char *key, char **pdata); 63 bool getInt(const char *key, int *pdata); 64 bool getFloat(const char *key, float *pdata); 47 65 48 66 private: … … 67 85 Milkcocoa(Client *client, const char *host, uint16_t port, const char *_app_id, const char *client_id, const char *_session); 68 86 static Milkcocoa* createWithApiKey(Client *client, const char *host, uint16_t port, const char *app_id, const char *client_id, const char *key, const char *secret); 69 void connect();70 void loop();71 bool push(const char *path, DataElement *pdataelement);72 bool send(const char *path, DataElement *pdataelement);87 int8_t connect(int32_t tmout = 0); 88 int8_t loop(uint16_t timeout = 0); 89 int8_t push(const char *path, DataElement *pdataelement, uint16_t timeout = 0); 90 int8_t send(const char *path, DataElement *pdataelement, uint16_t timeout = 0); 73 91 bool on(const char *path, const char *event, GeneralFunction cb); 74 92 const __FlashStringHelper* connectErrorString(int8_t code) {return mqtt->connectErrorString(code);}; 93 const __FlashStringHelper* pushErrorString(int8_t code) {if(code == MILKCOCOA_PUSH_ERRORNO) return F("Push error"); return mqtt->connectErrorString(code);}; 75 94 76 95 private:
Note:
See TracChangeset
for help on using the changeset viewer.