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.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__