wiced_result_t gpio_keypad_enable( gpio_keypad_t* keypad, wiced_worker_thread_t* thread, gpio_keypad_handler_t function, uint32_t held_event_interval_ms, uint32_t total_keys, const gpio_key_t* key_list ) { gpio_key_internal_t* key_internal; uint32_t malloc_size; uint32_t i; if ( !keypad || !thread || !function || !total_keys || !key_list ) { return WICED_BADARG; } malloc_size = sizeof(gpio_keypad_internal_t) + total_keys * sizeof(gpio_key_internal_t); keypad->internal = (gpio_keypad_internal_t*) malloc_named("key internal", malloc_size); if ( !keypad->internal ) { return WICED_ERROR; } memset( keypad->internal, 0, sizeof( *( keypad->internal ) ) ); key_internal = (gpio_key_internal_t*)((uint8_t*)keypad->internal + sizeof(gpio_keypad_internal_t)); keypad->internal->function = function; keypad->internal->thread = thread; keypad->internal->total_keys = total_keys; keypad->internal->key_list = (gpio_key_t*)key_list; wiced_rtos_init_timer( &keypad->internal->check_state_timer, held_event_interval_ms, check_state_timer_handler, (void*) keypad->internal ); for ( i = 0; i < total_keys; i++ ) { wiced_gpio_irq_trigger_t trigger = ( key_list[i].polarity == KEY_POLARITY_HIGH ) ? IRQ_TRIGGER_FALLING_EDGE : IRQ_TRIGGER_RISING_EDGE; key_internal[i].key = (gpio_key_t*)&key_list[i]; key_internal[i].owner = keypad->internal; key_internal[i].last_irq_timestamp = 0; wiced_gpio_init( key_list[i].gpio, ( ( key_list[i].polarity == KEY_POLARITY_HIGH ) ? INPUT_PULL_UP : INPUT_PULL_DOWN ) ); wiced_gpio_input_irq_enable( key_list[i].gpio, trigger, gpio_interrupt_key_handler, (void*)&key_internal[i] ); } return WICED_SUCCESS; }
wiced_result_t spi_master_init( spi_master_t* master, const wiced_spi_device_t* device, wiced_gpio_t data_ready_pin, spi_master_data_ready_callback_t data_ready_callback ) { wiced_result_t result; if ( master == NULL || device == NULL ) { return WICED_BADARG; } master->device = device; master->in_transaction = WICED_FALSE; master->data_ready_pin = data_ready_pin; master->data_ready_callback = data_ready_callback; /* Init data ready semaphore */ result = wiced_rtos_init_semaphore( &master->data_ready_semaphore ); if ( result != WICED_SUCCESS ) { return result; } /* Init ready pin interrupt */ result = wiced_gpio_init( data_ready_pin, INPUT_PULL_UP ); if ( result != WICED_SUCCESS ) { return result; } result = wiced_gpio_input_irq_enable( data_ready_pin, IRQ_TRIGGER_BOTH_EDGES, spi_slave_ready_pin_irq_handler, (void*)master ); if ( result != WICED_SUCCESS ) { return result; } /* Init SPI master on the master CPU */ result = wiced_spi_init( master->device ); if ( result != WICED_SUCCESS ) { return result; } return WICED_SUCCESS; }
static void RGB_Init(wiced_gpio_t pin) { rgb_pin = &platform_gpio_pins[pin]; wiced_gpio_init( pin, OUTPUT_PUSH_PULL ); }