summaryrefslogtreecommitdiff
path: root/components/external/espruino/src/jspin.h
diff options
context:
space:
mode:
authorshaolin <[email protected]>2014-03-04 09:14:48 +0800
committershaolin <[email protected]>2014-03-04 09:14:48 +0800
commit020e95d91b5e1d7f902674a320e42657bee3ebfe (patch)
tree65b65bfa527e0e8670dc807a8fee8d507d67ca48 /components/external/espruino/src/jspin.h
parent0fb9c54efda7fef4346523fdc4b92512a0441ee1 (diff)
parent738871fd9ebbd53da6cfcc429dfdd5ffc17fd685 (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.h228
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