src/main: add busdev-num option to select a probe by his bus number / device address
This commit is contained in:
parent
68e519e4af
commit
2311f2c6ec
|
|
@ -61,6 +61,8 @@ openFPGALoader -- a program to flash FPGA
|
||||||
--vid arg probe Vendor ID
|
--vid arg probe Vendor ID
|
||||||
--pid arg probe Product ID
|
--pid arg probe Product ID
|
||||||
--cable-index arg probe index (FTDI and cmsisDAP)
|
--cable-index arg probe index (FTDI and cmsisDAP)
|
||||||
|
--busdev-num arg select a probe by it bus and device number
|
||||||
|
(bus_num:device_addr)
|
||||||
--ftdi-serial arg FTDI chip serial number
|
--ftdi-serial arg FTDI chip serial number
|
||||||
--ftdi-channel arg FTDI chip channel number (channels 0-3 map to
|
--ftdi-channel arg FTDI chip channel number (channels 0-3 map to
|
||||||
A-D)
|
A-D)
|
||||||
|
|
|
||||||
30
src/main.cpp
30
src/main.cpp
|
|
@ -68,6 +68,8 @@ struct arguments {
|
||||||
uint16_t vid;
|
uint16_t vid;
|
||||||
uint16_t pid;
|
uint16_t pid;
|
||||||
int16_t cable_index;
|
int16_t cable_index;
|
||||||
|
int8_t bus_addr;
|
||||||
|
int8_t device_addr;
|
||||||
string ip_adr;
|
string ip_adr;
|
||||||
uint32_t protect_flash;
|
uint32_t protect_flash;
|
||||||
bool unprotect_flash;
|
bool unprotect_flash;
|
||||||
|
|
@ -98,8 +100,10 @@ int main(int argc, char **argv)
|
||||||
/* command line args. */
|
/* command line args. */
|
||||||
struct arguments args = {0, false, false, false, 0, "", "", "-", "", -1,
|
struct arguments args = {0, false, false, false, 0, "", "", "-", "", -1,
|
||||||
0, false, "-", false, false, false, false, Device::PRG_NONE, false,
|
0, false, "-", false, false, false, false, Device::PRG_NONE, false,
|
||||||
false, false, "", "", "", -1, 0, false, -1, 0, 0, -1, "127.0.0.1",
|
false, false, "", "", "", -1, 0, false, -1,
|
||||||
0, false, "", false, false,
|
/* vid, pid, index bus_addr, device_addr */
|
||||||
|
0, 0, -1, 0, 0,
|
||||||
|
"127.0.0.1", 0, false, "", false, false,
|
||||||
/* xvc server */
|
/* xvc server */
|
||||||
false, 3721, "-",
|
false, 3721, "-",
|
||||||
"", false, // mcufw conmcu
|
"", false, // mcufw conmcu
|
||||||
|
|
@ -215,6 +219,9 @@ int main(int argc, char **argv)
|
||||||
cable.pid = args.pid;
|
cable.pid = args.pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cable.bus_addr = args.bus_addr;
|
||||||
|
cable.device_addr = args.device_addr;
|
||||||
|
|
||||||
// always set this
|
// always set this
|
||||||
cable.config.index = args.cable_index;
|
cable.config.index = args.cable_index;
|
||||||
|
|
||||||
|
|
@ -629,7 +636,7 @@ int parse_opt(int argc, char **argv, struct arguments *args, jtag_pins_conf_t *p
|
||||||
{
|
{
|
||||||
|
|
||||||
string freqo;
|
string freqo;
|
||||||
vector<string> pins;
|
vector<string> pins, bus_dev_num;
|
||||||
bool verbose, quiet;
|
bool verbose, quiet;
|
||||||
int8_t verbose_level = -2;
|
int8_t verbose_level = -2;
|
||||||
try {
|
try {
|
||||||
|
|
@ -653,7 +660,8 @@ int parse_opt(int argc, char **argv, struct arguments *args, jtag_pins_conf_t *p
|
||||||
("vid", "probe Vendor ID", cxxopts::value<uint16_t>(args->vid))
|
("vid", "probe Vendor ID", cxxopts::value<uint16_t>(args->vid))
|
||||||
("pid", "probe Product ID", cxxopts::value<uint16_t>(args->pid))
|
("pid", "probe Product ID", cxxopts::value<uint16_t>(args->pid))
|
||||||
("cable-index", "probe index (FTDI and cmsisDAP)", cxxopts::value<int16_t>(args->cable_index))
|
("cable-index", "probe index (FTDI and cmsisDAP)", cxxopts::value<int16_t>(args->cable_index))
|
||||||
|
("busdev-num", "select a probe by it bus and device number (bus_num:device_addr)",
|
||||||
|
cxxopts::value<vector<string>>(bus_dev_num))
|
||||||
("ftdi-serial", "FTDI chip serial number", cxxopts::value<string>(args->ftdi_serial))
|
("ftdi-serial", "FTDI chip serial number", cxxopts::value<string>(args->ftdi_serial))
|
||||||
("ftdi-channel", "FTDI chip channel number (channels 0-3 map to A-D)", cxxopts::value<int>(args->ftdi_channel))
|
("ftdi-channel", "FTDI chip channel number (channels 0-3 map to A-D)", cxxopts::value<int>(args->ftdi_channel))
|
||||||
#if defined(USE_DEVICE_ARG)
|
#if defined(USE_DEVICE_ARG)
|
||||||
|
|
@ -792,6 +800,20 @@ int parse_opt(int argc, char **argv, struct arguments *args, jtag_pins_conf_t *p
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (result.count("busdev-num")) {
|
||||||
|
if (bus_dev_num.size() != 2) {
|
||||||
|
printError("Error: busdev-num must be xx:yy");
|
||||||
|
throw std::exception();
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
args->bus_addr = static_cast<uint8_t>(std::stoi(bus_dev_num[0], nullptr, 0));
|
||||||
|
args->device_addr = static_cast<uint8_t>(std::stoi(bus_dev_num[1], nullptr, 0));
|
||||||
|
} catch (std::exception &e) {
|
||||||
|
printError("Error: busdev-num invalid format: must be numeric values");
|
||||||
|
throw std::exception();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (result.count("pins")) {
|
if (result.count("pins")) {
|
||||||
if (pins.size() != 4) {
|
if (pins.size() != 4) {
|
||||||
printError("Error: pin_config need 4 pins");
|
printError("Error: pin_config need 4 pins");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue