diff --git a/include/gamepad.h b/include/gamepad.h index 21603bb..45b099e 100644 --- a/include/gamepad.h +++ b/include/gamepad.h @@ -24,9 +24,11 @@ class Gamepad{ Gamepad(uint8_t latch, uint8_t clock, uint8_t data); bool isPressed(Button button); - bool isPressedLast(Button button); - uint16_t getState(); - uint16_t getLastState(); + bool isPressedLast(Button button) const; + uint16_t getState() const; + uint16_t getLastState() const { return this->lastState; } + + static bool isPressed(uint16_t input, Button button); private: uint16_t readCon(); diff --git a/src/gamepad.cpp b/src/gamepad.cpp index 064d687..2287900 100644 --- a/src/gamepad.cpp +++ b/src/gamepad.cpp @@ -1,6 +1,7 @@ #include "gamepad.h" -Gamepad::Gamepad(uint8_t latch, uint8_t clock, uint8_t data){ +Gamepad::Gamepad(uint8_t latch, uint8_t clock, uint8_t data) +{ this->latch = latch; this->clock = clock; this->data = data; @@ -16,11 +17,13 @@ Gamepad::Gamepad(uint8_t latch, uint8_t clock, uint8_t data){ pinMode(data, INPUT); } -uint16_t Gamepad::getState(){ +uint16_t Gamepad::getState() const +{ return this->readCon(); } -uint16_t Gamepad::readCon(){ +uint16_t Gamepad::readCon() +{ uint16_t res = 0; digitalWrite(this->latch, HIGH); @@ -28,7 +31,8 @@ uint16_t Gamepad::readCon(){ digitalWrite(this->latch, LOW); delayMicroseconds(6); - for (uint8_t i = 0; i < NUM_KEYS; i++){ + for (uint8_t i = 0; i < NUM_KEYS; i++) + { digitalWrite(this->clock, LOW); delayMicroseconds(6); res |= (!digitalRead(this->data) << i); @@ -36,18 +40,27 @@ uint16_t Gamepad::readCon(){ delayMicroseconds(6); } - lastState = res; + this->lastState = res; return res; } -bool Gamepad::isPressed(Button button) { - if ((uint16_t) button & this->readCon()) +bool Gamepad::isPressed(Button button) +{ + if ((uint16_t)button & this->readCon()) return true; return false; } -bool Gamepad::isPressedLast(Button button) { - if ((uint16_t) button & this->lastState) +bool Gamepad::isPressedLast(Button button) const +{ + if ((uint16_t)button & this->lastState) + return true; + return false; +} + +bool Gamepad::isPressed(uint16_t input, Button button) +{ + if ((uint16_t)button & input) return true; return false; } \ No newline at end of file