Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
static void RGB_Init(wiced_gpio_t pin)
{
    rgb_pin =  &platform_gpio_pins[pin];
    wiced_gpio_init( pin, OUTPUT_PUSH_PULL );
}