seeed unified library interface
suli2.cpp@0:25c5f1b9f9e2, 2015-06-09 (annotated)
- Committer:
- JackyZhangFromSeeed
- Date:
- Tue Jun 09 10:13:10 2015 +0000
- Revision:
- 0:25c5f1b9f9e2
suli2 library
Who changed what in which revision?
User | Revision | Line number | New 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 |