void DeviceDescriptor::DataReceived(const void *data, size_t length) { if (monitor != nullptr) monitor->DataReceived(data, length); // Pass data directly to drivers that use binary data protocols if (driver != nullptr && device != nullptr && driver->UsesRawData()) { ScopeLock protect(device_blackboard->mutex); NMEAInfo &basic = device_blackboard->SetRealState(index); basic.UpdateClock(); const ExternalSettings old_settings = basic.settings; if (device->DataReceived(data, length, basic)) { if (!config.sync_from_device) basic.settings = old_settings; device_blackboard->ScheduleMerge(); } return; } if (!IsNMEAOut()) PortLineSplitter::DataReceived(data, length); }
void DeviceDescriptor::ForwardLine(const char *line) { /* XXX make this method thread-safe; this method can be called from any thread, and if the Port gets closed, bad things happen */ if (IsNMEAOut() && port != NULL) { port->Write(line); port->Write("\r\n"); } }