/* * This file is part of Espruino, a JavaScript interpreter for Microcontrollers * * Copyright (C) 2013 Gordon Williams * * 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 * ---------------------------------------------------------------------------- */ #include "jspin.h" #include "jspininfo.h" // auto-generated bool jshIsPinValid(Pin pin) { // Note, PIN_UNDEFINED is always > JSH_PIN_COUNT return pin < JSH_PIN_COUNT && pinInfo[pin].port!=JSH_PORT_NONE; } Pin jshGetPinFromString(const char *s) { // built in constants if (s[0]=='B' && s[1]=='T' && s[2]=='N') { #ifdef BTN1_PININDEX if (!s[3]) return BTN1_PININDEX; if (s[3]=='1' && !s[4]) return BTN1_PININDEX; #endif #ifdef BTN2_PININDEX if (s[3]=='2' && !s[4]) return BTN2_PININDEX; #endif #ifdef BTN3_PININDEX if (s[3]=='3' && !s[4]) return BTN3_PININDEX; #endif #ifdef BTN4_PININDEX if (s[3]=='4' && !s[4]) return BTN4_PININDEX; #endif } if (s[0]=='L' && s[1]=='E' && s[2]=='D') { #ifdef LED1_PININDEX if (!s[3]) return LED1_PININDEX; if (s[3]=='1' && !s[4]) return LED1_PININDEX; #endif #ifdef LED2_PININDEX if (s[3]=='2' && !s[4]) return LED2_PININDEX; #endif #ifdef LED3_PININDEX if (s[3]=='3' && !s[4]) return LED3_PININDEX; #endif #ifdef LED4_PININDEX if (s[3]=='4' && !s[4]) return LED4_PININDEX; #endif #ifdef LED5_PININDEX if (s[3]=='5' && !s[4]) return LED5_PININDEX; #endif #ifdef LED6_PININDEX if (s[3]=='6' && !s[4]) return LED6_PININDEX; #endif #ifdef LED7_PININDEX if (s[3]=='7' && !s[4]) return LED7_PININDEX; #endif #ifdef LED8_PININDEX if (s[3]=='8' && !s[4]) return LED8_PININDEX; #endif } if ((s[0]>='A' && s[0]<='H') && s[1]) { // first 6 are analogs int port = JSH_PORTA+s[0]-'A'; Pin pin = 127; if (!s[2] && (s[1]>='0' && s[1]<='9')) { // D0-D9 pin = (Pin)(s[1]-'0'); } else if (!s[3] && (s[1]>='1' && s[1]<='3' && s[2]>='0' && s[2]<='9')) { // D1X-D3X pin = (Pin)((s[1]-'0')*10 + (s[2]-'0')); } if (port == JSH_PORTA) { if (pin=JSH_PORTA_OFFSET && #endif pin=JSH_PORTB_OFFSET && pin=JSH_PORTC_OFFSET && pin=JSH_PORTD_OFFSET && pin=JSH_PORTE_OFFSET && pin=JSH_PORTF_OFFSET && pin=JSH_PORTG_OFFSET && pin=JSH_PORTH_OFFSET && pin