void ManagedFileListWidget::OnDownloadComplete(Path path_relative, bool success) { const auto name = path_relative.GetBase(); if (name == nullptr) return; const WideToUTF8Converter name2(name.c_str()); if (!name2.IsValid()) return; const std::string name3(name2); mutex.Lock(); downloads.erase(name3); if (StringIsEqual(name2, "repository")) { repository_failed = !success; if (success) repository_modified = true; } else if (!success) failures.insert(name3); mutex.Unlock(); SendNotification(); }
bool RowFormWidget::SaveValueFileReader(unsigned i, const char *registry_key) { const auto *dfe = (const FileDataField *)GetControl(i).GetDataField(); Path new_value = dfe->GetPathFile(); const auto contracted = ContractLocalPath(new_value); if (contracted != nullptr) new_value = contracted; const WideToUTF8Converter new_value2(new_value.c_str()); if (!new_value2.IsValid()) return false; const char *old_value = Profile::Get(registry_key, ""); if (StringIsEqual(old_value, new_value2)) return false; Profile::Set(registry_key, new_value2); return true; }
void ManagedFileListWidget::OnDownloadAdded(Path path_relative, int64_t size, int64_t position) { const auto name = path_relative.GetBase(); if (name == nullptr) return; const WideToUTF8Converter name2(name.c_str()); if (!name2.IsValid()) return; const std::string name3(name2); mutex.Lock(); downloads[name3] = DownloadStatus{size, position}; failures.erase(name3); mutex.Unlock(); SendNotification(); }
static Port * OpenPortInternal(const DeviceConfig &config, PortListener *listener, DataHandler &handler) { const TCHAR *path = nullptr; TCHAR buffer[MAX_PATH]; switch (config.port_type) { case DeviceConfig::PortType::DISABLED: return nullptr; case DeviceConfig::PortType::SERIAL: if (config.path.empty()) return nullptr; path = config.path.c_str(); break; case DeviceConfig::PortType::RFCOMM: #ifdef ANDROID if (config.bluetooth_mac.empty()) { LogFormat("No Bluetooth MAC configured"); return nullptr; } return OpenAndroidBluetoothPort(config.bluetooth_mac, listener, handler); #else LogFormat("Bluetooth not available on this platform"); return nullptr; #endif case DeviceConfig::PortType::RFCOMM_SERVER: #ifdef ANDROID return OpenAndroidBluetoothServerPort(listener, handler); #else LogFormat("Bluetooth not available on this platform"); return nullptr; #endif case DeviceConfig::PortType::IOIOUART: #if defined(ANDROID) if (config.ioio_uart_id >= AndroidIOIOUartPort::getNumberUarts()) { LogFormat("No IOIOUart configured in profile"); return nullptr; } return OpenAndroidIOIOUartPort(config.ioio_uart_id, config.baud_rate, listener, handler); #else LogFormat("IOIO Uart not available on this platform or version"); return nullptr; #endif case DeviceConfig::PortType::AUTO: if (!DetectGPS(buffer, sizeof(buffer))) { LogFormat("no GPS detected"); return nullptr; } LogFormat(_T("GPS detected: %s"), buffer); path = buffer; break; case DeviceConfig::PortType::INTERNAL: case DeviceConfig::PortType::DROIDSOAR_V2: case DeviceConfig::PortType::NUNCHUCK: case DeviceConfig::PortType::I2CPRESSURESENSOR: case DeviceConfig::PortType::IOIOVOLTAGE: break; case DeviceConfig::PortType::TCP_CLIENT: { const WideToUTF8Converter ip_address(config.ip_address); if (!ip_address.IsValid()) return nullptr; auto port = new TCPClientPort(listener, handler); if (!port->Connect(ip_address, config.tcp_port)) { delete port; return nullptr; } return port; } case DeviceConfig::PortType::TCP_LISTENER: { TCPPort *port = new TCPPort(listener, handler); if (!port->Open(config.tcp_port)) { delete port; return nullptr; } return port; } case DeviceConfig::PortType::UDP_LISTENER: { SocketPort *port = new SocketPort(listener, handler); if (!port->OpenUDPListener(config.tcp_port)) { delete port; return nullptr; } return port; } case DeviceConfig::PortType::PTY: { #if defined(HAVE_POSIX) && !defined(ANDROID) if (config.path.empty()) return nullptr; if (unlink(config.path.c_str()) < 0 && errno != ENOENT) return nullptr; TTYPort *port = new TTYPort(listener, handler); const char *slave_path = port->OpenPseudo(); if (slave_path == nullptr) { delete port; return nullptr; } if (symlink(slave_path, config.path.c_str()) < 0) { delete port; return nullptr; } return port; #else return nullptr; #endif } } if (path == nullptr) return nullptr; #ifdef HAVE_POSIX TTYPort *port = new TTYPort(listener, handler); #else SerialPort *port = new SerialPort(listener, handler); #endif if (!port->Open(path, config.baud_rate)) { delete port; return nullptr; } return port; }
bool EWDevice::AddWaypoint(const Waypoint &way_point, OperationEnvironment &env) { char EWRecord[100]; int DegLat, DegLon; double tmp, MinLat, MinLon; char NoS, EoW; // check for max 6 TP's if (ewDecelTpIndex > 6) return false; // copy at most 6 chars const WideToUTF8Converter name_utf8(way_point.name.c_str()); if (!name_utf8.IsValid()) return false; char IDString[12]; char *end = CopyTruncateString(IDString, 7, name_utf8); // fill up with spaces std::fill(end, IDString + 6, ' '); // prepare lat tmp = (double)way_point.location.latitude.Degrees(); NoS = 'N'; if (tmp < 0) { NoS = 'S'; tmp = -tmp; } DegLat = (int)tmp; MinLat = (tmp - DegLat) * 60 * 1000; // prepare long tmp = (double)way_point.location.longitude.Degrees(); EoW = 'E'; if (tmp < 0) { EoW = 'W'; tmp = -tmp; } DegLon = (int)tmp; MinLon = (tmp - DegLon) * 60 * 1000; // Calc E/W and N/S flags // prepare flags const unsigned EoW_Flag = EoW == 'W' ? 0x08 : 0x04; const unsigned NoS_Flag = NoS == 'N' ? 0x01 : 0x02; // Do the calculation const unsigned EW_Flags = (short)(EoW_Flag | NoS_Flag); // setup command string sprintf(EWRecord, "#STP%02X%02X%02X%02X%02X%02X%02X%02X%02X%04X%02X%04X", ewDecelTpIndex, IDString[0], IDString[1], IDString[2], IDString[3], IDString[4], IDString[5], EW_Flags, DegLat, (int)MinLat / 10, DegLon, (int)MinLon / 10); WriteWithChecksum(port, EWRecord); // wait for response if (!port.ExpectString("OK\r", env)) return false; // increase TP index ewDecelTpIndex++; return true; }