Files
riojoy/legacy/CRIO.h
T
CydandClaude Opus 4.8 39a3dab1fc Phase 0: scaffold modern RIOJoy solution + plan
Modernization of the legacy vJoy-based RIO cockpit interface for Win10/11,
removing the vJoy dependency in favor of a custom VHF/UMDF HID driver,
rewritten in C#/.NET 8 as a background tray app with per-game profiles.

- Reorganize: legacy C++ -> legacy/, cockpit art -> docs/reference/
- RioJoy.sln: src/RioJoy.Core (lib) + src/RioJoy.Tray (tray app), net8.0-windows x64
- driver/ placeholder for the RioGamepad WDK driver
- docs/PLAN.md (7-phase plan; profiles + serial-yield model)
- docs/PROTOCOL.md (RIO wire format + iRIO input-map reference)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 12:43:01 -05:00

135 lines
2.7 KiB
C++

#ifndef __RIO_H__
#define __RIO_H__
#define MSBON(B) {B |= 0x80;}
#define MSBOFF(B) {B &= ~0x80;}
#define MAXLENGTH 13
#define ACK_CHAR 0xFC
#define NAK_CHAR 0xFD
#define RESTART_CHAR 0xFE
#define IDLE_CHAR 0xFF
#define RX_ACK_BIT 0x0001
#define RX_NAK_BIT 0x0002
class CString
{
public:
char m_sz[256];
public:
CString()
{
m_sz[0] = '0';
};
~CString()
{
}
void _cdecl Format(const char* pcszFormat, ...)
{
va_list va_marker;
va_start(va_marker, pcszFormat);
vsprintf_s(m_sz, pcszFormat, va_marker);
va_end(va_marker);
}
operator const char* () const { return &m_sz[0]; }
CString& operator = (const char* pcszText)
{
strcpy_s(m_sz, pcszText);
return *this;
}
};
class CListBox
{
public:
public:
CListBox() {}
~CListBox() {}
int GetCount() const { return 0; }
void AddString(const char* pcszText) {}
void DeleteString(int nindex) {}
};
class CRIO : public C232Comm
{
public:
CListBox& m_ListBox;
BYTE m_ba[2048];
BYTE *m_pStart;
const BYTE *m_pEnd;
int m_nCount;
DWORD m_dwFlags;
BYTE m_baRead[128];
int m_nState;
int m_nRead;
int m_nLeft;
BYTE m_bCheck;
BYTE m_baReplies[32];
int m_nReplies;
int TestModeActive;
DWORD m_dwAnalogRequest;
public:
CRIO (CListBox& ListBox) : m_ListBox (ListBox) {
Init ();
}
virtual ~CRIO () {};
public:
void Init ();
void RIOBordState (BYTE ID);
void DoEventLoop();
void EventLoop (const BYTE *buf, int nLen);
void AddReply (BYTE bReply);
void CheckReplies ();
void CheckAnalogRequest();
void SendCommand (const BYTE* pbPacket);
void SendPacket (const BYTE* pbPacket, int nLen);
void SetLamp (int lampNumber, int state);
void GeneralReset();
void ResetThrottle ();
void RequestCheck();
void RequestVersion();
void RequestAnalogUpdate();
public:
enum RIOCommand {
rio_CheckRequest = 0x80, // 128
rio_VersionRequest, // 129
rio_AnalogRequest, // 130
rio_ResetRequest, // 131
rio_LampRequest, // 132
rio_CheckReply, // 133
rio_VersionReply, // 134
rio_AnalogReply, // 135
rio_ButtonPressed, // 136
rio_ButtonReleased, // 137
rio_KeyPressed, // 138
rio_KeyReleased, // 139
rio_TestModeChange // 140
};
enum RIOStatusType {
BoardOk, BoardMissing, BoardBad, LampBad, RestartCount, AbandonCount, FullBufferCount
};
enum LampState {
solid=0, flashSlow=1, flashMed=2, flashFast=3,
state1Off=0x00, state1Dim=0x04, state1Bright=0x0C,
state2Off=0x00, state2Dim=0x10, state2Bright=0x30,
};
enum {
LampSolidOff = solid + state1Off + state2Off,
LampSolidDim = solid + state1Dim + state2Dim,
LampSolidBright = solid + state1Bright + state2Bright
};
};
#endif