コード例 #1
0
ファイル: serial.c プロジェクト: BayLibre/libsigrok
/**
 * Drain serial port buffers.
 *
 * @param serial Previously initialized serial port structure.
 *
 * @retval SR_OK Success.
 * @retval SR_ERR Failure.
 *
 * @private
 */
SR_PRIV int serial_drain(struct sr_serial_dev_inst *serial)
{
	int ret;
	char *error;

	if (!serial) {
		sr_dbg("Invalid serial port.");
		return SR_ERR;
	}

	if (!serial->data) {
		sr_dbg("Cannot drain unopened serial port %s.", serial->port);
		return SR_ERR;
	}

	sr_spew("Draining serial port %s.", serial->port);

	ret = sp_drain(serial->data);

	if (ret == SP_ERR_FAIL) {
		error = sp_last_error_message();
		sr_err("Error draining port (%d): %s.",
			sp_last_error_code(), error);
		sp_free_error_message(error);
		return SR_ERR;
	}

	return SR_OK;
}
コード例 #2
0
ファイル: navilink_device.c プロジェクト: yageek/navilink
int navilink_write_device(NavilinkDevice* device, uint8_t packet_type, const uint8_t* payload, size_t payload_length)
{
  assert(device != NULL);
  uint8_t* buff = (void*)(&device->buffer[0]);
  memset(buff, 0, NAVILINK_MAX_PACKET_SIZE);

  int bytes = navilink_create_packet(buff, packet_type, payload, payload_length);
  if (bytes < 0) {
    navilink_set_current_error(device, bytes, NULL);
    return -1;
  }

#if (__DEBUG_CMD)
  printf("WRITE:");
  DumpHex(buff, bytes);
#endif
  enum sp_return result = sp_blocking_write(device->serial_port, &device->buffer[0], bytes, 1000);
  if (result < 0) {
    goto manage_serial_error;
  }

  result = sp_drain(device->serial_port);
  if (result < 0) {
    goto manage_serial_error;
  }
  return 0;

manage_serial_error:
  CATCH_LIBSERIAL_ERROR(device);
  return -1;
}
コード例 #3
0
ファイル: uart.cpp プロジェクト: eu07/maszyna
uart_input::~uart_input()
{
	std::array<std::uint8_t, 31> buffer = { 0 };
	sp_blocking_write(port, (void*)buffer.data(), buffer.size(), 0);
	sp_drain(port);

    sp_close(port);
    sp_free_port(port);
}