|
|
(83 intermediate revisions by 9 users not shown) |
Line 1: |
Line 1: |
| I am a NERD ;-)
| | {{Infobox homebrew |
| | | image = [[Image:Lines WiiWebServer.png]] |
| | | title = [[Wii Web Server]] |
| | | type = utility |
| | | author = Cboomf |
| | | version = alpha 1.20 |
| | | licence = GPL |
| | | download = https://sourceforge.net/projects/wiiwebserver/ |
| | | website = https://sourceforge.net/projects/wiiwebserver/ |
| | | source = http://sourceforge.net/scm/?type=svn&group_id=229938 |
| | | peripherals = {{Wiimote1}}{{Nunchuk}}{{WiFi}}{{Internet}}{{FrontSD}}{{GCNController}}{{USBMSD}}{{LesPaul}} |
| | | hbb = yes |
| | }} |
|
| |
|
| PC SPECS :-
| | {{Infobox development tools |
| | | image = |
| | | title = [[libwiilight]] |
| | | desc = A library for the disc slot light |
| | | type = library |
| | | author = Cboomf |
| | | version = Beta 1 |
| | | download = Media:libwiilight.zip |
| | | peripherals = {{Wii}} |
| | }} |
|
| |
|
| 1: PIII 750MHz (over clocked to 800MHz), 64MB Dual Screen Graphics Card, 256MB Ram, 20GB Hard Drive, Win 98 + Ubuntu 7.10<br>
| | I am a '''NERD''' ;-)<br /> |
| 2: Celeron 1.2GHz, 16MB Graohics Card, 512 MB Ram, 2x 15GB Hard Drives, Ubuntu 7.10<br>
| | [http://bridgesrail.blogspot.com] |
| 3: Celeron 1.2GHz, 16MB Graphics Card, 256 MB Ram, 20GB Hard Drive, Win 98<br>
| |
| 4: AMD Athlon 1.8GHz, 128MB Graphics Card, 512MB Ram, 80GB Hard Drive, Win XP<br>
| |
| 5: P1 233MHz, 8MB Graphics Card, 256MB Ram, 3GB Hard Drive, Win 95<br>
| |
| 6: LAPTOP : Celeron 1.7GHz, 230MB Graphics Card, 1GB Ram, 2x 20GB Hard Drives, Win XP + Ubuntu 7.10<br>
| |
|
| |
|
| | <div style="clear: both; padding-top: 24pt;"> |
| | ==Me== |
| | </div> |
| | {{Userbox lang|en}} |
| | {{Userbox dev|Win}} |
| | {{Userbox developer}} |
| | {{Userbox beta}} |
|
| |
|
| 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 ;-)
| | <div style="clear: both; padding-top: 24pt;"> |
| | ==Major Experience== |
| | </div> |
| | {{Userbox code|C}} |
| | {{Userbox code|PAS}} |
| | {{Userbox code|VB}} |
| | {{Userbox code|VB.net}} |
| | {{Userbox code|VBS}} |
| | {{Userbox code|PHP}} |
| | {{Userbox code|JS}} |
| | {{Userbox code|HTML}} |
| | {{Userbox code|MySQL}} |
| | {{Userbox code|BAS}} |
|
| |
|
| ===Code dump : === | | <div style="clear: both; padding-top: 24pt;"> |
|
| |
|
| <source lang="c">
| | ==Minor Experience== |
| #include <stdio.h>
| | </div> |
| #include <stdlib.h>
| | {{Userbox code|C++}} |
| #include <string.h>
| | {{Userbox code|Java}} |
| #include <malloc.h>
| | {{Userbox code|ASM}} |
| #include <ogcsys.h>
| | {{Userbox code|Cobol}} |
| #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;
| | <div style="clear: both; padding-top: 24pt;"> |
| static GXRModeObj *rmode = NULL;
| | ==Wii + Hardware== |
| | </div> |
| | {{Userbox sdcard|2gb}} |
| | {{Userbox wiimote|2}} |
| | {{Userbox wiizapper|1}} |
| | {{Userbox wiiwheel|1}} |
| | {{Userbox nunchuk|2}} |
| | {{Userbox classic controller|1}} |
| | {{Userbox gamecube controller|1}} |
| | {{Userbox balance board|1}} |
| | {{Userbox USBKeyboard|1}} |
| | {{Userbox wifi}} |
| | {{Userbox system menu|4.0}} |
| | {{Userbox Trucha}} |
| | {{Userbox motionplus|1}} |
|
| |
|
| #define USB_ALIGN __attribute__ ((aligned(32)))
| | <div style="clear: both; padding-top: 24pt;"> |
|
| |
|
| #define MAX_WIIMOTES 4
| | ==Homebrew== |
| | | </div> |
| #include "GRRLIB.h"
| | {{Userbox DVDx}} |
| | | {{Userbox homebrew channel|1.0.3}} |
| #include "wiiuse.h"
| | {{Userbox bootmii|beta2}} |
| | | {{Userbox homebrew browser}} |
| #include "../gfx/music.h"
| | {{Userbox mplayer ce}} |
| #include "../gfx/cursor.h"
| | {{Userbox bannerbomb}} |
| #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;
| |
| }
| |
| | |
| | |
| | |
| </source>
| |
| | |
| == 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.
| |
| <source lang="c">
| |
| | |
| </source>
| |