/* B0P18 is #IRQ line of the touchpad */ void button_init_device(void) { mpr121_init(0xb4); mpr121_soft_reset(); mpr121_set_config(&config); queue_init(&mpr121_queue, true); create_thread(mpr121_thread, mpr121_stack, sizeof(mpr121_stack), 0, mpr121_thread_name IF_PRIO(, PRIORITY_USER_INTERFACE) IF_COP(, CPU)); /* enable interrupt */ imx233_pinctrl_acquire(0, 18, "mpr121_int"); imx233_pinctrl_set_function(0, 18, PINCTRL_FUNCTION_GPIO); imx233_pinctrl_enable_gpio(0, 18, false); imx233_pinctrl_setup_irq(0, 18, true, true, false, &mpr121_irq_cb, 0); /* generic part */ imx233_button_init(); }
int main() { mpr121_context dev = mpr121_init(MPR121_I2C_BUS, MPR121_DEFAULT_I2C_ADDR); if(mpr121_config_an3944(dev) != UPM_SUCCESS){ printf("unable to configure device\n"); } uint32_t states; while(1){ if(mpr121_read_buttons(dev, &states, 0) != UPM_SUCCESS){ printf("Error while reading button values\n"); } printf("retrieved button states: %d\n", states); upm_delay(1); } mpr121_close(dev); printf("all done!!\n"); return 0; }