From 9715bdfd444d0d384f976aa624bb113a8265695b Mon Sep 17 00:00:00 2001 From: Roy Eltham Date: Wed, 27 Feb 2013 10:01:04 -0800 Subject: [PATCH 1/5] Minor change to make project name compatible with VS 2010 Visual Studio 2010 doesn't like the '/' character in the project names. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 33b717f..f47c68e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -146,7 +146,7 @@ if(MSVC) endforeach() endif() # - set(LABEL_SUFFIX "${LABEL_SUFFIX} ${LIB_RT_OPTION}") + set(LABEL_SUFFIX "${LABEL_SUFFIX} ${LIB_RT_SUFFIX}") # b) Change prefix for static libraries set(CMAKE_STATIC_LIBRARY_PREFIX "lib") # to distinguish static libraries from DLL import libs From dec4955b15c932576829b6c6720bb14d3f595ddd Mon Sep 17 00:00:00 2001 From: Roy Eltham Date: Thu, 28 Feb 2013 19:16:18 -0800 Subject: [PATCH 2/5] Added functions for PD-LED boards. --- include/pinproc.h | 42 ++++++++++++++++++++++++++++++++++- src/pinproc.cpp | 56 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 1 deletion(-) diff --git a/include/pinproc.h b/include/pinproc.h index a8975fe..d4f6eae 100644 --- a/include/pinproc.h +++ b/include/pinproc.h @@ -537,7 +537,47 @@ PINPROC_API PRResult PRJTAGReadTDIMemory(PRHandle handle, uint16_t tableOffset, /** Read the JTAG status register for the command complete bit and JTAG pin states. */ PINPROC_API PRResult PRJTAGGetStatus(PRHandle handle, PRJTAGStatus * status); -/** @} */ // End of DMD +/** @} */ // End of JTAG + +// PD-LED + +/** + * @defgroup pdled PD-LED Control + * @{ + */ + +typedef enum PRLEDRegisterType { + kPRLEDRegisterTypeLEDIndex = 0, + kPRLEDRegisterTypeColor = 1, + kPRLEDRegisterTypeFadeColor = 2, + kPRLEDRegisterTypeFadeRateLow = 3, + kPRLEDRegisterTypeFadeRateHigh = 4 +} PRPDLEDRegisterType; + +typedef struct PRLED { + uint8_t boardAddr; + uint8_t LEDIndex; +} PRLED; + +typedef struct PRLEDRGB { + PRLED* pRedLED; + PRLED* pGreenLED; + PRLED* pBlueLED; +} PRLEDRGB; + +/** Sets the color of a given PRLED. */ +PINPROC_API PRResult PRLEDColor(PRHandle handle, PRLED * pLED, uint8_t color); +/** Sets the fade color and rate on a given PRLED. */ +PINPROC_API PRResult PRLEDFade(PRHandle handle, PRLED * pLED, uint8_t fadeColor, uint16_t fadeRate); + +/** Sets the color of a given PRLEDRGB. */ +PINPROC_API PRResult PRLEDRGBColor(PRHandle handle, PRLEDRGB * pLED, uint32_t color); +/** Sets the fade color and rate on a given PRLEDRGB. */ +PINPROC_API PRResult PRLEDRGBFade(PRHandle handle, PRLEDRGB * pLED, uint32_t fadeColor, uint16_t fadeRate); + + +/** @} */ // End of PD-LED + /** @cond */ PINPROC_EXTERN_C_END diff --git a/src/pinproc.cpp b/src/pinproc.cpp index 55910f6..00d6712 100644 --- a/src/pinproc.cpp +++ b/src/pinproc.cpp @@ -567,3 +567,59 @@ PRResult PRJTAGGetStatus(PRHandle handle, PRJTAGStatus * status) { return handleAsDevice->PRJTAGGetStatus(status); } + +void FillLEDCommand(uint8_t boardAddr, uint8_t LEDIndex, PRLEDRegisterType reg, uint8_t value, uint32_t * pData) +{ + pData[0] = (0x1 << 24) | (boardAddr << 16) | (kPRLEDRegisterTypeLEDIndex << 8) | LEDIndex; + pData[1] = (0x1 << 24) | (boardAddr << 16) | (reg << 8) | value; +} + +PRResult PRLEDColor(PRHandle handle, PRLED * pLED, uint8_t color) +{ + uint32_t data[2]; + + FillLEDCommand(pLED->boardAddr, pLED->LEDIndex, kPRLEDRegisterTypeColor, color, data); + + return PRWriteData(handle, 3, 0xc00, 2, data); +} + +PRResult PRLEDFade(PRHandle handle, PRLED * pLED, uint8_t fadeColor, uint16_t fadeRate) +{ + uint32_t data[6]; + + FillLEDCommand(pLED->boardAddr, pLED->LEDIndex, kPRLEDRegisterTypeFadeColor, fadeColor, data); + FillLEDCommand(pLED->boardAddr, pLED->LEDIndex, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, &data[2]); + FillLEDCommand(pLED->boardAddr, pLED->LEDIndex, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[4]); + + return PRWriteData(handle, 3, 0xc00, 6, data); +} + +PRResult PRLEDRGBColor(PRHandle handle, PRLEDRGB * pLED, uint32_t color) +{ + uint32_t data[6]; + + FillLEDCommand(pLED->pRedLED->boardAddr, pLED->pRedLED->LEDIndex, kPRLEDRegisterTypeColor, (color >> 16) & 0xFF, data); + FillLEDCommand(pLED->pGreenLED->boardAddr, pLED->pGreenLED->LEDIndex, kPRLEDRegisterTypeColor, (color >> 8) & 0xFF, &data[2]); + FillLEDCommand(pLED->pBlueLED->boardAddr, pLED->pBlueLED->LEDIndex, kPRLEDRegisterTypeColor, color & 0xFF, &data[4]); + + return PRWriteData(handle, 3, 0xc00, 6, data); +} + +PRResult PRLEDRGBFade(PRHandle handle, PRLEDRGB * pLED, uint32_t fadeColor, uint16_t fadeRate) +{ + uint32_t data[18]; + + FillLEDCommand(pLED->pRedLED->boardAddr, pLED->pRedLED->LEDIndex, kPRLEDRegisterTypeFadeColor, (fadeColor >> 16) & 0xFF, data); + FillLEDCommand(pLED->pRedLED->boardAddr, pLED->pRedLED->LEDIndex, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, &data[2]); + FillLEDCommand(pLED->pRedLED->boardAddr, pLED->pRedLED->LEDIndex, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[4]); + + FillLEDCommand(pLED->pGreenLED->boardAddr, pLED->pGreenLED->LEDIndex, kPRLEDRegisterTypeFadeColor, (fadeColor >> 8) & 0xFF, &data[6]); + FillLEDCommand(pLED->pGreenLED->boardAddr, pLED->pGreenLED->LEDIndex, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, &data[8]); + FillLEDCommand(pLED->pGreenLED->boardAddr, pLED->pGreenLED->LEDIndex, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[10]); + + FillLEDCommand(pLED->pBlueLED->boardAddr, pLED->pBlueLED->LEDIndex, kPRLEDRegisterTypeFadeColor, fadeColor & 0xFF, &data[12]); + FillLEDCommand(pLED->pBlueLED->boardAddr, pLED->pBlueLED->LEDIndex, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, &data[14]); + FillLEDCommand(pLED->pBlueLED->boardAddr, pLED->pBlueLED->LEDIndex, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[16]); + + return PRWriteData(handle, 3, 0xc00, 18, data); +} From c871ddfeb3fbf0d16eee1ec069db3fac65b89816 Mon Sep 17 00:00:00 2001 From: Roy Eltham Date: Thu, 28 Feb 2013 20:36:01 -0800 Subject: [PATCH 3/5] Revert "Added functions for PD-LED boards." This reverts commit dec4955b15c932576829b6c6720bb14d3f595ddd. --- include/pinproc.h | 42 +---------------------------------- src/pinproc.cpp | 56 ----------------------------------------------- 2 files changed, 1 insertion(+), 97 deletions(-) diff --git a/include/pinproc.h b/include/pinproc.h index d4f6eae..a8975fe 100644 --- a/include/pinproc.h +++ b/include/pinproc.h @@ -537,47 +537,7 @@ PINPROC_API PRResult PRJTAGReadTDIMemory(PRHandle handle, uint16_t tableOffset, /** Read the JTAG status register for the command complete bit and JTAG pin states. */ PINPROC_API PRResult PRJTAGGetStatus(PRHandle handle, PRJTAGStatus * status); -/** @} */ // End of JTAG - -// PD-LED - -/** - * @defgroup pdled PD-LED Control - * @{ - */ - -typedef enum PRLEDRegisterType { - kPRLEDRegisterTypeLEDIndex = 0, - kPRLEDRegisterTypeColor = 1, - kPRLEDRegisterTypeFadeColor = 2, - kPRLEDRegisterTypeFadeRateLow = 3, - kPRLEDRegisterTypeFadeRateHigh = 4 -} PRPDLEDRegisterType; - -typedef struct PRLED { - uint8_t boardAddr; - uint8_t LEDIndex; -} PRLED; - -typedef struct PRLEDRGB { - PRLED* pRedLED; - PRLED* pGreenLED; - PRLED* pBlueLED; -} PRLEDRGB; - -/** Sets the color of a given PRLED. */ -PINPROC_API PRResult PRLEDColor(PRHandle handle, PRLED * pLED, uint8_t color); -/** Sets the fade color and rate on a given PRLED. */ -PINPROC_API PRResult PRLEDFade(PRHandle handle, PRLED * pLED, uint8_t fadeColor, uint16_t fadeRate); - -/** Sets the color of a given PRLEDRGB. */ -PINPROC_API PRResult PRLEDRGBColor(PRHandle handle, PRLEDRGB * pLED, uint32_t color); -/** Sets the fade color and rate on a given PRLEDRGB. */ -PINPROC_API PRResult PRLEDRGBFade(PRHandle handle, PRLEDRGB * pLED, uint32_t fadeColor, uint16_t fadeRate); - - -/** @} */ // End of PD-LED - +/** @} */ // End of DMD /** @cond */ PINPROC_EXTERN_C_END diff --git a/src/pinproc.cpp b/src/pinproc.cpp index 00d6712..55910f6 100644 --- a/src/pinproc.cpp +++ b/src/pinproc.cpp @@ -567,59 +567,3 @@ PRResult PRJTAGGetStatus(PRHandle handle, PRJTAGStatus * status) { return handleAsDevice->PRJTAGGetStatus(status); } - -void FillLEDCommand(uint8_t boardAddr, uint8_t LEDIndex, PRLEDRegisterType reg, uint8_t value, uint32_t * pData) -{ - pData[0] = (0x1 << 24) | (boardAddr << 16) | (kPRLEDRegisterTypeLEDIndex << 8) | LEDIndex; - pData[1] = (0x1 << 24) | (boardAddr << 16) | (reg << 8) | value; -} - -PRResult PRLEDColor(PRHandle handle, PRLED * pLED, uint8_t color) -{ - uint32_t data[2]; - - FillLEDCommand(pLED->boardAddr, pLED->LEDIndex, kPRLEDRegisterTypeColor, color, data); - - return PRWriteData(handle, 3, 0xc00, 2, data); -} - -PRResult PRLEDFade(PRHandle handle, PRLED * pLED, uint8_t fadeColor, uint16_t fadeRate) -{ - uint32_t data[6]; - - FillLEDCommand(pLED->boardAddr, pLED->LEDIndex, kPRLEDRegisterTypeFadeColor, fadeColor, data); - FillLEDCommand(pLED->boardAddr, pLED->LEDIndex, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, &data[2]); - FillLEDCommand(pLED->boardAddr, pLED->LEDIndex, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[4]); - - return PRWriteData(handle, 3, 0xc00, 6, data); -} - -PRResult PRLEDRGBColor(PRHandle handle, PRLEDRGB * pLED, uint32_t color) -{ - uint32_t data[6]; - - FillLEDCommand(pLED->pRedLED->boardAddr, pLED->pRedLED->LEDIndex, kPRLEDRegisterTypeColor, (color >> 16) & 0xFF, data); - FillLEDCommand(pLED->pGreenLED->boardAddr, pLED->pGreenLED->LEDIndex, kPRLEDRegisterTypeColor, (color >> 8) & 0xFF, &data[2]); - FillLEDCommand(pLED->pBlueLED->boardAddr, pLED->pBlueLED->LEDIndex, kPRLEDRegisterTypeColor, color & 0xFF, &data[4]); - - return PRWriteData(handle, 3, 0xc00, 6, data); -} - -PRResult PRLEDRGBFade(PRHandle handle, PRLEDRGB * pLED, uint32_t fadeColor, uint16_t fadeRate) -{ - uint32_t data[18]; - - FillLEDCommand(pLED->pRedLED->boardAddr, pLED->pRedLED->LEDIndex, kPRLEDRegisterTypeFadeColor, (fadeColor >> 16) & 0xFF, data); - FillLEDCommand(pLED->pRedLED->boardAddr, pLED->pRedLED->LEDIndex, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, &data[2]); - FillLEDCommand(pLED->pRedLED->boardAddr, pLED->pRedLED->LEDIndex, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[4]); - - FillLEDCommand(pLED->pGreenLED->boardAddr, pLED->pGreenLED->LEDIndex, kPRLEDRegisterTypeFadeColor, (fadeColor >> 8) & 0xFF, &data[6]); - FillLEDCommand(pLED->pGreenLED->boardAddr, pLED->pGreenLED->LEDIndex, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, &data[8]); - FillLEDCommand(pLED->pGreenLED->boardAddr, pLED->pGreenLED->LEDIndex, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[10]); - - FillLEDCommand(pLED->pBlueLED->boardAddr, pLED->pBlueLED->LEDIndex, kPRLEDRegisterTypeFadeColor, fadeColor & 0xFF, &data[12]); - FillLEDCommand(pLED->pBlueLED->boardAddr, pLED->pBlueLED->LEDIndex, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, &data[14]); - FillLEDCommand(pLED->pBlueLED->boardAddr, pLED->pBlueLED->LEDIndex, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[16]); - - return PRWriteData(handle, 3, 0xc00, 18, data); -} From cd9b88dea63746d79e194804f44a66340ec9da05 Mon Sep 17 00:00:00 2001 From: Roy Eltham Date: Thu, 28 Feb 2013 21:20:29 -0800 Subject: [PATCH 4/5] Added PD-LED board functions. --- include/pinproc.h | 42 ++++++++++++++++++- src/PRDevice.cpp | 100 +++++++++++++++++++++++++++++++++++++++++++++ src/PRDevice.h | 7 ++++ src/PRHardware.cpp | 7 ++++ src/PRHardware.h | 10 +++++ src/pinproc.cpp | 35 ++++++++++++++++ 6 files changed, 200 insertions(+), 1 deletion(-) diff --git a/include/pinproc.h b/include/pinproc.h index a8975fe..91746f6 100644 --- a/include/pinproc.h +++ b/include/pinproc.h @@ -537,7 +537,47 @@ PINPROC_API PRResult PRJTAGReadTDIMemory(PRHandle handle, uint16_t tableOffset, /** Read the JTAG status register for the command complete bit and JTAG pin states. */ PINPROC_API PRResult PRJTAGGetStatus(PRHandle handle, PRJTAGStatus * status); -/** @} */ // End of DMD +/** @} */ // End of JTAG + +// PD-LED + +/** + * @defgroup pdled PD-LED Control + * @{ + */ + + +typedef struct PRLED { + uint8_t boardAddr; + uint8_t LEDIndex; +} PRLED; + +typedef struct PRLEDRGB { + PRLED* pRedLED; + PRLED* pGreenLED; + PRLED* pBlueLED; +} PRLEDRGB; + +/** Sets the color of a given PRLED. */ +PINPROC_API PRResult PRLEDColor(PRHandle handle, PRLED * pLED, uint8_t color); +/** Sets the fade color on a given PRLED. */ +PINPROC_API PRResult PRLEDFadeColor(PRHandle handle, PRLED * pLED, uint8_t fadeColor); +/** Sets the fade color and rate on a given PRLED. Note: The rate will apply to any future PRLEDFadeColor or PRLEDRGBFadeColor calls on the same PD-LED board. */ +PINPROC_API PRResult PRLEDFade(PRHandle handle, PRLED * pLED, uint8_t fadeColor, uint16_t fadeRate); + +/** Sets the fade rate on a given board. Note: The rate will apply to any future PRLEDFadeColor or PRLEDRGBFadeColor calls on the same PD-LED board. */ +PINPROC_API PRResult PRLEDFadeRate(PRHandle handle, uint8_t boardAddr, uint16_t fadeRate); + +/** Sets the color of a given PRLEDRGB. */ +PINPROC_API PRResult PRLEDRGBColor(PRHandle handle, PRLEDRGB * pLED, uint32_t color); +/** Sets the fade color and rate on a given PRLEDRGB. Note: The rate will apply to any future PRLEDFadeColor or PRLEDRGBFadeColor calls on any of the referenced PD-LED boards. */ +PINPROC_API PRResult PRLEDRGBFade(PRHandle handle, PRLEDRGB * pLED, uint32_t fadeColor, uint16_t fadeRate); +/** Sets the fade color on a given PRLEDRGB. */ +PINPROC_API PRResult PRLEDRGBFadeColor(PRHandle handle, PRLEDRGB * pLED, uint32_t fadeColor); + + +/** @} */ // End of PD-LED + /** @cond */ PINPROC_EXTERN_C_END diff --git a/src/PRDevice.cpp b/src/PRDevice.cpp index 8e118b0..02949ac 100644 --- a/src/PRDevice.cpp +++ b/src/PRDevice.cpp @@ -1344,3 +1344,103 @@ int PRDevice::GetVersionInfo(uint16_t *verPtr, uint16_t *revPtr, uint16_t *combi *combinedPtr = combinedVersionRevision; return 0; } + +PRResult PRDevice::PRLEDColor(PRLED * pLED, uint8_t color) +{ + uint32_t data[2]; + + FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->LEDIndex, data); + FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeColor, color, &data[1]); + + return WriteDataRaw(3, 0xc00, 2, data); +} + +PRResult PRDevice::PRLEDFade(PRLED * pLED, uint8_t fadeColor, uint16_t fadeRate) +{ + uint32_t data[4]; + + FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, data); + FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[1]); + + FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->LEDIndex, &data[2]); + FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor, &data[3]); + + return WriteDataRaw(3, 0xc00, 4, data); +} + +PRResult PRDevice::PRLEDFadeColor(PRLED * pLED, uint8_t fadeColor) +{ + uint32_t data[2]; + + FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->LEDIndex, data); + FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor, &data[1]); + + return WriteDataRaw(3, 0xc00, 2, data); +} + +PRResult PRDevice::PRLEDFadeRate(uint8_t boardAddr, uint16_t fadeRate) +{ + uint32_t data[2]; + + FillLEDWriteCommand(boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, data); + FillLEDWriteCommand(boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[1]); + + return WriteDataRaw(3, 0xc00, 2, data); +} + +PRResult PRDevice::PRLEDRGBColor(PRLEDRGB * pLED, uint32_t color) +{ + uint32_t data[6]; + + FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pRedLED->LEDIndex, data); + FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeColor, (color >> 16) & 0xFF, &data[1]); + + FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pGreenLED->LEDIndex, &data[2]); + FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeColor, (color >> 8) & 0xFF, &data[3]); + + FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pBlueLED->LEDIndex, &data[4]); + FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeColor, color & 0xFF, &data[5]); + + return WriteDataRaw(3, 0xc00, 6, data); +} + +PRResult PRDevice::PRLEDRGBFade(PRLEDRGB * pLED, uint32_t fadeColor, uint16_t fadeRate) +{ + uint32_t data[12]; + + FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, data); + FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[1]); + + FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pRedLED->LEDIndex, &data[2]); + FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 16) & 0xFF, &data[3]); + + FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, &data[4]); + FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[5]); + + FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pGreenLED->LEDIndex, &data[6]); + FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 8) & 0xFF, &data[7]); + + FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, &data[8]); + FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[9]); + + FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pBlueLED->LEDIndex, &data[10]); + FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor & 0xFF, &data[11]); + + return WriteDataRaw(3, 0xc00, 12, data); +} + +PRResult PRDevice::PRLEDRGBFadeColor(PRLEDRGB * pLED, uint32_t fadeColor) +{ + uint32_t data[6]; + + FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pRedLED->LEDIndex, data); + FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 16) & 0xFF, &data[1]); + + FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pGreenLED->LEDIndex, &data[2]); + FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 8) & 0xFF, &data[3]); + + FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pBlueLED->LEDIndex, &data[4]); + FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor & 0xFF, &data[5]); + + return WriteDataRaw(3, 0xc00, 6, data); +} diff --git a/src/PRDevice.h b/src/PRDevice.h index fdd89d9..e15bf68 100644 --- a/src/PRDevice.h +++ b/src/PRDevice.h @@ -86,6 +86,13 @@ public: PRResult PRJTAGReadTDIMemory(uint16_t tableOffset, uint16_t numWords, uint32_t * tdiData); PRResult PRJTAGGetStatus(PRJTAGStatus * status); + PRResult PRLEDColor(PRLED * pLED, uint8_t color); + PRResult PRLEDFade(PRLED * pLED, uint8_t fadeColor, uint16_t fadeRate); + PRResult PRLEDFadeColor(PRLED * pLED, uint8_t fadeColor); + PRResult PRLEDFadeRate(uint8_t boardAddr, uint16_t fadeRate); + PRResult PRLEDRGBColor(PRLEDRGB * pLED, uint32_t color); + PRResult PRLEDRGBFade(PRLEDRGB * pLED, uint32_t fadeColor, uint16_t fadeRate); + PRResult PRLEDRGBFadeColor(PRLEDRGB * pLED, uint32_t fadeColor); int GetVersionInfo(uint16_t *verPtr, uint16_t *revPtr, uint16_t *combinedPtr); diff --git a/src/PRHardware.cpp b/src/PRHardware.cpp index 2f2885b..257988c 100644 --- a/src/PRHardware.cpp +++ b/src/PRHardware.cpp @@ -344,6 +344,13 @@ int32_t CreateJTAGShiftTDODataBurst ( uint32_t * burst, uint16_t numBits, bool_t return kPRSuccess; } +void FillLEDWriteCommand(uint8_t boardAddr, PRLEDRegisterType reg, uint8_t value, uint32_t * pData) +{ + pData[0] = (0x1 << 24) | (boardAddr << 16) | (reg << 8) | value; +} + + + /** * This is where all FTDI driver-specific code should go. * As we add support for other drivers (such as D2xx on Windows), we will add more implementations of the PRHardware*() functions here. diff --git a/src/PRHardware.h b/src/PRHardware.h index 8fe5a5c..bc06fbd 100644 --- a/src/PRHardware.h +++ b/src/PRHardware.h @@ -254,6 +254,14 @@ const uint32_t P_ROC_DMD_RCLK_LOW_CYCLES_SHIFT = 24; const uint32_t P_ROC_DMD_DOT_TABLE_BASE_ADDR = 0x1000; +typedef enum PRLEDRegisterType { + kPRLEDRegisterTypeLEDIndex = 0, + kPRLEDRegisterTypeColor = 1, + kPRLEDRegisterTypeFadeColor = 2, + kPRLEDRegisterTypeFadeRateLow = 3, + kPRLEDRegisterTypeFadeRateHigh = 4 +} PRPDLEDRegisterType; + typedef struct PRSwitchRuleInternal { uint8_t switchNum; /**< Number of the physical switch, or for linked driver changes the virtual switch number (224 and up). */ PREventType eventType; /**< The event type that this rule generates. Determines closed/open, debounced/non-debounced. */ @@ -291,6 +299,8 @@ int32_t CreateJTAGLatchOutputsBurst ( uint32_t * burst, PRJTAGOutputs *jtagOutpu int32_t CreateJTAGForceOutputsBurst ( uint32_t * burst, PRJTAGOutputs *jtagOutputs); int32_t CreateJTAGShiftTDODataBurst ( uint32_t * burst, uint16_t numBits, bool_t dataBlockComplete); +void FillLEDWriteCommand(uint8_t boardAddr, PRLEDRegisterType reg, uint8_t value, uint32_t * pData); + PRResult PRHardwareOpen(); void PRHardwareClose(); int PRHardwareRead(uint8_t *buffer, int maxBytes); diff --git a/src/pinproc.cpp b/src/pinproc.cpp index 55910f6..e6f65ba 100644 --- a/src/pinproc.cpp +++ b/src/pinproc.cpp @@ -567,3 +567,38 @@ PRResult PRJTAGGetStatus(PRHandle handle, PRJTAGStatus * status) { return handleAsDevice->PRJTAGGetStatus(status); } + +PRResult PRLEDColor(PRHandle handle, PRLED * pLED, uint8_t color) +{ + return handleAsDevice->PRLEDColor(pLED, color); +} + +PRResult PRLEDFade(PRHandle handle, PRLED * pLED, uint8_t fadeColor, uint16_t fadeRate) +{ + return handleAsDevice->PRLEDFade(pLED, fadeColor, fadeRate); +} + +PRResult PRLEDFadeColor(PRHandle handle, PRLED * pLED, uint8_t fadeColor) +{ + return handleAsDevice->PRLEDFadeColor(pLED, fadeColor); +} + +PRResult PRLEDFadeRate(PRHandle handle, uint8_t boardAddr, uint16_t fadeRate) +{ + return handleAsDevice->PRLEDFadeRate(boardAddr, fadeRate); +} + +PRResult PRLEDRGBColor(PRHandle handle, PRLEDRGB * pLED, uint32_t color) +{ + return handleAsDevice->PRLEDRGBColor(pLED, color); +} + +PRResult PRLEDRGBFade(PRHandle handle, PRLEDRGB * pLED, uint32_t fadeColor, uint16_t fadeRate) +{ + return handleAsDevice->PRLEDRGBFade(pLED, fadeColor, fadeRate); +} + +PRResult PRLEDRGBFadeColor(PRHandle handle, PRLEDRGB * pLED, uint32_t fadeColor) +{ + return handleAsDevice->PRLEDRGBFadeColor(pLED, fadeColor); +} From 0c975d372bdf91d44b27658d3b087fbc5a9cb49a Mon Sep 17 00:00:00 2001 From: Roy Eltham Date: Fri, 1 Mar 2013 09:59:37 -0800 Subject: [PATCH 5/5] Hardcoded number cleanup and more. Made the hard coded number cleanup changes Gerry requested. Also changed FillLEDWriteCommand to FillPDBCommand, now it can be used filling out any PDB command (extra constants in PRHardware.h). --- src/PRDevice.cpp | 103 ++++++++++++++++++++++++--------------------- src/PRHardware.cpp | 7 ++- src/PRHardware.h | 15 ++++++- 3 files changed, 74 insertions(+), 51 deletions(-) diff --git a/src/PRDevice.cpp b/src/PRDevice.cpp index 02949ac..d2acf62 100644 --- a/src/PRDevice.cpp +++ b/src/PRDevice.cpp @@ -1347,100 +1347,107 @@ int PRDevice::GetVersionInfo(uint16_t *verPtr, uint16_t *revPtr, uint16_t *combi PRResult PRDevice::PRLEDColor(PRLED * pLED, uint8_t color) { - uint32_t data[2]; + const int bufferWords = 2; + uint32_t buffer[bufferWords]; - FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->LEDIndex, data); - FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeColor, color, &data[1]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->LEDIndex, buffer); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->boardAddr, kPRLEDRegisterTypeColor, color, &buffer[1]); - return WriteDataRaw(3, 0xc00, 2, data); + return WriteDataRaw(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer); } PRResult PRDevice::PRLEDFade(PRLED * pLED, uint8_t fadeColor, uint16_t fadeRate) { - uint32_t data[4]; + const int bufferWords = 4; + uint32_t buffer[bufferWords]; - FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, data); - FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[1]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, buffer); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &buffer[1]); - FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->LEDIndex, &data[2]); - FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor, &data[3]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->LEDIndex, &buffer[2]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor, &buffer[3]); - return WriteDataRaw(3, 0xc00, 4, data); + return WriteDataRaw(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer); } PRResult PRDevice::PRLEDFadeColor(PRLED * pLED, uint8_t fadeColor) { - uint32_t data[2]; + const int bufferWords = 2; + uint32_t buffer[bufferWords]; - FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->LEDIndex, data); - FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor, &data[1]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->LEDIndex, buffer); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor, &buffer[1]); - return WriteDataRaw(3, 0xc00, 2, data); + return WriteDataRaw(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer); } PRResult PRDevice::PRLEDFadeRate(uint8_t boardAddr, uint16_t fadeRate) { - uint32_t data[2]; + const int bufferWords = 2; + uint32_t buffer[bufferWords]; - FillLEDWriteCommand(boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, data); - FillLEDWriteCommand(boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[1]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, buffer); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &buffer[1]); - return WriteDataRaw(3, 0xc00, 2, data); + return WriteDataRaw(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer); } PRResult PRDevice::PRLEDRGBColor(PRLEDRGB * pLED, uint32_t color) { - uint32_t data[6]; + const int bufferWords = 6; + uint32_t buffer[bufferWords]; - FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pRedLED->LEDIndex, data); - FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeColor, (color >> 16) & 0xFF, &data[1]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pRedLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pRedLED->LEDIndex, buffer); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pRedLED->boardAddr, kPRLEDRegisterTypeColor, (color >> 16) & 0xFF, &buffer[1]); - FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pGreenLED->LEDIndex, &data[2]); - FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeColor, (color >> 8) & 0xFF, &data[3]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pGreenLED->LEDIndex, &buffer[2]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeColor, (color >> 8) & 0xFF, &buffer[3]); - FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pBlueLED->LEDIndex, &data[4]); - FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeColor, color & 0xFF, &data[5]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pBlueLED->LEDIndex, &buffer[4]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeColor, color & 0xFF, &buffer[5]); - return WriteDataRaw(3, 0xc00, 6, data); + return WriteDataRaw(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer); } PRResult PRDevice::PRLEDRGBFade(PRLEDRGB * pLED, uint32_t fadeColor, uint16_t fadeRate) { - uint32_t data[12]; + const int bufferWords = 12; + uint32_t buffer[bufferWords]; - FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, data); - FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[1]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, buffer); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &buffer[1]); - FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pRedLED->LEDIndex, &data[2]); - FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 16) & 0xFF, &data[3]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pRedLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pRedLED->LEDIndex, &buffer[2]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 16) & 0xFF, &buffer[3]); - FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, &data[4]); - FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[5]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, &buffer[4]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &buffer[5]); - FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pGreenLED->LEDIndex, &data[6]); - FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 8) & 0xFF, &data[7]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pGreenLED->LEDIndex, &buffer[6]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 8) & 0xFF, &buffer[7]); - FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, &data[8]); - FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[9]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, &buffer[8]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &buffer[9]); - FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pBlueLED->LEDIndex, &data[10]); - FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor & 0xFF, &data[11]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pBlueLED->LEDIndex, &buffer[10]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor & 0xFF, &buffer[11]); - return WriteDataRaw(3, 0xc00, 12, data); + return WriteDataRaw(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer); } PRResult PRDevice::PRLEDRGBFadeColor(PRLEDRGB * pLED, uint32_t fadeColor) { - uint32_t data[6]; + const int bufferWords = 6; + uint32_t buffer[bufferWords]; - FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pRedLED->LEDIndex, data); - FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 16) & 0xFF, &data[1]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pRedLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pRedLED->LEDIndex, buffer); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 16) & 0xFF, &buffer[1]); - FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pGreenLED->LEDIndex, &data[2]); - FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 8) & 0xFF, &data[3]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pGreenLED->LEDIndex, &buffer[2]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 8) & 0xFF, &buffer[3]); - FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pBlueLED->LEDIndex, &data[4]); - FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor & 0xFF, &data[5]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pBlueLED->LEDIndex, &buffer[4]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor & 0xFF, &buffer[5]); - return WriteDataRaw(3, 0xc00, 6, data); + return WriteDataRaw(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer); } diff --git a/src/PRHardware.cpp b/src/PRHardware.cpp index 257988c..4b2abd2 100644 --- a/src/PRHardware.cpp +++ b/src/PRHardware.cpp @@ -344,9 +344,12 @@ int32_t CreateJTAGShiftTDODataBurst ( uint32_t * burst, uint16_t numBits, bool_t return kPRSuccess; } -void FillLEDWriteCommand(uint8_t boardAddr, PRLEDRegisterType reg, uint8_t value, uint32_t * pData) +void FillPDBCommand(uint8_t command, uint8_t boardAddr, PRLEDRegisterType reg, uint8_t data, uint32_t * buffer) { - pData[0] = (0x1 << 24) | (boardAddr << 16) | (reg << 8) | value; + buffer[0] = (command << P_ROC_DRIVER_PDB_COMMAND_SHIFT) | + (boardAddr << P_ROC_DRIVER_PDB_BOARD_ADDR_SHIFT) | + (reg << P_ROC_DRIVER_PDB_REGISTER_SHIFT) | + (data << P_ROC_DRIVER_PDB_DATA_SHIFT); } diff --git a/src/PRHardware.h b/src/PRHardware.h index bc06fbd..3e8192e 100644 --- a/src/PRHardware.h +++ b/src/PRHardware.h @@ -254,6 +254,19 @@ const uint32_t P_ROC_DMD_RCLK_LOW_CYCLES_SHIFT = 24; const uint32_t P_ROC_DMD_DOT_TABLE_BASE_ADDR = 0x1000; +const uint32_t P_ROC_DRIVER_PDB_ADDR = 0xC00; +const uint32_t P_ROC_DRIVER_PDB_COMMAND_SHIFT = 24; +const uint32_t P_ROC_DRIVER_PDB_BOARD_ADDR_SHIFT = 16; +const uint32_t P_ROC_DRIVER_PDB_REGISTER_SHIFT = 8; +const uint32_t P_ROC_DRIVER_PDB_DATA_SHIFT = 0; +const uint32_t P_ROC_DRIVER_PDB_READ_COMMAND = 0x00; +const uint32_t P_ROC_DRIVER_PDB_WRITE_COMMAND = 0x01; +const uint32_t P_ROC_DRIVER_PDB_CLEAR_ALL_COMMAND = 0x07; +const uint32_t P_ROC_DRIVER_PDB_BROADCAST_ADDR = 0x3F; + +const uint32_t p_ROC_DRIVER_PDB_REGISTER_BANK_A = 0; +const uint32_t p_ROC_DRIVER_PDB_REGISTER_BANK_B = 1; + typedef enum PRLEDRegisterType { kPRLEDRegisterTypeLEDIndex = 0, kPRLEDRegisterTypeColor = 1, @@ -299,7 +312,7 @@ int32_t CreateJTAGLatchOutputsBurst ( uint32_t * burst, PRJTAGOutputs *jtagOutpu int32_t CreateJTAGForceOutputsBurst ( uint32_t * burst, PRJTAGOutputs *jtagOutputs); int32_t CreateJTAGShiftTDODataBurst ( uint32_t * burst, uint16_t numBits, bool_t dataBlockComplete); -void FillLEDWriteCommand(uint8_t boardAddr, PRLEDRegisterType reg, uint8_t value, uint32_t * pData); +void FillPDBCommand(uint8_t command, uint8_t boardAddr, PRLEDRegisterType reg, uint8_t value, uint32_t * pData); PRResult PRHardwareOpen(); void PRHardwareClose();