ssize_t gpsd_serial_write(struct gps_device_t * session, const char *buf, const size_t len) { ssize_t status; int error = 0; bool ok; /* if (session == NULL || session->context == NULL || session->context->readonly) return 0; */ status = write(session->gpsdata.gps_fd, buf, len); ok = (status == (ssize_t) len); session->gpsdata.bytes_send += status; if(!ok) error = errno; (void)tcdrain(session->gpsdata.gps_fd); /* extra guard prevents expensive hexdump calls */ if (session->context->debug >= LOG_IO) { char scratchbuf[MAX_PACKET_LENGTH*2+1]; gpsd_report(session->context->debug, LOG_IO, "=> GPS: %s%s (%d, %d)\n", gpsd_packetdump(scratchbuf, sizeof(scratchbuf), (char *)buf, len), ok ? "" : " FAILED", status, error); } return status; }
ssize_t gpsd_write(struct gps_device_t * session, const char *buf, size_t len) { ssize_t status; bool ok; if (session == NULL || session->context == NULL || session->context->readonly) return 0; status = write(session->gpsdata.gps_fd, buf, len); ok = (status == (ssize_t) len); (void)tcdrain(session->gpsdata.gps_fd); /* extra guard prevents expensive hexdump calls */ if (session->context->debug >= LOG_IO) gpsd_report(LOG_IO, "=> GPS: %s%s\n", gpsd_packetdump((char *)buf, len), ok ? "" : " FAILED"); return status; }
ssize_t gpsd_serial_write(struct gps_device_t * session, const char *buf, const size_t len) { ssize_t status; bool ok; if (session == NULL || session->context == NULL || session->context->readonly) return 0; status = write(session->gpsdata.gps_fd, buf, len); ok = (status == (ssize_t) len); (void)tcdrain(session->gpsdata.gps_fd); /* extra guard prevents expensive hexdump calls */ if (session->context->errout.debug >= LOG_IO) { char scratchbuf[MAX_PACKET_LENGTH*2+1]; gpsd_log(&session->context->errout, LOG_IO, "=> GPS: %s%s\n", gpsd_packetdump(scratchbuf, sizeof(scratchbuf), (char *)buf, len), ok ? "" : " FAILED"); } return status; }