Release 1.01
ButtonController.cpp
- Committer:
- foxbrianr
- Date:
- 2019-09-12
- Revision:
- 1:86f6ebbe4fd1
- Parent:
- 0:b6d729ae4f27
- Child:
- 2:1d5204d29bc5
File content as of revision 1:86f6ebbe4fd1:
#include "ButtonController.h" ButtonController::ButtonController() { spi_io_exp = new mcp23s08 (p5, p6, p7, p26, 0x20); // --------------------------------------- // set pin modes // --------------------------------------- spi_io_exp->gpioPinMode(0,0); spi_io_exp->gpioPinMode(1,0); spi_io_exp->gpioPinMode(2,0); spi_io_exp->gpioPinMode(3,0); spi_io_exp->gpioPinMode(4,0); spi_io_exp->gpioPinMode(5,1); spi_io_exp->gpioPinMode(6,1); spi_io_exp->gpioPinMode(7,1); // --------------------------------------- // enable the audio amplifier // --------------------------------------- spi_io_exp->gpioPinMode(5,1); spi_io_exp->gpioDigitalWrite(5,1); spi_io_exp->gpioDigitalWrite(6,0); spi_io_exp->gpioDigitalWrite(7,0); } ButtonController::~ButtonController() { } void ButtonController::init(void) { } void ButtonController::processCmdQueue(Menu * activeMenu) { while (!cmd_queue.empty()) { uint8_t e; cmd_queue.pop(e); printf("\n<%02x>", e); switch(e) { case 0x01://up activeMenu->pressUp(); break; case 0x02://down activeMenu->pressDown(); break; case 0x04://clear activeMenu->pressClear(); break; case 0x08://mode activeMenu->pressMode(); break; case 0x10://set activeMenu->pressSet(); break; default: break; } } } uint8_t ButtonController::getCurrentState() { currentValue = spi_io_exp->readGpioPort(); return currentValue; } void ButtonController::update(void) { int trigger_action = 0; currentValue = spi_io_exp->readGpioPort() ; currentValue = (~currentValue & 0x1F); // clear bit is stuck // if (raising edge | falling edge ) if (currentValue != prevValue ) { prevValue = currentValue; countsSinceChange = 0; trigger_action = 1; } else { //TODO: play with time for what is short or long hold countsSinceChange++; if ( currentValue != NO_BUTTON && countsSinceChange>=10000) { if (isHeld != 2) printf("Button Long Held:%d\n\r",currentValue); isHeld = 2; trigger_action = 1; countsSinceChange = 0; } else if (currentValue != NO_BUTTON && countsSinceChange>=5000) { if (isHeld != 1) printf("Button Short Held:%d\n\r",currentValue); isHeld = 1; trigger_action = 1; countsSinceChange = 0; } else { isHeld =0; } } if (trigger_action) { if (currentValue && !cmd_queue.full()) { cmd_queue.push(currentValue); } trigger_action = 0; } } void ButtonController::pressButtonUp(void) { printf("Up Button Pressed:%d\n\r",currentValue); } void ButtonController::pressButtonDown(void) { printf("Down Button Pressed:%d\n\r",currentValue); } void ButtonController::pressButtonSet(void) { printf("Set Button Pressed:%d\n\r",currentValue); } void ButtonController::pressButtonMode(void) { printf("Mode Button Pressed:%d\n\r",currentValue); } void ButtonController::pressButtonClear(void) { printf("Clear Button Pressed:%d\n\r",currentValue); } void ButtonController::releaseButton(void) { //printf("Button Released:%d\n\r",currentValue); isHeld = 0; countsSinceChange = 0; }