From 13d42f442891a379c40538fb28c15928008dae9c Mon Sep 17 00:00:00 2001 From: Albert Herranz Date: Mon, 15 Jul 2024 15:35:55 +0200 Subject: [PATCH] XBOXOLD: fix endianness of analog hats w/o using void pointer arithmetic Signed-off-by: Albert Herranz --- XBOXOLD.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/XBOXOLD.cpp b/XBOXOLD.cpp index 7ba979d8..186621dc 100644 --- a/XBOXOLD.cpp +++ b/XBOXOLD.cpp @@ -339,15 +339,14 @@ uint8_t XBOXOLD::Poll() { void XBOXOLD::readReport() { ButtonState = readBuf[2]; - void *p = readBuf; for(uint8_t i = 0; i < sizeof (buttonValues); i++) buttonValues[i] = readBuf[i + 4]; // A, B, X, Y, BLACK, WHITE, L1, and R1 - hatValue[LeftHatX] = *(int16_t *)(p + 12); - hatValue[LeftHatY] = *(int16_t *)(p + 14); - hatValue[RightHatX] = *(int16_t *)(p + 16); - hatValue[RightHatY] = *(int16_t *)(p + 18); + hatValue[LeftHatX] = (int16_t)(((uint16_t)readBuf[13] << 8) | readBuf[12]); + hatValue[LeftHatY] = (int16_t)(((uint16_t)readBuf[15] << 8) | readBuf[14]); + hatValue[RightHatX] = (int16_t)(((uint16_t)readBuf[17] << 8) | readBuf[16]); + hatValue[RightHatY] = (int16_t)(((uint16_t)readBuf[19] << 8) | readBuf[18]); //Notify(PSTR("\r\nButtonState"), 0x80); //PrintHex(ButtonState, 0x80);