|
@@ -57,7 +57,9 @@ struct wiimote_data {
|
|
#define WIIPROTO_FLAG_LED(num) (WIIPROTO_FLAG_LED1 << (num - 1))
|
|
#define WIIPROTO_FLAG_LED(num) (WIIPROTO_FLAG_LED1 << (num - 1))
|
|
|
|
|
|
enum wiiproto_reqs {
|
|
enum wiiproto_reqs {
|
|
|
|
+ WIIPROTO_REQ_NULL = 0x0,
|
|
WIIPROTO_REQ_LED = 0x11,
|
|
WIIPROTO_REQ_LED = 0x11,
|
|
|
|
+ WIIPROTO_REQ_DRM = 0x12,
|
|
WIIPROTO_REQ_DRM_K = 0x30,
|
|
WIIPROTO_REQ_DRM_K = 0x30,
|
|
};
|
|
};
|
|
|
|
|
|
@@ -192,6 +194,30 @@ static void wiiproto_req_leds(struct wiimote_data *wdata, int leds)
|
|
wiimote_queue(wdata, cmd, sizeof(cmd));
|
|
wiimote_queue(wdata, cmd, sizeof(cmd));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * Check what peripherals of the wiimote are currently
|
|
|
|
+ * active and select a proper DRM that supports all of
|
|
|
|
+ * the requested data inputs.
|
|
|
|
+ */
|
|
|
|
+static __u8 select_drm(struct wiimote_data *wdata)
|
|
|
|
+{
|
|
|
|
+ return WIIPROTO_REQ_DRM_K;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void wiiproto_req_drm(struct wiimote_data *wdata, __u8 drm)
|
|
|
|
+{
|
|
|
|
+ __u8 cmd[3];
|
|
|
|
+
|
|
|
|
+ if (drm == WIIPROTO_REQ_NULL)
|
|
|
|
+ drm = select_drm(wdata);
|
|
|
|
+
|
|
|
|
+ cmd[0] = WIIPROTO_REQ_DRM;
|
|
|
|
+ cmd[1] = 0;
|
|
|
|
+ cmd[2] = drm;
|
|
|
|
+
|
|
|
|
+ wiimote_queue(wdata, cmd, sizeof(cmd));
|
|
|
|
+}
|
|
|
|
+
|
|
static enum led_brightness wiimote_leds_get(struct led_classdev *led_dev)
|
|
static enum led_brightness wiimote_leds_get(struct led_classdev *led_dev)
|
|
{
|
|
{
|
|
struct wiimote_data *wdata;
|
|
struct wiimote_data *wdata;
|