From ab0739e0ddba2cf3dbcc5e528652cb223479202a Mon Sep 17 00:00:00 2001 From: Gerry Stellenberg Date: Wed, 2 Oct 2013 13:45:18 -0500 Subject: [PATCH] Keep track of chip_id and use it when retrieving switch states. --- src/PRDevice.cpp | 30 +++++++++++++++++++++++------- src/PRDevice.h | 1 + src/PRHardware.h | 2 ++ 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/PRDevice.cpp b/src/PRDevice.cpp index 5c268d0..9a6772c 100644 --- a/src/PRDevice.cpp +++ b/src/PRDevice.cpp @@ -164,7 +164,10 @@ PRResult PRDevice::Reset(uint32_t resetFlags) int PRDevice::GetEvents(PREvent *events, int maxEvents) { if (SortReturningData() != kPRSuccess) - return -1; + { + PRSetLastErrorText("GetEvents ERROR: Error in CollectReadData"); + return -1; + } // The unrequestedDataQueue only has unrequested switch event data. Pop // 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. 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, - 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, - 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; //std::cout << rc << " words read. \n" DEBUG(PRLog(kPRLogError, "FPGA Chip ID: 0x%x\n", buffer[1])); + chip_id = buffer[1]; revision = buffer[2] & 0xffff; version = buffer[2] >> 16; CalcCombinedVerRevision(); diff --git a/src/PRDevice.h b/src/PRDevice.h index e15bf68..69a25f5 100644 --- a/src/PRDevice.h +++ b/src/PRDevice.h @@ -147,6 +147,7 @@ protected: uint16_t version; uint16_t revision; + uint32_t chip_id; uint32_t combinedVersionRevision; /** * Calculated combined Version/Revision number. diff --git a/src/PRHardware.h b/src/PRHardware.h index 2edc2b4..809f890 100644 --- a/src/PRHardware.h +++ b/src/PRHardware.h @@ -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_OLD_DEBOUNCE_BASE_ADDR = 11; 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_DMD = 1;