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 HasSolarSensor;
u8* CartROM;
u32 CartROMSize;
u32 CartCRC;
@ -488,6 +489,7 @@ void DeInit()
void Reset()
{
CartInserted = false;
HasSolarSensor = false;
if (CartROM) delete[] CartROM;
CartROM = NULL;
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++)
{
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");
}
@ -570,7 +572,7 @@ void WriteGPIO(u32 addr, u16 val)
case 0xC4:
CartGPIO.data &= ~CartGPIO.direction;
CartGPIO.data |= val & CartGPIO.direction;
if (CartGPIO.has_solar_sensor) GBACart_SolarSensor::Process(&CartGPIO);
if (HasSolarSensor) GBACart_SolarSensor::Process(&CartGPIO);
break;
case 0xC6:
CartGPIO.direction = val;

View File

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

View File

@ -38,6 +38,7 @@
#include "DlgWifiSettings.h"
#include "../NDS.h"
#include "../GBACart.h"
#include "../GPU.h"
#include "../SPU.h"
#include "../Wifi.h"
@ -1291,6 +1292,20 @@ int OnAreaKeyEvent(uiAreaHandler* handler, uiArea* area, uiAreaKeyEvent* evt)
{
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++)
if (EventMatchesKey(evt, Config::KeyMapping[i], false))