|
|
| Line 7: |
Line 7: |
| [[Riisk]]: A version of the board game Risk for the Wii. Just started on 01/29/09, but should have a beta out soon. | | [[Riisk]]: A version of the board game Risk for the Wii. Just started on 01/29/09, but should have a beta out soon. |
|
| |
|
| ==Wiimote data code==
| | i am a complete dick wich cant afford a wii |
| | |
| <pre>#include <stdio.h>
| |
| #include <stdlib.h>
| |
| #include <gccore.h>
| |
| #include <wiiuse/wpad.h>
| |
| | |
| #define VERSION "INFO"
| |
| #define RELEASE_DATE "27-01-2009"
| |
| | |
| int numberOfAttachedControllers();
| |
| | |
| static u32 *xfb;
| |
| static GXRModeObj *rmode;
| |
| | |
| int totalWiiMotes;
| |
| int rumbleOn = 0;
| |
| | |
| // Wiimote IR
| |
| ir_t ir;
| |
| | |
| // Orientation vars
| |
| orient_t orient;
| |
| int xRotation;
| |
| int yRotation;
| |
| int zRotation;
| |
| | |
| //Gforce vars
| |
| gforce_t gforce;
| |
| | |
| //---------------------------------------------------------------------------------------------------
| |
| //Initialize the video and wii remotes
| |
| //---------------------------------------------------------------------------------------------------
| |
| void Initialize() {
| |
|
| |
| //initialize video
| |
| VIDEO_Init();
| |
| //initialize wii remotes
| |
| WPAD_Init();
| |
| //set IR resolution to 640 width and 480 height
| |
| WPAD_SetVRes(0, 640, 480);
| |
| //return data for wii remotes should contain Button Data, Accelerometer, and IR
| |
| WPAD_SetDataFormat(WPAD_CHAN_0, WPAD_FMT_BTNS_ACC_IR);
| |
|
| |
| //find the video mode of the wii
| |
| rmode = VIDEO_GetPreferredMode(NULL);
| |
|
| |
| //create buffer for console terminal output
| |
| xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));
| |
| //initialize the console
| |
| console_init(xfb,20,20,rmode->fbWidth,rmode->xfbHeight,rmode->fbWidth*VI_DISPLAY_PIX_SZ);
| |
|
| |
| //set video to wii's video mode
| |
| VIDEO_Configure(rmode);
| |
| //set buffer to write to
| |
| VIDEO_SetNextFramebuffer(xfb);
| |
| //whether to set background black, I have chosen no
| |
| VIDEO_SetBlack(FALSE);
| |
| //send VIDEO_ commands for setup
| |
| VIDEO_Flush();
| |
| //wait for vertical sync to ensure it's at the bottom
| |
| VIDEO_WaitVSync();
| |
| //if video is progressive then wait for another vertical sync
| |
| if(rmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync();
| |
| | |
| //find out how many wii remotes are attached at the start
| |
| totalWiiMotes = numberOfAttachedControllers();
| |
| }
| |
| | |
| //---------------------------------------------------------------------------------------------------
| |
| //Exit back to the HBC - can be used for cleanup or other non-sense
| |
| //---------------------------------------------------------------------------------------------------
| |
| void exitToHomebrewChannel(void) {
| |
| exit(0);
| |
| }
| |
| | |
| //---------------------------------------------------------------------------------------------------
| |
| //Test for values of wii remote accelerometer and IR
| |
| //---------------------------------------------------------------------------------------------------
| |
| void showWiiMoteAccelerometer(void) {
| |
|
| |
| while(1) {
| |
| | |
| u32 ext;//Extension type
| |
| u32 ret=0;//remote probe return
| |
| ret=WPAD_Probe(WPAD_CHAN_0,&ext);//probe remote 1 with extension
| |
| | |
| WPADData *Data = WPAD_Data(WPAD_CHAN_0);//store data from remote 1
| |
| WPADData data = *Data;
| |
|
| |
| WPAD_IR(WPAD_CHAN_0, &data.ir);//get IR data
| |
| WPAD_Orientation(WPAD_CHAN_0, &data.orient);//get rotation data
| |
| WPAD_GForce(WPAD_CHAN_0, &data.gforce);//get "speed" data
| |
| WPAD_Accel(WPAD_CHAN_0, &data.accel);//get accelerometer data
| |
| WPAD_Expansion(WPAD_CHAN_0, &data.exp);//get expansion data
| |
| | |
| printf("\x1b[1;0HWii Remote Info \n");
| |
|
| |
| //print gforce data for x, y, and z
| |
| printf("\x1b[2;0HGForce x: %1.3f \n", data.gforce.x);
| |
| printf("\x1b[3;0HGForce y: %1.3f \n", data.gforce.y);
| |
| printf("\x1b[4;0HGForce z: %1.3f \n", data.gforce.z);
| |
| | |
|
| |
| //get and print the rotation orientation
| |
| xRotation = (int)data.orient.roll;
| |
| yRotation = (int)data.orient.pitch;
| |
| zRotation = (int)data.orient.yaw;
| |
| | |
| if(xRotation<0){
| |
| xRotation=360+xRotation;
| |
| }
| |
| if(yRotation<0){
| |
| yRotation=360+yRotation;
| |
| }
| |
| if(zRotation<0){
| |
| zRotation=360+zRotation;
| |
| }
| |
| | |
| printf("\x1b[5;0HxRotation: %d \n", xRotation);
| |
| printf("\x1b[6;0HyRotation: %d \n", yRotation);
| |
| printf("\x1b[7;0HzRotation: %d \n", zRotation);
| |
| | |
| //print different IR data
| |
| printf("\x1b[9;0HIR x: %1.3f \n", data.ir.x);
| |
| printf("\x1b[10;0HIR y: %1.3f \n", data.ir.y);
| |
| | |
| printf("\x1b[11;0HIR RAW X %1.3f", data.ir.ax);
| |
| printf("\x1b[12;0HIR RAW Y %1.3f", data.ir.ay);
| |
|
| |
| printf("\x1b[13;0HIR SMOOTH X %1.3f", data.ir.sx);
| |
| printf("\x1b[14;0HIR SMOOTH Y %1.3f", data.ir.sy);
| |
|
| |
| printf("\x1b[15;0HIR ANGLE %1.3f", data.ir.angle);
| |
| | |
| //print accelerometer data
| |
| printf("\x1b[1;25HACCEL X %d\n", (int)data.accel.x);
| |
| printf("\x1b[2;25HACCEL Y %d\n", (int)data.accel.y);
| |
| printf("\x1b[3;25HACCEL Z %d\n", (int)data.accel.z);
| |
| | |
| | |
| if(ret==WPAD_ERR_NONE && ext==WPAD_EXP_NUNCHUK)
| |
| {
| |
| printf("\x1b[4;25HNCUHCK MIN X %d Y %d", (int)data.exp.nunchuk.js.min.x, (int)data.exp.nunchuk.js.min.y);
| |
| printf("\x1b[5;25HNCUHCK MAX X %d Y %d", (int)data.exp.nunchuk.js.max.x, (int)data.exp.nunchuk.js.max.y);
| |
| printf("\x1b[6;25HNCUHCK CENTER X %d Y %d", (int)data.exp.nunchuk.js.center.x, (int)data.exp.nunchuk.js.center.y);
| |
| printf("\x1b[7;25HNCUHCK POS X %d Y %d", (int)data.exp.nunchuk.js.pos.x, (int)data.exp.nunchuk.js.pos.y);
| |
| printf("\x1b[8;25HNCUHCK ANG %1.3f MAG %1.3f", (float)data.exp.nunchuk.js.ang, (float)data.exp.nunchuk.js.mag);
| |
|
| |
| | |
| printf("\x1b[9;25HGFORCE X %1.3f\n", (float)data.exp.nunchuk.gforce.x);
| |
| printf("\x1b[10;25HGFORCE Y %1.3f\n", (float)data.exp.nunchuk.gforce.y);
| |
| printf("\x1b[11;25HGFORCE Z %1.3\n", (float)data.exp.nunchuk.gforce.z);
| |
|
| |
| printf("\x1b[11;25HROTATE X %1.3f\n", (float)data.exp.nunchuk.orient.roll);
| |
| printf("\x1b[11;25HROTATE Y %1.3f\n", (float)data.exp.nunchuk.orient.pitch);
| |
| printf("\x1b[11;25HROTATE Z %1.3f\n", (float)data.exp.nunchuk.orient.yaw);
| |
| | |
| printf("\x1b[11;25HACCEL X %1.3f\n", (float)data.exp.nunchuk.accel.x);
| |
| printf("\x1b[11;25HACCEL Y %1.3f\n", (float)data.exp.nunchuk.accel.y);
| |
| printf("\x1b[11;25HACCEL Z %1.3f\n", (float)data.exp.nunchuk.accel.z);
| |
| }
| |
|
| |
| u32 pressed = WPAD_ButtonsHeld(WPAD_CHAN_0);
| |
| u32 buttonDown = WPAD_ButtonsDown(WPAD_CHAN_0);
| |
| | |
| | |
| if (pressed & WPAD_NUNCHUK_BUTTON_Z) printf("\x1b[18;0HButton Z pressed on Nunchuk");
| |
| if (pressed & WPAD_NUNCHUK_BUTTON_C) printf("\x1b[19;0HButton C pressed on Nunchuk");
| |
| if (pressed & WPAD_BUTTON_A) printf("\x1b[20;0HButton A pressed");
| |
| if (pressed & WPAD_BUTTON_B) printf("\x1b[21;0HButton B pressed");
| |
| if (pressed & WPAD_BUTTON_1) printf("\x1b[22;0HButton 1 pressed");
| |
| if (pressed & WPAD_BUTTON_2) printf("\x1b[23;0HButton 2 pressed");
| |
| if (pressed & WPAD_BUTTON_PLUS) printf("\x1b[18;25HButton PLUS pressed");
| |
| if (pressed & WPAD_BUTTON_MINUS) printf("\x1b[19;25HButton MINUS pressed");
| |
| if (pressed & WPAD_BUTTON_UP) printf("\x1b[20;25HButton UP pressed);
| |
| if (pressed & WPAD_BUTTON_DOWN) printf("\x1b[21;25HButton DOWN pressed");
| |
| if (pressed & WPAD_BUTTON_LEFT) printf("\x1b[22;25HButton LEFT pressed");
| |
| if (pressed & WPAD_BUTTON_RIGHT) printf("\x1b[23;25HButton RIGHT pressed");
| |
| if (buttonDown & (WPAD_BUTTON_1 | WPAD_BUTTON_2)) {
| |
| if ( rumbleOn == 0 ) {
| |
| rumbleOn = 1;
| |
| WPAD_Rumble(WPAD_CHAN_0, 1);
| |
| }
| |
| else {
| |
| rumbleOn = 0;
| |
| WPAD_Rumble(WPAD_CHAN_0, 0);
| |
| }
| |
| }
| |
| if (buttonDown & (WPAD_BUTTON_A | WPAD_BUTTON_B)) {
| |
| WPAD_Rumble(WPAD_CHAN_0, 0);
| |
| break;
| |
| }
| |
| if (pressed & WPAD_BUTTON_HOME) {
| |
| WPAD_Rumble(WPAD_CHAN_0, 0);
| |
| exitToHomebrewChannel();
| |
| }
| |
| | |
| | |
| }
| |
| }
| |
| | |
| //---------------------------------------------------------------------------------------------------
| |
| //Find out how many controllers are attached
| |
| //---------------------------------------------------------------------------------------------------
| |
| int numberOfAttachedControllers() {
| |
| // used to check how many controllers are attached
| |
| int i, numAttached = 0;
| |
| u32 type; //find the type of the expansion
| |
| | |
| for(i=0; i<WPAD_MAX_WIIMOTES; i++) {
| |
| if (WPAD_Probe(i, &type) == WPAD_ERR_NONE) {
| |
| numAttached++;
| |
| }
| |
| }
| |
| return numAttached;
| |
| }
| |
| | |
| void waitForWiimote()
| |
| {
| |
| while(1)
| |
| {
| |
| totalWiiMotes = numberOfAttachedControllers();
| |
| if (totalWiiMotes > 0) break;
| |
| }
| |
| }
| |
| | |
| | |
| //---------------------------------------------------------------------------------------------------
| |
| //Main function
| |
| //---------------------------------------------------------------------------------------------------
| |
| int main() {
| |
|
| |
| Initialize();
| |
| | |
| waitForWiimote();
| |
| | |
| showWiiMoteAccelerometer();
| |
|
| |
| exitToHomebrewChannel();
| |
|
| |
| return 0;
| |
| }
| |
| </pre>
| |