Bohyun Bang / WIZnetInterface

Dependents:   w7500-paho-mqtt openHAB_mqtt_W7500 kakaoIoTchatbot w7500-RFID-mqtt

Fork of WIZnetInterface by WIZnet

Committer:
eunkyoungkim
Date:
Thu Jun 25 23:19:51 2015 +0000
Revision:
17:7d7553e0578e
modify wrong data(SSD1306.h)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eunkyoungkim 17:7d7553e0578e 1 /**
eunkyoungkim 17:7d7553e0578e 2 * @author Raphael Kwon
eunkyoungkim 17:7d7553e0578e 3 *
eunkyoungkim 17:7d7553e0578e 4 * @section LICENSE
eunkyoungkim 17:7d7553e0578e 5 *
eunkyoungkim 17:7d7553e0578e 6 * Copyright (c) 2014 WIZnet Co., Ltd.
eunkyoungkim 17:7d7553e0578e 7 *
eunkyoungkim 17:7d7553e0578e 8 * Permission is hereby granted, free of charge, to any person obtaining a copy
eunkyoungkim 17:7d7553e0578e 9 * of this software and associated documentation files (the "Software"), to deal
eunkyoungkim 17:7d7553e0578e 10 * in the Software without restriction, including without limitation the rights
eunkyoungkim 17:7d7553e0578e 11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
eunkyoungkim 17:7d7553e0578e 12 * copies of the Software, and to permit persons to whom the Software is
eunkyoungkim 17:7d7553e0578e 13 * furnished to do so, subject to the following conditions:
eunkyoungkim 17:7d7553e0578e 14 *
eunkyoungkim 17:7d7553e0578e 15 * The above copyright notice and this permission notice shall be included in
eunkyoungkim 17:7d7553e0578e 16 * all copies or substantial portions of the Software.
eunkyoungkim 17:7d7553e0578e 17 *
eunkyoungkim 17:7d7553e0578e 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
eunkyoungkim 17:7d7553e0578e 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
eunkyoungkim 17:7d7553e0578e 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
eunkyoungkim 17:7d7553e0578e 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
eunkyoungkim 17:7d7553e0578e 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
eunkyoungkim 17:7d7553e0578e 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
eunkyoungkim 17:7d7553e0578e 24 * THE SOFTWARE.
eunkyoungkim 17:7d7553e0578e 25 *
eunkyoungkim 17:7d7553e0578e 26 * @section DESCRIPTION
eunkyoungkim 17:7d7553e0578e 27 * Simple Network Time Protocol Client
eunkyoungkim 17:7d7553e0578e 28 *
eunkyoungkim 17:7d7553e0578e 29 */
eunkyoungkim 17:7d7553e0578e 30
eunkyoungkim 17:7d7553e0578e 31 #ifndef SNTPCLIENT_H
eunkyoungkim 17:7d7553e0578e 32 #define SNTPCLIENT_H
eunkyoungkim 17:7d7553e0578e 33
eunkyoungkim 17:7d7553e0578e 34 #include "mbed.h"
eunkyoungkim 17:7d7553e0578e 35 #include "UDPSocket.h"
eunkyoungkim 17:7d7553e0578e 36
eunkyoungkim 17:7d7553e0578e 37 /*
eunkyoungkim 17:7d7553e0578e 38 * @brief Define it for Debug & Monitor DNS processing.
eunkyoungkim 17:7d7553e0578e 39 * @note
eunkyoungkim 17:7d7553e0578e 40 */
eunkyoungkim 17:7d7553e0578e 41 //#define _SNTP_DEBUG_
eunkyoungkim 17:7d7553e0578e 42
eunkyoungkim 17:7d7553e0578e 43 #define MAX_SNTP_BUF_SIZE sizeof(ntpformat) ///< maximum size of DNS buffer. */
eunkyoungkim 17:7d7553e0578e 44 #define ntp_port 123 //ntp server port number
eunkyoungkim 17:7d7553e0578e 45 #define SECS_PERDAY 86400UL // seconds in a day = 60*60*24
eunkyoungkim 17:7d7553e0578e 46 #define UTC_ADJ_HRS 9 // SEOUL : GMT+9
eunkyoungkim 17:7d7553e0578e 47 #define EPOCH 1900 // NTP start year
eunkyoungkim 17:7d7553e0578e 48
eunkyoungkim 17:7d7553e0578e 49 /* for ntpclient */
eunkyoungkim 17:7d7553e0578e 50 typedef signed char s_char;
eunkyoungkim 17:7d7553e0578e 51 typedef unsigned long long tstamp;
eunkyoungkim 17:7d7553e0578e 52 typedef unsigned int tdist;
eunkyoungkim 17:7d7553e0578e 53
eunkyoungkim 17:7d7553e0578e 54 typedef struct _ntpformat
eunkyoungkim 17:7d7553e0578e 55 {
eunkyoungkim 17:7d7553e0578e 56 uint8_t dstaddr[4]; /* destination (local) address */
eunkyoungkim 17:7d7553e0578e 57 char version; /* version number */
eunkyoungkim 17:7d7553e0578e 58 char leap; /* leap indicator */
eunkyoungkim 17:7d7553e0578e 59 char mode; /* mode */
eunkyoungkim 17:7d7553e0578e 60 char stratum; /* stratum */
eunkyoungkim 17:7d7553e0578e 61 char poll; /* poll interval */
eunkyoungkim 17:7d7553e0578e 62 s_char precision; /* precision */
eunkyoungkim 17:7d7553e0578e 63 tdist rootdelay; /* root delay */
eunkyoungkim 17:7d7553e0578e 64 tdist rootdisp; /* root dispersion */
eunkyoungkim 17:7d7553e0578e 65 char refid; /* reference ID */
eunkyoungkim 17:7d7553e0578e 66 tstamp reftime; /* reference time */
eunkyoungkim 17:7d7553e0578e 67 tstamp org; /* origin timestamp */
eunkyoungkim 17:7d7553e0578e 68 tstamp rec; /* receive timestamp */
eunkyoungkim 17:7d7553e0578e 69 tstamp xmt; /* transmit timestamp */
eunkyoungkim 17:7d7553e0578e 70 } ntpformat;
eunkyoungkim 17:7d7553e0578e 71 typedef struct _datetime
eunkyoungkim 17:7d7553e0578e 72 {
eunkyoungkim 17:7d7553e0578e 73 int yy;
eunkyoungkim 17:7d7553e0578e 74 int mo;
eunkyoungkim 17:7d7553e0578e 75 int dd;
eunkyoungkim 17:7d7553e0578e 76 int hh;
eunkyoungkim 17:7d7553e0578e 77 int mm;
eunkyoungkim 17:7d7553e0578e 78 int ss;
eunkyoungkim 17:7d7553e0578e 79 } datetime;
eunkyoungkim 17:7d7553e0578e 80 /*
eunkyoungkim 17:7d7553e0578e 81 typedef struct _datetime
eunkyoungkim 17:7d7553e0578e 82 {
eunkyoungkim 17:7d7553e0578e 83 uint16_t yy;
eunkyoungkim 17:7d7553e0578e 84 uint8_t mo;
eunkyoungkim 17:7d7553e0578e 85 uint8_t dd;
eunkyoungkim 17:7d7553e0578e 86 uint8_t hh;
eunkyoungkim 17:7d7553e0578e 87 uint8_t mm;
eunkyoungkim 17:7d7553e0578e 88 uint8_t ss;
eunkyoungkim 17:7d7553e0578e 89 } datetime;
eunkyoungkim 17:7d7553e0578e 90 */
eunkyoungkim 17:7d7553e0578e 91 /** SNTPClient client Class.
eunkyoungkim 17:7d7553e0578e 92 *
eunkyoungkim 17:7d7553e0578e 93 * Example (ethernet network):
eunkyoungkim 17:7d7553e0578e 94 * @code
eunkyoungkim 17:7d7553e0578e 95 * #include "mbed.h"
eunkyoungkim 17:7d7553e0578e 96 * #include "EthernetInterface.h"
eunkyoungkim 17:7d7553e0578e 97 * #include "SNTPClient.h"
eunkyoungkim 17:7d7553e0578e 98 *
eunkyoungkim 17:7d7553e0578e 99 * int main() {
eunkyoungkim 17:7d7553e0578e 100 * EthernetInterface eth;
eunkyoungkim 17:7d7553e0578e 101 * eth.init(); //Use DHCP
eunkyoungkim 17:7d7553e0578e 102 * eth.connect();
eunkyoungkim 17:7d7553e0578e 103 * printf("IP Address is %s\n\r", eth.getIPAddress());
eunkyoungkim 17:7d7553e0578e 104 *
eunkyoungkim 17:7d7553e0578e 105 * SNTPClient ws("ws://sockets.mbed.org:443/ws/demo/rw");
eunkyoungkim 17:7d7553e0578e 106 * ws.connect();
eunkyoungkim 17:7d7553e0578e 107 *
eunkyoungkim 17:7d7553e0578e 108 * while (1) {
eunkyoungkim 17:7d7553e0578e 109 * int res = ws.send("SNTPClient Hello World!");
eunkyoungkim 17:7d7553e0578e 110 *
eunkyoungkim 17:7d7553e0578e 111 * if (ws.read(recv)) {
eunkyoungkim 17:7d7553e0578e 112 * printf("rcv: %s\r\n", recv);
eunkyoungkim 17:7d7553e0578e 113 * }
eunkyoungkim 17:7d7553e0578e 114 *
eunkyoungkim 17:7d7553e0578e 115 * wait(0.1);
eunkyoungkim 17:7d7553e0578e 116 * }
eunkyoungkim 17:7d7553e0578e 117 * }
eunkyoungkim 17:7d7553e0578e 118 * @endcode
eunkyoungkim 17:7d7553e0578e 119 */
eunkyoungkim 17:7d7553e0578e 120
eunkyoungkim 17:7d7553e0578e 121
eunkyoungkim 17:7d7553e0578e 122 class SNTPClient
eunkyoungkim 17:7d7553e0578e 123 {
eunkyoungkim 17:7d7553e0578e 124 public:
eunkyoungkim 17:7d7553e0578e 125 /**
eunkyoungkim 17:7d7553e0578e 126 * Constructor
eunkyoungkim 17:7d7553e0578e 127 *
eunkyoungkim 17:7d7553e0578e 128 * @param url The SNTPClient host
eunkyoungkim 17:7d7553e0578e 129 */
eunkyoungkim 17:7d7553e0578e 130 SNTPClient(char * url, uint8_t time_zone);
eunkyoungkim 17:7d7553e0578e 131
eunkyoungkim 17:7d7553e0578e 132 /**
eunkyoungkim 17:7d7553e0578e 133 * Connect to the SNTPClient url
eunkyoungkim 17:7d7553e0578e 134 *
eunkyoungkim 17:7d7553e0578e 135 *@return true if the connection is established, false otherwise
eunkyoungkim 17:7d7553e0578e 136 */
eunkyoungkim 17:7d7553e0578e 137 bool connect();
eunkyoungkim 17:7d7553e0578e 138
eunkyoungkim 17:7d7553e0578e 139 /**
eunkyoungkim 17:7d7553e0578e 140 * Read a SNTPClient message
eunkyoungkim 17:7d7553e0578e 141 *
eunkyoungkim 17:7d7553e0578e 142 * @param message pointer to the string to be read (null if drop frame)
eunkyoungkim 17:7d7553e0578e 143 *
eunkyoungkim 17:7d7553e0578e 144 * @return true if a SNTPClient frame has been read
eunkyoungkim 17:7d7553e0578e 145 */
eunkyoungkim 17:7d7553e0578e 146 bool getTime(datetime *time);
eunkyoungkim 17:7d7553e0578e 147
eunkyoungkim 17:7d7553e0578e 148 /**
eunkyoungkim 17:7d7553e0578e 149 * Close the SNTPClient connection
eunkyoungkim 17:7d7553e0578e 150 *
eunkyoungkim 17:7d7553e0578e 151 * @return true if the connection has been closed, false otherwise
eunkyoungkim 17:7d7553e0578e 152 */
eunkyoungkim 17:7d7553e0578e 153 bool close();
eunkyoungkim 17:7d7553e0578e 154
eunkyoungkim 17:7d7553e0578e 155 /*
eunkyoungkim 17:7d7553e0578e 156 * Accessor: get host from the SNTPClient url
eunkyoungkim 17:7d7553e0578e 157 *
eunkyoungkim 17:7d7553e0578e 158 * @return host
eunkyoungkim 17:7d7553e0578e 159 */
eunkyoungkim 17:7d7553e0578e 160 char* getHost();
eunkyoungkim 17:7d7553e0578e 161
eunkyoungkim 17:7d7553e0578e 162 private:
eunkyoungkim 17:7d7553e0578e 163
eunkyoungkim 17:7d7553e0578e 164 uint16_t port;
eunkyoungkim 17:7d7553e0578e 165 char host[32];
eunkyoungkim 17:7d7553e0578e 166
eunkyoungkim 17:7d7553e0578e 167 UDPSocket socket;
eunkyoungkim 17:7d7553e0578e 168 Endpoint sntp_server;
eunkyoungkim 17:7d7553e0578e 169
eunkyoungkim 17:7d7553e0578e 170 ntpformat NTPformat;
eunkyoungkim 17:7d7553e0578e 171 datetime Nowdatetime;
eunkyoungkim 17:7d7553e0578e 172 uint8_t ntpmessage[48];
eunkyoungkim 17:7d7553e0578e 173 uint8_t tz; // Time Zone
eunkyoungkim 17:7d7553e0578e 174
eunkyoungkim 17:7d7553e0578e 175 void get_seconds_from_ntp_server(uint8_t *buf, uint16_t idx);
eunkyoungkim 17:7d7553e0578e 176 tstamp changedatetime_to_seconds(void);
eunkyoungkim 17:7d7553e0578e 177 void calcdatetime(tstamp seconds);
eunkyoungkim 17:7d7553e0578e 178 };
eunkyoungkim 17:7d7553e0578e 179
eunkyoungkim 17:7d7553e0578e 180 #endif