void PrintMoreUsage() { fputs("Where DRIVER is one of:\n", stderr); const struct DeviceRegister *driver; for (unsigned i = 0; (driver = GetDriverByIndex(i)) != NULL; ++i) _ftprintf(stderr, _T("\t%s\n"), driver->name); }
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; }
void DeviceEditWidget::Prepare(ContainerWindow &parent, const PixelRect &rc) { RowFormWidget::Prepare(parent, rc); DataFieldEnum *port_df = new DataFieldEnum(this); FillPorts(*port_df, config); auto *port_control = Add(_("Port"), NULL, port_df); port_control->SetEditCallback(EditPortCallback); DataFieldEnum *baud_rate_df = new DataFieldEnum(this); FillBaudRates(*baud_rate_df); baud_rate_df->Set(config.baud_rate); Add(_("Baud rate"), NULL, baud_rate_df); DataFieldEnum *bulk_baud_rate_df = new DataFieldEnum(this); bulk_baud_rate_df->addEnumText(_T("Default"), 0u); FillBaudRates(*bulk_baud_rate_df); bulk_baud_rate_df->Set(config.bulk_baud_rate); Add(_("Bulk baud rate"), _("The baud rate used for bulk transfers, such as task declaration or flight download."), bulk_baud_rate_df); DataFieldString *ip_address_df = new DataFieldString(_T(""), this); ip_address_df->Set(config.ip_address); Add(_("IP Address"), NULL, ip_address_df); DataFieldEnum *tcp_port_df = new DataFieldEnum(this); FillTCPPorts(*tcp_port_df); tcp_port_df->Set(config.tcp_port); Add(_("TCP Port"), NULL, tcp_port_df); DataFieldEnum *i2c_bus_df = new DataFieldEnum(this); FillI2CBus(*i2c_bus_df); i2c_bus_df->Set(config.i2c_bus); Add(_("I2C Bus"), _("Select the description or bus number that matches your configuration."), i2c_bus_df); DataFieldEnum *i2c_addr_df = new DataFieldEnum(this); FillI2CAddr(*i2c_addr_df); i2c_addr_df->Set(config.i2c_addr); Add(_("I2C Addr"), _("The i2c address that matches your configuration." "This field is not used when your selection in the I2C Bus field is not an i2c bus number. " "In case you do not understand the previous sentence you may assume that this field is not used."), i2c_addr_df); DataFieldEnum *press_df = new DataFieldEnum(this); FillPress(*press_df); press_df->Set((unsigned)config.press_use); Add(_("Pressure use"), _("Select the purpose of this pressure sensor. " "This sensor measures some pressure. Here you tell the system " "what pressure this is and what its should be used for."), press_df); DataFieldEnum *driver_df = new DataFieldEnum(this); const struct DeviceRegister *driver; for (unsigned i = 0; (driver = GetDriverByIndex(i)) != NULL; i++) driver_df->addEnumText(driver->name, driver->display_name); driver_df->Sort(1); driver_df->Set(config.driver_name); Add(_("Driver"), NULL, driver_df); AddBoolean(_("Sync. from device"), _("This option lets you configure if XCSoar should use settings " "like the MacCready value, bugs and ballast from the device."), config.sync_from_device, this); SetExpertRow(SyncFromDevice); AddBoolean(_("Sync. to device"), _("This option lets you configure if XCSoar should send settings " "like the MacCready value, bugs and ballast to the device."), config.sync_to_device, this); SetExpertRow(SyncToDevice); AddBoolean(_T("K6Bt"), _("Enable this if you use a K6Bt to connect the device."), config.k6bt, this); SetExpertRow(K6Bt); UpdateVisibilities(); }
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); } }