Update Wiiuse to 0.15.6

STK-specific patches are kept, CI related changes are not included
This commit is contained in:
Alayan 2024-05-21 13:53:57 +02:00
parent 97faf4a492
commit 48764a6202
No known key found for this signature in database
6 changed files with 83 additions and 16 deletions

View File

@ -14,6 +14,16 @@ Original project (0.12 and earlier):
most recent archive from 2010 (looks identical on homepage to 2011 snapshot above) most recent archive from 2010 (looks identical on homepage to 2011 snapshot above)
<https://web.archive.org/web/20100216015311/http://wiiuse.sourceforge.net/> <https://web.archive.org/web/20100216015311/http://wiiuse.sourceforge.net/>
v0.15.6 -- 18-Feb-2024
--------------------
Fixed:
- Linux - Fixed hang with kernels 6.6.x and newer
- Corrected historical record about Wiiuse origins
- Require CMake > 3.6.x to avoid deprecation warnings
- Support for Balance Board calibration
v0.15.5 -- 24-Nov-2019 v0.15.5 -- 24-Nov-2019
-------------------- --------------------

View File

@ -68,6 +68,12 @@ Additional Contributors:
- Chadwick Boulay <https://github.com/cboulay> - Chadwick Boulay <https://github.com/cboulay>
- Florian Baumgartl <https://github.com/Baumgartl> - Florian Baumgartl <https://github.com/Baumgartl>
- Philipp Hartl <https://github.com/phHartl> - Philipp Hartl <https://github.com/phHartl>
Bryan Quigley <https://github.com/BryanQuigley>
Bart Ribbers <https://github.com/PureTryOut>
Samuel Hackbeil <https://github.com/shackbei>
Jean-Michaël Celerier <https://github.com/jcelerier>
Dave Murphy <https://github.com/WinterMute>
Forrest Cahoon <https://github.com/forrcaho>
## License ## License
@ -253,10 +259,10 @@ greatly appreciated.
### Forks not yet fully integrated ### Forks not yet fully integrated
- [libogc/WPAD/DevKitPro](http://wiibrew.org/wiki/Libogc) - [libogc/wiiuse](https://github.com/devkitPro/libogc/tree/master/wiiuse)
- Started before the disappearance of the original upstream - wii port created by Shagkur and contributed upstream
- Focused on Wiimote use with Wii hardware - Focused on Wiimote use with Wii hardware
- Functions renamed, copyright statements removed - code unfortunately diverged
- Additional functionality unknown? - Additional functionality unknown?
- git-svn mirror found here: <https://github.com/xloem/libogc-wiiuse> - git-svn mirror found here: <https://github.com/xloem/libogc-wiiuse>
- [fwiine](http://sourceforge.net/projects/fwiine/files/wiiuse/0.13/) - [fwiine](http://sourceforge.net/projects/fwiine/files/wiiuse/0.13/)

View File

@ -73,7 +73,7 @@
#define WIIUSE_MAJOR 0 #define WIIUSE_MAJOR 0
#define WIIUSE_MINOR 15 #define WIIUSE_MINOR 15
#define WIIUSE_MICRO 5 #define WIIUSE_MICRO 6
#define WIIUSE_VERSION_TRANSFORM(MAJ, MIN, MICRO) (MAJ * 1000000 + MIN * 1000 + MICRO) #define WIIUSE_VERSION_TRANSFORM(MAJ, MIN, MICRO) (MAJ * 1000000 + MIN * 1000 + MICRO)
#define WIIUSE_HAS_VERSION(MAJ, MIN, MICRO) \ #define WIIUSE_HAS_VERSION(MAJ, MIN, MICRO) \
@ -953,7 +953,6 @@ WIIUSE_EXPORT extern void wiiuse_set_nunchuk_orient_threshold(struct wiimote_t *
WIIUSE_EXPORT extern void wiiuse_set_nunchuk_accel_threshold(struct wiimote_t *wm, int threshold); WIIUSE_EXPORT extern void wiiuse_set_nunchuk_accel_threshold(struct wiimote_t *wm, int threshold);
/* wiiboard.c */ /* wiiboard.c */
/* this function not currently implemented... */
WIIUSE_EXPORT extern void wiiuse_set_wii_board_calib(struct wiimote_t *wm); WIIUSE_EXPORT extern void wiiuse_set_wii_board_calib(struct wiimote_t *wm);
WIIUSE_EXPORT extern void wiiuse_set_motion_plus(struct wiimote_t *wm, int status); WIIUSE_EXPORT extern void wiiuse_set_motion_plus(struct wiimote_t *wm, int status);

View File

@ -150,8 +150,10 @@ int wiiuse_wait_report(struct wiimote_t *wm, int report, byte *buffer, int buffe
if (elapsed > timeout_ms && timeout_ms > 0) if (elapsed > timeout_ms && timeout_ms > 0)
{ {
result = -1; result = -1;
WIIUSE_DEBUG("(id %i) timeout waiting for report 0x%x, aborting!", wm->unid, report);
break; break;
} }
wiiuse_millisleep(10);
} }
return result; return result;
@ -328,7 +330,7 @@ void wiiuse_handshake(struct wiimote_t *wm, byte *data, uint16_t len)
wiiuse_status(wm); wiiuse_status(wm);
rc = wiiuse_wait_report(wm, WM_RPT_CTRL_STATUS, buf, MAX_PAYLOAD, WIIUSE_READ_TIMEOUT); rc = wiiuse_wait_report(wm, WM_RPT_CTRL_STATUS, buf, MAX_PAYLOAD, WIIUSE_READ_TIMEOUT);
if (buf[3] != 0) if (rc && buf[3] != 0)
break; break;
wiiuse_millisleep(500); wiiuse_millisleep(500);

View File

@ -374,21 +374,32 @@ int wiiuse_os_read(struct wiimote_t *wm, byte *buf, int len)
{ {
int rc; int rc;
rc = read(wm->in_sock, buf, len); rc = recv(wm->in_sock, buf, len, MSG_DONTWAIT);
if (rc == -1) if (rc == -1)
{ {
/* error reading data */ switch(errno)
WIIUSE_ERROR("Receiving wiimote data (id %i).", wm->unid);
perror("Error Details");
if (errno == ENOTCONN)
{ {
case ENOTCONN:
/* this can happen if the bluetooth dongle is disconnected */ /* this can happen if the bluetooth dongle is disconnected */
WIIUSE_ERROR("Receiving wiimote data (id %i).", wm->unid);
perror("Error Details");
WIIUSE_ERROR("Bluetooth appears to be disconnected. Wiimote unid %i will be disconnected.", WIIUSE_ERROR("Bluetooth appears to be disconnected. Wiimote unid %i will be disconnected.",
wm->unid); wm->unid);
wiiuse_os_disconnect(wm); wiiuse_os_disconnect(wm);
wiiuse_disconnected(wm); wiiuse_disconnected(wm);
break;
case EAGAIN:
/* no data available yet */
break;
default:
/* error reading data */
WIIUSE_ERROR("Receiving wiimote data (id %i).", wm->unid);
perror("Error Details");
break;
} }
} else if (rc == 0) } else if (rc == 0)
{ {
@ -406,7 +417,7 @@ int wiiuse_os_read(struct wiimote_t *wm, byte *buf, int len)
{ /* hack for chatty Balance Boards that flood the logs with useless button reports */ { /* hack for chatty Balance Boards that flood the logs with useless button reports */
int i; int i;
printf("[DEBUG] (id %i) RECV: (%.2x) ", wm->unid, buf[0]); printf("[DEBUG] (id %i) RECV: (%.2x) ", wm->unid, buf[0]);
for (i = 1; i < rc; i++) for (i = 1; i < rc - 1; i++)
{ {
printf("%.2x ", buf[i]); printf("%.2x ", buf[i]);
} }
@ -427,7 +438,7 @@ int wiiuse_os_write(struct wiimote_t *wm, byte report_type, byte *buf, int len)
write_buffer[1] = report_type; write_buffer[1] = report_type;
memcpy(write_buffer + 2, buf, len); memcpy(write_buffer + 2, buf, len);
rc = write(wm->in_sock, write_buffer, len + 2); rc = send(wm->in_sock, write_buffer, len + 2, 0);
if (rc < 0) if (rc < 0)
{ {

View File

@ -161,6 +161,45 @@ void wii_board_event(struct wii_board_t *wb, byte *msg)
} }
/** /**
@todo not implemented! * @brief Calib wii board
*
* @param wm Pointer to a wiimote_t struct the calib values are used.
*/ */
void wiiuse_set_wii_board_calib(struct wiimote_t *wm) {} void wiiuse_set_wii_board_calib(struct wiimote_t *wm)
{
byte pkt[21];
uint16_t test = 1;
memset(pkt, 0, sizeof(pkt));
/*
* address in big endian first, the leading byte will
* be overwritten (only 3 bytes are sent)
*/
to_big_endian_uint32_t(pkt, WM_EXP_MEM_CALIBR + 4);
pkt[0] = 0x04; //write register
pkt[4] = 0x0f; //size of data
to_big_endian_uint16_t(&pkt[5], wm->exp.wb.ctr[0]);
to_big_endian_uint16_t(&pkt[7], wm->exp.wb.cbr[0]);
to_big_endian_uint16_t(&pkt[9], wm->exp.wb.ctl[0]);
to_big_endian_uint16_t(&pkt[11], wm->exp.wb.cbl[0]);
to_big_endian_uint16_t(&pkt[13], wm->exp.wb.ctr[1]);
to_big_endian_uint16_t(&pkt[15], wm->exp.wb.cbr[1]);
to_big_endian_uint16_t(&pkt[17], wm->exp.wb.ctl[1]);
to_big_endian_uint16_t(&pkt[19], wm->exp.wb.cbl[1]);
if (wiiuse_send(wm, WM_CMD_WRITE_DATA, pkt, sizeof(pkt)) < 0)
return;
wiiuse_millisleep(100);
to_big_endian_uint32_t(pkt, WM_EXP_MEM_CALIBR + 20);
pkt[0] = 0x04; //write register
pkt[4] = 0x08; //size of data
to_big_endian_uint16_t(&pkt[5], wm->exp.wb.ctr[2]);
to_big_endian_uint16_t(&pkt[7], wm->exp.wb.cbr[2]);
to_big_endian_uint16_t(&pkt[9], wm->exp.wb.ctl[2]);
to_big_endian_uint16_t(&pkt[11], wm->exp.wb.cbl[2]);
wiiuse_send(wm, WM_CMD_WRITE_DATA, pkt, sizeof(pkt));
wiiuse_millisleep(100);
}