seeed unified library interface

Committer:
JackyZhangFromSeeed
Date:
Tue Jun 09 10:13:10 2015 +0000
Revision:
0:25c5f1b9f9e2
suli2 library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JackyZhangFromSeeed 0:25c5f1b9f9e2 1 /*
JackyZhangFromSeeed 0:25c5f1b9f9e2 2 suli2.c/suli2.cpp
JackyZhangFromSeeed 0:25c5f1b9f9e2 3 Seeed Unified Library Interface v2.0
JackyZhangFromSeeed 0:25c5f1b9f9e2 4 2015 Copyright (c) Seeed Technology Inc. All right reserved.
JackyZhangFromSeeed 0:25c5f1b9f9e2 5
JackyZhangFromSeeed 0:25c5f1b9f9e2 6 Author:Jack Shao, Loovee
JackyZhangFromSeeed 0:25c5f1b9f9e2 7 Change Logs:
JackyZhangFromSeeed 0:25c5f1b9f9e2 8 2015-4-17: initial version for v2
JackyZhangFromSeeed 0:25c5f1b9f9e2 9
JackyZhangFromSeeed 0:25c5f1b9f9e2 10 suli is designed for the purpose of reusing the high level implementation
JackyZhangFromSeeed 0:25c5f1b9f9e2 11 of each libraries for different platforms out of the hardware layer.
JackyZhangFromSeeed 0:25c5f1b9f9e2 12 suli2 is the new reversion of original suli. There're lot of improvements upon
JackyZhangFromSeeed 0:25c5f1b9f9e2 13 the previous version. Currently, it can be treated as the internal strategy for
JackyZhangFromSeeed 0:25c5f1b9f9e2 14 quick library development of seeed. But always welcome the community to
JackyZhangFromSeeed 0:25c5f1b9f9e2 15 follow the basis of suli to contribute grove libraries.
JackyZhangFromSeeed 0:25c5f1b9f9e2 16
JackyZhangFromSeeed 0:25c5f1b9f9e2 17 The MIT License (MIT)
JackyZhangFromSeeed 0:25c5f1b9f9e2 18
JackyZhangFromSeeed 0:25c5f1b9f9e2 19 Permission is hereby granted, free of charge, to any person obtaining a copy
JackyZhangFromSeeed 0:25c5f1b9f9e2 20 of this software and associated documentation files (the "Software"), to deal
JackyZhangFromSeeed 0:25c5f1b9f9e2 21 in the Software without restriction, including without limitation the rights
JackyZhangFromSeeed 0:25c5f1b9f9e2 22 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
JackyZhangFromSeeed 0:25c5f1b9f9e2 23 copies of the Software, and to permit persons to whom the Software is
JackyZhangFromSeeed 0:25c5f1b9f9e2 24 furnished to do so, subject to the following conditions:
JackyZhangFromSeeed 0:25c5f1b9f9e2 25
JackyZhangFromSeeed 0:25c5f1b9f9e2 26 The above copyright notice and this permission notice shall be included in
JackyZhangFromSeeed 0:25c5f1b9f9e2 27 all copies or substantial portions of the Software.
JackyZhangFromSeeed 0:25c5f1b9f9e2 28
JackyZhangFromSeeed 0:25c5f1b9f9e2 29 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
JackyZhangFromSeeed 0:25c5f1b9f9e2 30 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
JackyZhangFromSeeed 0:25c5f1b9f9e2 31 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
JackyZhangFromSeeed 0:25c5f1b9f9e2 32 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
JackyZhangFromSeeed 0:25c5f1b9f9e2 33 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
JackyZhangFromSeeed 0:25c5f1b9f9e2 34 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
JackyZhangFromSeeed 0:25c5f1b9f9e2 35 THE SOFTWARE.
JackyZhangFromSeeed 0:25c5f1b9f9e2 36 */
JackyZhangFromSeeed 0:25c5f1b9f9e2 37
JackyZhangFromSeeed 0:25c5f1b9f9e2 38 #include "suli2.h"
JackyZhangFromSeeed 0:25c5f1b9f9e2 39
JackyZhangFromSeeed 0:25c5f1b9f9e2 40 //---------------------------------------- mbed ---------------------------------------------
JackyZhangFromSeeed 0:25c5f1b9f9e2 41 #if defined(__MBED__)
JackyZhangFromSeeed 0:25c5f1b9f9e2 42
JackyZhangFromSeeed 0:25c5f1b9f9e2 43 /**
JackyZhangFromSeeed 0:25c5f1b9f9e2 44 * uint32_t suli_pin_pulse_in(IO_T *, what_state, timeout)
JackyZhangFromSeeed 0:25c5f1b9f9e2 45 */
JackyZhangFromSeeed 0:25c5f1b9f9e2 46 uint32_t suli_pin_pulse_in(IO_T *pio, int state, uint32_t timeout)
JackyZhangFromSeeed 0:25c5f1b9f9e2 47 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 48 //TODO: more efficient implementation
JackyZhangFromSeeed 0:25c5f1b9f9e2 49 uint32_t t = us_ticker_read();
JackyZhangFromSeeed 0:25c5f1b9f9e2 50 while (gpio_read(pio) != state)
JackyZhangFromSeeed 0:25c5f1b9f9e2 51 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 52 if (timeout > 0 && (us_ticker_read() - t) > timeout) return 0;
JackyZhangFromSeeed 0:25c5f1b9f9e2 53 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 54 uint32_t t1 = us_ticker_read();
JackyZhangFromSeeed 0:25c5f1b9f9e2 55 while (gpio_read(pio) == state)
JackyZhangFromSeeed 0:25c5f1b9f9e2 56 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 57 if (timeout > 0 && (us_ticker_read() - t) > timeout) return 0;
JackyZhangFromSeeed 0:25c5f1b9f9e2 58 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 59 return us_ticker_read() - t1 /*- ??? some wasting code consumes some time */;
JackyZhangFromSeeed 0:25c5f1b9f9e2 60 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 61
JackyZhangFromSeeed 0:25c5f1b9f9e2 62 /**
JackyZhangFromSeeed 0:25c5f1b9f9e2 63 * send bytes to uart
JackyZhangFromSeeed 0:25c5f1b9f9e2 64 * int suli_uart_write_bytes(UART_T *, uint8_t *, int)
JackyZhangFromSeeed 0:25c5f1b9f9e2 65 */
JackyZhangFromSeeed 0:25c5f1b9f9e2 66 int suli_uart_write_bytes(UART_T *uart, uint8_t *data, int len)
JackyZhangFromSeeed 0:25c5f1b9f9e2 67 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 68 for (int i = 0; i < len;i++)
JackyZhangFromSeeed 0:25c5f1b9f9e2 69 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 70 serial_putc(uart, (int)(*(data + i)) );
JackyZhangFromSeeed 0:25c5f1b9f9e2 71 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 72 return len;
JackyZhangFromSeeed 0:25c5f1b9f9e2 73 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 74
JackyZhangFromSeeed 0:25c5f1b9f9e2 75 /**
JackyZhangFromSeeed 0:25c5f1b9f9e2 76 * write a float
JackyZhangFromSeeed 0:25c5f1b9f9e2 77 * num - number to write
JackyZhangFromSeeed 0:25c5f1b9f9e2 78 * decimal - x decimal point
JackyZhangFromSeeed 0:25c5f1b9f9e2 79 */
JackyZhangFromSeeed 0:25c5f1b9f9e2 80 void suli_uart_write_float(UART_T *uart, float float_num, int decimal)
JackyZhangFromSeeed 0:25c5f1b9f9e2 81 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 82 char fmt[6];
JackyZhangFromSeeed 0:25c5f1b9f9e2 83 char buff[32];
JackyZhangFromSeeed 0:25c5f1b9f9e2 84 snprintf(fmt, 6, "%%.%df", decimal);
JackyZhangFromSeeed 0:25c5f1b9f9e2 85 int r = snprintf(buff, 32, (const char *)fmt, float_num);
JackyZhangFromSeeed 0:25c5f1b9f9e2 86 suli_uart_write_bytes(uart, (uint8_t *)buff, r);
JackyZhangFromSeeed 0:25c5f1b9f9e2 87 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 88 /**
JackyZhangFromSeeed 0:25c5f1b9f9e2 89 * write an integer
JackyZhangFromSeeed 0:25c5f1b9f9e2 90 * num - number to write
JackyZhangFromSeeed 0:25c5f1b9f9e2 91 */
JackyZhangFromSeeed 0:25c5f1b9f9e2 92 void suli_uart_write_int(UART_T *uart, int32_t num)
JackyZhangFromSeeed 0:25c5f1b9f9e2 93 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 94 char buff[32];
JackyZhangFromSeeed 0:25c5f1b9f9e2 95 int r = snprintf(buff, 32, "%ld", num);
JackyZhangFromSeeed 0:25c5f1b9f9e2 96 suli_uart_write_bytes(uart, (uint8_t *)buff, r);
JackyZhangFromSeeed 0:25c5f1b9f9e2 97 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 98
JackyZhangFromSeeed 0:25c5f1b9f9e2 99 /**
JackyZhangFromSeeed 0:25c5f1b9f9e2 100 * read bytes from uart
JackyZhangFromSeeed 0:25c5f1b9f9e2 101 */
JackyZhangFromSeeed 0:25c5f1b9f9e2 102 int suli_uart_read_bytes(UART_T *uart, uint8_t *buff, int len)
JackyZhangFromSeeed 0:25c5f1b9f9e2 103 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 104 uint8_t *ptr = buff;
JackyZhangFromSeeed 0:25c5f1b9f9e2 105 uint8_t *end = ptr + len;
JackyZhangFromSeeed 0:25c5f1b9f9e2 106 while (ptr != end)
JackyZhangFromSeeed 0:25c5f1b9f9e2 107 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 108 int c = serial_getc(uart);
JackyZhangFromSeeed 0:25c5f1b9f9e2 109 *ptr++ = c;
JackyZhangFromSeeed 0:25c5f1b9f9e2 110 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 111 return ptr - buff;
JackyZhangFromSeeed 0:25c5f1b9f9e2 112 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 113
JackyZhangFromSeeed 0:25c5f1b9f9e2 114 /**
JackyZhangFromSeeed 0:25c5f1b9f9e2 115 * read bytes from uart with timeout ms
JackyZhangFromSeeed 0:25c5f1b9f9e2 116 */
JackyZhangFromSeeed 0:25c5f1b9f9e2 117 int suli_uart_read_bytes_timeout(UART_T *uart, uint8_t *buff, int len, int timeout_ms)
JackyZhangFromSeeed 0:25c5f1b9f9e2 118 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 119 uint8_t *ptr = buff;
JackyZhangFromSeeed 0:25c5f1b9f9e2 120 uint8_t *end = ptr + len;
JackyZhangFromSeeed 0:25c5f1b9f9e2 121 uint32_t t = suli_millis();
JackyZhangFromSeeed 0:25c5f1b9f9e2 122
JackyZhangFromSeeed 0:25c5f1b9f9e2 123 while (ptr != end)
JackyZhangFromSeeed 0:25c5f1b9f9e2 124 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 125 if ((suli_millis() - t) > timeout_ms) break;
JackyZhangFromSeeed 0:25c5f1b9f9e2 126 int c = serial_getc(uart);
JackyZhangFromSeeed 0:25c5f1b9f9e2 127 *ptr++ = c;
JackyZhangFromSeeed 0:25c5f1b9f9e2 128 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 129 return ptr - buff;
JackyZhangFromSeeed 0:25c5f1b9f9e2 130 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 131
JackyZhangFromSeeed 0:25c5f1b9f9e2 132
JackyZhangFromSeeed 0:25c5f1b9f9e2 133
JackyZhangFromSeeed 0:25c5f1b9f9e2 134 //---------------------------------------------arduino---------------------------------------------
JackyZhangFromSeeed 0:25c5f1b9f9e2 135 #elif defined(ARDUINO)
JackyZhangFromSeeed 0:25c5f1b9f9e2 136
JackyZhangFromSeeed 0:25c5f1b9f9e2 137 #if defined (ARDUINO_USE_I2C) || defined(ESP8266)
JackyZhangFromSeeed 0:25c5f1b9f9e2 138 /**
JackyZhangFromSeeed 0:25c5f1b9f9e2 139 * I2C interface initialize.
JackyZhangFromSeeed 0:25c5f1b9f9e2 140 */
JackyZhangFromSeeed 0:25c5f1b9f9e2 141 void suli_i2c_init(I2C_T *i2c_device, int pin_sda, int pin_clk)
JackyZhangFromSeeed 0:25c5f1b9f9e2 142 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 143 #ifdef ESP8266
JackyZhangFromSeeed 0:25c5f1b9f9e2 144 *i2c_device = new TwoWire(); //change the pin defined in pin_arduino.h
JackyZhangFromSeeed 0:25c5f1b9f9e2 145 (*i2c_device)->begin(SDA, SCL);
JackyZhangFromSeeed 0:25c5f1b9f9e2 146 #else
JackyZhangFromSeeed 0:25c5f1b9f9e2 147 *i2c_device = &Wire;
JackyZhangFromSeeed 0:25c5f1b9f9e2 148 (*i2c_device)->begin();
JackyZhangFromSeeed 0:25c5f1b9f9e2 149 #endif
JackyZhangFromSeeed 0:25c5f1b9f9e2 150 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 151
JackyZhangFromSeeed 0:25c5f1b9f9e2 152
JackyZhangFromSeeed 0:25c5f1b9f9e2 153 /**
JackyZhangFromSeeed 0:25c5f1b9f9e2 154 * write a buff to I2C
JackyZhangFromSeeed 0:25c5f1b9f9e2 155 * - i2c_device: i2c device pointer
JackyZhangFromSeeed 0:25c5f1b9f9e2 156 * - dev_addr: device address
JackyZhangFromSeeed 0:25c5f1b9f9e2 157 * - data: data buff
JackyZhangFromSeeed 0:25c5f1b9f9e2 158 * - len: data lenght
JackyZhangFromSeeed 0:25c5f1b9f9e2 159 */
JackyZhangFromSeeed 0:25c5f1b9f9e2 160 uint8_t suli_i2c_write(I2C_T *i2c_device, uint8_t dev_addr, uint8_t *data, int len)
JackyZhangFromSeeed 0:25c5f1b9f9e2 161 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 162 dev_addr = dev_addr >> 1;
JackyZhangFromSeeed 0:25c5f1b9f9e2 163
JackyZhangFromSeeed 0:25c5f1b9f9e2 164 (*i2c_device)->beginTransmission(dev_addr); // start
JackyZhangFromSeeed 0:25c5f1b9f9e2 165 for (int i = 0; i < len; i++)
JackyZhangFromSeeed 0:25c5f1b9f9e2 166 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 167 (*i2c_device)->write(data[i]); // send a byte
JackyZhangFromSeeed 0:25c5f1b9f9e2 168 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 169 (*i2c_device)->endTransmission(); // end
JackyZhangFromSeeed 0:25c5f1b9f9e2 170
JackyZhangFromSeeed 0:25c5f1b9f9e2 171 return len;
JackyZhangFromSeeed 0:25c5f1b9f9e2 172 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 173
JackyZhangFromSeeed 0:25c5f1b9f9e2 174
JackyZhangFromSeeed 0:25c5f1b9f9e2 175 /**
JackyZhangFromSeeed 0:25c5f1b9f9e2 176 * read a buff to I2C
JackyZhangFromSeeed 0:25c5f1b9f9e2 177 * - i2c_device: i2c device pointer
JackyZhangFromSeeed 0:25c5f1b9f9e2 178 * - dev_addr: device address
JackyZhangFromSeeed 0:25c5f1b9f9e2 179 * - data: data buff
JackyZhangFromSeeed 0:25c5f1b9f9e2 180 * - len: data lenght
JackyZhangFromSeeed 0:25c5f1b9f9e2 181 * return
JackyZhangFromSeeed 0:25c5f1b9f9e2 182 */
JackyZhangFromSeeed 0:25c5f1b9f9e2 183 uint8_t suli_i2c_read(I2C_T *i2c_device, uint8_t dev_addr, uint8_t *buff, int len)
JackyZhangFromSeeed 0:25c5f1b9f9e2 184 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 185 dev_addr = dev_addr >> 1;
JackyZhangFromSeeed 0:25c5f1b9f9e2 186 (*i2c_device)->requestFrom(dev_addr, (uint8_t)len);
JackyZhangFromSeeed 0:25c5f1b9f9e2 187
JackyZhangFromSeeed 0:25c5f1b9f9e2 188 int sum_len = 0;
JackyZhangFromSeeed 0:25c5f1b9f9e2 189 while ((*i2c_device)->available())
JackyZhangFromSeeed 0:25c5f1b9f9e2 190 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 191 buff[sum_len++] = (*i2c_device)->read();
JackyZhangFromSeeed 0:25c5f1b9f9e2 192 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 193 return sum_len;
JackyZhangFromSeeed 0:25c5f1b9f9e2 194 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 195
JackyZhangFromSeeed 0:25c5f1b9f9e2 196 #endif
JackyZhangFromSeeed 0:25c5f1b9f9e2 197
JackyZhangFromSeeed 0:25c5f1b9f9e2 198 /**
JackyZhangFromSeeed 0:25c5f1b9f9e2 199 * void suli_uart_init(UART_T *, int pin_tx, int pin_rx, uint32_t baud)
JackyZhangFromSeeed 0:25c5f1b9f9e2 200 */
JackyZhangFromSeeed 0:25c5f1b9f9e2 201 #if defined(ARDUINO_USE_SOFTWARE_SERIAL)
JackyZhangFromSeeed 0:25c5f1b9f9e2 202 #include "SoftwareSerial.h"
JackyZhangFromSeeed 0:25c5f1b9f9e2 203 #endif
JackyZhangFromSeeed 0:25c5f1b9f9e2 204
JackyZhangFromSeeed 0:25c5f1b9f9e2 205 void suli_uart_init(UART_T *uart, int pin_tx, int pin_rx, uint32_t baud)
JackyZhangFromSeeed 0:25c5f1b9f9e2 206 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 207 #if defined(ESP8266) //a
JackyZhangFromSeeed 0:25c5f1b9f9e2 208 if (pin_tx == 1 && pin_rx == 3)
JackyZhangFromSeeed 0:25c5f1b9f9e2 209 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 210 *uart = (Stream *)&Serial;
JackyZhangFromSeeed 0:25c5f1b9f9e2 211 Serial.begin(baud);
JackyZhangFromSeeed 0:25c5f1b9f9e2 212 } else if (pin_tx == 2)
JackyZhangFromSeeed 0:25c5f1b9f9e2 213 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 214 *uart = (Stream *)&Serial1;
JackyZhangFromSeeed 0:25c5f1b9f9e2 215 Serial1.begin(baud);
JackyZhangFromSeeed 0:25c5f1b9f9e2 216 } else
JackyZhangFromSeeed 0:25c5f1b9f9e2 217 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 218 *uart = NULL; //this will cause the program not passing the compiling
JackyZhangFromSeeed 0:25c5f1b9f9e2 219 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 220 #else //a
JackyZhangFromSeeed 0:25c5f1b9f9e2 221 if (pin_tx == 1 && pin_rx == 0)
JackyZhangFromSeeed 0:25c5f1b9f9e2 222 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 223 #if defined(__AVR_ATmega32U4__) //b
JackyZhangFromSeeed 0:25c5f1b9f9e2 224 *uart = (Stream *)&Serial1;
JackyZhangFromSeeed 0:25c5f1b9f9e2 225 Serial1.begin(baud);
JackyZhangFromSeeed 0:25c5f1b9f9e2 226 #else //b
JackyZhangFromSeeed 0:25c5f1b9f9e2 227 *uart = (Stream *)&Serial;
JackyZhangFromSeeed 0:25c5f1b9f9e2 228 Serial.begin(baud);
JackyZhangFromSeeed 0:25c5f1b9f9e2 229 #endif //b
JackyZhangFromSeeed 0:25c5f1b9f9e2 230 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 231 #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
JackyZhangFromSeeed 0:25c5f1b9f9e2 232 else if (pin_tx == 18 && pin_rx == 19)
JackyZhangFromSeeed 0:25c5f1b9f9e2 233 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 234 *uart = (Stream *)&Serial1;
JackyZhangFromSeeed 0:25c5f1b9f9e2 235 Serial1.begin(baud);
JackyZhangFromSeeed 0:25c5f1b9f9e2 236 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 237 else if (pin_tx == 16 && pin_rx == 17)
JackyZhangFromSeeed 0:25c5f1b9f9e2 238 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 239 *uart = (Stream *)&Serial2;
JackyZhangFromSeeed 0:25c5f1b9f9e2 240 Serial2.begin(baud);
JackyZhangFromSeeed 0:25c5f1b9f9e2 241 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 242 else if (pin_tx == 14 && pin_rx == 15)
JackyZhangFromSeeed 0:25c5f1b9f9e2 243 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 244 *uart = (Stream *)&Serial3;
JackyZhangFromSeeed 0:25c5f1b9f9e2 245 Serial3.begin(baud);
JackyZhangFromSeeed 0:25c5f1b9f9e2 246 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 247 #endif //defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
JackyZhangFromSeeed 0:25c5f1b9f9e2 248
JackyZhangFromSeeed 0:25c5f1b9f9e2 249 #endif //a
JackyZhangFromSeeed 0:25c5f1b9f9e2 250
JackyZhangFromSeeed 0:25c5f1b9f9e2 251 #if defined(ARDUINO_SOFTWARE_SERIAL)
JackyZhangFromSeeed 0:25c5f1b9f9e2 252 SoftwareSerial *ser = new SoftwareSerial(pin_rx, pin_tx);
JackyZhangFromSeeed 0:25c5f1b9f9e2 253 *uart = ser;
JackyZhangFromSeeed 0:25c5f1b9f9e2 254 ser->begin(baud);
JackyZhangFromSeeed 0:25c5f1b9f9e2 255 #endif
JackyZhangFromSeeed 0:25c5f1b9f9e2 256
JackyZhangFromSeeed 0:25c5f1b9f9e2 257 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 258
JackyZhangFromSeeed 0:25c5f1b9f9e2 259 /**
JackyZhangFromSeeed 0:25c5f1b9f9e2 260 * send bytes to uart
JackyZhangFromSeeed 0:25c5f1b9f9e2 261 * int suli_uart_write_bytes(UART_T *, uint8_t *, int)
JackyZhangFromSeeed 0:25c5f1b9f9e2 262 */
JackyZhangFromSeeed 0:25c5f1b9f9e2 263 int suli_uart_write_bytes(UART_T *uart, uint8_t *data, int len)
JackyZhangFromSeeed 0:25c5f1b9f9e2 264 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 265 for (int i = 0; i < len; i++)
JackyZhangFromSeeed 0:25c5f1b9f9e2 266 {
JackyZhangFromSeeed 0:25c5f1b9f9e2 267 (*uart)->write(*(data + i));
JackyZhangFromSeeed 0:25c5f1b9f9e2 268 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 269 return len;
JackyZhangFromSeeed 0:25c5f1b9f9e2 270 }
JackyZhangFromSeeed 0:25c5f1b9f9e2 271
JackyZhangFromSeeed 0:25c5f1b9f9e2 272
JackyZhangFromSeeed 0:25c5f1b9f9e2 273
JackyZhangFromSeeed 0:25c5f1b9f9e2 274 #endif