diff options
-rw-r--r-- | main.cpp | 47 |
1 files changed, 45 insertions, 2 deletions
@@ -120,8 +120,8 @@ auto report_desc = gamepad( // Inputs. report_id(1), - buttons(11), - padding_in(5), + buttons(15), + padding_in(1), usage_page(UsagePage::Desktop), usage(DesktopUsage::X), @@ -588,6 +588,12 @@ int main() { qe2a.set_mode(Pin::AF); qe2b.set_mode(Pin::AF); + uint8_t last_x = 0; + uint8_t last_y = 0; + + int8_t state_x = 0; + int8_t state_y = 0; + while(1) { usb.process(); @@ -611,6 +617,43 @@ int main() { uint32_t qe1_count = TIM2.CNT; uint32_t qe2_count = TIM3.CNT; + int8_t rx = qe1_count - last_x; + int8_t ry = qe2_count - last_y; + last_x = qe1_count; + last_y = qe2_count; + + if(rx > 0) { + state_x = 100; + } else if(rx < 0) { + state_x = -100; + } else if(state_x > 0) { + state_x--; + } else if(state_x < 0) { + state_x++; + } + + if(ry > 0) { + state_y = 100; + } else if(ry < 0) { + state_y = -100; + } else if(state_y > 0) { + state_y--; + } else if(state_y < 0) { + state_y++; + } + + if(state_x > 0) { + buttons |= 1 << 11; + } else if(state_x < 0) { + buttons |= 1 << 12; + } + + if(state_y > 0) { + buttons |= 1 << 13; + } else if(state_y < 0) { + buttons |= 1 << 14; + } + if(config.qe1_sens < 0) { qe1_count /= -config.qe1_sens; } else if(config.qe1_sens > 0) { |