blynk & neopixelring & w7500

Fork of WIZwiki-7500_Blynk by IOP

Committer:
jcm931213
Date:
Mon Nov 27 11:49:08 2017 +0000
Revision:
18:bc3d69c01bf2
Parent:
17:ba922c4e9aee
NeoPixel Ring Blynk Example final!!!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jcm931213 16:5d8386745e22 1 /**
jcm931213 16:5d8386745e22 2 * @file BlynkParam.h
jcm931213 16:5d8386745e22 3 * @author Volodymyr Shymanskyy
jcm931213 16:5d8386745e22 4 * @license This project is released under the MIT License (MIT)
jcm931213 16:5d8386745e22 5 * @copyright Copyright (c) 2015 Volodymyr Shymanskyy
jcm931213 16:5d8386745e22 6 * @date Jan 2015
jcm931213 16:5d8386745e22 7 * @brief
jcm931213 16:5d8386745e22 8 *
jcm931213 16:5d8386745e22 9 */
jcm931213 16:5d8386745e22 10
jcm931213 16:5d8386745e22 11 #ifndef BlynkMbedClient_h
jcm931213 16:5d8386745e22 12 #define BlynkMbedClient_h
jcm931213 16:5d8386745e22 13
jcm931213 16:5d8386745e22 14 #include <BlynkApiMbed.h>
jcm931213 16:5d8386745e22 15 #include <Blynk/BlynkDebug.h>
jcm931213 16:5d8386745e22 16 #include <TCPSocketConnection.h>
jcm931213 16:5d8386745e22 17
jcm931213 16:5d8386745e22 18 #if defined(ESP8266) && !defined(BLYNK_NO_YIELD)
jcm931213 16:5d8386745e22 19 #define YIELD_FIX() BLYNK_RUN_YIELD();
jcm931213 16:5d8386745e22 20 #else
jcm931213 16:5d8386745e22 21 #define YIELD_FIX()
jcm931213 16:5d8386745e22 22 #endif
jcm931213 16:5d8386745e22 23
jcm931213 16:5d8386745e22 24 template <typename Client>
jcm931213 16:5d8386745e22 25 class BlynkMbedClientGen : public Socket
jcm931213 16:5d8386745e22 26 {
jcm931213 16:5d8386745e22 27 public:
jcm931213 16:5d8386745e22 28 BlynkMbedClientGen(Client& c)
jcm931213 16:5d8386745e22 29 : client(NULL), domain(NULL), port(0), isConn(false)
jcm931213 16:5d8386745e22 30 {
jcm931213 16:5d8386745e22 31 setClient(&c);
jcm931213 16:5d8386745e22 32 }
jcm931213 16:5d8386745e22 33
jcm931213 16:5d8386745e22 34 BlynkMbedClientGen()
jcm931213 16:5d8386745e22 35 : client(NULL), domain(NULL), port(0), isConn(false)
jcm931213 16:5d8386745e22 36 {}
jcm931213 16:5d8386745e22 37
jcm931213 16:5d8386745e22 38 void setClient(Client* c) {
jcm931213 16:5d8386745e22 39 client = c;
jcm931213 16:5d8386745e22 40 client->set_blocking(true, BLYNK_TIMEOUT_MS*1000);
jcm931213 16:5d8386745e22 41 }
jcm931213 16:5d8386745e22 42
jcm931213 16:5d8386745e22 43 void begin(char* a, uint16_t p) {
jcm931213 16:5d8386745e22 44 domain = NULL;
jcm931213 16:5d8386745e22 45 port = p;
jcm931213 16:5d8386745e22 46 addr = a;
jcm931213 16:5d8386745e22 47 }
jcm931213 16:5d8386745e22 48
jcm931213 16:5d8386745e22 49 void begin(const char* d, uint16_t p) {
jcm931213 16:5d8386745e22 50 domain = d;
jcm931213 16:5d8386745e22 51 port = p;
jcm931213 16:5d8386745e22 52 }
jcm931213 16:5d8386745e22 53
jcm931213 16:5d8386745e22 54 bool connect() {
jcm931213 18:bc3d69c01bf2 55 //printf("mbedClientGen - connect function\r\n");
jcm931213 16:5d8386745e22 56 if (domain) {
jcm931213 18:bc3d69c01bf2 57 //BLYNK_LOG4(BLYNK_F("Connecting to "), domain, ':', port);
jcm931213 18:bc3d69c01bf2 58 printf("Connectiong to %s : %d\r\n", domain, port);
jcm931213 16:5d8386745e22 59 client->connect(domain, port);
jcm931213 18:bc3d69c01bf2 60 //printf("TCP Socket Connection finish\r\n");
jcm931213 16:5d8386745e22 61 isConn = (1 == client->is_connected());
jcm931213 16:5d8386745e22 62 return isConn;
jcm931213 16:5d8386745e22 63 } else { //if (uint32_t(addr) != 0) {
jcm931213 16:5d8386745e22 64 BLYNK_LOG_IP("Connecting to ", addr);
jcm931213 16:5d8386745e22 65 isConn = (1 == client->connect(addr, port));
jcm931213 16:5d8386745e22 66 return isConn;
jcm931213 16:5d8386745e22 67 }
jcm931213 16:5d8386745e22 68 }
jcm931213 16:5d8386745e22 69
jcm931213 16:5d8386745e22 70 void disconnect() {
jcm931213 16:5d8386745e22 71 isConn = false;
jcm931213 17:ba922c4e9aee 72 if (client->getsock()) return;
jcm931213 16:5d8386745e22 73 client->close();
jcm931213 16:5d8386745e22 74 client->setsock(-1);
jcm931213 16:5d8386745e22 75 }
jcm931213 16:5d8386745e22 76
jcm931213 16:5d8386745e22 77 #ifdef BLYNK_ENC28J60_FIX
jcm931213 16:5d8386745e22 78 size_t read(void* buf, size_t len) {
jcm931213 16:5d8386745e22 79 while (client->available() < len) { }
jcm931213 16:5d8386745e22 80 return client->read((uint8_t*)buf, len);
jcm931213 16:5d8386745e22 81 }
jcm931213 16:5d8386745e22 82 #else
jcm931213 16:5d8386745e22 83 size_t read(void* buf, size_t len) {
jcm931213 16:5d8386745e22 84 size_t res = client->receive((char*)buf, len);
jcm931213 16:5d8386745e22 85 YIELD_FIX();
jcm931213 16:5d8386745e22 86 return res;
jcm931213 16:5d8386745e22 87 }
jcm931213 16:5d8386745e22 88 #endif
jcm931213 16:5d8386745e22 89
jcm931213 16:5d8386745e22 90 #ifdef BLYNK_RETRY_SEND
jcm931213 16:5d8386745e22 91 size_t write(const void* buf, size_t len) {
jcm931213 16:5d8386745e22 92 size_t sent = 0;
jcm931213 16:5d8386745e22 93 int retry = 0;
jcm931213 16:5d8386745e22 94 while (sent < len && ++retry < 10) {
jcm931213 16:5d8386745e22 95 size_t w = client->write((const uint8_t*)buf+sent, len-sent);
jcm931213 16:5d8386745e22 96 if (w != 0 && w != -1) {
jcm931213 16:5d8386745e22 97 sent += w;
jcm931213 16:5d8386745e22 98 } else {
jcm931213 16:5d8386745e22 99 ::delay(50);
jcm931213 16:5d8386745e22 100 #if defined(BLYNK_DEBUG) && defined(BLYNK_PRINT)
jcm931213 16:5d8386745e22 101 BLYNK_PRINT_TIME();
jcm931213 16:5d8386745e22 102 BLYNK_PRINT.print(BLYNK_F("Retry "));
jcm931213 16:5d8386745e22 103 BLYNK_PRINT.print(retry);
jcm931213 16:5d8386745e22 104 BLYNK_PRINT.print(BLYNK_F(" send: "));
jcm931213 16:5d8386745e22 105 BLYNK_PRINT.print(sent);
jcm931213 16:5d8386745e22 106 BLYNK_PRINT.print('/');
jcm931213 16:5d8386745e22 107 BLYNK_PRINT.println(len);
jcm931213 16:5d8386745e22 108 #endif
jcm931213 16:5d8386745e22 109 }
jcm931213 16:5d8386745e22 110 }
jcm931213 16:5d8386745e22 111 return sent;
jcm931213 16:5d8386745e22 112 }
jcm931213 16:5d8386745e22 113 #else
jcm931213 16:5d8386745e22 114 size_t write(const void* buf, size_t len) {
jcm931213 16:5d8386745e22 115 YIELD_FIX();
jcm931213 16:5d8386745e22 116 size_t res = client->send((char*)buf, len);
jcm931213 16:5d8386745e22 117 YIELD_FIX();
jcm931213 16:5d8386745e22 118 return res;
jcm931213 16:5d8386745e22 119 }
jcm931213 16:5d8386745e22 120 #endif
jcm931213 16:5d8386745e22 121
jcm931213 16:5d8386745e22 122 bool connected() { YIELD_FIX(); return isConn && client->is_connected(); }
jcm931213 16:5d8386745e22 123 int available() { YIELD_FIX();
jcm931213 16:5d8386745e22 124 //printf("readable : %d, sock: %d\r\n", eth->wait_readable(_sock_fd, 3000000, 0),_sock_fd);
jcm931213 16:5d8386745e22 125 //return eth->wait_readable(_sock_fd, 300000, 0);
jcm931213 18:bc3d69c01bf2 126 return eth->wait_readable(client->getsock() , 1000*60*10, 0);
jcm931213 16:5d8386745e22 127 }
jcm931213 16:5d8386745e22 128
jcm931213 16:5d8386745e22 129 protected:
jcm931213 16:5d8386745e22 130 Client* client;
jcm931213 16:5d8386745e22 131 char* addr;
jcm931213 16:5d8386745e22 132 const char* domain;
jcm931213 16:5d8386745e22 133 uint16_t port;
jcm931213 16:5d8386745e22 134 bool isConn;
jcm931213 16:5d8386745e22 135 };
jcm931213 16:5d8386745e22 136
jcm931213 16:5d8386745e22 137 typedef BlynkMbedClientGen<TCPSocketConnection> BlynkMbedClient;
jcm931213 16:5d8386745e22 138
jcm931213 16:5d8386745e22 139 #endif