Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions bindings/python/tslitex.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ cdef extern from "thunderscope.h":
cdef struct tsDeviceInfo_s:
uint32_t device_id
uint32_t hw_id
uint32_t gw_id
uint32_t litex
char device_path[256]
char identity[256]
char serial_number[256]
Expand Down Expand Up @@ -69,6 +71,7 @@ cdef extern from "thunderscope.h":
uint32_t adc_lost_buffer_count
uint32_t flags
uint8_t adc_state
uint8_t adc_sync
uint8_t power_state
uint8_t pll_state
uint8_t afe_state
Expand Down
24 changes: 24 additions & 0 deletions example/thunderscope_fw.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,28 @@ int main(int argc, char** argv)
exit(0);
}

if(0 == strcmp(arg, "list"))
{
uint32_t i = 0;
while(TS_STATUS_OK == thunderscopeListDevices(i, &infos))
{
if(i==0)
{
printf("Found ThunderScope(s):\n");
}
printf("\t%3d | Serial Number: %s\n", i, infos.serial_number);
printf("\t | HW Rev: 0x%x\n", infos.hw_id);
printf("\t | GW Rev: 0x%x\n", infos.gw_id);
printf("\t | LiteX Rev: 0x%x\n", infos.litex);
i++;
}
if(i == 0)
{
printf("No devices present\n");
}
exit(EXIT_SUCCESS);
}

result = thunderscopeListDevices(idx, &infos);
if(result == TS_STATUS_ERROR)
{
Expand All @@ -224,6 +246,8 @@ int main(int argc, char** argv)
{
printf("HW Rev Beta\n");
}
printf("Gateware Rev 0x%08X\n", infos.gw_id);
printf("LiteX Release 0x%08X\n", infos.litex);

if(0 == strcmp(arg, "factory_restore"))
{
Expand Down
6 changes: 6 additions & 0 deletions example/thunderscope_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -524,6 +524,7 @@ static void flash_test(char* arg, file_t fd)
printf("Done!\n");
outFile.flush();
outFile.close();
free(flash_data);
}
else if(0 == strcmp(arg, "test"))
{
Expand Down Expand Up @@ -758,6 +759,11 @@ int main(int argc, char** argv)
{
printf("HW Rev Beta\n");
}
printf("Gateware Rev: 0x%08X\n",
litepcie_readl(fd, CSR_DEV_STATUS_GW_REV_ADDR));
printf("LiteX Release: 0x%08X\n",
litepcie_readl(fd, CSR_DEV_STATUS_LITEX_REL_ADDR));

#ifdef CSR_DNA_BASE
printf("FPGA DNA: 0x%08x%08x\n",
litepcie_readl(fd, CSR_DNA_ID_ADDR + 4 * 0),
Expand Down
8 changes: 8 additions & 0 deletions include/ts_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ extern "C" {
#define TS_HW_ID_VARIANT_MASK (1 << 8)
#define TS_HW_ID_VALID_MASK (1 << 9)

#define TS_GW_VERSION(major, minor, patch) ((((major) & 0xFFFF) << 16) + \
(((minor) & 0xFF) << 8) + \
(((patch) & 0x3F) << 1))

#define LITEX_VERSION(major, minor) ((((major) & 0xFFFF) << 16) + ((minor) & 0xFFFF))
/**
* @brief Opaque Handle to a Thunderscope device instance
*
Expand All @@ -57,6 +62,8 @@ typedef struct tsDeviceInfo_s
{
uint32_t device_id;
uint32_t hw_id; /**< hw_id[9] - ID Valid, hw_id[8] - PCIe/USB, hw_id[7:4] - Reserved, hw_id[3:0] - Revision */
uint32_t gw_id; /**< 32-bit version ID: gw_id[31:16] - Major, gw_id[15:8] - Minor, gw_id[7:1] - Patch, gw_id[0] - next */
uint32_t litex; /**< 32-bit LiteX version: litex[31:16] - Year, litex[15:0] - Month */
char device_path[TS_IDENT_STR_LEN];
char identity[TS_IDENT_STR_LEN];
char serial_number[TS_IDENT_STR_LEN];
Expand Down Expand Up @@ -93,6 +100,7 @@ typedef struct tsScopeState_s
uint32_t flags;
struct {
uint8_t adc_state:1;
uint8_t adc_sync:1;
uint8_t power_state:1;
uint8_t pll_state:1;
uint8_t afe_state:1;
Expand Down
8 changes: 7 additions & 1 deletion litepcie/public_h/csr.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//--------------------------------------------------------------------------------
// Auto-generated by LiteX (a1ea5a2f6) on 2025-10-02 02:25:33
// Auto-generated by LiteX (a1ea5a2f6) on 2025-10-18 14:34:05
//--------------------------------------------------------------------------------

//--------------------------------------------------------------------------------
Expand Down Expand Up @@ -273,6 +273,10 @@
#define CSR_DEV_STATUS_LEDS_SIZE 1
#define CSR_DEV_STATUS_HW_ID_ADDR (CSR_BASE + 0x6004L)
#define CSR_DEV_STATUS_HW_ID_SIZE 1
#define CSR_DEV_STATUS_GW_REV_ADDR (CSR_BASE + 0x6008L)
#define CSR_DEV_STATUS_GW_REV_SIZE 1
#define CSR_DEV_STATUS_LITEX_REL_ADDR (CSR_BASE + 0x600cL)
#define CSR_DEV_STATUS_LITEX_REL_SIZE 1

/* DEV_STATUS Fields */
#define CSR_DEV_STATUS_HW_ID_HW_REV_OFFSET 0
Expand Down Expand Up @@ -322,6 +326,8 @@
#define CSR_ADC_CONTROL_PWR_DOWN_SIZE 1
#define CSR_ADC_STATUS_ACQ_PG_OFFSET 0
#define CSR_ADC_STATUS_ACQ_PG_SIZE 1
#define CSR_ADC_STATUS_FRAME_SYNC_OFFSET 1
#define CSR_ADC_STATUS_FRAME_SYNC_SIZE 1
#define CSR_ADC_TRIGGER_CONTROL_ENABLE_OFFSET 0
#define CSR_ADC_TRIGGER_CONTROL_ENABLE_SIZE 1
#define CSR_ADC_HMCAD1520_CONTROL_FRAME_RST_OFFSET 0
Expand Down
3 changes: 1 addition & 2 deletions litepcie/src/litepcie_helpers.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ static void getDeviceName(PWCHAR devName, DWORD maxLen, DWORD devIdx)
HDEVINFO hwDevInfo = SetupDiGetClassDevs(&GUID_DEVINTERFACE_litepciedrv, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);

devData.cbSize = sizeof(devData);
if (!SetupDiEnumDeviceInterfaces(hwDevInfo, NULL, &GUID_DEVINTERFACE_litepciedrv, 0, &devData))
if (!SetupDiEnumDeviceInterfaces(hwDevInfo, NULL, &GUID_DEVINTERFACE_litepciedrv, devIdx, &devData))
{
//Print Error
fprintf(stderr, "No Devices Found\n");
Expand Down Expand Up @@ -72,7 +72,6 @@ static void getDeviceName(PWCHAR devName, DWORD maxLen, DWORD devIdx)
if (SetupDiGetDeviceInterfaceDetail(hwDevInfo, &devData, pDetail, detailLen, NULL, NULL))
{
wcsncpy_s(devName, maxLen, pDetail->DevicePath, _TRUNCATE);
fwprintf(stdout, L"Found device: %s\n", pDetail->DevicePath);
}
else
{
Expand Down
Loading