Project settings gecorrigeerd en basis voor wiimote speaker functionaliteit toegevoegd.
This commit is contained in:
@@ -39,8 +39,6 @@
|
||||
|
||||
#define WIIMOTE_PI 3.14159265f
|
||||
|
||||
//#define WITH_WIIUSE_DEBUG
|
||||
|
||||
/* Error output macros */
|
||||
#define WIIUSE_ERROR(fmt, ...) //fprintf(stderr, "[ERROR] " fmt "\n", ##__VA_ARGS__)
|
||||
|
||||
@@ -57,6 +55,7 @@
|
||||
int i = strlen(file) - 1; \
|
||||
for (; i && (file[i] != '\\'); --i); \
|
||||
fprintf(stderr, "[DEBUG] %s:%i: " fmt "\n", file+i+1, __LINE__, ##__VA_ARGS__); \
|
||||
fflush(stderr); \
|
||||
} while (0)
|
||||
#else
|
||||
#define WIIUSE_DEBUG(fmt, ...) fprintf(stderr, "[DEBUG] " __FILE__ ":%i: " fmt "\n", __LINE__, ##__VA_ARGS__)
|
||||
|
||||
@@ -480,10 +480,11 @@ static void event_data_read(struct wiimote_t* wm, byte* msg) {
|
||||
#ifdef WITH_WIIUSE_DEBUG
|
||||
{
|
||||
int i = 0;
|
||||
printf("Read: ");
|
||||
fprintf(stderr, "[DEBUG] Read: ");
|
||||
for (; i < req->size - req->wait; ++i)
|
||||
printf("%x ", req->buf[i]);
|
||||
printf("\n");
|
||||
fprintf(stderr, "%x ", req->buf[i]);
|
||||
fprintf(stderr, "\n");
|
||||
fflush(stderr);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -24,30 +24,17 @@ void wiiuse_speaker_unmute(struct wiimote_t* wm) {
|
||||
wiiuse_send(wm, WM_CMD_SPEAKER_MUTE, &buf, 1);
|
||||
}
|
||||
|
||||
void wiiuse_speaker_config(struct wiimote_t* wm, unsigned short freq, byte vol) {
|
||||
if (freq > 0x0000) {
|
||||
cfg[2] = freq & 0x00ff;
|
||||
cfg[3] = (freq & 0xff00) >> 8;
|
||||
}
|
||||
printf("speaker 0x%02x%02x\n", cfg[2], cfg[3]);
|
||||
fflush(stdout);
|
||||
if (vol > 0x00) {
|
||||
cfg[4] = vol;
|
||||
}
|
||||
wiiuse_write_data(wm, WM_REG_SPEAKER, cfg, 9);
|
||||
}
|
||||
|
||||
void wiiuse_speaker_data(struct wiimote_t* wm, byte* data) {
|
||||
byte buf[21];
|
||||
buf[0] = sizeof(data) << 3;
|
||||
memcpy(buf + 1, data, 20);
|
||||
wiiuse_send(wm, WM_CMD_STREAM_DATA, buf, 21);
|
||||
}
|
||||
|
||||
void wiiuse_speaker_activate(struct wiimote_t* wm) {
|
||||
wiiuse_speaker_enable(wm);
|
||||
wiiuse_speaker_mute(wm);
|
||||
byte buf = 0x01;
|
||||
wiiuse_write_data(wm, WM_REG_SPEAKER + 8, &buf, 1);
|
||||
buf = 0x08;
|
||||
wiiuse_write_data(wm, WM_REG_SPEAKER, &buf, 1);
|
||||
wiiuse_speaker_config(wm);
|
||||
buf = 0x01;
|
||||
wiiuse_write_data(wm, WM_REG_SPEAKER + 7, &buf, 1);
|
||||
wiiuse_speaker_unmute(wm);
|
||||
wiiuse_speaker_config(wm, 0x00, 0x00);
|
||||
}
|
||||
|
||||
void wiiuse_speaker_deactivate(struct wiimote_t* wm) {
|
||||
@@ -55,10 +42,28 @@ void wiiuse_speaker_deactivate(struct wiimote_t* wm) {
|
||||
wiiuse_speaker_disable(wm);
|
||||
}
|
||||
|
||||
void wiiuse_speaker_frequency(struct wiimote_t* wm, unsigned short freq) {
|
||||
wiiuse_speaker_config(wm, freq, 0x00);
|
||||
void wiiuse_speaker_format(struct wiimote_t* wm, byte format) {
|
||||
wm->speaker.format = format;
|
||||
}
|
||||
|
||||
void wiiuse_speaker_volume(struct wiimote_t* wm, byte vol) {
|
||||
wiiuse_speaker_config(wm, 0x0000, vol);
|
||||
void wiiuse_speaker_rate(struct wiimote_t* wm, double rate) {
|
||||
// Check: pcm_sample_rate = 12000000 / rate_value adpcm_sample_rate = 6000000 / rate_value
|
||||
wm->speaker.rate = 48000 / rate;
|
||||
}
|
||||
|
||||
void wiiuse_speaker_volume(struct wiimote_t* wm, double vol) {
|
||||
wm->speaker.vol = vol * WIIMOTE_GET_SPEAKER_MAX_VOLUME(wm);
|
||||
}
|
||||
|
||||
void wiiuse_speaker_config(struct wiimote_t* wm) {
|
||||
byte cfg[7] = {wm->speaker.format, 0x00, 0x00, wm->speaker.rate, wm->speaker.vol, 0x00, 0x00};
|
||||
wiiuse_write_data(wm, WM_REG_SPEAKER, cfg, 7);
|
||||
}
|
||||
|
||||
void wiiuse_speaker_data(struct wiimote_t* wm, byte* data) {
|
||||
/* Todo: add data length dynamically */
|
||||
//byte buf[21];
|
||||
//WIIUSE_DEBUG("data length %d", sizeof(buf) / sizeof(byte));
|
||||
//memcpy(buf, data, 21);
|
||||
wiiuse_send(wm, WM_CMD_STREAM_DATA, data, 21);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "wiiuse.h"
|
||||
|
||||
#define WIIMOTE_GET_RUMBLE(wm) (WIIMOTE_IS_SET(wm, WIIMOTE_STATE_RUMBLE) ? 0x01 : 0x00)
|
||||
#define WIIMOTE_GET_RUMBLE(wm) (WIIMOTE_IS_SET(wm, WIIMOTE_STATE_RUMBLE) ? 0x01 : 0x00)
|
||||
#define WIIMOTE_GET_SPEAKER_MAX_VOLUME(wm) (wm->speaker.format == 0x00 ? 0x40 : 0xff)
|
||||
|
||||
#define WM_CMD_SPEAKER_ENABLE 0x14
|
||||
#define WM_CMD_STREAM_DATA 0x18
|
||||
@@ -8,16 +9,4 @@
|
||||
|
||||
#define WM_CTRL_STATUS_BYTE1_SPEAKER_MUTE 0x04
|
||||
|
||||
#define WM_REG_SPEAKER 0x04a20001
|
||||
|
||||
static byte cfg[9] = {0x00, 0x00, 0x00, 0xdd, 0x40, 0x00, 0x00, 0x01, 0x01};
|
||||
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_enable(struct wiimote_t* wm);
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_disable(struct wiimote_t* wm);
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_mute(struct wiimote_t* wm);
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_unmute(struct wiimote_t* wm);
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_activate(struct wiimote_t* wm);
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_deactivate(struct wiimote_t* wm);
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_volume(struct wiimote_t* wm, byte vol);
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_frequency(struct wiimote_t* wm, unsigned short freq);
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_data(struct wiimote_t* wm, byte* data);
|
||||
#define WM_REG_SPEAKER 0x04a20001
|
||||
|
||||
@@ -538,10 +538,11 @@ int wiiuse_write_data(struct wiimote_t* wm, unsigned int addr, byte* data, byte
|
||||
#ifdef WITH_WIIUSE_DEBUG
|
||||
{
|
||||
int i = 0;
|
||||
printf("Write data is: ");
|
||||
fprintf(stderr, "[DEBUG} Write data is: ");
|
||||
for (; i < len; ++i)
|
||||
printf("%x ", data[i]);
|
||||
printf("\n");
|
||||
fprintf(stderr, "%x ", data[i]);
|
||||
fprintf(stderr, "\n");
|
||||
fflush(stderr);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -607,14 +608,15 @@ int wiiuse_send(struct wiimote_t* wm, byte report_type, byte* msg, int len) {
|
||||
#ifdef WITH_WIIUSE_DEBUG
|
||||
{
|
||||
int x = 2;
|
||||
printf("[DEBUG] (id %i) SEND: (%x) %.2x ", wm->unid, buf[0], buf[1]);
|
||||
fprintf(stderr, "[DEBUG] (id %i) SEND: (%x) %.2x ", wm->unid, buf[0], buf[1]);
|
||||
#ifndef WIN32
|
||||
for (; x < len+2; ++x)
|
||||
#else
|
||||
for (; x < len+1; ++x)
|
||||
#endif
|
||||
printf("%.2x ", buf[x]);
|
||||
printf("\n");
|
||||
fprintf(stderr, "%.2x ", buf[x]);
|
||||
fprintf(stderr, "\n");
|
||||
fflush(stderr);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -371,6 +371,16 @@ typedef struct ir_t {
|
||||
} ir_t;
|
||||
|
||||
|
||||
/**
|
||||
* @struct speaker_t
|
||||
*/
|
||||
typedef struct speaker_t {
|
||||
byte format;
|
||||
byte vol;
|
||||
byte rate;
|
||||
} speaker_t;
|
||||
|
||||
|
||||
/**
|
||||
* @struct joystick_t
|
||||
* @brief Joystick calibration structure.
|
||||
@@ -563,6 +573,7 @@ typedef struct wiimote_t {
|
||||
WCONST struct gforce_t gforce; /**< current gravity forces on each axis */
|
||||
|
||||
WCONST struct ir_t ir; /**< IR data */
|
||||
WCONST struct speaker_t speaker; /**< speaker */
|
||||
|
||||
WCONST unsigned short btns; /**< what buttons have just been pressed */
|
||||
WCONST unsigned short btns_held; /**< what buttons are being held down */
|
||||
@@ -643,6 +654,18 @@ WIIUSE_EXPORT extern void wiiuse_set_ir_sensitivity(struct wiimote_t* wm, int le
|
||||
WIIUSE_EXPORT extern void wiiuse_set_nunchuk_orient_threshold(struct wiimote_t* wm, float threshold);
|
||||
WIIUSE_EXPORT extern void wiiuse_set_nunchuk_accel_threshold(struct wiimote_t* wm, int threshold);
|
||||
|
||||
/* speaker.c */
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_enable(struct wiimote_t* wm);
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_disable(struct wiimote_t* wm);
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_mute(struct wiimote_t* wm);
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_unmute(struct wiimote_t* wm);
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_activate(struct wiimote_t* wm);
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_deactivate(struct wiimote_t* wm);
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_format(struct wiimote_t* wm, byte format);
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_volume(struct wiimote_t* wm, double vol);
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_rate(struct wiimote_t* wm, double freq);
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_config(struct wiimote_t* wm);
|
||||
WIIUSE_EXPORT extern void wiiuse_speaker_data(struct wiimote_t* wm, byte* data);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user