Allow filtering devices by serial number

tx-receipts
Paul Hollinsky 2022-03-31 13:51:03 -04:00
parent 919bcccffc
commit dcec89f2da
1 changed files with 13 additions and 8 deletions

View File

@ -49,6 +49,7 @@ int driverPatch = 0;
int maxInterfaces = 0; // From driver int maxInterfaces = 0; // From driver
int sharedMemSize = 0; // From driver int sharedMemSize = 0; // From driver
void* sharedMemory = nullptr; void* sharedMemory = nullptr;
std::string serialFilter;
std::atomic<bool> stopRunning(false); std::atomic<bool> stopRunning(false);
@ -193,6 +194,7 @@ void usage(std::string executableName) {
std::cerr << "\t-d, --daemon\t\tRun as a daemon in the background\n"; std::cerr << "\t-d, --daemon\t\tRun as a daemon in the background\n";
std::cerr << "\t-h, -?, --help, --usage\t\tShow this help page\n"; std::cerr << "\t-h, -?, --help, --usage\t\tShow this help page\n";
std::cerr << "\t --devices\t\tList supported devices\n"; std::cerr << "\t --devices\t\tList supported devices\n";
std::cerr << "\t --filter <serial>\tOnly connect to devices with serial\n\t\t\t\t\tnumbers starting with this filter\n";
} }
void terminateSignal(int signal) { void terminateSignal(int signal) {
@ -215,9 +217,14 @@ void searchForDevices() {
if(alreadyOpen) if(alreadyOpen)
continue; continue;
const std::string serial = dev->getSerial();
// If we have a serial filter, make sure our serial starts with the given filter
if(!serialFilter.empty() && serial.rfind(serialFilter, 0) != 0)
continue;
// Now open the device // Now open the device
OpenDevice newDevice(dev); OpenDevice newDevice(dev);
const std::string serial = newDevice.device->getSerial();
Lazy<bool> firstTimeFailedToOpen([&serial]() { Lazy<bool> firstTimeFailedToOpen([&serial]() {
return std::find(failedToOpen.begin(), failedToOpen.end(), serial) == failedToOpen.end(); return std::find(failedToOpen.begin(), failedToOpen.end(), serial) == failedToOpen.end();
}); });
@ -344,13 +351,8 @@ void deviceSearchThread() {
} }
int main(int argc, char** argv) { int main(int argc, char** argv) {
if(argc > 2) { for(int i = 1; i != argc; i++) {
usage(argv[0]); const std::string arg = argv[i];
return EX_USAGE;
}
if(argc == 2) {
const std::string arg = argv[1];
if(arg == "-d" || arg == "--daemon") { if(arg == "-d" || arg == "--daemon") {
runningAsDaemon = true; runningAsDaemon = true;
} else if(arg == "-h" || arg == "--help" || arg == "-?" || arg == "--usage") { } else if(arg == "-h" || arg == "--help" || arg == "-?" || arg == "--usage") {
@ -362,6 +364,9 @@ int main(int argc, char** argv) {
for(auto& dev : icsneo::GetSupportedDevices()) for(auto& dev : icsneo::GetSupportedDevices())
std::cout << '\t' << dev << std::endl; std::cout << '\t' << dev << std::endl;
return EXIT_SUCCESS; return EXIT_SUCCESS;
} else if(arg == "--filter" && i + 1 <= argc) {
serialFilter = argv[++i];
transform(serialFilter.begin(), serialFilter.end(), serialFilter.begin(), ::toupper);
} else { } else {
usage(argv[0]); usage(argv[0]);
return EX_USAGE; return EX_USAGE;