| 206 | } |
| 207 | |
| 208 | int JoystickReader::process_event(void* event1, |
| 209 | std::array<uint16_t, N_CHANNELS>& current) { |
| 210 | auto* event = (SDL_Event*)event1; |
| 211 | int ret = 0; |
| 212 | switch (event->type) { |
| 213 | case SDL_JOYAXISMOTION: |
| 214 | m_console->debug("Joystick {}, Axis {} moved to {}", event->jaxis.which, |
| 215 | event->jaxis.axis, event->jaxis.value); |
| 216 | write_matching_axis(current, event->jaxis.axis, event->jaxis.value); |
| 217 | ret = 2; |
| 218 | break; |
| 219 | case SDL_JOYBUTTONDOWN: |
| 220 | m_console->debug("Button down"); |
| 221 | write_matching_button(current, event->jbutton.button, false); |
| 222 | ret = 5; |
| 223 | break; |
| 224 | case SDL_JOYBUTTONUP: |
| 225 | m_console->debug("Button up"); |
| 226 | write_matching_button(current, event->jbutton.button, true); |
| 227 | ret = 4; |
| 228 | break; |
| 229 | case SDL_QUIT: |
| 230 | m_console->debug("Got SDL_QUIT"); |
| 231 | ret = -1; |
| 232 | break; |
| 233 | default: |
| 234 | // aparently we sometimes also get mouse / keyboard events from SDL, this |
| 235 | // is not an issue |
| 236 | m_console->debug("Got Unknown SDL event type"); |
| 237 | ret = 0; |
| 238 | break; |
| 239 | } |
| 240 | return ret; |
| 241 | } |
| 242 | |
| 243 | JoystickReader::CurrChannelValues JoystickReader::get_current_state() { |
| 244 | std::lock_guard<std::mutex> guard(m_curr_values_mutex); |