iSDIO Library for TOSHIBA FlashAir. include HTTP or HTTPS Client.
Dependents: FlashAir_Twitter Neon_F303K8_04
Fork of HTTPClient by
iSDIO_helper.h@20:51abf34bcc06, 2014-12-15 (annotated)
- Committer:
- ban4jp
- Date:
- Mon Dec 15 12:23:22 2014 +0000
- Revision:
- 20:51abf34bcc06
Initial commit.
Who changed what in which revision?
User | Revision | Line number | New 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 |