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