Changeset 180


Ignore:
Timestamp:
Mar 28, 2016, 2:28:23 PM (8 years ago)
Author:
ertl-honda
Message:

ESP8266のライブラリの更新に伴う変更

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  
    3535    else
    3636      DEBUG_PRINTER.print(" ");
     37#if 0     
    3738    DEBUG_PRINTER.print(F(" [0x"));
    3839    if (buffer[i] < 0x10)
     
    4142    DEBUG_PRINTER.print("], ");
    4243    if (i % 8 == 7) DEBUG_PRINTER.println();
     44#endif           
    4345  }
    4446  DEBUG_PRINTER.println();
  • rtos_arduino/trunk/arduino_lib/libraries/Milkcocoa_Arduino_SDK/Client_ESP8266.h

    r170 r180  
    2323#include "ESP8266.h"
    2424
    25 #define ESP8266CLIENT_BUFFER_LEN  512
    26 
    2725class ESP8266Client: public Client, public ESP8266 {
    28 
    2926  public:
     27    ESP8266Client(void) {
     28        pbuffer = &rx_buffer[0];
     29    }
     30   
    3031    /*
    3132     * @retval 0 : faild
     
    3435    int connect(IPAddress ip, uint16_t port) {
    3536        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(".");
    4340        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;
    4642    };
    4743   
    4844    int connect(const char *host, uint16_t port) {
    4945        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;
    5347    };
    5448   
     
    5650        if(send(&data, 1)){
    5751            return 1;
    58         }
    59         else {
    60             return 0;
    61         }
     52        }       
     53        return 0;
    6254    };
     55   
    6356    size_t write(const uint8_t *buf, size_t size){
    6457        if(send(buf, size)){
    6558            return size;
    6659        }
    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         }
    8760        return 0;
    8861    };
     62   
     63    int available(){
     64        return isDataAvailable();
     65    };
     66   
    8967    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;
    9371        }
    94         if (bufferlen > 0){
    95             bufferlen--;
    96             return *pbuffer++;
    97         }
    98         else {
    99             return (int)-1;
    100         }           
     72        return (int)-1;
    10173    };
    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   
    10483    void flush(){};
    10584    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();};
    10887  private:
    109     uint8_t _connected;
    110     uint8_t buffer[ESP8266CLIENT_BUFFER_LEN];
    111     uint8_t bufferlen;
    112     uint8_t *pbuffer;
     88    ESP8266_RingBuffer *pbuffer;
    11389};
    11490
  • rtos_arduino/trunk/arduino_lib/libraries/Milkcocoa_Arduino_SDK/Milkcocoa.cpp

    r144 r180  
    3535DataElement::DataElement(char *json_string) {
    3636  paJsonObj = aJson.parse(json_string);
    37   params = aJson.getObjectItem(paJsonObj, "params");   
     37  params = aJson.getObjectItem(paJsonObj, "params");
    3838}
    3939
     
    5656}
    5757
    58 char *DataElement::getString(const char *key) {
     58bool DataElement::getString(const char *key, char **pdata) {
    5959  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
     65bool 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
     72bool DataElement::getFloat(const char *key, float *pdata) {
    6473  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}
    7578
    7679char *DataElement::toCharArray() {
     
    106109}
    107110
    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 */
     119int8_t Milkcocoa::connect(int32_t tmout) {
     120  int8_t ret;
     121  int32_t retry = 0;
    110122
    111123  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... ");
    116128
    117129  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
     142int8_t Milkcocoa::push(const char *path, DataElement *pdataelement, uint16_t timeout) {
    128143  char topic[100];
    129   bool ret;
     144  int8_t ret;
    130145  char *send_array;
     146
     147  if((ret = connect(timeout)) != 0){return ret;}
     148   
    131149  sprintf(topic, "%s/%s/push", app_id, path);
    132150  Adafruit_MQTT_Publish pushPublisher = Adafruit_MQTT_Publish(mqtt, topic);
    133151  send_array = pdataelement->toCharArray();
    134   ret = pushPublisher.publish(send_array);
     152  ret = (pushPublisher.publish(send_array))? 0 : MILKCOCOA_PUSH_ERRORNO;
    135153  free(send_array);
    136154  return ret;
    137155}
    138156
    139 bool Milkcocoa::send(const char *path, DataElement *pdataelement) {
     157int8_t Milkcocoa::send(const char *path, DataElement *pdataelement, uint16_t timeout) {
    140158  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   
    143164  sprintf(topic, "%s/%s/send", app_id, path);
    144165  Adafruit_MQTT_Publish pushPublisher = Adafruit_MQTT_Publish(mqtt, topic);
    145166  send_array = pdataelement->toCharArray();
    146   ret = pushPublisher.publish(send_array);
     167  ret = (pushPublisher.publish(send_array))? 0 : MILKCOCOA_PUSH_ERRORNO;
    147168  free(send_array);   
    148169  return ret;
    149170}
    150171
    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 */
     178int8_t Milkcocoa::loop(uint16_t timeout) {
     179  int8_t ret;
     180
     181  if((ret = connect(timeout)) != 0){return ret;}
     182   
    153183  Adafruit_MQTT_Subscribe *subscription;
    154184  while ((subscription = mqtt->readSubscription(1000))) {
     
    161191    }
    162192  }
     193
     194  return 0; 
    163195}
    164196
  • rtos_arduino/trunk/arduino_lib/libraries/Milkcocoa_Arduino_SDK/Milkcocoa.h

    r144 r180  
    3232
    3333#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
    3452
    3553class DataElement {
     
    4260    void setValue(const char *key, double v);
    4361    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);
    4765   
    4866  private:
     
    6785  Milkcocoa(Client *client, const char *host, uint16_t port, const char *_app_id, const char *client_id, const char *_session);
    6886  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);
    7391  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);};
    7594
    7695private:
Note: See TracChangeset for help on using the changeset viewer.