stop wiiuseexample when all wiimotes are disconnected
This commit is contained in:
@@ -294,6 +294,16 @@ void test(struct wiimote_t* wm, byte* data, unsigned short len) {
|
|||||||
printf("test: %i [%x %x %x %x]\n", len, data[0], data[1], data[2], data[3]);
|
printf("test: %i [%x %x %x %x]\n", len, data[0], data[1], data[2], data[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
short any_wiimote_connected(wiimote** wm, int wiimotes) {
|
||||||
|
if(!wm) return 0;
|
||||||
|
|
||||||
|
for(int i = 0; i < wiimotes; i++) {
|
||||||
|
if(wm[i] && WIIMOTE_IS_CONNECTED(wm[i]))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -390,7 +400,7 @@ int main(int argc, char** argv) {
|
|||||||
* This function will set the event flag for each wiimote
|
* This function will set the event flag for each wiimote
|
||||||
* when the wiimote has things to report.
|
* when the wiimote has things to report.
|
||||||
*/
|
*/
|
||||||
while (1) {
|
while (any_wiimote_connected(wiimotes, MAX_WIIMOTES)) {
|
||||||
if (wiiuse_poll(wiimotes, MAX_WIIMOTES)) {
|
if (wiiuse_poll(wiimotes, MAX_WIIMOTES)) {
|
||||||
/*
|
/*
|
||||||
* This happens if something happened on any wiimote.
|
* This happens if something happened on any wiimote.
|
||||||
|
|||||||
26
src/wiiuse.h
26
src/wiiuse.h
@@ -123,6 +123,32 @@
|
|||||||
/** @defgroup publicapi External API */
|
/** @defgroup publicapi External API */
|
||||||
/** @{ */
|
/** @{ */
|
||||||
|
|
||||||
|
/** @name Wiimote state flags and macros */
|
||||||
|
/** @{ */
|
||||||
|
#define WIIMOTE_STATE_DEV_FOUND 0x0001
|
||||||
|
#define WIIMOTE_STATE_HANDSHAKE 0x0002 /* actual connection exists but no handshake yet */
|
||||||
|
#define WIIMOTE_STATE_HANDSHAKE_COMPLETE 0x0004 /* actual connection exists but no handshake yet */
|
||||||
|
#define WIIMOTE_STATE_CONNECTED 0x0008
|
||||||
|
#define WIIMOTE_STATE_RUMBLE 0x0010
|
||||||
|
#define WIIMOTE_STATE_ACC 0x0020
|
||||||
|
#define WIIMOTE_STATE_EXP 0x0040
|
||||||
|
#define WIIMOTE_STATE_IR 0x0080
|
||||||
|
#define WIIMOTE_STATE_SPEAKER 0x0100
|
||||||
|
#define WIIMOTE_STATE_IR_SENS_LVL1 0x0200
|
||||||
|
#define WIIMOTE_STATE_IR_SENS_LVL2 0x0400
|
||||||
|
#define WIIMOTE_STATE_IR_SENS_LVL3 0x0800
|
||||||
|
#define WIIMOTE_STATE_IR_SENS_LVL4 0x1000
|
||||||
|
#define WIIMOTE_STATE_IR_SENS_LVL5 0x2000
|
||||||
|
#define WIIMOTE_STATE_EXP_HANDSHAKE 0x10000 /* actual M+ connection exists but no handshake yet */
|
||||||
|
#define WIIMOTE_STATE_EXP_EXTERN 0x20000 /* actual M+ connection exists but handshake failed */
|
||||||
|
#define WIIMOTE_STATE_EXP_FAILED 0x40000 /* actual M+ connection exists but handshake failed */
|
||||||
|
|
||||||
|
#define WIIMOTE_ID(wm) (wm->unid)
|
||||||
|
|
||||||
|
#define WIIMOTE_IS_SET(wm, s) ((wm->state & (s)) == (s))
|
||||||
|
#define WIIMOTE_IS_CONNECTED(wm) (WIIMOTE_IS_SET(wm, WIIMOTE_STATE_CONNECTED))
|
||||||
|
/** @} */
|
||||||
|
|
||||||
/** @name LED bit masks */
|
/** @name LED bit masks */
|
||||||
/** @{ */
|
/** @{ */
|
||||||
#define WIIMOTE_LED_NONE 0x00
|
#define WIIMOTE_LED_NONE 0x00
|
||||||
|
|||||||
@@ -221,31 +221,9 @@
|
|||||||
*
|
*
|
||||||
********************/
|
********************/
|
||||||
|
|
||||||
/* wiimote state flags - (some duplicated in wiiuse.h)*/
|
|
||||||
#define WIIMOTE_STATE_DEV_FOUND 0x0001
|
|
||||||
#define WIIMOTE_STATE_HANDSHAKE 0x0002 /* actual connection exists but no handshake yet */
|
|
||||||
#define WIIMOTE_STATE_HANDSHAKE_COMPLETE 0x0004 /* actual connection exists but no handshake yet */
|
|
||||||
#define WIIMOTE_STATE_CONNECTED 0x0008
|
|
||||||
#define WIIMOTE_STATE_RUMBLE 0x0010
|
|
||||||
#define WIIMOTE_STATE_ACC 0x0020
|
|
||||||
#define WIIMOTE_STATE_EXP 0x0040
|
|
||||||
#define WIIMOTE_STATE_IR 0x0080
|
|
||||||
#define WIIMOTE_STATE_SPEAKER 0x0100
|
|
||||||
#define WIIMOTE_STATE_IR_SENS_LVL1 0x0200
|
|
||||||
#define WIIMOTE_STATE_IR_SENS_LVL2 0x0400
|
|
||||||
#define WIIMOTE_STATE_IR_SENS_LVL3 0x0800
|
|
||||||
#define WIIMOTE_STATE_IR_SENS_LVL4 0x1000
|
|
||||||
#define WIIMOTE_STATE_IR_SENS_LVL5 0x2000
|
|
||||||
#define WIIMOTE_STATE_EXP_HANDSHAKE 0x10000 /* actual M+ connection exists but no handshake yet */
|
|
||||||
#define WIIMOTE_STATE_EXP_EXTERN 0x20000 /* actual M+ connection exists but handshake failed */
|
|
||||||
#define WIIMOTE_STATE_EXP_FAILED 0x40000 /* actual M+ connection exists but handshake failed */
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define WIIMOTE_INIT_STATES (WIIMOTE_STATE_IR_SENS_LVL3)
|
#define WIIMOTE_INIT_STATES (WIIMOTE_STATE_IR_SENS_LVL3)
|
||||||
|
|
||||||
/* macro to manage states */
|
/* macro to manage states */
|
||||||
#define WIIMOTE_IS_SET(wm, s) ((wm->state & (s)) == (s))
|
|
||||||
#define WIIMOTE_ENABLE_STATE(wm, s) (wm->state |= (s))
|
#define WIIMOTE_ENABLE_STATE(wm, s) (wm->state |= (s))
|
||||||
#define WIIMOTE_DISABLE_STATE(wm, s) (wm->state &= ~(s))
|
#define WIIMOTE_DISABLE_STATE(wm, s) (wm->state &= ~(s))
|
||||||
#define WIIMOTE_TOGGLE_STATE(wm, s) ((wm->state & (s)) ? WIIMOTE_DISABLE_STATE(wm, s) : WIIMOTE_ENABLE_STATE(wm, s))
|
#define WIIMOTE_TOGGLE_STATE(wm, s) ((wm->state & (s)) ? WIIMOTE_DISABLE_STATE(wm, s) : WIIMOTE_ENABLE_STATE(wm, s))
|
||||||
@@ -257,10 +235,6 @@
|
|||||||
|
|
||||||
#define NUNCHUK_IS_FLAG_SET(wm, s) ((*(wm->flags) & (s)) == (s))
|
#define NUNCHUK_IS_FLAG_SET(wm, s) ((*(wm->flags) & (s)) == (s))
|
||||||
|
|
||||||
/* misc macros */
|
|
||||||
#define WIIMOTE_ID(wm) (wm->unid)
|
|
||||||
#define WIIMOTE_IS_CONNECTED(wm) (WIIMOTE_IS_SET(wm, WIIMOTE_STATE_CONNECTED))
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Smooth tilt calculations are computed with the
|
* Smooth tilt calculations are computed with the
|
||||||
* exponential moving average formula:
|
* exponential moving average formula:
|
||||||
|
|||||||
Reference in New Issue
Block a user