save version 0.1. Last version working on wiiuse 0.9 API.
git-svn-id: http://wiiusej.googlecode.com/svn/trunk@30 ae48ae66-6a45-0410-b38e-211266189506
This commit is contained in:
168
tag1/WiiUseJC/wiiuse.c
Normal file
168
tag1/WiiUseJC/wiiuse.c
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
/*
|
||||||
|
* wiiuse
|
||||||
|
*
|
||||||
|
* Written By:
|
||||||
|
* Michael Laforest < para >
|
||||||
|
* Email: < thepara (--AT--) g m a i l [--DOT--] com >
|
||||||
|
*
|
||||||
|
* Copyright 2006-2007
|
||||||
|
*
|
||||||
|
* This file is part of wiiuse.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* $Header$
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* @brief API source file
|
||||||
|
*
|
||||||
|
* The file must be linked to any third party
|
||||||
|
* program that is utilizing wiiuse as an
|
||||||
|
* external library.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define WIIUSE_API_SRC
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "wiiuse.h"
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#include <windows.h>
|
||||||
|
#else
|
||||||
|
#include <dlfcn.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef int (*entry_func_t)(struct wiiuse_api_t**);
|
||||||
|
|
||||||
|
struct wiiuse_api_t* wiiuse_api = NULL;
|
||||||
|
void* wiiuse_mod = NULL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Load the wiiuse library and initialize the function pointers.
|
||||||
|
*
|
||||||
|
* @param wiiuse_file The relative or absolute path to the wiiuse library file.
|
||||||
|
*
|
||||||
|
* @return The version of the wiiuse library loaded.
|
||||||
|
*
|
||||||
|
* @see wiiuse_shutdown()
|
||||||
|
*
|
||||||
|
* If the version of wiiuse being used has a different API
|
||||||
|
* version as expected, this function will fail and return 0.
|
||||||
|
*/
|
||||||
|
const char* wiiuse_startup(char* wiiuse_file) {
|
||||||
|
entry_func_t entry_func = NULL;
|
||||||
|
|
||||||
|
if (wiiuse_api)
|
||||||
|
/* already loaded */
|
||||||
|
return wiiuse_api->version;
|
||||||
|
|
||||||
|
if (!wiiuse_file)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* load the module */
|
||||||
|
wiiuse_mod = dlopen(wiiuse_file, RTLD_NOW);
|
||||||
|
|
||||||
|
if (!wiiuse_mod)
|
||||||
|
/* can not load module */
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* get the entry point */
|
||||||
|
entry_func = (entry_func_t)dlsym(wiiuse_mod, "wiiuse_main");
|
||||||
|
|
||||||
|
if (!entry_func) {
|
||||||
|
wiiuse_shutdown();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* call the entry function */
|
||||||
|
entry_func(&wiiuse_api);
|
||||||
|
|
||||||
|
/* make sure the API versions are the same */
|
||||||
|
if (wiiuse_api->api_version != WIIUSE_API_VERSION) {
|
||||||
|
wiiuse_shutdown();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set all the function pointers */
|
||||||
|
wiiuse_init = wiiuse_api->_wiiuse_init;
|
||||||
|
wiiuse_disconnected = wiiuse_api->_wiiuse_disconnected;
|
||||||
|
wiiuse_rumble = wiiuse_api->_wiiuse_rumble;
|
||||||
|
wiiuse_toggle_rumble = wiiuse_api->_wiiuse_toggle_rumble;
|
||||||
|
wiiuse_set_leds = wiiuse_api->_wiiuse_set_leds;
|
||||||
|
wiiuse_motion_sensing = wiiuse_api->_wiiuse_motion_sensing;
|
||||||
|
wiiuse_read_data = wiiuse_api->_wiiuse_read_data;
|
||||||
|
wiiuse_write_data = wiiuse_api->_wiiuse_write_data;
|
||||||
|
wiiuse_status = wiiuse_api->_wiiuse_status;
|
||||||
|
wiiuse_get_by_id = wiiuse_api->_wiiuse_get_by_id;
|
||||||
|
wiiuse_set_flags = wiiuse_api->_wiiuse_set_flags;
|
||||||
|
wiiuse_set_smooth_alpha = wiiuse_api->_wiiuse_set_smooth_alpha;
|
||||||
|
wiiuse_set_ir = wiiuse_api->_wiiuse_set_ir;
|
||||||
|
wiiuse_set_ir_vres = wiiuse_api->_wiiuse_set_ir_vres;
|
||||||
|
wiiuse_set_ir_position = wiiuse_api->_wiiuse_set_ir_position;
|
||||||
|
wiiuse_set_aspect_ratio = wiiuse_api->_wiiuse_set_aspect_ratio;
|
||||||
|
wiiuse_set_bluetooth_stack = wiiuse_api->_wiiuse_set_bluetooth_stack;
|
||||||
|
wiiuse_set_orient_threshold = wiiuse_api->_wiiuse_set_orient_threshold;
|
||||||
|
wiiuse_find = wiiuse_api->_wiiuse_find;
|
||||||
|
wiiuse_connect = wiiuse_api->_wiiuse_connect;
|
||||||
|
wiiuse_disconnect = wiiuse_api->_wiiuse_disconnect;
|
||||||
|
wiiuse_poll = wiiuse_api->_wiiuse_poll;
|
||||||
|
|
||||||
|
printf("wiiuse v%s loaded ( http://wiiuse.net http://wiiuse.sf.net/ ).\n", wiiuse_api->version);
|
||||||
|
|
||||||
|
return wiiuse_api->version;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Unload the library.
|
||||||
|
*
|
||||||
|
* @see wiiuse_startup()
|
||||||
|
*/
|
||||||
|
void wiiuse_shutdown() {
|
||||||
|
if (!wiiuse_mod)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* unload the module */
|
||||||
|
dlclose(wiiuse_mod);
|
||||||
|
|
||||||
|
wiiuse_api = NULL;
|
||||||
|
|
||||||
|
wiiuse_init = NULL;
|
||||||
|
wiiuse_disconnected = NULL;
|
||||||
|
wiiuse_rumble = NULL;
|
||||||
|
wiiuse_toggle_rumble = NULL;
|
||||||
|
wiiuse_set_leds = NULL;
|
||||||
|
wiiuse_motion_sensing = NULL;
|
||||||
|
wiiuse_read_data = NULL;
|
||||||
|
wiiuse_write_data = NULL;
|
||||||
|
wiiuse_status = NULL;
|
||||||
|
wiiuse_get_by_id = NULL;
|
||||||
|
wiiuse_set_flags = NULL;
|
||||||
|
wiiuse_set_smooth_alpha = NULL;
|
||||||
|
wiiuse_set_ir = NULL;
|
||||||
|
wiiuse_set_ir_vres = NULL;
|
||||||
|
wiiuse_set_ir_position = NULL;
|
||||||
|
wiiuse_set_aspect_ratio = NULL;
|
||||||
|
wiiuse_set_bluetooth_stack = NULL;
|
||||||
|
wiiuse_set_orient_threshold = NULL;
|
||||||
|
wiiuse_find = NULL;
|
||||||
|
wiiuse_connect = NULL;
|
||||||
|
wiiuse_disconnect = NULL;
|
||||||
|
wiiuse_poll = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user