Core/HW/WiimoteCommon: Add a method to DataReport to query the format of the stored IR data.
This commit is contained in:
parent
eced34f3f3
commit
9c68b156d1
|
@ -125,13 +125,14 @@ struct NoExt : virtual DataReportManipulator
|
||||||
u8* GetExtDataPtr() override { return nullptr; }
|
u8* GetExtDataPtr() override { return nullptr; }
|
||||||
};
|
};
|
||||||
|
|
||||||
template <u32 Offset, u32 Length, u32 DataOffset = 0>
|
template <IRReportFormat Format, u32 Offset, u32 Length, u32 DataOffset = 0>
|
||||||
struct IncludeIR : virtual DataReportManipulator
|
struct IncludeIR : virtual DataReportManipulator
|
||||||
{
|
{
|
||||||
u32 GetIRDataSize() const override { return Length; }
|
u32 GetIRDataSize() const override { return Length; }
|
||||||
const u8* GetIRDataPtr() const override { return data_ptr + Offset; }
|
const u8* GetIRDataPtr() const override { return data_ptr + Offset; }
|
||||||
u8* GetIRDataPtr() override { return data_ptr + Offset; }
|
u8* GetIRDataPtr() override { return data_ptr + Offset; }
|
||||||
u32 GetIRDataFormatOffset() const override { return DataOffset; }
|
u32 GetIRDataFormatOffset() const override { return DataOffset; }
|
||||||
|
IRReportFormat GetIRReportFormat() const override { return Format; }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct NoIR : virtual DataReportManipulator
|
struct NoIR : virtual DataReportManipulator
|
||||||
|
@ -140,6 +141,7 @@ struct NoIR : virtual DataReportManipulator
|
||||||
const u8* GetIRDataPtr() const override { return nullptr; }
|
const u8* GetIRDataPtr() const override { return nullptr; }
|
||||||
u8* GetIRDataPtr() override { return nullptr; }
|
u8* GetIRDataPtr() override { return nullptr; }
|
||||||
u32 GetIRDataFormatOffset() const override { return 0; }
|
u32 GetIRDataFormatOffset() const override { return 0; }
|
||||||
|
IRReportFormat GetIRReportFormat() const override { return IRReportFormat::None; }
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
|
@ -162,7 +164,10 @@ struct ReportCoreExt8 : IncludeCore, NoAccel, NoIR, IncludeExt<2, 8>
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ReportCoreAccelIR12 : IncludeCore, IncludeAccel, IncludeIR<5, 12>, NoExt
|
struct ReportCoreAccelIR12 : IncludeCore,
|
||||||
|
IncludeAccel,
|
||||||
|
IncludeIR<IRReportFormat::Extended, 5, 12>,
|
||||||
|
NoExt
|
||||||
{
|
{
|
||||||
u32 GetDataSize() const override { return 17; }
|
u32 GetDataSize() const override { return 17; }
|
||||||
};
|
};
|
||||||
|
@ -175,11 +180,17 @@ struct ReportCoreAccelExt16 : IncludeCore, IncludeAccel, NoIR, IncludeExt<5, 16>
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ReportCoreIR10Ext9 : IncludeCore, NoAccel, IncludeIR<2, 10>, IncludeExt<12, 9>
|
struct ReportCoreIR10Ext9 : IncludeCore,
|
||||||
|
NoAccel,
|
||||||
|
IncludeIR<IRReportFormat::Basic, 2, 10>,
|
||||||
|
IncludeExt<12, 9>
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ReportCoreAccelIR10Ext6 : IncludeCore, IncludeAccel, IncludeIR<5, 10>, IncludeExt<15, 6>
|
struct ReportCoreAccelIR10Ext6 : IncludeCore,
|
||||||
|
IncludeAccel,
|
||||||
|
IncludeIR<IRReportFormat::Basic, 5, 10>,
|
||||||
|
IncludeExt<15, 6>
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -187,7 +198,7 @@ struct ReportExt21 : NoCore, NoAccel, NoIR, IncludeExt<0, 21>
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ReportInterleave1 : IncludeCore, IncludeIR<3, 18, 0>, NoExt
|
struct ReportInterleave1 : IncludeCore, IncludeIR<IRReportFormat::Full1, 3, 18, 0>, NoExt
|
||||||
{
|
{
|
||||||
// FYI: Only 8-bits of precision in this report, and no Y axis.
|
// FYI: Only 8-bits of precision in this report, and no Y axis.
|
||||||
void GetAccelData(AccelData* accel) const override
|
void GetAccelData(AccelData* accel) const override
|
||||||
|
@ -220,7 +231,7 @@ struct ReportInterleave1 : IncludeCore, IncludeIR<3, 18, 0>, NoExt
|
||||||
u32 GetDataSize() const override { return 21; }
|
u32 GetDataSize() const override { return 21; }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ReportInterleave2 : IncludeCore, IncludeIR<3, 18, 18>, NoExt
|
struct ReportInterleave2 : IncludeCore, IncludeIR<IRReportFormat::Full2, 3, 18, 18>, NoExt
|
||||||
{
|
{
|
||||||
// FYI: Only 8-bits of precision in this report, and no X axis.
|
// FYI: Only 8-bits of precision in this report, and no X axis.
|
||||||
void GetAccelData(AccelData* accel) const override
|
void GetAccelData(AccelData* accel) const override
|
||||||
|
@ -372,6 +383,11 @@ u32 DataReportBuilder::GetIRDataFormatOffset() const
|
||||||
return m_manip->GetIRDataFormatOffset();
|
return m_manip->GetIRDataFormatOffset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IRReportFormat DataReportBuilder::GetIRReportFormat() const
|
||||||
|
{
|
||||||
|
return m_manip->GetIRReportFormat();
|
||||||
|
}
|
||||||
|
|
||||||
void DataReportBuilder::GetCoreData(CoreData* core) const
|
void DataReportBuilder::GetCoreData(CoreData* core) const
|
||||||
{
|
{
|
||||||
m_manip->GetCoreData(core);
|
m_manip->GetCoreData(core);
|
||||||
|
|
|
@ -39,6 +39,7 @@ public:
|
||||||
virtual const u8* GetIRDataPtr() const = 0;
|
virtual const u8* GetIRDataPtr() const = 0;
|
||||||
virtual u32 GetIRDataSize() const = 0;
|
virtual u32 GetIRDataSize() const = 0;
|
||||||
virtual u32 GetIRDataFormatOffset() const = 0;
|
virtual u32 GetIRDataFormatOffset() const = 0;
|
||||||
|
virtual IRReportFormat GetIRReportFormat() const = 0;
|
||||||
|
|
||||||
virtual u8* GetExtDataPtr() = 0;
|
virtual u8* GetExtDataPtr() = 0;
|
||||||
virtual const u8* GetExtDataPtr() const = 0;
|
virtual const u8* GetExtDataPtr() const = 0;
|
||||||
|
@ -76,6 +77,7 @@ public:
|
||||||
u32 GetExtDataSize() const;
|
u32 GetExtDataSize() const;
|
||||||
|
|
||||||
u32 GetIRDataFormatOffset() const;
|
u32 GetIRDataFormatOffset() const;
|
||||||
|
IRReportFormat GetIRReportFormat() const;
|
||||||
|
|
||||||
void GetCoreData(CoreData*) const;
|
void GetCoreData(CoreData*) const;
|
||||||
void GetAccelData(AccelData*) const;
|
void GetAccelData(AccelData*) const;
|
||||||
|
|
|
@ -50,6 +50,15 @@ enum class OutputReportID : u8
|
||||||
IRLogicEnable2 = 0x1a,
|
IRLogicEnable2 = 0x1a,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class IRReportFormat : u8
|
||||||
|
{
|
||||||
|
None,
|
||||||
|
Basic, // from ReportCoreIR10Ext9 or ReportCoreAccelIR10Ext6
|
||||||
|
Extended, // from ReportCoreAccelIR12
|
||||||
|
Full1, // from ReportInterleave1
|
||||||
|
Full2, // from ReportInterleave2
|
||||||
|
};
|
||||||
|
|
||||||
enum class LED : u8
|
enum class LED : u8
|
||||||
{
|
{
|
||||||
None = 0x00,
|
None = 0x00,
|
||||||
|
|
Loading…
Reference in New Issue