Hook up solar sensor control to the UI

It uses hardcoded keypad left and right arrows.
This commit is contained in:
Raphaël Zumer 2019-12-10 17:54:34 -05:00
parent f6cd66e5b1
commit ca9f183d24
3 changed files with 21 additions and 4 deletions

View File

@ -462,6 +462,7 @@ const char SOLAR_SENSOR_GAMECODES[10][5] =
bool CartInserted; bool CartInserted;
bool HasSolarSensor;
u8* CartROM; u8* CartROM;
u32 CartROMSize; u32 CartROMSize;
u32 CartCRC; u32 CartCRC;
@ -488,6 +489,7 @@ void DeInit()
void Reset() void Reset()
{ {
CartInserted = false; CartInserted = false;
HasSolarSensor = false;
if (CartROM) delete[] CartROM; if (CartROM) delete[] CartROM;
CartROM = NULL; CartROM = NULL;
CartROMSize = 0; CartROMSize = 0;
@ -529,10 +531,10 @@ bool LoadROM(const char* path, const char* sram)
for (int i = 0; i < sizeof(SOLAR_SENSOR_GAMECODES)/sizeof(SOLAR_SENSOR_GAMECODES[0]); i++) for (int i = 0; i < sizeof(SOLAR_SENSOR_GAMECODES)/sizeof(SOLAR_SENSOR_GAMECODES[0]); i++)
{ {
if (strcmp(gamecode, SOLAR_SENSOR_GAMECODES[i]) == 0) CartGPIO.has_solar_sensor = true; if (strcmp(gamecode, SOLAR_SENSOR_GAMECODES[i]) == 0) HasSolarSensor = true;
} }
if (CartGPIO.has_solar_sensor) if (HasSolarSensor)
{ {
printf("GBA solar sensor support detected!\n"); printf("GBA solar sensor support detected!\n");
} }
@ -570,7 +572,7 @@ void WriteGPIO(u32 addr, u16 val)
case 0xC4: case 0xC4:
CartGPIO.data &= ~CartGPIO.direction; CartGPIO.data &= ~CartGPIO.direction;
CartGPIO.data |= val & CartGPIO.direction; CartGPIO.data |= val & CartGPIO.direction;
if (CartGPIO.has_solar_sensor) GBACart_SolarSensor::Process(&CartGPIO); if (HasSolarSensor) GBACart_SolarSensor::Process(&CartGPIO);
break; break;
case 0xC6: case 0xC6:
CartGPIO.direction = val; CartGPIO.direction = val;

View File

@ -45,13 +45,13 @@ namespace GBACart
struct GPIO struct GPIO
{ {
bool has_solar_sensor;
u16 data; u16 data;
u16 direction; u16 direction;
u16 control; u16 control;
}; };
extern bool CartInserted; extern bool CartInserted;
extern bool HasSolarSensor;
extern u8* CartROM; extern u8* CartROM;
extern u32 CartROMSize; extern u32 CartROMSize;

View File

@ -38,6 +38,7 @@
#include "DlgWifiSettings.h" #include "DlgWifiSettings.h"
#include "../NDS.h" #include "../NDS.h"
#include "../GBACart.h"
#include "../GPU.h" #include "../GPU.h"
#include "../SPU.h" #include "../SPU.h"
#include "../Wifi.h" #include "../Wifi.h"
@ -1291,6 +1292,20 @@ int OnAreaKeyEvent(uiAreaHandler* handler, uiArea* area, uiAreaKeyEvent* evt)
{ {
if (evt->Modifiers == 0x0) UndoStateLoad(); if (evt->Modifiers == 0x0) UndoStateLoad();
} }
else if (evt->Scancode == 0x4B) // Keypad left
{
if (GBACart::CartInserted && GBACart::HasSolarSensor)
{
if (GBACart_SolarSensor::LightLevel > 0) GBACart_SolarSensor::LightLevel--;
}
}
else if (evt->Scancode == 0x4D) // Keypad right
{
if (GBACart::CartInserted && GBACart::HasSolarSensor)
{
if (GBACart_SolarSensor::LightLevel < 10) GBACart_SolarSensor::LightLevel++;
}
}
for (int i = 0; i < 12; i++) for (int i = 0; i < 12; i++)
if (EventMatchesKey(evt, Config::KeyMapping[i], false)) if (EventMatchesKey(evt, Config::KeyMapping[i], false))