Fix reading of balance board data
This commit is contained in:
@@ -85,6 +85,10 @@ extern FILE* logtarget[];
|
|||||||
#define BIG_ENDIAN_LONG(i) (htonl(i))
|
#define BIG_ENDIAN_LONG(i) (htonl(i))
|
||||||
#define BIG_ENDIAN_SHORT(i) (htons(i))
|
#define BIG_ENDIAN_SHORT(i) (htons(i))
|
||||||
|
|
||||||
|
/* Convert from big endian */
|
||||||
|
#define FROM_BIG_ENDIAN_LONG(i) (ntohl(i))
|
||||||
|
#define FROM_BIG_ENDIAN_SHORT(i) (ntohs(i))
|
||||||
|
|
||||||
#define absf(x) ((x >= 0) ? (x) : (x * -1.0f))
|
#define absf(x) ((x >= 0) ? (x) : (x * -1.0f))
|
||||||
#define diff_f(x, y) ((x >= y) ? (absf(x - y)) : (absf(y - x)))
|
#define diff_f(x, y) ((x >= y) ? (absf(x - y)) : (absf(y - x)))
|
||||||
|
|
||||||
|
|||||||
@@ -39,16 +39,6 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
static uint16_t big_to_lil(uint16_t num)
|
|
||||||
{
|
|
||||||
uint16_t ret = num;
|
|
||||||
uint8_t *bret = (uint8_t*)&ret;
|
|
||||||
uint8_t tmp = bret[1];
|
|
||||||
bret[1] = bret[0];
|
|
||||||
bret[0] = tmp;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Handle the handshake data from the wiiboard.
|
* @brief Handle the handshake data from the wiiboard.
|
||||||
*
|
*
|
||||||
@@ -82,20 +72,20 @@ int wii_board_handshake(struct wiimote_t* wm, struct wii_board_t* wb, byte* data
|
|||||||
|
|
||||||
handshake_short = (uint16_t*)data;
|
handshake_short = (uint16_t*)data;
|
||||||
|
|
||||||
wb->ctr[0] = big_to_lil(handshake_short[2]);
|
wb->ctr[0] = FROM_BIG_ENDIAN_SHORT(handshake_short[2]);
|
||||||
wb->cbr[0] = big_to_lil(handshake_short[3]);
|
wb->cbr[0] = FROM_BIG_ENDIAN_SHORT(handshake_short[3]);
|
||||||
wb->ctl[0] = big_to_lil(handshake_short[4]);
|
wb->ctl[0] = FROM_BIG_ENDIAN_SHORT(handshake_short[4]);
|
||||||
wb->cbl[0] = big_to_lil(handshake_short[5]);
|
wb->cbl[0] = FROM_BIG_ENDIAN_SHORT(handshake_short[5]);
|
||||||
|
|
||||||
wb->ctr[1] = big_to_lil(handshake_short[6]);
|
wb->ctr[1] = FROM_BIG_ENDIAN_SHORT(handshake_short[6]);
|
||||||
wb->cbr[1] = big_to_lil(handshake_short[7]);
|
wb->cbr[1] = FROM_BIG_ENDIAN_SHORT(handshake_short[7]);
|
||||||
wb->ctl[1] = big_to_lil(handshake_short[8]);
|
wb->ctl[1] = FROM_BIG_ENDIAN_SHORT(handshake_short[8]);
|
||||||
wb->cbl[1] = big_to_lil(handshake_short[9]);
|
wb->cbl[1] = FROM_BIG_ENDIAN_SHORT(handshake_short[9]);
|
||||||
|
|
||||||
wb->ctr[2] = big_to_lil(handshake_short[10]);
|
wb->ctr[2] = FROM_BIG_ENDIAN_SHORT(handshake_short[10]);
|
||||||
wb->cbr[2] = big_to_lil(handshake_short[11]);
|
wb->cbr[2] = FROM_BIG_ENDIAN_SHORT(handshake_short[11]);
|
||||||
wb->ctl[2] = big_to_lil(handshake_short[12]);
|
wb->ctl[2] = FROM_BIG_ENDIAN_SHORT(handshake_short[12]);
|
||||||
wb->cbl[2] = big_to_lil(handshake_short[13]);
|
wb->cbl[2] = FROM_BIG_ENDIAN_SHORT(handshake_short[13]);
|
||||||
|
|
||||||
/* handshake done */
|
/* handshake done */
|
||||||
wm->event = WIIUSE_WII_BOARD_CTRL_INSERTED;
|
wm->event = WIIUSE_WII_BOARD_CTRL_INSERTED;
|
||||||
@@ -137,10 +127,10 @@ static float do_interpolate(uint16_t raw, uint16_t cal[3]) {
|
|||||||
*/
|
*/
|
||||||
void wii_board_event(struct wii_board_t* wb, byte* msg) {
|
void wii_board_event(struct wii_board_t* wb, byte* msg) {
|
||||||
uint16_t *shmsg = (uint16_t*)(msg);
|
uint16_t *shmsg = (uint16_t*)(msg);
|
||||||
wb->rtr = (msg[0] << 8) + msg[1];// big_to_lil(shmsg[0]);
|
wb->rtr = FROM_BIG_ENDIAN_SHORT(shmsg[0]);
|
||||||
wb->rbr = (msg[2] << 8) + msg[3];// big_to_lil(shmsg[1]);
|
wb->rbr = FROM_BIG_ENDIAN_SHORT(shmsg[1]);
|
||||||
wb->rtl = (msg[4] << 8) + msg[5];// big_to_lil(shmsg[2]);
|
wb->rtl = FROM_BIG_ENDIAN_SHORT(shmsg[2]);
|
||||||
wb->rbl = (msg[6] << 8) + msg[7];// big_to_lil(shmsg[3]);
|
wb->rbl = FROM_BIG_ENDIAN_SHORT(shmsg[3]);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Interpolate values
|
Interpolate values
|
||||||
|
|||||||
Reference in New Issue
Block a user