/* Checks if a factory reset is requested */ wiced_bool_t platform_check_factory_reset( void ) { uint32_t factory_reset_counter = 0; #ifndef GPIO_LED_NOT_SUPPORTED int led_state = 0; #endif while ( ( 0 == platform_gpio_input_get( &platform_gpio_pins[ WICED_BUTTON1 ] ) ) &&( ( factory_reset_counter += PLATFORM_FACTORY_RESET_CHECK_PERIOD ) <= PLATFORM_FACTORY_RESET_TIMEOUT ) &&( WICED_SUCCESS == (wiced_result_t)host_rtos_delay_milliseconds( PLATFORM_FACTORY_RESET_CHECK_PERIOD ) ) ) { /* Factory reset button is being pressed. */ /* User Must press it for 5 seconds to ensure it was not accidental */ #ifndef GPIO_LED_NOT_SUPPORTED /* Toggle LED every 100ms */ if ( led_state == 0 ) { platform_gpio_output_high( &platform_gpio_pins[ WICED_LED1 ] ); led_state = 1; } else { platform_gpio_output_low( &platform_gpio_pins[ WICED_LED1 ] ); led_state = 0; } #endif if ( factory_reset_counter == 5000 ) { return WICED_TRUE; } } return WICED_FALSE; }
/* Checks if a factory reset is requested */ wiced_bool_t platform_check_factory_reset( void ) { uint32_t factory_reset_counter = 0; int led_state = 0; while ( ( 0 == platform_gpio_input_get( &platform_gpio_pins[ WICED_BUTTON1 ] ) ) && ( ( factory_reset_counter += 100 ) <= 5000 ) /* &&( WICED_SUCCESS == (wiced_result_t)host_rtos_delay_milliseconds( 100 ) ) */ ) { /* Factory reset button is being pressed. */ /* User Must press it for 5 seconds to ensure it was not accidental */ /* Toggle LED every 100ms */ if ( led_state == 0 ) { platform_gpio_output_high( &platform_gpio_pins[ WICED_LED1 ] ); led_state = 1; } else { platform_gpio_output_low( &platform_gpio_pins[ WICED_LED1 ] ); led_state = 0; } if ( factory_reset_counter == 5000 ) { return WICED_TRUE; } } return WICED_FALSE; }
bool host_platform_is_sdio_int_asserted(void) { if ( platform_gpio_input_get( &wifi_sdio_pins[WIFI_PIN_SDIO_IRQ] ) == true) //SDIO INT pin is high return false; else return true; // SDIO D1 is low, data need read }
/***************************************************************************** ** ** Function UPIO_Read ** ** Description ** Read the state of a GPIO. This function can be used for any type of ** device. Parameter pio can only indicate a single GPIO; multiple GPIOs ** cannot be masked together. ** ** Input Parameters: ** Type: The type of device. ** pio: Indicates the particular GUPIO. ** ** Output Parameter: ** None. ** ** Returns: ** State of GPIO (UPIO_ON or UPIO_OFF). ** *****************************************************************************/ UDRV_API tUPIO_STATE UPIO_Read( tUPIO_TYPE type, tUPIO pio ) { #if HCILP_INCLUDED //DRV_TRACE_DEBUG1("UPIO_Read %d", pio); return platform_gpio_input_get(mico_bt_control_pins[MICO_BT_PIN_HOST_WAKE]) ? UPIO_OFF : UPIO_OFF; #else return UPIO_OFF; #endif }
// executed on tx worker thread static wiced_result_t h4_tx_worker_send_packet(void * arg){ #ifdef WICED_BT_UART_MANUAL_CTS_RTS while (platform_gpio_input_get(wiced_bt_uart_pins[WICED_BT_PIN_UART_CTS]) == WICED_TRUE){ printf("."); wiced_rtos_delay_milliseconds(10); } printf("\n"); #endif // blocking send platform_uart_transmit_bytes(wiced_bt_uart_driver, tx_worker_data_buffer, tx_worker_data_size); // let stack know btstack_run_loop_wiced_execute_code_on_main_thread(&h4_main_notify_packet_send, NULL); return WICED_SUCCESS; }
uint32_t platform_get_factory_reset_button_time ( uint32_t max_time ) { uint32_t button_press_timer = 0; int led_state = 0; /* Initialise input */ platform_gpio_init( &platform_gpio_pins[ PLATFORM_FACTORY_RESET_BUTTON_GPIO ], INPUT_PULL_UP ); while ( (PLATFORM_FACTORY_RESET_PRESSED_STATE == platform_gpio_input_get(&platform_gpio_pins[ PLATFORM_FACTORY_RESET_BUTTON_GPIO ])) ) { /* How long is the "Factory Reset" button being pressed. */ host_rtos_delay_milliseconds( PLATFORM_FACTORY_RESET_CHECK_PERIOD ); /* Toggle LED every PLATFORM_FACTORY_RESET_CHECK_PERIOD */ if ( led_state == 0 ) { platform_gpio_output_high( &platform_gpio_pins[ PLATFORM_FACTORY_RESET_LED_GPIO ] ); led_state = 1; } else { platform_gpio_output_low( &platform_gpio_pins[ PLATFORM_FACTORY_RESET_LED_GPIO ] ); led_state = 0; } button_press_timer += PLATFORM_FACTORY_RESET_CHECK_PERIOD; if ((max_time > 0) && (button_press_timer >= max_time)) { break; } } /* turn off the LED */ if (PLATFORM_FACTORY_RESET_LED_ON_STATE == 1) { platform_gpio_output_low( &platform_gpio_pins[ PLATFORM_FACTORY_RESET_LED_GPIO ] ); } else { platform_gpio_output_high( &platform_gpio_pins[ PLATFORM_FACTORY_RESET_LED_GPIO ] ); } return button_press_timer; }
bool MicoGpioInputGet( mico_gpio_t gpio ) { if ( gpio >= MICO_GPIO_NONE ) return kUnsupportedErr; return platform_gpio_input_get( &platform_gpio_pins[gpio] ); }
wiced_result_t bluetooth_wiced_init_platform( void ) { if ( wiced_bt_control_pins[ WICED_BT_PIN_HOST_WAKE ] != NULL ) { RETURN_IF_FAILURE( platform_gpio_init( wiced_bt_control_pins[WICED_BT_PIN_HOST_WAKE], INPUT_HIGH_IMPEDANCE ) ); } if ( wiced_bt_control_pins[ WICED_BT_PIN_DEVICE_WAKE ] != NULL ) { RETURN_IF_FAILURE( platform_gpio_init( wiced_bt_control_pins[ WICED_BT_PIN_DEVICE_WAKE ], OUTPUT_PUSH_PULL ) ); RETURN_IF_FAILURE( platform_gpio_output_low( wiced_bt_control_pins[ WICED_BT_PIN_DEVICE_WAKE ] ) ); wiced_rtos_delay_milliseconds( 100 ); } /* Configure Reg Enable pin to output. Set to HIGH */ if ( wiced_bt_control_pins[ WICED_BT_PIN_POWER ] != NULL ) { RETURN_IF_FAILURE( platform_gpio_init( wiced_bt_control_pins[ WICED_BT_PIN_POWER ], OUTPUT_OPEN_DRAIN_PULL_UP ) ); RETURN_IF_FAILURE( platform_gpio_output_high( wiced_bt_control_pins[ WICED_BT_PIN_POWER ] ) ); } if ( wiced_bt_uart_config.flow_control == FLOW_CONTROL_DISABLED ) { /* Configure RTS pin to output. Set to HIGH */ RETURN_IF_FAILURE( platform_gpio_init( wiced_bt_uart_pins[WICED_BT_PIN_UART_RTS], OUTPUT_OPEN_DRAIN_PULL_UP ) ); RETURN_IF_FAILURE( platform_gpio_output_high( wiced_bt_uart_pins[WICED_BT_PIN_UART_RTS] ) ); /* Configure CTS pin to input pull-up */ RETURN_IF_FAILURE( platform_gpio_init( wiced_bt_uart_pins[WICED_BT_PIN_UART_CTS], INPUT_PULL_UP ) ); } if ( wiced_bt_control_pins[ WICED_BT_PIN_RESET ] != NULL ) { RETURN_IF_FAILURE( platform_gpio_init( wiced_bt_control_pins[ WICED_BT_PIN_RESET ], OUTPUT_PUSH_PULL ) ); RETURN_IF_FAILURE( platform_gpio_output_high( wiced_bt_control_pins[ WICED_BT_PIN_RESET ] ) ); /* Configure USART comms */ RETURN_IF_FAILURE( bluetooth_wiced_init_config_uart( &wiced_bt_uart_config ) ); /* Reset bluetooth chip */ RETURN_IF_FAILURE( platform_gpio_output_low( wiced_bt_control_pins[ WICED_BT_PIN_RESET ] ) ); wiced_rtos_delay_milliseconds( 10 ); RETURN_IF_FAILURE( platform_gpio_output_high( wiced_bt_control_pins[ WICED_BT_PIN_RESET ] ) ); } else { /* Configure USART comms */ RETURN_IF_FAILURE( bluetooth_wiced_init_config_uart( &wiced_bt_uart_config ) ); } wiced_rtos_delay_milliseconds( BLUETOOTH_CHIP_STABILIZATION_DELAY ); if ( wiced_bt_uart_config.flow_control == FLOW_CONTROL_DISABLED ) { /* Bluetooth chip is ready. Pull host's RTS low */ RETURN_IF_FAILURE( platform_gpio_output_low( wiced_bt_uart_pins[WICED_BT_PIN_UART_RTS] ) ); } /* Wait for Bluetooth chip to pull its RTS (host's CTS) low. From observation using CRO, it takes the bluetooth chip > 170ms to pull its RTS low after CTS low */ while ( platform_gpio_input_get( wiced_bt_uart_pins[ WICED_BT_PIN_UART_CTS ] ) == WICED_TRUE ) { wiced_rtos_delay_milliseconds( 10 ); } return WICED_SUCCESS; }