diff options
| author | shaolin <[email protected]> | 2014-03-04 09:14:48 +0800 |
|---|---|---|
| committer | shaolin <[email protected]> | 2014-03-04 09:14:48 +0800 |
| commit | 020e95d91b5e1d7f902674a320e42657bee3ebfe (patch) | |
| tree | 65b65bfa527e0e8670dc807a8fee8d507d67ca48 /components/external/espruino/src/jspin.h | |
| parent | 0fb9c54efda7fef4346523fdc4b92512a0441ee1 (diff) | |
| parent | 738871fd9ebbd53da6cfcc429dfdd5ffc17fd685 (diff) | |
Merge branch 'master' of https://github.com/RT-Thread/rt-thread
Diffstat (limited to 'components/external/espruino/src/jspin.h')
| -rw-r--r-- | components/external/espruino/src/jspin.h | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/components/external/espruino/src/jspin.h b/components/external/espruino/src/jspin.h new file mode 100644 index 0000000000..ce2e63d830 --- /dev/null +++ b/components/external/espruino/src/jspin.h @@ -0,0 +1,228 @@ +/* + * This file is part of Espruino, a JavaScript interpreter for Microcontrollers + * + * Copyright (C) 2013 Gordon Williams <[email protected]> + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * ---------------------------------------------------------------------------- + * Utilities and definitions for handling Pins + * ---------------------------------------------------------------------------- + */ + +#ifndef JSPIN_H +#define JSPIN_H + +#include "jsutils.h" +#include "jsvar.h" + +typedef unsigned char Pin; ///< for specifying pins for hardware +#define PIN_UNDEFINED ((Pin)0xFF) + +typedef enum { + JSH_PORT_NONE, + JSH_PORTA=1, + JSH_PORTB, + JSH_PORTC, + JSH_PORTD, + JSH_PORTE, + JSH_PORTF, + JSH_PORTG, + JSH_PORTH, +} PACKED_FLAGS JsvPinInfoPort; + +typedef enum { + JSH_PIN0 = 0, + JSH_PIN1, + JSH_PIN2, + JSH_PIN3, + JSH_PIN4, + JSH_PIN5, + JSH_PIN6, + JSH_PIN7, + JSH_PIN8, + JSH_PIN9, + JSH_PIN10, + JSH_PIN11, + JSH_PIN12, + JSH_PIN13, + JSH_PIN14, + JSH_PIN15, +#ifndef ARM + JSH_PIN16, + JSH_PIN17, + JSH_PIN18, + JSH_PIN19, + JSH_PIN20, + JSH_PIN21, + JSH_PIN22, + JSH_PIN23, + JSH_PIN24, + JSH_PIN25, + JSH_PIN26, + JSH_PIN27, + JSH_PIN28, + JSH_PIN29, + JSH_PIN30, + JSH_PIN31, +#endif +} PACKED_FLAGS JsvPinInfoPin; + +typedef enum { + JSH_ANALOG_NONE = 0, + JSH_ANALOG1 = 32, + JSH_ANALOG2 = 64, + JSH_ANALOG3 = 128, + JSH_ANALOG4 = 256, + JSH_ANALOG12 = JSH_ANALOG1|JSH_ANALOG2, + JSH_ANALOG123 = JSH_ANALOG1|JSH_ANALOG2|JSH_ANALOG3, + JSH_ANALOG34 = JSH_ANALOG3|JSH_ANALOG4, + + JSH_ANALOG_CH0 = 0, + JSH_ANALOG_CH1, + JSH_ANALOG_CH2, + JSH_ANALOG_CH3, + JSH_ANALOG_CH4, + JSH_ANALOG_CH5, + JSH_ANALOG_CH6, + JSH_ANALOG_CH7, + JSH_ANALOG_CH8, + JSH_ANALOG_CH9, + JSH_ANALOG_CH10, + JSH_ANALOG_CH11, + JSH_ANALOG_CH12, + JSH_ANALOG_CH13, + JSH_ANALOG_CH14, + JSH_ANALOG_CH15, + JSH_ANALOG_CH16, + + JSH_MASK_ANALOG_CH = 31, + JSH_MASK_ANALOG_ADC = JSH_ANALOG1|JSH_ANALOG2|JSH_ANALOG3|JSH_ANALOG4, + +} PACKED_FLAGS JsvPinInfoAnalog; + +typedef enum { + // ---------------------------- JSH_MASK_AF + JSH_AF0 = 0, + JSH_AF1, + JSH_AF2, + JSH_AF3, + JSH_AF4, + JSH_AF5, + JSH_AF6, + JSH_AF7, + JSH_AF8, + JSH_AF9, + JSH_AF10, + JSH_AF11, + JSH_AF12, + JSH_AF13, + JSH_AF14, + JSH_AF15, + + // ---------------------------- JSH_MASK_TYPE + JSH_TIMER1 = 0x0010, + JSH_TIMER2 = 0x0020, + JSH_TIMER3 = 0x0030, + JSH_TIMER4 = 0x0040, + JSH_TIMER5 = 0x0050, + JSH_TIMER6 = 0x0060, + JSH_TIMER7 = 0x0070, + JSH_TIMER8 = 0x0080, + JSH_TIMER9 = 0x0090, + JSH_TIMER10 = 0x00A0, + JSH_TIMER11 = 0x00B0, + JSH_TIMER12 = 0x00C0, + JSH_TIMER13 = 0x00D0, + JSH_TIMER14 = 0x00E0, + JSH_TIMER15 = 0x00F0, + JSH_TIMER16 = 0x0100, + JSH_TIMER17 = 0x0110, + JSH_TIMER18 = 0x0120, + JSH_TIMERMAX = JSH_TIMER18, + JSH_DAC = 0x0180, + JSH_SPI1 = 0x0200, + JSH_SPI2 = 0x0210, + JSH_SPI3 = 0x0220, + JSH_SPIMAX = JSH_SPI3, + JSH_I2C1 = 0x0280, + JSH_I2C2 = 0x0290, + JSH_I2C3 = 0x02A0, + JSH_I2CMAX = JSH_I2C3, + JSH_USART1 = 0x0300, + JSH_USART2 = 0x0310, + JSH_USART3 = 0x0320, + JSH_USART4 = 0x0330, + JSH_USART5 = 0x0340, + JSH_USART6 = 0x0350, + JSH_USARTMAX = JSH_USART6, + + // ---------------------------- JSH_MASK_INFO + + JSH_TIMER_CH1 = 0x0000, + JSH_TIMER_CH2 = 0x1000, + JSH_TIMER_CH3 = 0x2000, + JSH_TIMER_CH4 = 0x3000, + JSH_MASK_TIMER_CH = 0x7000, + JSH_TIMER_NEGATED = 0x8000, + + JSH_USART_RX = 0x0000, + JSH_USART_TX = 0x1000, + + JSH_SPI_MISO = 0x0000, + JSH_SPI_MOSI = 0x1000, + JSH_SPI_SCK = 0x2000, + + JSH_I2C_SCL = 0x0000, + JSH_I2C_SDA = 0x1000, + + JSH_DAC_CH1 = 0x0000, + JSH_DAC_CH2 = 0x1000, + + // ---------------------------- Masks + JSH_MASK_AF = 0x000F, + JSH_MASK_TYPE = 0x0FF0, + JSH_MASK_INFO = 0xF000, +} PACKED_FLAGS JshPinFunction; + +#define JSH_PINFUNCTION_IS_TIMER(F) ( \ + (((F)&JSH_MASK_TYPE)>=JSH_TIMER1) && \ + (((F)&JSH_MASK_TYPE)<=JSH_TIMER18)) +#define JSH_PINFUNCTION_IS_DAC(F) ( \ + (((F)&JSH_MASK_TYPE)==JSH_DAC) || \ +0 ) +#define JSH_PINFUNCTION_IS_USART(F) ( \ + (((F)&JSH_MASK_TYPE)>=JSH_USART1) && \ + (((F)&JSH_MASK_TYPE)<=JSH_USART6)) +#define JSH_PINFUNCTION_IS_I2C(F) ( \ + (((F)&JSH_MASK_TYPE)>=JSH_I2C1) && \ + (((F)&JSH_MASK_TYPE)<=JSH_I2CMAX)) +#define JSH_PINFUNCTION_IS_SPI(F) ( \ + (((F)&JSH_MASK_TYPE)>=JSH_SPI1) && \ + (((F)&JSH_MASK_TYPE)<=JSH_SPIMAX)) + +bool jshIsPinValid(Pin pin); ///< is the specific pin actually valid? + +/// Given a string, convert it to a pin ID (or -1 if it doesn't exist) +Pin jshGetPinFromString(const char *s); +/** Write the pin name to a string. String must have at least 8 characters (to be safe) */ +void jshGetPinString(char *result, Pin pin); + +/// Given a var, convert it to a pin ID (or -1 if it doesn't exist). safe for undefined! +static inline Pin jshGetPinFromVar(JsVar *pinv) { + if (jsvIsString(pinv) && pinv->varData.str[5]==0/*should never be more than 4 chars!*/) { + return jshGetPinFromString(&pinv->varData.str[0]); + } else if (jsvIsInt(pinv) /* This also tests for the Pin datatype */) { + return (Pin)jsvGetInteger(pinv); + } else return PIN_UNDEFINED; +} + +static inline Pin jshGetPinFromVarAndUnLock(JsVar *pinv) { + Pin pin = jshGetPinFromVar(pinv); + jsvUnLock(pinv); + return pin; +} + +#endif //JSPIN_H |
