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 ?