gcc_pure static bool CanSendSettings(const DataField &df) { const TCHAR *driver_name = df.GetAsString(); if (driver_name == NULL) return false; const struct DeviceRegister *driver = FindDriverByName(driver_name); if (driver == NULL) return false; return driver->CanSendSettings(); }
gcc_pure static bool SupportsBulkBaudRate(const DataField &df) { const TCHAR *driver_name = df.GetAsString(); if (driver_name == NULL) return false; const struct DeviceRegister *driver = FindDriverByName(driver_name); if (driver == NULL) return false; return driver->SupportsBulkBaudRate(); }
int main(int argc, char **argv) { NarrowString<1024> usage; usage = "DRIVER\n\n" "Where DRIVER is one of:"; { const DeviceRegister *driver; for (unsigned i = 0; (driver = GetDriverByIndex(i)) != nullptr; ++i) { WideToUTF8Converter driver_name(driver->name); usage.AppendFormat("\n\t%s", (const char *)driver_name); } } Args args(argc, argv, usage); tstring driver_name = args.ExpectNextT(); args.ExpectEnd(); driver = FindDriverByName(driver_name.c_str()); if (driver == nullptr) { _ftprintf(stderr, _T("No such driver: %s\n"), driver_name.c_str()); return 1; } DeviceConfig config; config.Clear(); NullPort port; Device *device = driver->CreateOnPort != nullptr ? driver->CreateOnPort(config, port) : nullptr; NMEAParser parser; NMEAInfo data; data.Reset(); char buffer[1024]; while (fgets(buffer, sizeof(buffer), stdin) != nullptr) { StripRight(buffer); if (device == nullptr || !device->ParseNMEA(buffer, data)) parser.ParseLine(buffer, data); } Dump(data); return EXIT_SUCCESS; }
NmeaReplay::NmeaReplay(NLineReader *_reader, const DeviceConfig &config) :reader(_reader), parser(new NMEAParser()), device(NULL) { parser->SetReal(false); parser->SetIgnoreChecksum(config.ignore_checksum); const struct DeviceRegister *driver = FindDriverByName(config.driver_name); assert(driver != NULL); if (driver->CreateOnPort != NULL) { DeviceConfig config; config.Clear(); device = driver->CreateOnPort(config, port); } clock.Reset(); }
int main(int argc, char **argv) { Args args(argc, argv, "DRIVER PORT BAUD"); tstring _driver_name = args.ExpectNextT(); const TCHAR *driver_name = _driver_name.c_str(); const DeviceConfig config = ParsePortArgs(args); args.ExpectEnd(); InitialiseIOThread(); Port *port = OpenPort(config, *(DataHandler *)NULL); if (port == NULL) { fprintf(stderr, "Failed to open COM port\n"); return EXIT_FAILURE; } const struct DeviceRegister *driver = FindDriverByName(driver_name); if (driver == NULL) { _ftprintf(stderr, _T("No such driver: %s\n"), driver_name); return EXIT_FAILURE; } ConsoleOperationEnvironment env; if (!port->WaitConnected(env)) { delete port; DeinitialiseIOThread(); fprintf(stderr, "Failed to connect the port\n"); return EXIT_FAILURE; } assert(driver->CreateOnPort != NULL); Device *device = driver->CreateOnPort(config, *port); assert(device != NULL); device->EnableNMEA(env); delete device; delete port; DeinitialiseIOThread(); return EXIT_SUCCESS; }
DebugReplay* DebugReplayNMEA::Create(Path input_file, const tstring &driver_name) { const struct DeviceRegister *driver = FindDriverByName(driver_name.c_str()); if (driver == NULL) { _ftprintf(stderr, _T("No such driver: %s\n"), driver_name.c_str()); return nullptr; } Error error; FileLineReaderA *reader = new FileLineReaderA(input_file, error); if (reader->error()) { delete reader; fprintf(stderr, "%s\n", error.GetMessage()); return nullptr; } return new DebugReplayNMEA(reader, driver); }
bool DeviceDescriptor::Open(OperationEnvironment &env, bool show_error_messages) { TCHAR buffer[64]; LogStartUp(_T("Opening device %s"), config.GetPortName(buffer, 64)); if (config.port_type == DeviceConfig::PortType::INTERNAL) return OpenInternalSensors(); const struct DeviceRegister *driver = FindDriverByName(config.driver_name); if (driver == NULL) { if (show_error_messages) { StaticString<256> msg; msg.Format(_T("%s: %s."), _("No such driver"), config.driver_name.c_str()); env.SetErrorMessage(msg); } return false; } reopen_clock.Update(); Port *port = OpenPort(config, *this); if (port == NULL) { if (show_error_messages) { TCHAR name_buffer[64]; const TCHAR *name = config.GetPortName(name_buffer, 64); StaticString<256> msg; msg.Format(_T("%s: %s."), _("Unable to open port"), name); env.SetErrorMessage(msg); } return false; } if (!Open(*port, *driver, env)) { delete port; return false; } return true; }
int main(int argc, char **argv) try { Args args(argc, argv, "DRIVER PORT BAUD"); tstring _driver_name = args.ExpectNextT(); const TCHAR *driver_name = _driver_name.c_str(); DebugPort debug_port(args); args.ExpectEnd(); ScopeGlobalAsioThread global_asio_thread; auto port = debug_port.Open(*asio_thread, *(DataHandler *)nullptr); const struct DeviceRegister *driver = FindDriverByName(driver_name); if (driver == NULL) { _ftprintf(stderr, _T("No such driver: %s\n"), driver_name); return EXIT_FAILURE; } ConsoleOperationEnvironment env; if (!port->WaitConnected(env)) { fprintf(stderr, "Failed to connect the port\n"); return EXIT_FAILURE; } assert(driver->CreateOnPort != NULL); Device *device = driver->CreateOnPort(debug_port.GetConfig(), *port); assert(device != NULL); device->EnableNMEA(env); delete device; return EXIT_SUCCESS; } catch (const std::exception &exception) { PrintException(exception); return EXIT_FAILURE; }
void NmeaReplayGlue::Start() { assert(parser == NULL); assert(device == NULL); parser = new NMEAParser(); parser->SetReal(false); /* get the device driver name from the profile */ DeviceConfig config; Profile::GetDeviceConfig(0, config); /* instantiate it */ const struct DeviceRegister *driver = FindDriverByName(config.driver_name); assert(driver != NULL); if (driver->CreateOnPort != NULL) { DeviceConfig config; config.Clear(); device = driver->CreateOnPort(config, &port); } NmeaReplay::Start(); }
int main(int argc, char **argv) { Args args(argc, argv, "[--through DRIVER0] DRIVER PORT BAUD"); tstring _through_name; const TCHAR *through_name = NULL; const char *a; while ((a = args.PeekNext()) != NULL && *a == '-') { a = args.ExpectNext(); if (strcmp(a, "--through") == 0) { _through_name = args.ExpectNextT(); through_name = _through_name.c_str(); } else args.UsageError(); } tstring _driver_name = args.ExpectNextT(); const TCHAR *driver_name = _driver_name.c_str(); const DeviceConfig config = ParsePortArgs(args); args.ExpectEnd(); InitialiseIOThread(); Port *port = OpenPort(config, *(DataHandler *)NULL); if (port == NULL) { fprintf(stderr, "Failed to open COM port\n"); return EXIT_FAILURE; } ConsoleOperationEnvironment env; if (!port->WaitConnected(env)) { delete port; DeinitialiseIOThread(); fprintf(stderr, "Failed to connect the port\n"); return EXIT_FAILURE; } LoggerSettings logger_settings; logger_settings.pilot_name = _T("Foo Bar"); Plane plane; plane.registration = _T("D-3003"); plane.competition_id = _T("33"); plane.type = _T("Cirrus"); Declaration declaration(logger_settings, plane, NULL); declaration.Append(MakeWaypoint(_T("Bergneustadt"), 488, 7.7061111111111114, 51.051944444444445)); declaration.Append(MakeWaypoint(_T("Foo"), 488, 8, 52)); declaration.Append(MakeWaypoint(_T("Bar"), 488, 7.5, 50)); declaration.Append(MakeWaypoint(_T("Bergneustadt"), 488, 7.7061111111111114, 51.051944444444445)); Device *through_device = NULL; if (through_name != NULL) { const struct DeviceRegister *through_driver = FindDriverByName(through_name); if (through_driver == NULL) { _ftprintf(stderr, _T("No such driver: %s\n"), through_name); return EXIT_FAILURE; } if (!through_driver->HasPassThrough()) { _ftprintf(stderr, _T("Not a pass-through driver: %s\n"), through_name); return EXIT_FAILURE; } assert(through_driver->CreateOnPort != NULL); through_device = through_driver->CreateOnPort(config, *port); assert(through_device != NULL); } const struct DeviceRegister *driver = FindDriverByName(driver_name); if (driver == NULL) { _ftprintf(stderr, _T("No such driver: %s\n"), driver_name); return EXIT_FAILURE; } if (!driver->CanDeclare()) { _ftprintf(stderr, _T("Not a logger driver: %s\n"), driver_name); return EXIT_FAILURE; } assert(driver->CreateOnPort != NULL); Device *device = driver->CreateOnPort(config, *port); assert(device != NULL); if (through_device != NULL && !through_device->EnablePassThrough(env)) { _ftprintf(stderr, _T("Failed to enable pass-through mode: %s\n"), through_name); return EXIT_FAILURE; } if (device->Declare(declaration, NULL, env)) fprintf(stderr, "Declaration ok\n"); else fprintf(stderr, "Declaration failed\n"); delete through_device; delete device; delete port; DeinitialiseIOThread(); return EXIT_SUCCESS; }
int main(int argc, char **argv) { NarrowString<1024> usage; usage = "DRIVER PORT BAUD FILE.igc [FLIGHT NR]\n\n" "Where DRIVER is one of:"; { const DeviceRegister *driver; for (unsigned i = 0; (driver = GetDriverByIndex(i)) != NULL; ++i) { if (driver->IsLogger()) { NarrowPathName driver_name(driver->name); usage.AppendFormat("\n\t%s", (const char *)driver_name); } } } Args args(argc, argv, usage); PathName driver_name(args.ExpectNext()); PathName port_name(args.ExpectNext()); DeviceConfig config; config.Clear(); config.baud_rate = atoi(args.ExpectNext()); PathName path(args.ExpectNext()); unsigned flight_id = args.IsEmpty() ? 0 : atoi(args.GetNext()); args.ExpectEnd(); #ifdef HAVE_POSIX TTYPort port(port_name, config.baud_rate, *(Port::Handler *)NULL); #else SerialPort port(port_name, config.baud_rate, *(Port::Handler *)NULL); #endif if (!port.Open()) { fprintf(stderr, "Failed to open COM port\n"); return EXIT_FAILURE; } ConsoleOperationEnvironment env; const struct DeviceRegister *driver = FindDriverByName(driver_name); if (driver == NULL) { fprintf(stderr, "No such driver: %s\n", argv[1]); args.UsageError(); } if (!driver->IsLogger()) { fprintf(stderr, "Not a logger driver: %s\n", argv[1]); args.UsageError(); } assert(driver->CreateOnPort != NULL); Device *device = driver->CreateOnPort(config, port); assert(device != NULL); if (!device->Open(env)) { delete device; fprintf(stderr, "Failed to open driver: %s\n", argv[1]); return EXIT_FAILURE; } if (!device->EnableDownloadMode()) { delete device; fprintf(stderr, "Failed to enable download mode\n"); return EXIT_FAILURE; } RecordedFlightList flight_list; if (!device->ReadFlightList(flight_list, env)) { device->DisableDownloadMode(); delete device; fprintf(stderr, "Failed to download flight list\n"); return EXIT_FAILURE; } if (flight_list.empty()) { device->DisableDownloadMode(); delete device; fprintf(stderr, "Logger is empty\n"); return EXIT_FAILURE; } PrintFlightList(flight_list); if (flight_id >= flight_list.size()) { device->DisableDownloadMode(); delete device; fprintf(stderr, "Flight id not found\n"); return EXIT_FAILURE; } if (!device->DownloadFlight(flight_list[flight_id], path, env)) { device->DisableDownloadMode(); delete device; fprintf(stderr, "Failed to download flight\n"); return EXIT_FAILURE; } device->DisableDownloadMode(); delete device; printf("Flight downloaded successfully\n"); return EXIT_SUCCESS; }
int main(int argc, char **argv) { NarrowString<1024> usage; usage = "DRIVER PORT BAUD FILE.igc [FLIGHT NR]\n\n" "Where DRIVER is one of:"; { const DeviceRegister *driver; for (unsigned i = 0; (driver = GetDriverByIndex(i)) != NULL; ++i) { if (driver->IsLogger()) { WideToUTF8Converter driver_name(driver->name); usage.AppendFormat("\n\t%s", (const char *)driver_name); } } } Args args(argc, argv, usage); tstring driver_name = args.ExpectNextT(); const DeviceConfig config = ParsePortArgs(args); PathName path(args.ExpectNext()); unsigned flight_id = args.IsEmpty() ? 0 : atoi(args.GetNext()); args.ExpectEnd(); InitialiseIOThread(); Port *port = OpenPort(config, *(DataHandler *)NULL); if (port == NULL) { fprintf(stderr, "Failed to open COM port\n"); return EXIT_FAILURE; } ConsoleOperationEnvironment env; const struct DeviceRegister *driver = FindDriverByName(driver_name.c_str()); if (driver == NULL) { fprintf(stderr, "No such driver: %s\n", argv[1]); args.UsageError(); } if (!driver->IsLogger()) { fprintf(stderr, "Not a logger driver: %s\n", argv[1]); args.UsageError(); } assert(driver->CreateOnPort != NULL); Device *device = driver->CreateOnPort(config, *port); assert(device != NULL); RecordedFlightList flight_list; if (!device->ReadFlightList(flight_list, env)) { delete device; delete port; fprintf(stderr, "Failed to download flight list\n"); return EXIT_FAILURE; } if (flight_list.empty()) { delete device; delete port; fprintf(stderr, "Logger is empty\n"); return EXIT_FAILURE; } PrintFlightList(flight_list); if (flight_id >= flight_list.size()) { delete device; delete port; fprintf(stderr, "Flight id not found\n"); return EXIT_FAILURE; } if (!device->DownloadFlight(flight_list[flight_id], path, env)) { delete device; delete port; fprintf(stderr, "Failed to download flight\n"); return EXIT_FAILURE; } delete device; delete port; DeinitialiseIOThread(); printf("Flight downloaded successfully\n"); return EXIT_SUCCESS; }
int main(int argc, char **argv) { if (argc != 4) { fprintf(stderr, "Usage: %s DRIVER PORT BAUD\n" "Where DRIVER is one of:\n", argv[0]); const struct DeviceRegister *driver; for (unsigned i = 0; (driver = GetDriverByIndex(i)) != NULL; ++i) if (driver->IsLogger()) _ftprintf(stderr, _T("\t%s\n"), driver->name); return EXIT_FAILURE; } PathName driver_name(argv[1]); PathName port_name(argv[2]); DeviceConfig config; config.Clear(); config.baud_rate = atoi(argv[3]); #ifdef HAVE_POSIX TTYPort port(port_name, config.baud_rate, *(Port::Handler *)NULL); #else SerialPort port(port_name, config.baud_rate, *(Port::Handler *)NULL); #endif if (!port.Open()) { fprintf(stderr, "Failed to open COM port\n"); return EXIT_FAILURE; } ConsoleOperationEnvironment env; RecordedFlightList flight_list; const struct DeviceRegister *driver = FindDriverByName(driver_name); if (driver == NULL) { fprintf(stderr, "No such driver: %s\n", argv[1]); return EXIT_FAILURE; } if (!driver->IsLogger()) { fprintf(stderr, "Not a logger driver: %s\n", argv[1]); return EXIT_FAILURE; } assert(driver->CreateOnPort != NULL); Device *device = driver->CreateOnPort(config, port); assert(device != NULL); if (!device->Open(env)) { delete device; fprintf(stderr, "Failed to open driver: %s\n", argv[1]); return EXIT_FAILURE; } if (!device->EnableDownloadMode()) { delete device; fprintf(stderr, "Failed to enable download mode\n"); return EXIT_FAILURE; } if (!device->ReadFlightList(flight_list, env)) { device->DisableDownloadMode(); delete device; fprintf(stderr, "Failed to download flight list\n"); return EXIT_FAILURE; } device->DisableDownloadMode(); delete device; for (auto i = flight_list.begin(); i != flight_list.end(); ++i) { const RecordedFlightInfo &flight = *i; printf("%04u/%02u/%02u %02u:%02u-%02u:%02u\n", flight.date.year, flight.date.month, flight.date.day, flight.start_time.hour, flight.start_time.minute, flight.end_time.hour, flight.end_time.minute); } }