mirror of
https://github.com/preble/libpinproc
synced 2026-02-24 18:25:23 +01:00
Merge branch 'dev' of github.com:preble/libpinproc into dev
This commit is contained in:
109
src/PRDevice.cpp
109
src/PRDevice.cpp
@@ -1207,7 +1207,7 @@ PRResult PRDevice::WriteDataRaw(uint32_t moduleSelect, uint32_t startingAddr, in
|
||||
PRResult res;
|
||||
uint32_t * buffer;
|
||||
|
||||
buffer = (uint32_t *)malloc((numWriteWords * 4) + 1);
|
||||
buffer = (uint32_t *)malloc((numWriteWords * 4) + 4);
|
||||
buffer[0] = CreateBurstCommand(moduleSelect, startingAddr, numWriteWords);
|
||||
memcpy(buffer+1, writeBuffer, numWriteWords * 4);
|
||||
res = WriteData(buffer, numWriteWords + 1);
|
||||
@@ -1378,3 +1378,110 @@ int PRDevice::GetVersionInfo(uint16_t *verPtr, uint16_t *revPtr, uint16_t *combi
|
||||
*combinedPtr = combinedVersionRevision;
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRResult PRDevice::PRLEDColor(PRLED * pLED, uint8_t color)
|
||||
{
|
||||
const int bufferWords = 2;
|
||||
uint32_t buffer[bufferWords];
|
||||
|
||||
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(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer);
|
||||
}
|
||||
|
||||
PRResult PRDevice::PRLEDFade(PRLED * pLED, uint8_t fadeColor, uint16_t fadeRate)
|
||||
{
|
||||
const int bufferWords = 4;
|
||||
uint32_t buffer[bufferWords];
|
||||
|
||||
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]);
|
||||
|
||||
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(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer);
|
||||
}
|
||||
|
||||
PRResult PRDevice::PRLEDFadeColor(PRLED * pLED, uint8_t fadeColor)
|
||||
{
|
||||
const int bufferWords = 2;
|
||||
uint32_t buffer[bufferWords];
|
||||
|
||||
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(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer);
|
||||
}
|
||||
|
||||
PRResult PRDevice::PRLEDFadeRate(uint8_t boardAddr, uint16_t fadeRate)
|
||||
{
|
||||
const int bufferWords = 2;
|
||||
uint32_t buffer[bufferWords];
|
||||
|
||||
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(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer);
|
||||
}
|
||||
|
||||
PRResult PRDevice::PRLEDRGBColor(PRLEDRGB * pLED, uint32_t color)
|
||||
{
|
||||
const int bufferWords = 6;
|
||||
uint32_t buffer[bufferWords];
|
||||
|
||||
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]);
|
||||
|
||||
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]);
|
||||
|
||||
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(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer);
|
||||
}
|
||||
|
||||
PRResult PRDevice::PRLEDRGBFade(PRLEDRGB * pLED, uint32_t fadeColor, uint16_t fadeRate)
|
||||
{
|
||||
const int bufferWords = 12;
|
||||
uint32_t buffer[bufferWords];
|
||||
|
||||
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]);
|
||||
|
||||
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]);
|
||||
|
||||
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]);
|
||||
|
||||
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]);
|
||||
|
||||
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]);
|
||||
|
||||
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(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer);
|
||||
}
|
||||
|
||||
PRResult PRDevice::PRLEDRGBFadeColor(PRLEDRGB * pLED, uint32_t fadeColor)
|
||||
{
|
||||
const int bufferWords = 6;
|
||||
uint32_t buffer[bufferWords];
|
||||
|
||||
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]);
|
||||
|
||||
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]);
|
||||
|
||||
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(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -344,6 +344,16 @@ int32_t CreateJTAGShiftTDODataBurst ( uint32_t * burst, uint16_t numBits, bool_t
|
||||
return kPRSuccess;
|
||||
}
|
||||
|
||||
void FillPDBCommand(uint8_t command, uint8_t boardAddr, PRLEDRegisterType reg, uint8_t data, uint32_t * buffer)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 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.
|
||||
|
||||
@@ -285,6 +285,27 @@ 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,
|
||||
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. */
|
||||
@@ -322,6 +343,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 FillPDBCommand(uint8_t command, uint8_t boardAddr, PRLEDRegisterType reg, uint8_t value, uint32_t * pData);
|
||||
|
||||
PRResult PRHardwareOpen();
|
||||
void PRHardwareClose();
|
||||
int PRHardwareRead(uint8_t *buffer, int maxBytes);
|
||||
|
||||
@@ -568,3 +568,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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user