1
0
mirror of https://github.com/preble/libpinproc synced 2026-02-24 18:25:23 +01:00

Keep track of chip_id and use it when retrieving switch states.

This commit is contained in:
Gerry Stellenberg
2013-10-02 13:45:18 -05:00
parent 2277042664
commit ab0739e0dd
3 changed files with 26 additions and 7 deletions

View File

@@ -164,7 +164,10 @@ PRResult PRDevice::Reset(uint32_t resetFlags)
int PRDevice::GetEvents(PREvent *events, int maxEvents) int PRDevice::GetEvents(PREvent *events, int maxEvents)
{ {
if (SortReturningData() != kPRSuccess) if (SortReturningData() != kPRSuccess)
return -1; {
PRSetLastErrorText("GetEvents ERROR: Error in CollectReadData");
return -1;
}
// The unrequestedDataQueue only has unrequested switch event data. Pop // The unrequestedDataQueue only has unrequested switch event data. Pop
// events out 1 at a time, interpret them, and populate the outgoing list with them. // events out 1 at a time, interpret them, and populate the outgoing list with them.
@@ -796,16 +799,28 @@ PRResult PRDevice::SwitchGetStates( PREventType * switchStates, uint16_t numSwit
// situations; so the inefficiencies are acceptable. // situations; so the inefficiencies are acceptable.
for (i = 0; i < numSwitches / 32; i++) for (i = 0; i < numSwitches / 32; i++)
{ {
rc = RequestData(P_ROC_BUS_SWITCH_CTRL_SELECT,
P_ROC_SWITCH_CTRL_STATE_BASE_ADDR + i, 1);
if (combinedVersionRevision < P_ROC_VER_REV_FIXED_SWITCH_STATE_READS) { if (chip_id == P_ROC_CHIP_ID)
{
rc = RequestData(P_ROC_BUS_SWITCH_CTRL_SELECT, rc = RequestData(P_ROC_BUS_SWITCH_CTRL_SELECT,
P_ROC_SWITCH_CTRL_OLD_DEBOUNCE_BASE_ADDR + i, 1); P_ROC_SWITCH_CTRL_STATE_BASE_ADDR + i, 1);
if (combinedVersionRevision < P_ROC_VER_REV_FIXED_SWITCH_STATE_READS) {
rc = RequestData(P_ROC_BUS_SWITCH_CTRL_SELECT,
P_ROC_SWITCH_CTRL_OLD_DEBOUNCE_BASE_ADDR + i, 1);
}
else {
rc = RequestData(P_ROC_BUS_SWITCH_CTRL_SELECT,
P_ROC_SWITCH_CTRL_DEBOUNCE_BASE_ADDR + i, 1);
}
} }
else { else // chip == P3_ROC_CHIP_ID)
{
rc = RequestData(P_ROC_BUS_SWITCH_CTRL_SELECT, rc = RequestData(P_ROC_BUS_SWITCH_CTRL_SELECT,
P_ROC_SWITCH_CTRL_DEBOUNCE_BASE_ADDR + i, 1); P3_ROC_SWITCH_CTRL_STATE_BASE_ADDR + i, 1);
rc = RequestData(P_ROC_BUS_SWITCH_CTRL_SELECT,
P3_ROC_SWITCH_CTRL_DEBOUNCE_BASE_ADDR + i, 1);
} }
} }
@@ -1102,6 +1117,7 @@ PRResult PRDevice::VerifyChipID()
else rc = kPRSuccess; else rc = kPRSuccess;
//std::cout << rc << " words read. \n" //std::cout << rc << " words read. \n"
DEBUG(PRLog(kPRLogError, "FPGA Chip ID: 0x%x\n", buffer[1])); DEBUG(PRLog(kPRLogError, "FPGA Chip ID: 0x%x\n", buffer[1]));
chip_id = buffer[1];
revision = buffer[2] & 0xffff; revision = buffer[2] & 0xffff;
version = buffer[2] >> 16; version = buffer[2] >> 16;
CalcCombinedVerRevision(); CalcCombinedVerRevision();

View File

@@ -147,6 +147,7 @@ protected:
uint16_t version; uint16_t version;
uint16_t revision; uint16_t revision;
uint32_t chip_id;
uint32_t combinedVersionRevision; uint32_t combinedVersionRevision;
/** /**
* Calculated combined Version/Revision number. * Calculated combined Version/Revision number.

View File

@@ -154,6 +154,8 @@ const uint32_t P_ROC_JTAG_TDI_MEMORY_BASE_ADDR = 0x800;
const uint32_t P_ROC_SWITCH_CTRL_STATE_BASE_ADDR = 4; const uint32_t P_ROC_SWITCH_CTRL_STATE_BASE_ADDR = 4;
const uint32_t P_ROC_SWITCH_CTRL_OLD_DEBOUNCE_BASE_ADDR = 11; const uint32_t P_ROC_SWITCH_CTRL_OLD_DEBOUNCE_BASE_ADDR = 11;
const uint32_t P_ROC_SWITCH_CTRL_DEBOUNCE_BASE_ADDR = 12; const uint32_t P_ROC_SWITCH_CTRL_DEBOUNCE_BASE_ADDR = 12;
const uint32_t P3_ROC_SWITCH_CTRL_STATE_BASE_ADDR = 16;
const uint32_t P3_ROC_SWITCH_CTRL_DEBOUNCE_BASE_ADDR = 32;
const uint32_t P_ROC_EVENT_TYPE_SWITCH = 0; const uint32_t P_ROC_EVENT_TYPE_SWITCH = 0;
const uint32_t P_ROC_EVENT_TYPE_DMD = 1; const uint32_t P_ROC_EVENT_TYPE_DMD = 1;