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 1:dc888b9028cf 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
hogejun 0:89c6aae3a486 11 #include "iSDIO_template.h"
hogejun 0:89c6aae3a486 12
hogejun 0:89c6aae3a486 13 //------------------------------------------------------------------------------
hogejun 0:89c6aae3a486 14 /** specific version for string. it adds padding bytes after text data. */
hogejun 0:89c6aae3a486 15 template <>
hogejun 0:89c6aae3a486 16 uint8_t* put_T(uint8_t* p, const uint8_t* value) {
hogejun 0:89c6aae3a486 17 while (*value != 0) {
hogejun 0:89c6aae3a486 18 *p++ = *((uint8_t*)value++);
hogejun 0:89c6aae3a486 19 }
hogejun 0:89c6aae3a486 20 return p;
hogejun 0:89c6aae3a486 21 }
hogejun 0:89c6aae3a486 22
hogejun 0:89c6aae3a486 23 template <>
hogejun 0:89c6aae3a486 24 uint8_t* put_T_arg(uint8_t* p, const uint8_t* value) {
hogejun 0:89c6aae3a486 25 uint8_t* orig = p;
hogejun 0:89c6aae3a486 26 p += sizeof(uint32_t); // skip length area.
hogejun 0:89c6aae3a486 27 p = put_T(p, value); // data
hogejun 0:89c6aae3a486 28 uint32_t len = p - orig - sizeof(uint32_t);
hogejun 0:89c6aae3a486 29 put_T(orig, len); // write length.
hogejun 0:89c6aae3a486 30 for (int i = 0; i < ((4 - (len & 3)) & 3); ++i) { // padding
hogejun 0:89c6aae3a486 31 *p++ = 0;
hogejun 0:89c6aae3a486 32 }
hogejun 0:89c6aae3a486 33 return p;
hogejun 0:89c6aae3a486 34 }
hogejun 0:89c6aae3a486 35
hogejun 0:89c6aae3a486 36 uint8_t* put_command_header(uint8_t* p, uint8_t num_commands,
hogejun 0:89c6aae3a486 37 uint32_t command_bytes) {
hogejun 0:89c6aae3a486 38 p = put_u8(p, 0x01); // Write Data ID
hogejun 0:89c6aae3a486 39 p = put_u8(p, num_commands); // Number of commands.
hogejun 0:89c6aae3a486 40 p = put_u16(p, 0); // reserved.
hogejun 0:89c6aae3a486 41 p = put_u32(p, command_bytes); // size of command write data.
hogejun 0:89c6aae3a486 42 p = put_u32(p, 0); // reserved.
hogejun 0:89c6aae3a486 43 return p;
hogejun 0:89c6aae3a486 44 }
hogejun 0:89c6aae3a486 45
hogejun 0:89c6aae3a486 46 uint8_t* put_command_info_header(uint8_t* p, uint16_t command_id,
hogejun 0:89c6aae3a486 47 uint32_t sequence_id, uint16_t num_args) {
hogejun 0:89c6aae3a486 48 p = put_u16(p, 0); // reserved.
hogejun 0:89c6aae3a486 49 p = put_u16(p, command_id); // iSDIO command id.
hogejun 0:89c6aae3a486 50 p = put_u32(p, sequence_id); // iSDIO command sequence id.
hogejun 0:89c6aae3a486 51 p = put_u16(p, num_args); // Number of Arguments.
hogejun 0:89c6aae3a486 52 p = put_u16(p, 0); // Reserved.
hogejun 0:89c6aae3a486 53 return p;
hogejun 0:89c6aae3a486 54 }