iSDIO library for FlashAir

Dependents:   FlashAir_iSDIO_sample FlashAir_iSDIO_16seg_ADT7410_step1 FlashAir_iSDIO_16seg_ADT7410 FlashAir_iSDIO_sample_OS5_ ... more

Committer:
hogejun
Date:
Sat Jan 19 04:31:16 2019 +0000
Revision:
2:b8b33621e7fe
Parent:
1:dc888b9028cf
modified debug output

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hogejun 0:89c6aae3a486 1 /* mbed SD iSDIO Library
hogejun 1:dc888b9028cf 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__