Added language select so it actually works. Games that don't have the available language falls back to English from what I see. The checksum isn't checked in the games? Also started added Wiimote usage in Linux, doesn't do anything since the plugin receives NOTHING in Linux for some reason. I blame Masken because I can

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@645 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
Sonicadvance1 2008-09-23 21:13:34 +00:00
parent 17cff80f2b
commit 1a27044b0a
7 changed files with 148 additions and 3 deletions

View File

@ -36,6 +36,7 @@ void SCoreStartupParameter::LoadDefaults()
bRunCompareServer = false;
bLockThreads = true;
bWii = false;
SelectedLanguage = 0;
}

View File

@ -46,6 +46,7 @@ struct SCoreStartupParameter
bool bRunCompareServer;
bool bRunCompareClient;
int SelectedLanguage;
bool bWii;

View File

@ -108,6 +108,8 @@ CEXIIPL::CEXIIPL() :
{
memcpy(m_SRAM, sram_dump, sizeof(m_SRAM));
}
// We Overwrite it here since it's possible on the GC to change the language as you please
m_SRAM[0x12] = Core::GetStartupParameter().SelectedLanguage;
WriteProtectMemory(m_pIPL, ROM_SIZE);
m_uAddress = 0;

View File

@ -72,6 +72,7 @@ void SConfig::SaveSettings()
ini.Set("Core", "DefaultGCM", m_LocalCoreStartupParameter.m_strDefaultGCM);
ini.Set("Core", "DVDRoot", m_LocalCoreStartupParameter.m_strDVDRoot);
ini.Set("Core", "OptimizeQuantizers", m_LocalCoreStartupParameter.bOptimizeQuantizers);
ini.Set("Core", "SelectedLanguage", m_LocalCoreStartupParameter.SelectedLanguage);
}
ini.Save("Dolphin.ini");
@ -125,5 +126,6 @@ void SConfig::LoadSettings()
ini.Get("Core", "DefaultGCM", &m_LocalCoreStartupParameter.m_strDefaultGCM);
ini.Get("Core", "DVDRoot", &m_LocalCoreStartupParameter.m_strDVDRoot);
ini.Get("Core", "OptimizeQuantizers", &m_LocalCoreStartupParameter.bOptimizeQuantizers, true);
ini.Get("Core", "SelectedLanguage", &m_LocalCoreStartupParameter.SelectedLanguage, 0);
}
}

View File

@ -118,6 +118,7 @@ void CConfigMain::CreateGUIControls()
arrayStringFor_ConsoleLang.Add(wxT("Dutch"));
ConsoleLangText = new wxStaticText(GeneralPage, ID_CONSOLELANG_TEXT, wxT("Console Language:"), wxDefaultPosition, wxDefaultSize);
ConsoleLang = new wxChoice(GeneralPage, ID_CONSOLELANG, wxDefaultPosition, wxDefaultSize, arrayStringFor_ConsoleLang, 0, wxDefaultValidator);
ConsoleLang->SetSelection(SConfig::GetInstance().m_LocalCoreStartupParameter.SelectedLanguage);
sGeneral = new wxGridBagSizer(0, 0);
sGeneral->Add(AllwaysHLEBIOS, wxGBPosition(0, 0), wxGBSpan(1, 2), wxALL, 5);
@ -277,6 +278,7 @@ void CConfigMain::SkipIdleCheck(wxCommandEvent& WXUNUSED (event))
void CConfigMain::ConsoleLangChanged(wxCommandEvent& WXUNUSED (event))
{
SConfig::GetInstance().m_LocalCoreStartupParameter.SelectedLanguage = ConsoleLang->GetSelection();
}
void CConfigMain::DefaultISOChanged(wxFileDirPickerEvent& WXUNUSED (event))

View File

@ -15,7 +15,7 @@ files = [
padenv = env.Clone()
padenv.Append(
CXXFLAGS = [ '-fPIC' ],
LIBS = [ 'common' ],
LIBS = [ 'common', 'cwiid' ],
)
padenv.SharedLibrary(output, files)

View File

@ -6,6 +6,15 @@
#include "pluginspecs_wiimote.h"
#include "wiimote_hid.h"
#ifndef _WIN32
#include <cwiid.h>
cwiid_wiimote_t *WiiMote;
bdaddr_t BTAddress;
cwiid_mesg_callback_t cwiid_callback;
struct acc_cal wm_cal, nc_cal;
uint8_t a_x, a_y, a_z;
bool ButtonA = false;
#endif
SWiimoteInitialize g_WiimoteInitialize;
#define VERSION_STRING "0.1"
@ -153,7 +162,83 @@ extern "C" void DllAbout(HWND _hParent)
extern "C" void DllConfig(HWND _hParent)
{
}
#ifndef _WIN32
#define LBLVAL_LEN 6
void cwiid_acc(struct cwiid_acc_mesg *mesg)
{
a_x = mesg->acc[CWIID_X];
a_y = mesg->acc[CWIID_Y];
a_z = mesg->acc[CWIID_Z];
//printf("%d %d %d %f\n", a_x,a_y,a_z,a);
}
void cwiid_btn(struct cwiid_btn_mesg *mesg)
{
ButtonA = mesg->buttons & CWIID_BTN_A;
printf("Button A is %d\n",ButtonA);
}
#define BATTERY_STR_LEN 14 /* "Battery: 100%" + '\0' */
void cwiid_callback(cwiid_wiimote_t *wiimote, int mesg_count,
union cwiid_mesg mesg_array[], struct timespec *timestamp)
{
int i;
char battery[BATTERY_STR_LEN];
char *ext_str;
static enum cwiid_ext_type ext_type = CWIID_EXT_NONE;
for (i=0; i < mesg_count; i++) {
switch (mesg_array[i].type) {
case CWIID_MESG_STATUS:
snprintf(battery, BATTERY_STR_LEN,"Battery:%d%%",
(int) (100.0 * mesg_array[i].status_mesg.battery /
CWIID_BATTERY_MAX));
switch (mesg_array[i].status_mesg.ext_type) {
case CWIID_EXT_NONE:
ext_str = "No extension";
break;
case CWIID_EXT_NUNCHUK:
ext_str = "Nunchuk";
if (ext_type != CWIID_EXT_NUNCHUK) {
if (cwiid_get_acc_cal(wiimote, CWIID_EXT_NUNCHUK,
&nc_cal)) {
LOG(WIIMOTE, "Unable to retrieve Nunchuk accelerometer calibration");
}
}
break;
case CWIID_EXT_CLASSIC:
ext_str = "Classic controller";
break;
case CWIID_EXT_UNKNOWN:
ext_str = "Unknown extension";
break;
}
ext_type = mesg_array[i].status_mesg.ext_type;
break;
case CWIID_MESG_BTN:
cwiid_btn(&mesg_array[i].btn_mesg);
break;
case CWIID_MESG_ACC:
cwiid_acc(&mesg_array[i].acc_mesg);
break;
/*case CWIID_MESG_IR:
cwiid_ir(&mesg_array[i].ir_mesg);
break;
case CWIID_MESG_NUNCHUK:
cwiid_nunchuk(&mesg_array[i].nunchuk_mesg);
break;
case CWIID_MESG_CLASSIC:
cwiid_classic(&mesg_array[i].classic_mesg);
break;*/
case CWIID_MESG_ERROR:
printf("Error, Disconnecting\n");
break;
default:
printf("Unknown Message %d\n", mesg_array[i].type);
break;
}
}
}
#endif
extern "C" void Wiimote_Initialize(SWiimoteInitialize _WiimoteInitialize)
{
@ -162,6 +247,17 @@ extern "C" void Wiimote_Initialize(SWiimoteInitialize _WiimoteInitialize)
memset(g_Eeprom, 0, WIIMOTE_EEPROM_SIZE);
memcpy(g_Eeprom, EepromData_0, sizeof(EepromData_0));
memcpy(g_Eeprom + 0x16D0, EepromData_16D0, sizeof(EepromData_16D0));
#ifndef _WIN32
//Todo: More Error Checking
//WiiMote = cwiid_open(&BTAddress, CWIID_FLAG_MESG_IFC);
if(!WiiMote)
printf( "Couldn't Connect to WiiMote");
else{
cwiid_set_mesg_callback(WiiMote, &cwiid_callback);
cwiid_get_acc_cal(WiiMote, CWIID_EXT_NONE, &wm_cal);
cwiid_request_status(WiiMote);
}
#endif
g_ReportingMode = 0;
}
@ -172,6 +268,10 @@ extern "C" void Wiimote_DoState(void* ptr, int mode) {
extern "C" void Wiimote_Shutdown(void)
{
#ifdef _WIN32
if(!cwiid_disconnect(WiiMote))
LOG(WIIMOTE,"Couldn't close WiiMote!\n");
#endif
}
extern "C" void Wiimote_Output(const void* _pData, u32 _Size) {
@ -202,6 +302,15 @@ extern "C" void Wiimote_Output(const void* _pData, u32 _Size) {
extern "C" void Wiimote_Update() {
//LOG(WIIMOTE, "Wiimote_Update");
#ifndef _WIN32
uint8_t rpt_mode;
rpt_mode = CWIID_RPT_STATUS | CWIID_RPT_BTN | CWIID_RPT_ACC;
if(g_ReportingMode == 0x33)
rpt_mode |= CWIID_RPT_IR;
if (cwiid_set_rpt_mode(WiiMote, rpt_mode))
printf("Error setting Mode\n");
#endif
switch(g_ReportingMode) {
case 0:
break;
@ -256,7 +365,22 @@ void WmLeds(wm_leds* leds) {
LOG(WIIMOTE, " Set LEDs");
LOG(WIIMOTE, " Leds: %x", leds->leds);
LOG(WIIMOTE, " Rumble: %x", leds->rumble);
#ifndef _WIN32
uint8_t LED_state;
printf("%d %d %d %d\n", leds->leds & 0x10, leds->leds & 0x20, leds->leds & 0x30, leds->leds & 0x40);
if (WiiMote) {
LED_state =
(leds->leds & 0x10
? CWIID_LED1_ON : 0) |
(leds->leds & 0x20
? CWIID_LED2_ON : 0) |
(leds->leds & 0x30
? CWIID_LED3_ON : 0) |
(leds->leds & 0x40
? CWIID_LED4_ON : 0);
cwiid_set_led(WiiMote, LED_state);
}
#endif
g_Leds = leds->leds;
}
@ -284,10 +408,16 @@ void SendReportCoreAccelIr12() {
Offset += sizeof(wm_report_core_accel_ir12);
memset(pReport, 0, sizeof(wm_report_core_accel_ir12));
memset(pReport->ir, 0xFF, sizeof(pReport->ir));
#ifndef _WIN32
pReport->a.x = a_x;
pReport->a.y = a_y;
pReport->a.z = a_z;
pReport->c.a = ButtonA;
#else
pReport->a.x = 0x81;
pReport->a.y = 0x78;
pReport->a.z = 0xD9;
#endif
int x0, y0, x1, y1;
@ -342,10 +472,17 @@ void SendReportCoreAccel() {
wm_report_core_accel* pReport = (wm_report_core_accel*)(DataFrame + Offset);
Offset += sizeof(wm_report_core_accel);
memset(pReport, 0, sizeof(wm_report_core_accel));
#ifndef _WIN32
pReport->a.x = a_x;
pReport->a.y = a_y;
pReport->a.z = a_z;
pReport->c.a = ButtonA;
#else
pReport->c.a = 1;
pReport->a.x = 0x82;
pReport->a.y = 0x75;
pReport->a.z = 0xD6;
#endif
LOG(WIIMOTE, " SendReportCoreAccel()");