seeed unified library interface
suli2.h@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.h |
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 | #ifndef __SULI2_H__ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 39 | #define __SULI2_H__ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 40 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 41 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 42 | #if defined(__MBED__) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 43 | #include "mbed.h" |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 44 | #elif defined(ARDUINO) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 45 | #include "Arduino.h" |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 46 | #endif |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 47 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 48 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 49 | /*************************************************************************** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 50 | * IO related APIs |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 51 | ***************************************************************************/ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 52 | //-------------- mbed --------------- |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 53 | #if defined(__MBED__) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 54 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 55 | typedef gpio_t IO_T; |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 56 | #define SULI_INPUT PIN_INPUT |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 57 | #define SULI_OUTPUT PIN_OUTPUT |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 58 | #define SULI_HIGH 0x01 |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 59 | #define SULI_LOW 0x00 |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 60 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 61 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 62 | * void suli_pin_init(IO_T *, PIN_T, PIN_DIR ) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 63 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 64 | #define suli_pin_init(pio,pin,dir) {gpio_set((PinName)pin); gpio_init(pio, (PinName)pin); gpio_dir(pio, dir);} |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 65 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 66 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 67 | * void suli_pin_dir(IO_T *, PIN_DIR ) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 68 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 69 | #define suli_pin_dir(pio,dir) { gpio_dir(pio, dir); } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 70 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 71 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 72 | * void suli_pin_write(IO_T *, PIN_HIGH_LOW) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 73 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 74 | #define suli_pin_write(pio,state) {gpio_write(pio, state);} |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 75 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 76 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 77 | * int suli_pin_read(IO_T *) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 78 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 79 | #define suli_pin_read(pio) gpio_read(pio) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 80 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 81 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 82 | * uint32_t suli_pin_pulse_in(IO_T *, what_state, timeout) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 83 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 84 | uint32_t suli_pin_pulse_in(IO_T *pio, int state, uint32_t timeout); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 85 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 86 | #define suli_pin_attach_interrupt_handler(pio, func, mode) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 87 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 88 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 89 | //-------------- arduino --------------- |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 90 | #elif defined(ARDUINO) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 91 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 92 | typedef int IO_T; |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 93 | #define SULI_INPUT INPUT |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 94 | #define SULI_OUTPUT OUTPUT |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 95 | #define SULI_HIGH 0x01 |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 96 | #define SULI_LOW 0x00 |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 97 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 98 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 99 | * void suli_pin_init(IO_T *, PIN_T, PIN_DIR ) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 100 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 101 | #define suli_pin_init(pio, pin, dir) {*(pio) = pin; pinMode(pin, dir);} |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 102 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 103 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 104 | * void suli_pin_dir(IO_T *, PIN_DIR ) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 105 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 106 | #define suli_pin_dir(pio,dir) pinMode(*(pio), dir) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 107 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 108 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 109 | * void suli_pin_write(IO_T *, PIN_HIGH_LOW) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 110 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 111 | #define suli_pin_write(pio,state) digitalWrite(*(pio), state) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 112 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 113 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 114 | * int suli_pin_read(IO_T *) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 115 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 116 | #define suli_pin_read(pio) digitalRead(*(pio)) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 117 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 118 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 119 | * uint32_t suli_pin_pulse_in(IO_T *, what_state, timeout) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 120 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 121 | #define suli_pin_pulse_in(pio,state,timeout) pulseIn(*(pio), state, timeout) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 122 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 123 | #define suli_pin_attach_interrupt_handler(pio, func, mode) attachInterrupt(*pio, func, mode) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 124 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 125 | #endif |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 126 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 127 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 128 | /*************************************************************************** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 129 | * Analog related APIs |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 130 | ***************************************************************************/ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 131 | //-------------- mbed --------------- |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 132 | #if defined(__MBED__) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 133 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 134 | typedef analogin_t ANALOG_T; |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 135 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 136 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 137 | * NOTE: |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 138 | * To make the higher level driver compatible with each other |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 139 | * among several platforms, we unify the resolution of ADC to |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 140 | * 10bits. We think 10bits is enough for analog reading. So if |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 141 | * your ADC is 12bit, you need to >>2, or your ADC is 8Bit, you |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 142 | * need to <<2 |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 143 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 144 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 145 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 146 | * void suli_analog_init(ANALOG_T *aio, int pin); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 147 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 148 | #define suli_analog_init(aio, pin) analogin_init(aio, (PinName)pin) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 149 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 150 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 151 | * uint16_t suli_analog_read(ANALOG_T *) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 152 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 153 | #define suli_analog_read(aio) ((uint16_t)(analogin_read_u16(aio)>>6)) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 154 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 155 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 156 | //-------------- Arduino --------------- |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 157 | #elif defined(ARDUINO) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 158 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 159 | typedef int ANALOG_T; |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 160 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 161 | * void suli_analog_init(ANALOG_T *aio, int pin); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 162 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 163 | #define suli_analog_init(aio, pin) {*aio = pin; pinMode(pin, INPUT);} |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 164 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 165 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 166 | * uint16_t suli_analog_read(ANALOG_T *) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 167 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 168 | #define suli_analog_read(aio) analogRead(*aio) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 169 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 170 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 171 | #endif |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 172 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 173 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 174 | /*************************************************************************** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 175 | * PWM related APIs |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 176 | ***************************************************************************/ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 177 | //-------------- mbed --------------- |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 178 | #if defined(__MBED__) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 179 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 180 | typedef pwmout_t PWM_T; |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 181 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 182 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 183 | * void suli_pwm_init(PWM_T *, int pin) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 184 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 185 | inline void suli_pwm_init(PWM_T *pwm, int pin) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 186 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 187 | pwmout_init(pwm, (PinName)pin); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 188 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 189 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 190 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 191 | * void suli_pwm_frequency(PWM_T *, uint32_t Hz) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 192 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 193 | inline void suli_pwm_frequency(PWM_T *pwm, uint32_t hz) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 194 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 195 | int us = 1000000 / hz; |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 196 | pwmout_period_us(pwm, us); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 197 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 198 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 199 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 200 | * void suli_pwm_output(PWM_T *, float percent) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 201 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 202 | inline void suli_pwm_output(PWM_T *pwm, float percent) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 203 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 204 | pwmout_write(pwm, percent); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 205 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 206 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 207 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 208 | //-------------- Arduino --------------- |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 209 | #elif defined(ARDUINO) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 210 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 211 | typedef int PWM_T; |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 212 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 213 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 214 | * void suli_pwm_init(PWM_T *, int pin) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 215 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 216 | inline void suli_pwm_init(PWM_T *pwm, int pin) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 217 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 218 | *pwm = pin; |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 219 | pinMode(pin, OUTPUT); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 220 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 221 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 222 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 223 | * void suli_pwm_frequency(PWM_T *, uint32_t Hz) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 224 | * This method is not implemented for Arduino because changing |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 225 | * the PWM frequency will also change the timer related API. |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 226 | * So the default frequencies are: |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 227 | * Arduino Pins 5 and 6: 1kHz |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 228 | * Arduino Pins 9, 10, 11, and 3: 500Hz |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 229 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 230 | inline void suli_pwm_frequency(PWM_T *pwm, uint32_t hz) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 231 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 232 | #ifdef ESP8266 |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 233 | analogWriteFreq(hz); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 234 | #endif |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 235 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 236 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 237 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 238 | * void suli_pwm_output(PWM_T *, float percent) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 239 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 240 | inline void suli_pwm_output(PWM_T *pwm, float percent) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 241 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 242 | #ifdef ESP8266 |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 243 | int duty = constrain((int)(1023 * percent), 0, 1023); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 244 | #else |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 245 | uint8_t duty = constrain((int)(255.0 * percent), 0, 255); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 246 | #endif |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 247 | analogWrite(*pwm, duty); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 248 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 249 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 250 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 251 | #endif |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 252 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 253 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 254 | /*************************************************************************** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 255 | * Time related APIs |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 256 | ***************************************************************************/ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 257 | //-------------- mbed --------------- |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 258 | #if defined(__MBED__) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 259 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 260 | /* |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 261 | * delay |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 262 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 263 | #define suli_delay_us(us) wait_us(us) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 264 | #define suli_delay_ms(ms) wait_ms(ms) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 265 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 266 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 267 | /* |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 268 | * Returns the number of milliseconds since your board began running the current program. |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 269 | * This number will overflow (go back to zero), after approximately 50 days. |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 270 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 271 | #define suli_millis() (us_ticker_read()/1000) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 272 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 273 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 274 | /* |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 275 | * Returns the number of microseconds since your board began running the current program. |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 276 | * This number will overflow (go back to zero), after approximately 70 minutes. |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 277 | * Note: there are 1,000 microseconds in a millisecond and 1,000,000 microseconds in a second. |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 278 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 279 | #define suli_micros() us_ticker_read() |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 280 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 281 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 282 | //-------------- Arduino --------------- |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 283 | #elif defined(ARDUINO) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 284 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 285 | #define suli_delay_us(us) delayMicroseconds(us) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 286 | #define suli_delay_ms(ms) delay(ms) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 287 | #define suli_millis() millis() |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 288 | #define suli_micros() micros() |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 289 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 290 | #endif |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 291 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 292 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 293 | /*************************************************************************** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 294 | * I2C related APIs |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 295 | ***************************************************************************/ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 296 | //-------------- mbed --------------- |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 297 | #if defined(__MBED__) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 298 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 299 | typedef i2c_t I2C_T; |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 300 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 301 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 302 | * I2C interface initialize. |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 303 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 304 | inline void suli_i2c_init(I2C_T *i2c_device, int pin_sda, int pin_clk) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 305 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 306 | i2c_init(i2c_device, (PinName)pin_sda, (PinName)pin_clk); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 307 | i2c_frequency(i2c_device, 100000); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 308 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 309 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 310 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 311 | * write a buff to I2C |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 312 | * dev_addr: 8bits address |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 313 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 314 | inline uint8_t suli_i2c_write(I2C_T *i2c_device, uint8_t dev_addr, uint8_t *data, int len) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 315 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 316 | return i2c_write(i2c_device, (int)dev_addr, (const char *)data, len, 1); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 317 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 318 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 319 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 320 | * read data from I2C |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 321 | * dev_addr: 8bits address |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 322 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 323 | inline uint8_t suli_i2c_read(I2C_T *i2c_device, uint8_t dev_addr, uint8_t *buff, int len) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 324 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 325 | return i2c_read(i2c_device, (int)dev_addr, (char *)buff, len, 1); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 326 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 327 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 328 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 329 | //-------------- Arduino --------------- |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 330 | #elif defined(ARDUINO) && (defined (ARDUINO_USE_I2C) || defined(ESP8266)) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 331 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 332 | #include <Wire.h> |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 333 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 334 | typedef TwoWire *I2C_T; |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 335 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 336 | * I2C interface initialize. |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 337 | * ignore pin definations for Arduino |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 338 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 339 | void suli_i2c_init(I2C_T *i2c_device, int pin_sda=0, int pin_clk=0); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 340 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 341 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 342 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 343 | * write a buff to I2C |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 344 | * dev_addr: 8bits address |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 345 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 346 | uint8_t suli_i2c_write(I2C_T *i2c_device, uint8_t dev_addr, uint8_t *data, int len); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 347 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 348 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 349 | * read data from I2C |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 350 | * dev_addr: 8bits address |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 351 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 352 | uint8_t suli_i2c_read(I2C_T *i2c_device, uint8_t dev_addr, uint8_t *buff, int len); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 353 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 354 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 355 | #endif |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 356 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 357 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 358 | /*************************************************************************** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 359 | * UART related APIs |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 360 | ***************************************************************************/ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 361 | //-------------- mbed --------------- |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 362 | #if defined(__MBED__) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 363 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 364 | typedef serial_t UART_T; |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 365 | typedef void (*cb_fun_ptr)(void);//jacly add |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 366 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 367 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 368 | * void suli_uart_init(UART_T *, int pin_tx, int pin_rx, uint32_t baud) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 369 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 370 | inline void suli_uart_init(UART_T *uart, int pin_tx, int pin_rx, uint32_t baud) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 371 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 372 | serial_init(uart, (PinName)pin_tx, (PinName)pin_rx); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 373 | serial_baud(uart, (int)baud); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 374 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 375 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 376 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 377 | jacly add |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 378 | * void suli_uart_attach(UART_T *uart, SerialIrq irq, uint32_t enable) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 379 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 380 | inline void suli_uart_rx_event_attach(UART_T *uart, cb_fun_ptr irq) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 381 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 382 | serial_irq_handler(uart, (uart_irq_handler)irq, 1); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 383 | serial_irq_set(uart, RxIrq, 1); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 384 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 385 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 386 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 387 | * send a byte to uart |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 388 | * void suli_uart_write(UART_T *, uint8_t) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 389 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 390 | inline void suli_uart_write(UART_T *uart, uint8_t data) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 391 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 392 | serial_putc(uart, (int)data); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 393 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 394 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 395 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 396 | * send bytes to uart |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 397 | * int suli_uart_write_bytes(UART_T *, uint8_t *, int) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 398 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 399 | int suli_uart_write_bytes(UART_T *uart, uint8_t *data, int len); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 400 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 401 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 402 | * write a float |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 403 | * num - number to write |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 404 | * decimal - x decimal point |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 405 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 406 | void suli_uart_write_float(UART_T *uart, float float_num, int decimal=2); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 407 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 408 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 409 | * write an integer |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 410 | * num - number to write |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 411 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 412 | void suli_uart_write_int(UART_T *uart, int32_t num); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 413 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 414 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 415 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 416 | * read a byte from uart |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 417 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 418 | inline uint8_t suli_uart_read(UART_T *uart) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 419 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 420 | return (uint8_t)serial_getc(uart); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 421 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 422 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 423 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 424 | * read bytes from uart |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 425 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 426 | int suli_uart_read_bytes(UART_T *uart, uint8_t *buff, int len); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 427 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 428 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 429 | * read bytes from uart with timeout ms |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 430 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 431 | int suli_uart_read_bytes_timeout(UART_T *uart, uint8_t *buff, int len, int timeout_ms=1000); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 432 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 433 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 434 | * if uart get data, return 1-readable, 0-unreadable |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 435 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 436 | inline int suli_uart_readable(UART_T *uart) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 437 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 438 | return serial_readable(uart); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 439 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 440 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 441 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 442 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 443 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 444 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 445 | //-------------- Arduino --------------- |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 446 | #elif defined(ARDUINO) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 447 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 448 | typedef Stream* UART_T; |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 449 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 450 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 451 | * void suli_uart_init(UART_T *, int pin_tx, int pin_rx, uint32_t baud) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 452 | * if you want to use softwareSerial, you need to include |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 453 | * "SoftwareSerial.h" in sketchbook, and #define ARDUINO_SOFTWARE_SERIAL |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 454 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 455 | void suli_uart_init(UART_T *uart, int pin_tx, int pin_rx, uint32_t baud); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 456 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 457 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 458 | * send a byte to uart |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 459 | * void suli_uart_write(UART_T *, uint8_t) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 460 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 461 | inline void suli_uart_write(UART_T *uart, uint8_t data) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 462 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 463 | (*uart)->write(data); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 464 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 465 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 466 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 467 | * send bytes to uart |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 468 | * int suli_uart_write_bytes(UART_T *, uint8_t *, int) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 469 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 470 | int suli_uart_write_bytes(UART_T *uart, uint8_t *data, int len); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 471 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 472 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 473 | * write a float |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 474 | * num - number to write |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 475 | * decimal - x decimal point |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 476 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 477 | inline void suli_uart_write_float(UART_T *uart, float float_num, int decimal = 2) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 478 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 479 | (*uart)->print(float_num, decimal); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 480 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 481 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 482 | * write an integer |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 483 | * num - number to write |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 484 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 485 | inline void suli_uart_write_int(UART_T *uart, int32_t num) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 486 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 487 | (*uart)->print(num); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 488 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 489 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 490 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 491 | * read a byte from uart |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 492 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 493 | inline uint8_t suli_uart_read(UART_T *uart) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 494 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 495 | return (uint8_t)(*uart)->read(); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 496 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 497 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 498 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 499 | * read bytes from uart |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 500 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 501 | inline int suli_uart_read_bytes(UART_T *uart, uint8_t *buff, int len) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 502 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 503 | return (*uart)->readBytes((char *)buff, len); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 504 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 505 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 506 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 507 | * read bytes from uart with timeout ms |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 508 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 509 | inline int suli_uart_read_bytes_timeout(UART_T *uart, uint8_t *buff, int len, int timeout_ms = 1000) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 510 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 511 | (*uart)->setTimeout((unsigned long)timeout_ms); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 512 | return (*uart)->readBytes((char *)buff, len); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 513 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 514 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 515 | /** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 516 | * if uart get data, return 1-readable, 0-unreadable |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 517 | */ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 518 | inline int suli_uart_readable(UART_T *uart) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 519 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 520 | return (*uart)->available(); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 521 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 522 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 523 | #endif |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 524 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 525 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 526 | /*************************************************************************** |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 527 | * Event related APIs |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 528 | ***************************************************************************/ |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 529 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 530 | typedef void (*event_callback_t)(char *event_name, uint32_t event_data); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 531 | typedef event_callback_t EVENT_T; |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 532 | typedef event_callback_t CALLBACK_T; |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 533 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 534 | inline void suli_event_init(EVENT_T *event, CALLBACK_T cb) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 535 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 536 | *event = cb; |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 537 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 538 | inline void suli_event_trigger(EVENT_T *event, char *event_name, uint32_t event_data) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 539 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 540 | if (event) |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 541 | { |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 542 | (*event)(event_name, event_data); |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 543 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 544 | } |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 545 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 546 | |
JackyZhangFromSeeed | 0:25c5f1b9f9e2 | 547 | #endif //__SULI2_H__ |