Difference between revisions of "User:Cboomf"
Line 33: | Line 33: | ||
#include <ogc/es.h> | #include <ogc/es.h> | ||
#include <ogc/gu.h> | #include <ogc/gu.h> | ||
+ | #include <ogc/usb.h> | ||
+ | #include <bte/bte.h> | ||
static void *xfb = NULL; | static void *xfb = NULL; | ||
Line 51: | Line 53: | ||
typedef void (*Loader_Entry)(void); | typedef void (*Loader_Entry)(void); | ||
static u32 *xjb; | static u32 *xjb; | ||
+ | |||
+ | wiimote** wiimotes; | ||
Loader_Entry loader = (Loader_Entry)0x80001800; | Loader_Entry loader = (Loader_Entry)0x80001800; | ||
extern u16 *GRRLIB_buffer; | extern u16 *GRRLIB_buffer; | ||
+ | unsigned int buttonA=0; | ||
+ | unsigned int buttonB=0; | ||
+ | unsigned int buttonUp=0; | ||
+ | unsigned int buttonDown=0; | ||
+ | unsigned int buttonLeft=0; | ||
+ | unsigned int buttonRight=0; | ||
+ | unsigned int buttonPlus=0; | ||
+ | unsigned int buttonMinus=0; | ||
+ | unsigned int buttonHome=0; | ||
+ | unsigned int buttonOne=0; | ||
+ | unsigned int buttonTwo=0; | ||
+ | unsigned int rumble=0; | ||
+ | unsigned int irx=0,iry=0; | ||
void wiimote_event(struct wiimote_t* wm, int event) | void wiimote_event(struct wiimote_t* wm, int event) | ||
{ | { | ||
+ | wiiuse_rumble(wiimotes[0], rumble); | ||
+ | switch (event) { | ||
+ | case WIIUSE_EVENT: | ||
+ | |||
+ | buttonB=0; | ||
+ | buttonA=0; | ||
+ | buttonUp=0; | ||
+ | buttonDown=0; | ||
+ | buttonLeft=0; | ||
+ | buttonRight=0; | ||
+ | buttonPlus=0; | ||
+ | buttonMinus=0; | ||
+ | buttonHome=0; | ||
+ | buttonOne=0; | ||
+ | buttonTwo=0; | ||
+ | |||
+ | if (IS_PRESSED(wm, WIIMOTE_BUTTON_B)) | ||
+ | buttonB=1; | ||
+ | |||
+ | if (IS_PRESSED(wm, WIIMOTE_BUTTON_A)) | ||
+ | buttonA=1; | ||
+ | |||
+ | if (IS_PRESSED(wm, WIIMOTE_BUTTON_UP)) | ||
+ | buttonUp=1; | ||
+ | |||
+ | if (IS_PRESSED(wm, WIIMOTE_BUTTON_DOWN)) | ||
+ | buttonDown=1; | ||
+ | |||
+ | if (IS_PRESSED(wm, WIIMOTE_BUTTON_LEFT)) | ||
+ | buttonLeft=1; | ||
+ | |||
+ | if (IS_PRESSED(wm, WIIMOTE_BUTTON_RIGHT)) | ||
+ | buttonRight=1; | ||
+ | |||
+ | if (IS_PRESSED(wm, WIIMOTE_BUTTON_HOME)) | ||
+ | buttonHome=1; | ||
+ | |||
+ | if (IS_PRESSED(wm, WIIMOTE_BUTTON_ONE)) | ||
+ | buttonOne=1; | ||
+ | |||
+ | if (IS_PRESSED(wm, WIIMOTE_BUTTON_TWO)) | ||
+ | buttonTwo=1; | ||
+ | |||
+ | if (IS_PRESSED(wm, WIIMOTE_BUTTON_PLUS)) | ||
+ | buttonPlus=1; | ||
+ | |||
+ | if ( IS_PRESSED(wm, WIIMOTE_BUTTON_MINUS)) | ||
+ | buttonMinus=1; | ||
+ | |||
+ | break; | ||
+ | |||
+ | default: | ||
+ | break; | ||
+ | } | ||
+ | |||
} | } | ||
void hello(void) | void hello(void) | ||
{ | { | ||
− | printf("Hello world!\n"); | + | printf(" Hello world!\n"); |
− | printf("v 0. | + | printf(" v 0.45"); |
} | } | ||
void menutext(void) | void menutext(void) | ||
{ | { | ||
− | printf("Menu\n"); | + | printf(" Menu\n"); |
− | printf("----\n"); | + | printf(" ----\n"); |
− | printf(" | + | printf(" Home = Return to loader\n"); |
− | printf(" | + | printf(" Up !! = Elf Loader\n"); |
− | printf(" | + | printf(" Down !! = System Utils\n"); |
− | printf(" | + | printf(" Left ! = Fun\n"); |
− | printf(" | + | printf(" Right = Reboot Wii\n"); |
return; | return; | ||
} | } | ||
Line 86: | Line 158: | ||
void checkAndReload(void) { | void checkAndReload(void) { | ||
− | + | if((buttonHome==1)){ | |
− | |||
− | if( ( | ||
loader(); | loader(); | ||
} | } | ||
Line 96: | Line 166: | ||
xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode)); | xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode)); | ||
xjb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode)); | xjb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode)); | ||
− | + | CON_Init(xfb,20,120,rmode->fbWidth,rmode->xfbHeight,rmode->fbWidth*VI_DISPLAY_PIX_SZ); | |
VIDEO_Configure(rmode); | VIDEO_Configure(rmode); | ||
Line 121: | Line 191: | ||
__STM_Init(); | __STM_Init(); | ||
− | printf("FUN\n"); | + | printf(" FUN\n"); |
− | printf("---\n\n"); | + | printf(" ---\n\n"); |
int ver; | int ver; | ||
Line 134: | Line 204: | ||
revma=IOS_GetRevisionMajor(); | revma=IOS_GetRevisionMajor(); | ||
revmi=IOS_GetRevisionMinor(); | revmi=IOS_GetRevisionMinor(); | ||
− | printf("IOS Version : %d Revision : %d.%d \n\n", ver, revma, revmi); | + | printf(" IOS Version : %d Revision : %d.%d \n\n", ver, revma, revmi); |
Line 140: | Line 210: | ||
((u32*)stm_inbuf)[0x00] = 0x70000000; | ((u32*)stm_inbuf)[0x00] = 0x70000000; | ||
IOS_Ioctl( di_fd, stm_inbuf[0x00], stm_inbuf, 0x20, stm_iobuf, 0x20); | IOS_Ioctl( di_fd, stm_inbuf[0x00], stm_inbuf, 0x20, stm_iobuf, 0x20); | ||
− | printf("DVD ID : %s \n\n",stm_iobuf); | + | printf(" DVD ID : %s \n\n",stm_iobuf); |
IOS_Close(di_fd); | IOS_Close(di_fd); | ||
− | GRRLIB_DrawImg(10,50, music_width, music_high, music_img, 0, 1); | + | //GRRLIB_DrawImg(10,50, music_width, music_high, music_img, 0, 1); |
− | GRRLIB_Render(); | + | //GRRLIB_Render(); |
+ | |||
+ | printf(" Press + to rumble\n"); | ||
+ | printf(" Press - to stop\n\n"); | ||
− | printf("Press A to continue\n"); | + | printf(" Press A to continue\n"); |
while(1) { | while(1) { | ||
VIDEO_WaitVSync(); | VIDEO_WaitVSync(); | ||
− | + | if ((buttonA==1)){ | |
− | |||
− | |||
console(); | console(); | ||
clearscreen(); | clearscreen(); | ||
Line 158: | Line 229: | ||
return; | return; | ||
} | } | ||
+ | if ((buttonPlus==1)){ | ||
+ | rumble=1; | ||
+ | } | ||
+ | if ((buttonMinus==1)){ | ||
+ | rumble=0; | ||
+ | } | ||
} | } | ||
} | } | ||
Line 167: | Line 244: | ||
VIDEO_WaitVSync(); | VIDEO_WaitVSync(); | ||
checkAndReload(); | checkAndReload(); | ||
− | + | if ((buttonLeft==1)){ | |
− | |||
− | |||
fun(); | fun(); | ||
} | } | ||
− | if ( | + | if ((buttonRight==1)){ |
shutdown(); | shutdown(); | ||
} | } | ||
− | if ( | + | if ((buttonDown==1)){ |
//sysutils(); | //sysutils(); | ||
} | } | ||
− | if ( | + | if ((buttonUp==1)){ |
//elfloader(); | //elfloader(); | ||
} | } | ||
Line 186: | Line 261: | ||
void start(void) { | void start(void) { | ||
− | + | if((buttonB==1)) { | |
− | + | menu(); | |
− | + | } | |
− | |||
− | |||
} | } | ||
int main(int argc, char **argv) { | int main(int argc, char **argv) { | ||
− | + | /**************************************************************************** | |
Initialise Video | Initialise Video | ||
Initialise GCPad for input | Initialise GCPad for input | ||
Line 201: | Line 274: | ||
GRRLIB_buffer=(u16 *)malloc(640*240*2); | GRRLIB_buffer=(u16 *)malloc(640*240*2); | ||
− | |||
VIDEO_Init(); | VIDEO_Init(); | ||
PAD_Init(); | PAD_Init(); | ||
− | + | //rmode = &TVPal528IntDf; | |
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
switch(VIDEO_GetCurrentTvMode()) { | switch(VIDEO_GetCurrentTvMode()) { | ||
case VI_NTSC: | case VI_NTSC: | ||
Line 233: | Line 297: | ||
console(); | console(); | ||
if(rmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync(); | if(rmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync(); | ||
+ | |||
+ | printf(" Press 1&2\n\n"); | ||
+ | |||
+ | *((u32*)0xcd0000c0) |= 0x100; | ||
+ | bte_init(); | ||
+ | bte_start(); | ||
+ | wiimotes = wiiuse_init(MAX_WIIMOTES,wiimote_event); | ||
+ | wiiuse_find(wiimotes, MAX_WIIMOTES, 5); | ||
+ | wiiuse_connect(wiimotes, MAX_WIIMOTES); | ||
+ | wiiuse_set_leds(wiimotes[0], WIIMOTE_LED_1); | ||
+ | wiiuse_rumble(wiimotes[0], 1); | ||
+ | usleep(200000); /* 200ms */ | ||
+ | wiiuse_rumble(wiimotes[0], 0); | ||
+ | |||
+ | clearscreen(); | ||
+ | |||
+ | GRRLIB_InitVideo(); | ||
+ | GRRLIB_Start(); | ||
+ | GRRLIB_FillScreen(0x0000); | ||
+ | GRRLIB_Render(); | ||
+ | |||
+ | console(); | ||
/**************************************************************************** | /**************************************************************************** | ||
Line 240: | Line 326: | ||
hello(); | hello(); | ||
printf("\n"); | printf("\n"); | ||
− | printf("My first native wii homebrew\n\n"); | + | printf(" My first native wii homebrew\n\n"); |
− | printf("Press | + | printf(" Press B :-)\n\n"); |
while(1) { | while(1) { | ||
Line 250: | Line 336: | ||
return 0; | return 0; | ||
} | } | ||
+ | |||
+ | |||
</source> | </source> |
Revision as of 11:15, 27 April 2008
I am a NERD ;-)
PC SPECS :-
1: PIII 750MHz (over clocked to 800MHz), 64MB Dual Screen Graphics Card, 256MB Ram, 20GB Hard Drive, Win 98 + Ubuntu 7.10
2: Celeron 1.2GHz, 16MB Graohics Card, 512 MB Ram, 2x 15GB Hard Drives, Ubuntu 7.10
3: Celeron 1.2GHz, 16MB Graphics Card, 256 MB Ram, 20GB Hard Drive, Win 98
4: AMD Athlon 1.8GHz, 128MB Graphics Card, 512MB Ram, 80GB Hard Drive, Win XP
5: P1 233MHz, 8MB Graphics Card, 256MB Ram, 3GB Hard Drive, Win 95
6: LAPTOP : Celeron 1.7GHz, 230MB Graphics Card, 1GB Ram, 2x 20GB Hard Drives, Win XP + Ubuntu 7.10
I am currently coding ( attempting ;-) ) a package of seemingly random bits of code that may server a purpose, may not but, it is just to learn C and have some fun with my wii.
If someone can improve it put any improvements in the Updates section at the bottom ;-)
Code dump :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <ogcsys.h>
#include <gccore.h>
#include <ogc/ipc.h>
#include <stdarg.h>
#include <ctype.h>
#include <unistd.h>
#include <assert.h>
#include <ogc/ios.h>
#include <ogc/stm.h>
#include <ogc/es.h>
#include <ogc/gu.h>
#include <ogc/usb.h>
#include <bte/bte.h>
static void *xfb = NULL;
static GXRModeObj *rmode = NULL;
#define USB_ALIGN __attribute__ ((aligned(32)))
#define MAX_WIIMOTES 4
#include "GRRLIB.h"
#include "wiiuse.h"
#include "../gfx/music.h"
#include "../gfx/cursor.h"
#include "../gfx/impact.h"
typedef void (*Loader_Entry)(void);
static u32 *xjb;
wiimote** wiimotes;
Loader_Entry loader = (Loader_Entry)0x80001800;
extern u16 *GRRLIB_buffer;
unsigned int buttonA=0;
unsigned int buttonB=0;
unsigned int buttonUp=0;
unsigned int buttonDown=0;
unsigned int buttonLeft=0;
unsigned int buttonRight=0;
unsigned int buttonPlus=0;
unsigned int buttonMinus=0;
unsigned int buttonHome=0;
unsigned int buttonOne=0;
unsigned int buttonTwo=0;
unsigned int rumble=0;
unsigned int irx=0,iry=0;
void wiimote_event(struct wiimote_t* wm, int event)
{
wiiuse_rumble(wiimotes[0], rumble);
switch (event) {
case WIIUSE_EVENT:
buttonB=0;
buttonA=0;
buttonUp=0;
buttonDown=0;
buttonLeft=0;
buttonRight=0;
buttonPlus=0;
buttonMinus=0;
buttonHome=0;
buttonOne=0;
buttonTwo=0;
if (IS_PRESSED(wm, WIIMOTE_BUTTON_B))
buttonB=1;
if (IS_PRESSED(wm, WIIMOTE_BUTTON_A))
buttonA=1;
if (IS_PRESSED(wm, WIIMOTE_BUTTON_UP))
buttonUp=1;
if (IS_PRESSED(wm, WIIMOTE_BUTTON_DOWN))
buttonDown=1;
if (IS_PRESSED(wm, WIIMOTE_BUTTON_LEFT))
buttonLeft=1;
if (IS_PRESSED(wm, WIIMOTE_BUTTON_RIGHT))
buttonRight=1;
if (IS_PRESSED(wm, WIIMOTE_BUTTON_HOME))
buttonHome=1;
if (IS_PRESSED(wm, WIIMOTE_BUTTON_ONE))
buttonOne=1;
if (IS_PRESSED(wm, WIIMOTE_BUTTON_TWO))
buttonTwo=1;
if (IS_PRESSED(wm, WIIMOTE_BUTTON_PLUS))
buttonPlus=1;
if ( IS_PRESSED(wm, WIIMOTE_BUTTON_MINUS))
buttonMinus=1;
break;
default:
break;
}
}
void hello(void)
{
printf(" Hello world!\n");
printf(" v 0.45");
}
void menutext(void)
{
printf(" Menu\n");
printf(" ----\n");
printf(" Home = Return to loader\n");
printf(" Up !! = Elf Loader\n");
printf(" Down !! = System Utils\n");
printf(" Left ! = Fun\n");
printf(" Right = Reboot Wii\n");
return;
}
void clearscreen(void)
{
int y;
for(y=0;y<34;y++)
printf(" \n");
}
void checkAndReload(void) {
if((buttonHome==1)){
loader();
}
}
void console(void) {
xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));
xjb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));
CON_Init(xfb,20,120,rmode->fbWidth,rmode->xfbHeight,rmode->fbWidth*VI_DISPLAY_PIX_SZ);
VIDEO_Configure(rmode);
VIDEO_SetNextFramebuffer(xfb);
VIDEO_SetBlack(FALSE);
VIDEO_Flush();
VIDEO_WaitVSync();
if(rmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync();
}
void sysutils(void) {
return;
}
void shutdown(void) {
__STM_Init();
STM_RebootSystem();
__STM_Close();
}
void fun(void) {
clearscreen();
__STM_Init();
printf(" FUN\n");
printf(" ---\n\n");
int ver;
int revma;
int revmi;
int di_fd;
static u8 stm_inbuf[0x20] ATTRIBUTE_ALIGN(32);
static u8 stm_iobuf[0x20] ATTRIBUTE_ALIGN(32);
ver=IOS_GetVersion();
revma=IOS_GetRevisionMajor();
revmi=IOS_GetRevisionMinor();
printf(" IOS Version : %d Revision : %d.%d \n\n", ver, revma, revmi);
di_fd=IOS_Open("/dev/di",1);
((u32*)stm_inbuf)[0x00] = 0x70000000;
IOS_Ioctl( di_fd, stm_inbuf[0x00], stm_inbuf, 0x20, stm_iobuf, 0x20);
printf(" DVD ID : %s \n\n",stm_iobuf);
IOS_Close(di_fd);
//GRRLIB_DrawImg(10,50, music_width, music_high, music_img, 0, 1);
//GRRLIB_Render();
printf(" Press + to rumble\n");
printf(" Press - to stop\n\n");
printf(" Press A to continue\n");
while(1) {
VIDEO_WaitVSync();
if ((buttonA==1)){
console();
clearscreen();
menutext();
__STM_Close();
return;
}
if ((buttonPlus==1)){
rumble=1;
}
if ((buttonMinus==1)){
rumble=0;
}
}
}
void menu(void) {
clearscreen();
menutext();
while(1) {
VIDEO_WaitVSync();
checkAndReload();
if ((buttonLeft==1)){
fun();
}
if ((buttonRight==1)){
shutdown();
}
if ((buttonDown==1)){
//sysutils();
}
if ((buttonUp==1)){
//elfloader();
}
}
}
void start(void) {
if((buttonB==1)) {
menu();
}
}
int main(int argc, char **argv) {
/****************************************************************************
Initialise Video
Initialise GCPad for input
****************************************************************************/
GRRLIB_buffer=(u16 *)malloc(640*240*2);
VIDEO_Init();
PAD_Init();
//rmode = &TVPal528IntDf;
switch(VIDEO_GetCurrentTvMode()) {
case VI_NTSC:
rmode = &TVNtsc480IntDf;
break;
case VI_PAL:
rmode = &TVPal528IntDf;
break;
case VI_MPAL:
rmode = &TVMpal480IntDf;
break;
default:
rmode = &TVNtsc480IntDf;
break;
}
console();
if(rmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync();
printf(" Press 1&2\n\n");
*((u32*)0xcd0000c0) |= 0x100;
bte_init();
bte_start();
wiimotes = wiiuse_init(MAX_WIIMOTES,wiimote_event);
wiiuse_find(wiimotes, MAX_WIIMOTES, 5);
wiiuse_connect(wiimotes, MAX_WIIMOTES);
wiiuse_set_leds(wiimotes[0], WIIMOTE_LED_1);
wiiuse_rumble(wiimotes[0], 1);
usleep(200000); /* 200ms */
wiiuse_rumble(wiimotes[0], 0);
clearscreen();
GRRLIB_InitVideo();
GRRLIB_Start();
GRRLIB_FillScreen(0x0000);
GRRLIB_Render();
console();
/****************************************************************************
Main code
****************************************************************************/
hello();
printf("\n");
printf(" My first native wii homebrew\n\n");
printf(" Press B :-)\n\n");
while(1) {
VIDEO_WaitVSync();
start();
}
return 0;
}
Updates
These may be updates/fixes for the code above
- I was able to compile your code. I think you need the most recent cvs of the libogc use Drack's guide
http://www.tehskeen.com/forums/showthread.php?t=2968
- Thanks for that now i just have an error about usb functions in libbte
Also you should not include .c files in the header.