// Set the pin state void jshPinSetState(Pin pin, JshPinState state) { /* Make sure we kill software PWM if we set the pin state * after we've started it */ if (BITFIELD_GET(jshPinSoftPWM, pin)) { BITFIELD_SET(jshPinSoftPWM, pin, 0); jstPinPWM(0,0,pin); } uint32_t ipin = (uint32_t)pinInfo[pin].pin; switch (state) { case JSHPINSTATE_UNDEFINED : nrf_gpio_cfg_default(ipin); break; case JSHPINSTATE_GPIO_OUT : nrf_gpio_cfg_output(ipin); break; case JSHPINSTATE_GPIO_OUT_OPENDRAIN : NRF_GPIO->PIN_CNF[ipin] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) | (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | (GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); break; case JSHPINSTATE_GPIO_IN : nrf_gpio_cfg_input(ipin, NRF_GPIO_PIN_NOPULL); break; case JSHPINSTATE_GPIO_IN_PULLUP : nrf_gpio_cfg_input(ipin, NRF_GPIO_PIN_PULLUP); break; case JSHPINSTATE_GPIO_IN_PULLDOWN : nrf_gpio_cfg_input(ipin, NRF_GPIO_PIN_PULLDOWN); break; /*case JSHPINSTATE_ADC_IN : break; case JSHPINSTATE_AF_OUT : break; case JSHPINSTATE_AF_OUT_OPENDRAIN : break; case JSHPINSTATE_USART_IN : break; case JSHPINSTATE_USART_OUT : break; case JSHPINSTATE_DAC_OUT : break;*/ case JSHPINSTATE_I2C : NRF_GPIO->PIN_CNF[ipin] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) | (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_PULL_Pullup << GPIO_PIN_CNF_PULL_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos); // may need to be set to GPIO_PIN_CNF_DIR_Output as well depending on I2C state? break; default : assert(0); break; } }
bool jshGetPinStateIsManual(Pin pin) { return BITFIELD_GET(jshPinStateIsManual, pin); }