bool controller_playback_next_track(void) { if (controller_state & STATE_WHEEL_RIGHT_RELEASED) { CLEAR_RELEASED_STATE(WHEEL_RIGHT); return true; } return false; }
bool controller_playback_decrease_volume(void) { if (controller_state & STATE_WHEEL_DOWN_RELEASED) { CLEAR_RELEASED_STATE(WHEEL_DOWN); return true; } return false; }
bool controller_playback_previous_track(void) { if (controller_state & STATE_WHEEL_LEFT_RELEASED) { CLEAR_RELEASED_STATE(WHEEL_LEFT); return true; } return false; }
// Key right bool controller_navigation_change_directory(void) { if (controller_state & STATE_WHEEL_RIGHT_RELEASED) { CLEAR_RELEASED_STATE(WHEEL_RIGHT); return true; } return false; }
// Key left bool controller_navigation_go_to_parent_directory(void) { if (controller_state & STATE_WHEEL_LEFT_RELEASED) { CLEAR_RELEASED_STATE(WHEEL_LEFT); return true; } return false; }
// Key DOWN or wheel right bool controller_navigation_cursor_next(void) { if (controller_state & STATE_WHEEL_DOWN_RELEASED) { CLEAR_RELEASED_STATE(WHEEL_DOWN); return true; } return controller_wheel_right(1); }
// Key UP or wheel left bool controller_navigation_cursor_previous(void) { if (controller_state & STATE_WHEEL_UP_RELEASED) { CLEAR_RELEASED_STATE(WHEEL_UP); return true; } return controller_wheel_left(1); }
bool controller_key_cs4(void) { if (controller_state & STATE_CS4_RELEASED) { CLEAR_RELEASED_STATE(CS4); return true; } return false; }
/*! \brief Initializes QT60168 resources: GPIO and SPI */ static void qt60168_resources_init(int cpu_hz) { static const gpio_map_t QT60168_SPI_GPIO_MAP = { {QT60168_SPI_SCK_PIN, QT60168_SPI_SCK_FUNCTION }, // SPI Clock. {QT60168_SPI_MISO_PIN, QT60168_SPI_MISO_FUNCTION }, // MISO. {QT60168_SPI_MOSI_PIN, QT60168_SPI_MOSI_FUNCTION }, // MOSI. {QT60168_SPI_NPCS0_PIN, QT60168_SPI_NPCS0_FUNCTION} // Chip Select NPCS. }; // SPI options. spi_options_t spiOptions = { .reg = QT60168_SPI_NCPS, .baudrate = QT60168_SPI_MASTER_SPEED, // Defined in conf_qt60168.h. .bits = QT60168_SPI_BITS, // Defined in conf_qt60168.h. .spck_delay = 0, .trans_delay = 0, .stay_act = 0, .spi_mode = 3, .modfdis = 1 }; // Assign I/Os to SPI. gpio_enable_module(QT60168_SPI_GPIO_MAP, sizeof(QT60168_SPI_GPIO_MAP) / sizeof(QT60168_SPI_GPIO_MAP[0])); // Initialize as master. spi_initMaster(QT60168_SPI, &spiOptions); // Set selection mode: variable_ps, pcs_decode, delay. spi_selectionMode(QT60168_SPI, 0, 0, 0); // Enable SPI. spi_enable(QT60168_SPI); // Initialize QT60168 with SPI clock Osc0. spi_setupChipReg(QT60168_SPI, &spiOptions, cpu_hz); } bool controller_key_pressed(void) { if (controller_state == STATE_IDLE) return false; return true; } bool controller_key_released(void) { if (controller_state & STATE_BACK_RELEASED || controller_state & STATE_FCT1_RELEASED || controller_state & STATE_FCT2_RELEASED || controller_state & STATE_FCT3_RELEASED) return true; return false; } bool controller_wheel_pressed(void) { if (controller_state & STATE_WHEEL_LEFT || controller_state & STATE_WHEEL_RIGHT) return true; return false; } bool controller_key_back(void) { if (controller_state & STATE_BACK_RELEASED) { CLEAR_RELEASED_STATE(BACK); return true; } return false; } bool controller_key_reset(void) { if (controller_state & STATE_BACK_LONG_PRESS) { controller_state &= ~STATE_BACK_LONG_PRESS; return true; } return false; } bool controller_key_fct1(void) { if (controller_state & STATE_FCT1_RELEASED) { CLEAR_RELEASED_STATE(FCT1); return true; } return false; } bool controller_key_fct2(void) { if (controller_state & STATE_FCT2_RELEASED) { CLEAR_RELEASED_STATE(FCT2); return true; } return false; } bool controller_key_fct3(void) { if (controller_state & STATE_FCT3_RELEASED) { CLEAR_RELEASED_STATE(FCT3); return true; } return false; } bool controller_key_fct1_pressed(void) { if (controller_state & STATE_FCT1_PRESSED) return true; return false; } bool controller_key_fct2_pressed(void) { if (controller_state & STATE_FCT2_PRESSED) return true; return false; } bool controller_key_fct3_pressed(void) { if (controller_state & STATE_FCT3_PRESSED) return true; return false; } bool controller_wheel_right(int wheel_inc) { if (wheel_step_counter >= wheel_inc && controller_state & STATE_WHEEL_RIGHT) { wheel_step_counter -= wheel_inc; return true; } return false; } bool controller_wheel_left(int wheel_inc) { if (wheel_step_counter >= wheel_inc && controller_state & STATE_WHEEL_LEFT) { wheel_step_counter -= wheel_inc; return true; } return false; } void controller_reset(void) { controller_state = STATE_IDLE; wheel_step_counter = 0; }