iSDIO Library for TOSHIBA FlashAir. include HTTP or HTTPS Client.

Dependencies:   SDFileSystem

Dependents:   FlashAir_Twitter Neon_F303K8_04

Fork of HTTPClient by Donatien Garnier

Committer:
ban4jp
Date:
Mon Dec 15 12:23:22 2014 +0000
Revision:
20:51abf34bcc06
Initial commit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ban4jp 20:51abf34bcc06 1 /* Arduino Sdio Library
ban4jp 20:51abf34bcc06 2 * Copyright (C) 2014 by Munehiro Doi, Fixstars Corporation
ban4jp 20:51abf34bcc06 3 * All rights reserved.
ban4jp 20:51abf34bcc06 4 * Released under the BSD 2-Clause license.
ban4jp 20:51abf34bcc06 5 * http://flashair-developers.com/documents/license.html
ban4jp 20:51abf34bcc06 6 */
ban4jp 20:51abf34bcc06 7 #ifndef iSDIO_helper_h
ban4jp 20:51abf34bcc06 8 #define iSDIO_helper_h
ban4jp 20:51abf34bcc06 9
ban4jp 20:51abf34bcc06 10 #include <stdint.h>
ban4jp 20:51abf34bcc06 11
ban4jp 20:51abf34bcc06 12 //------------------------------------------------------------------------------
ban4jp 20:51abf34bcc06 13 // utilities to make a data block.
ban4jp 20:51abf34bcc06 14 template <typename T>
ban4jp 20:51abf34bcc06 15 uint8_t* put_T(uint8_t* p, T value) {
ban4jp 20:51abf34bcc06 16 *((T*)p) = value;
ban4jp 20:51abf34bcc06 17 p += sizeof(T);
ban4jp 20:51abf34bcc06 18 return p;
ban4jp 20:51abf34bcc06 19 }
ban4jp 20:51abf34bcc06 20 /** specific version for string. it set length, data, and paddings. */
ban4jp 20:51abf34bcc06 21 template <>
ban4jp 20:51abf34bcc06 22 uint8_t* put_T(uint8_t* p, const char* value);
ban4jp 20:51abf34bcc06 23
ban4jp 20:51abf34bcc06 24 // utilities for those who want to see value types by function names.
ban4jp 20:51abf34bcc06 25 static inline
ban4jp 20:51abf34bcc06 26 uint8_t* put_u8(uint8_t* p, uint8_t value) {
ban4jp 20:51abf34bcc06 27 return put_T(p, value);
ban4jp 20:51abf34bcc06 28 }
ban4jp 20:51abf34bcc06 29 static inline
ban4jp 20:51abf34bcc06 30 uint8_t* put_u16(uint8_t* p, uint16_t value) {
ban4jp 20:51abf34bcc06 31 return put_T(p, value);
ban4jp 20:51abf34bcc06 32 }
ban4jp 20:51abf34bcc06 33 static inline
ban4jp 20:51abf34bcc06 34 uint8_t* put_u32(uint8_t* p, uint32_t value) {
ban4jp 20:51abf34bcc06 35 return put_T(p, value);
ban4jp 20:51abf34bcc06 36 }
ban4jp 20:51abf34bcc06 37 static inline
ban4jp 20:51abf34bcc06 38 uint8_t* put_str(uint8_t* p, const char* value) {
ban4jp 20:51abf34bcc06 39 return put_T(p, value);
ban4jp 20:51abf34bcc06 40 }
ban4jp 20:51abf34bcc06 41
ban4jp 20:51abf34bcc06 42 static inline
ban4jp 20:51abf34bcc06 43 uint8_t get_u8(uint8_t* p) {
ban4jp 20:51abf34bcc06 44 return *((uint8_t*)p);
ban4jp 20:51abf34bcc06 45 }
ban4jp 20:51abf34bcc06 46 static inline
ban4jp 20:51abf34bcc06 47 uint16_t get_u16(uint8_t* p) {
ban4jp 20:51abf34bcc06 48 return *((uint16_t*)p);
ban4jp 20:51abf34bcc06 49 }
ban4jp 20:51abf34bcc06 50 static inline
ban4jp 20:51abf34bcc06 51 uint32_t get_u32(uint8_t* p) {
ban4jp 20:51abf34bcc06 52 return *((uint32_t*)p);
ban4jp 20:51abf34bcc06 53 }
ban4jp 20:51abf34bcc06 54
ban4jp 20:51abf34bcc06 55 template <typename T>
ban4jp 20:51abf34bcc06 56 uint8_t* put_T_arg(uint8_t* p, T value) {
ban4jp 20:51abf34bcc06 57 p = put_T(p, (uint32_t)sizeof(T)); // length
ban4jp 20:51abf34bcc06 58 p = put_T(p, value); // data
ban4jp 20:51abf34bcc06 59 for (uint8_t i = 0; i < (4 - sizeof(T)) & 0x3; ++i) { // padding
ban4jp 20:51abf34bcc06 60 *p++ = 0;
ban4jp 20:51abf34bcc06 61 }
ban4jp 20:51abf34bcc06 62 return p;
ban4jp 20:51abf34bcc06 63 }
ban4jp 20:51abf34bcc06 64 template <>
ban4jp 20:51abf34bcc06 65 uint8_t* put_T_arg(uint8_t* p, const char* value);
ban4jp 20:51abf34bcc06 66
ban4jp 20:51abf34bcc06 67 static inline
ban4jp 20:51abf34bcc06 68 uint8_t* put_u8_arg(uint8_t* p, uint8_t value) {
ban4jp 20:51abf34bcc06 69 return put_T_arg(p, value);
ban4jp 20:51abf34bcc06 70 }
ban4jp 20:51abf34bcc06 71 static inline
ban4jp 20:51abf34bcc06 72 uint8_t* put_u16_arg(uint8_t* p, uint16_t value) {
ban4jp 20:51abf34bcc06 73 return put_T_arg(p, value);
ban4jp 20:51abf34bcc06 74 }
ban4jp 20:51abf34bcc06 75 static inline
ban4jp 20:51abf34bcc06 76 uint8_t* put_u32_arg(uint8_t* p, uint32_t value) {
ban4jp 20:51abf34bcc06 77 return put_T_arg(p, value);
ban4jp 20:51abf34bcc06 78 }
ban4jp 20:51abf34bcc06 79 static inline
ban4jp 20:51abf34bcc06 80 uint8_t* put_str_arg(uint8_t* p, const char* value) {
ban4jp 20:51abf34bcc06 81 return put_T_arg(p, value);
ban4jp 20:51abf34bcc06 82 }
ban4jp 20:51abf34bcc06 83 uint8_t* put_command_header(uint8_t* p, uint8_t num_commands,
ban4jp 20:51abf34bcc06 84 uint32_t command_bytes);
ban4jp 20:51abf34bcc06 85 uint8_t* put_command_info_header(uint8_t* p, uint16_t command_id,
ban4jp 20:51abf34bcc06 86 uint32_t sequence_id, uint16_t num_args);
ban4jp 20:51abf34bcc06 87
ban4jp 20:51abf34bcc06 88 //------------------------------------------------------------------------------
ban4jp 20:51abf34bcc06 89 /**
ban4jp 20:51abf34bcc06 90 * Header data for CMD48/49 param
ban4jp 20:51abf34bcc06 91 */
ban4jp 20:51abf34bcc06 92 typedef struct {
ban4jp 20:51abf34bcc06 93 uint8_t id;
ban4jp 20:51abf34bcc06 94 uint8_t number;
ban4jp 20:51abf34bcc06 95 uint16_t _reserved1;
ban4jp 20:51abf34bcc06 96 uint32_t size;
ban4jp 20:51abf34bcc06 97 uint32_t _reserved2;
ban4jp 20:51abf34bcc06 98 } isdio_command_header_t;
ban4jp 20:51abf34bcc06 99
ban4jp 20:51abf34bcc06 100 /**
ban4jp 20:51abf34bcc06 101 * Information data for CMD48/49 param
ban4jp 20:51abf34bcc06 102 */
ban4jp 20:51abf34bcc06 103 typedef struct {
ban4jp 20:51abf34bcc06 104 uint16_t _reserved0;
ban4jp 20:51abf34bcc06 105 uint16_t command;
ban4jp 20:51abf34bcc06 106 uint32_t sequence_id;
ban4jp 20:51abf34bcc06 107 uint16_t num_args;
ban4jp 20:51abf34bcc06 108 uint16_t _reserved1;
ban4jp 20:51abf34bcc06 109 } isdio_command_info_header_t;
ban4jp 20:51abf34bcc06 110
ban4jp 20:51abf34bcc06 111 /**
ban4jp 20:51abf34bcc06 112 * iSDIO Response Status Register at 0x440
ban4jp 20:51abf34bcc06 113 */
ban4jp 20:51abf34bcc06 114 typedef struct {
ban4jp 20:51abf34bcc06 115 uint8_t registration;
ban4jp 20:51abf34bcc06 116 uint8_t _reserved0;
ban4jp 20:51abf34bcc06 117 uint16_t command_id;
ban4jp 20:51abf34bcc06 118 uint32_t sequence_id;
ban4jp 20:51abf34bcc06 119 uint8_t status;
ban4jp 20:51abf34bcc06 120 uint8_t _reserved1[3];
ban4jp 20:51abf34bcc06 121 uint32_t error_status;
ban4jp 20:51abf34bcc06 122 uint32_t data_size;
ban4jp 20:51abf34bcc06 123 } isdio_response_status_t;
ban4jp 20:51abf34bcc06 124
ban4jp 20:51abf34bcc06 125 /**
ban4jp 20:51abf34bcc06 126 * Status Register at 0x400
ban4jp 20:51abf34bcc06 127 */
ban4jp 20:51abf34bcc06 128 typedef struct {
ban4jp 20:51abf34bcc06 129 uint8_t CWU :1; // Command Write Update
ban4jp 20:51abf34bcc06 130 uint8_t CWA :1; // Command Write Abort
ban4jp 20:51abf34bcc06 131 uint8_t _reserved0:6;
ban4jp 20:51abf34bcc06 132 uint8_t _reserved1[31];
ban4jp 20:51abf34bcc06 133 uint16_t CRU :1; // Command Response Update
ban4jp 20:51abf34bcc06 134 uint16_t ESU :1; // Error Status Update
ban4jp 20:51abf34bcc06 135 uint16_t MCU :1; // Media Change Update
ban4jp 20:51abf34bcc06 136 uint16_t ASU :1; // Application Status Update
ban4jp 20:51abf34bcc06 137 uint16_t _reserved2:12;
ban4jp 20:51abf34bcc06 138 uint16_t CRU_ENA :1; // CRU Enabled
ban4jp 20:51abf34bcc06 139 uint16_t ESU_ENA :1; // ESU Enabled
ban4jp 20:51abf34bcc06 140 uint16_t MCU_ENA :1; // MCU Enabled
ban4jp 20:51abf34bcc06 141 uint16_t ASU_ENA :1; // ASU Enabled
ban4jp 20:51abf34bcc06 142 uint16_t _reserved3:12;
ban4jp 20:51abf34bcc06 143 uint16_t CRE :1; // Command Response Error
ban4jp 20:51abf34bcc06 144 uint16_t CWE :1; // Command Write Error
ban4jp 20:51abf34bcc06 145 uint16_t RRE :1; // Response Receive Error
ban4jp 20:51abf34bcc06 146 uint16_t APE :1; // Application Specific Error
ban4jp 20:51abf34bcc06 147 uint16_t _reserved4:12;
ban4jp 20:51abf34bcc06 148 uint16_t MEX :1; // Memory Existence
ban4jp 20:51abf34bcc06 149 uint16_t FAT :1; // FAT System
ban4jp 20:51abf34bcc06 150 uint16_t _reserved5:14;
ban4jp 20:51abf34bcc06 151 uint8_t _reserved6[24];
ban4jp 20:51abf34bcc06 152 isdio_response_status_t response[8];
ban4jp 20:51abf34bcc06 153 uint8_t _reserved7[32];
ban4jp 20:51abf34bcc06 154 uint8_t application_status[256];
ban4jp 20:51abf34bcc06 155 } isdio_status_t;
ban4jp 20:51abf34bcc06 156
ban4jp 20:51abf34bcc06 157
ban4jp 20:51abf34bcc06 158 typedef struct {
ban4jp 20:51abf34bcc06 159 uint8_t ULR :1;
ban4jp 20:51abf34bcc06 160 uint8_t DLU :1;
ban4jp 20:51abf34bcc06 161 uint8_t CBR :1;
ban4jp 20:51abf34bcc06 162 uint8_t CDR :1;
ban4jp 20:51abf34bcc06 163 uint8_t _reserved0 :4;
ban4jp 20:51abf34bcc06 164 uint8_t ILU :1;
ban4jp 20:51abf34bcc06 165 uint8_t FLU :1;
ban4jp 20:51abf34bcc06 166 uint8_t _reserved1 :6;
ban4jp 20:51abf34bcc06 167 uint8_t RPO :1;
ban4jp 20:51abf34bcc06 168 uint8_t RPD :1;
ban4jp 20:51abf34bcc06 169 uint8_t RPC :1;
ban4jp 20:51abf34bcc06 170 uint8_t CPI :1;
ban4jp 20:51abf34bcc06 171 uint8_t DPI :1;
ban4jp 20:51abf34bcc06 172 uint8_t CIL :1;
ban4jp 20:51abf34bcc06 173 uint8_t _reserved2 :2;
ban4jp 20:51abf34bcc06 174 uint8_t _reserved3;
ban4jp 20:51abf34bcc06 175 uint8_t application;
ban4jp 20:51abf34bcc06 176 uint8_t _reserved4;
ban4jp 20:51abf34bcc06 177 uint16_t Scan :1;
ban4jp 20:51abf34bcc06 178 uint16_t WPS :2;
ban4jp 20:51abf34bcc06 179 uint16_t Group :1;
ban4jp 20:51abf34bcc06 180 uint16_t AP_STA :1;
ban4jp 20:51abf34bcc06 181 uint16_t Infra_Direct :2;
ban4jp 20:51abf34bcc06 182 uint16_t Connected :1;
ban4jp 20:51abf34bcc06 183 uint16_t _reserved5 :8;
ban4jp 20:51abf34bcc06 184 char SSID[32];
ban4jp 20:51abf34bcc06 185 uint8_t encryption_mode;
ban4jp 20:51abf34bcc06 186 uint8_t signal_strength;
ban4jp 20:51abf34bcc06 187 uint8_t channel;
ban4jp 20:51abf34bcc06 188 uint8_t _reserved6[5];
ban4jp 20:51abf34bcc06 189 uint8_t MACAddress[6];
ban4jp 20:51abf34bcc06 190 uint8_t _reserved7[10];
ban4jp 20:51abf34bcc06 191 uint8_t ID[16];
ban4jp 20:51abf34bcc06 192 uint8_t IPAddress[4];
ban4jp 20:51abf34bcc06 193 uint8_t SubnetMask[4];
ban4jp 20:51abf34bcc06 194 uint8_t DefaultGateway[4];
ban4jp 20:51abf34bcc06 195 uint8_t PreferredDNSServer[4];
ban4jp 20:51abf34bcc06 196 uint8_t AlternateDNSServer[4];
ban4jp 20:51abf34bcc06 197 uint8_t ProxyServer:1;
ban4jp 20:51abf34bcc06 198 uint8_t _reserved8:7;
ban4jp 20:51abf34bcc06 199 } isdio_wlan_status_t;
ban4jp 20:51abf34bcc06 200
ban4jp 20:51abf34bcc06 201 /**
ban4jp 20:51abf34bcc06 202 * iSDIO Vendor Status Register at 0x5C0
ban4jp 20:51abf34bcc06 203 */
ban4jp 20:51abf34bcc06 204 typedef struct {
ban4jp 20:51abf34bcc06 205 uint32_t vendorId;
ban4jp 20:51abf34bcc06 206 uint32_t vendorFunction;
ban4jp 20:51abf34bcc06 207 uint32_t HttpBodyTransferSize;
ban4jp 20:51abf34bcc06 208 uint32_t HttpBodyTotalSize;
ban4jp 20:51abf34bcc06 209 uint32_t HttpBuffSize;
ban4jp 20:51abf34bcc06 210 uint32_t LHFStatus:8;
ban4jp 20:51abf34bcc06 211 uint32_t PhotoshareStatus:8;
ban4jp 20:51abf34bcc06 212 uint32_t FileDownloadStatus:8;
ban4jp 20:51abf34bcc06 213 uint32_t rsv0:8;
ban4jp 20:51abf34bcc06 214 uint32_t FtpTransferSize;
ban4jp 20:51abf34bcc06 215 uint32_t rsv1;
ban4jp 20:51abf34bcc06 216 uint32_t rsv2[4];
ban4jp 20:51abf34bcc06 217 uint8_t VendorFwVersion[16];
ban4jp 20:51abf34bcc06 218 } isdio_vender_status_t;
ban4jp 20:51abf34bcc06 219
ban4jp 20:51abf34bcc06 220 #endif // iSDIO_helper_h