Mesen-SX/Core/BaseControlDevice.h

91 lines
2.2 KiB
C
Raw Normal View History

2019-02-17 19:54:29 -05:00
#pragma once
#include "stdafx.h"
#include "ControlDeviceState.h"
#include "SettingTypes.h"
#include "IKeyManager.h"
#include "../Utilities/SimpleLock.h"
2019-03-12 09:15:57 -04:00
#include "../Utilities/ISerializable.h"
2019-02-17 19:54:29 -05:00
class Console;
2019-03-12 09:15:57 -04:00
class BaseControlDevice : public ISerializable
2019-02-17 19:54:29 -05:00
{
private:
ControlDeviceState _state;
protected:
Console* _console;
2019-02-17 19:54:29 -05:00
vector<KeyMapping> _keyMappings;
bool _strobe;
uint8_t _port;
SimpleLock _stateLock;
2020-12-19 23:30:09 +03:00
virtual void RefreshStateBuffer()
{
}
2019-02-17 19:54:29 -05:00
void EnsureCapacity(int32_t minBitCount);
uint32_t GetByteIndex(uint8_t bit);
virtual bool HasCoordinates();
virtual bool IsRawString();
bool IsCurrentPort(uint16_t addr);
bool IsExpansionDevice();
void StrobeProcessRead();
void StrobeProcessWrite(uint8_t value);
virtual string GetKeyNames() { return ""; }
void SetPressedState(uint8_t bit, uint32_t keyCode);
void SetPressedState(uint8_t bit, bool enabled);
void SetCoordinates(MousePosition pos);
void SetMovement(MouseMovement mov);
MouseMovement GetMovement();
2020-12-19 23:30:09 +03:00
2019-02-17 19:54:29 -05:00
virtual void InternalSetStateFromInput();
2020-12-19 23:30:09 +03:00
2019-02-17 19:54:29 -05:00
public:
static constexpr uint8_t ExpDevicePort = 4;
static constexpr uint8_t ConsoleInputPort = 5;
static constexpr uint8_t MapperInputPort = 6;
static constexpr uint8_t ExpDevicePort2 = 7;
static constexpr uint8_t PortCount = ExpDevicePort2 + 1;
BaseControlDevice(Console* console, uint8_t port, KeyMappingSet keyMappingSet = KeyMappingSet());
2019-02-17 19:54:29 -05:00
virtual ~BaseControlDevice();
uint8_t GetPort();
bool IsPressed(uint8_t bit);
MousePosition GetCoordinates();
2020-12-19 23:30:09 +03:00
2019-02-17 19:54:29 -05:00
void ClearState();
void SetBit(uint8_t bit);
void ClearBit(uint8_t bit);
void InvertBit(uint8_t bit);
void SetBitValue(uint8_t bit, bool set);
2020-12-19 23:30:09 +03:00
2019-02-17 19:54:29 -05:00
void SetTextState(string state);
string GetTextState();
void SetStateFromInput();
2020-12-19 23:30:09 +03:00
virtual void OnAfterSetState()
{
}
2019-02-17 19:54:29 -05:00
void SetRawState(ControlDeviceState state);
ControlDeviceState GetRawState();
virtual ControllerType GetControllerType() = 0;
2019-02-17 19:54:29 -05:00
virtual uint8_t ReadRam(uint16_t addr) = 0;
virtual void WriteRam(uint16_t addr, uint8_t value) = 0;
2019-03-12 09:15:57 -04:00
2020-12-19 23:30:09 +03:00
void static SwapButtons(shared_ptr<BaseControlDevice> state1, uint8_t button1, shared_ptr<BaseControlDevice> state2,
uint8_t button2);
void Serialize(Serializer& s) override;
2019-02-17 19:54:29 -05:00
};