Fix joystick work in simulation

Logic was broken as joystickGet never got called
This commit is contained in:
Oleg Kalachev 2024-12-27 15:34:33 +03:00
parent 3c28d0e950
commit f7434921e5
2 changed files with 8 additions and 8 deletions

View File

@ -14,7 +14,7 @@ public:
SBUS(HardwareSerial& bus, const bool inv = true) {}; SBUS(HardwareSerial& bus, const bool inv = true) {};
SBUS(HardwareSerial& bus, const int8_t rxpin, const int8_t txpin, const bool inv = true) {}; SBUS(HardwareSerial& bus, const int8_t rxpin, const int8_t txpin, const bool inv = true) {};
void begin() {}; void begin() {};
bool read() { return joystickInitialized; }; bool read() { return joystickInit(); };
SBUSData data() { SBUSData data() {
SBUSData data; SBUSData data;
joystickGet(data.ch); joystickGet(data.ch);

View File

@ -19,11 +19,14 @@ const int channelMaxOverride[] = {27090, 27090, 27090, 27090, -5676, 1};
#define RC_CHANNEL_MODE 4 #define RC_CHANNEL_MODE 4
SDL_Joystick *joystick; SDL_Joystick *joystick;
bool joystickInitialized = false, warnShown = false;
void normalizeRC(); void normalizeRC();
void joystickInit() { bool joystickInit() {
static bool joystickInitialized = false;
static bool warnShown = false;
if (joystickInitialized) return true;
SDL_Init(SDL_INIT_JOYSTICK); SDL_Init(SDL_INIT_JOYSTICK);
joystick = SDL_JoystickOpen(0); joystick = SDL_JoystickOpen(0);
if (joystick != NULL) { if (joystick != NULL) {
@ -39,14 +42,11 @@ void joystickInit() {
extern int channelMax[RC_CHANNELS]; extern int channelMax[RC_CHANNELS];
memcpy(channelNeutral, channelNeutralOverride, sizeof(channelNeutralOverride)); memcpy(channelNeutral, channelNeutralOverride, sizeof(channelNeutralOverride));
memcpy(channelMax, channelMaxOverride, sizeof(channelMaxOverride)); memcpy(channelMax, channelMaxOverride, sizeof(channelMaxOverride));
return joystickInitialized;
} }
bool joystickGet(int16_t ch[16]) { bool joystickGet(int16_t ch[16]) {
if (!joystickInitialized) {
joystickInit();
return false;
}
SDL_JoystickUpdate(); SDL_JoystickUpdate();
for (uint8_t i = 0; i < sizeof(channels) / sizeof(channels[0]); i++) { for (uint8_t i = 0; i < sizeof(channels) / sizeof(channels[0]); i++) {