Changes

614 bytes added ,  23:21, 25 May 2009
no edit summary
Line 1: Line 1: −
{{Infobox homebrewapp
+
'''libwiikeyboard''' is included as part of [[libogc]] as an interface to an attached USB keyboard.
| image      =
  −
| title      = [[User:Davyg/libwiikeyboard|libwiikeyboard]]
  −
| desc        = A library for usb keyboard usage
  −
| type        = Library
  −
| author      = davyg
  −
| download    = http://wiibrew.org/wiki/Image:Libwiikeyboard.tar.bz2
  −
| peripherals = {{USBKeyboard}}
  −
}}
  −
== Libwiikeyboard ==
     −
=== Presentation ===
+
== Usage ==
   −
A library who permit to use one or more usbkeyboard on the wii using libogc and devkitpro.<br>
+
===Initialize:===
It use directly the USB function and not the /dev/usb/kbd therefore It's a bit complicated to use for a
+
<source lang="cpp">
more simple library but less powerful you can use [[User:Cboomf/libusbkbd|libusbkbd]]
+
KEYBOARD_Init(NULL);
 +
</source>
 +
 
 +
===Get an event:===
 +
<source lang="cpp">
 +
KEYBOARD_GetEvent(keyboard_event *event)
 +
</source>
 +
 
 +
==Alternate usage - using stdin==
   −
=== Download ===
+
<source lang="cpp">
 +
#include <gccore.h>
 +
#include <wiiuse/wpad.h>
 +
#include <wiikeyboard/keyboard.h>
   −
Include and .a : [[Image:Libwiikeyboard.tar.bz2]]<br>
+
#include <stdio.h>
Source : [[Image:Libwiikeyboard-src.tar.bz2]]
+
#include <stdlib.h>
 +
#include <string.h>
 +
#include <unistd.h>
   −
=== Compilation ===
     −
<tt>make</tt>
+
static void *xfb = NULL;
 +
static GXRModeObj *rmode = NULL;
   −
=== Installation ===
+
bool quitapp=false;
   −
<tt>make install</tt>
+
void keyPress_cb( char sym) {
or<br>
  −
copy lib/libwiikeyboard in libogc/lib/wii and include/* in libogc/include/wiikeyboard
     −
=== Usage ===
+
if (sym > 31 ) putchar(sym);
 +
if (sym == 13) putchar('\n');
 +
 +
if ( sym == 0x1b) quitapp = true;
 +
}
   −
To initialize :
  −
<source lang="cpp">
  −
KEYBOARD_Init();
  −
</source>
     −
In your main loop :
+
int main(int argc, char **argv) {
<source lang="cpp">
+
// Initialise the video system
KEYBOARD_ScanKeyboards();
+
VIDEO_Init();
</source>
+
 +
// This function initialises the attached controllers
 +
WPAD_Init();
 +
 +
// Obtain the preferred video mode from the system
 +
// This will correspond to the settings in the Wii menu
 +
rmode = VIDEO_GetPreferredMode(NULL);
 +
 
 +
// Allocate memory for the display in the uncached region
 +
xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));
 +
 +
// Initialise the console, required for printf
 +
console_init(xfb,20,20,rmode->fbWidth,rmode->xfbHeight,rmode->fbWidth*VI_DISPLAY_PIX_SZ);
 +
 +
// Set up the video registers with the chosen mode
 +
VIDEO_Configure(rmode);
 +
 +
// Tell the video hardware where our display memory is
 +
VIDEO_SetNextFramebuffer(xfb);
 +
 +
// Make the display visible
 +
VIDEO_SetBlack(FALSE);
   −
To get an event :
+
// Flush the video register changes to the hardware
<source lang="cpp">
+
VIDEO_Flush();
KEYBOARD_getEvent(keyboardEvent *event)
  −
</source>
     −
At the end :
+
// Wait for Video setup to complete
<source lang="cpp">
+
VIDEO_WaitVSync();
KEYBOARD_Deinit();
+
if(rmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync();
</source>
     −
Useful enum or struct :
  −
<source lang="cpp">
  −
typedef enum
  −
{
  −
KEYBOARD_PRESSED = 0,
  −
KEYBOARD_RELEASED,
  −
KEYBOARD_DISCONNECTED,
  −
KEYBOARD_CONNECTED
     −
}keyboard_eventType;
+
// The console understands VT terminal escape codes
 +
// This positions the cursor on row 2, column 0
 +
// we can use variables for this with format codes too
 +
// e.g. printf ("\x1b[%d;%dH", row, column );
 +
printf("\x1b[2;0HHello World!\n");
 +
 +
if (KEYBOARD_Init(keyPress_cb) == 0) printf("keyboard initialised\n");
   −
typedef struct _keyboard_keysym
+
do {
{
+
// Call WPAD_ScanPads each loop, this reads the latest controller states
u8 scancode;
+
WPAD_ScanPads();
KEYBOARD_KEY sym;
  −
char ch;
  −
KEYBOARD_MOD mod;
     −
}keyboard_keysym;
+
// WPAD_ButtonsDown tells us which buttons were pressed in this loop
 +
// this is a "one shot" state which will not fire again until the button has been released
 +
u32 pressed = WPAD_ButtonsDown(0);
   −
typedef struct _KeyboardEvent{
+
char key = getchar();
keyboard_eventType type;
  −
keyboard_keysym keysym;
  −
device dev;
     −
}keyboardEvent;
+
// We return to the launcher application via exit
</source>
+
if ( pressed & WPAD_BUTTON_HOME ) quitapp=true;
   −
=== Todo ===
+
// Wait for the next frame
 +
VIDEO_WaitVSync();
 +
} while(!quitapp);
   −
<strike>-Use the interrupt pipe instead of control pipe</strike> by Brian Johnson<br>
+
return 0;
<strike>-Make the localization for other keyboard</strike> by Brian Johnson<br>
+
}
-Implement a a function to use key reapeat<br>
+
</source>
-See how to feet with the SDL ?
 
oversight, Administrators
2,080

edits