*/
#include <config.h>
+#include <string.h>
#include "protocol.h"
static int send_command(const struct sr_dev_inst *sdi, uint16_t command)
{
struct sr_serial_dev_inst *serial;
uint8_t buffer[2];
+ int ret;
buffer[0] = command >> 8;
buffer[1] = command;
if (!(serial = sdi->conn))
return SR_ERR;
- if (serial_write_nonblocking(serial, (const void *)buffer, 2) != 2)
- return SR_ERR;
+ ret = serial_write_blocking(serial, buffer, sizeof(buffer), 0);
+ if (ret < 0)
+ return ret;
+ if ((size_t)ret != sizeof(buffer))
+ return SR_ERR_IO;
return SR_OK;
}
{
struct sr_serial_dev_inst *serial;
uint8_t buffer[4];
+ int ret;
buffer[0] = command >> 24;
buffer[1] = command >> 16;
if (!(serial = sdi->conn))
return SR_ERR;
- if (serial_write_nonblocking(serial, (const void *)buffer, 4) != 4)
- return SR_ERR;
+ ret = serial_write_blocking(serial, buffer, sizeof(buffer), 0);
+ if (ret < 0)
+ return ret;
+ if ((size_t)ret != sizeof(buffer))
+ return SR_ERR_IO;
return SR_OK;
}
devc->num_samples++;
/* Limiting number of samples is only supported for live data. */
if (devc->cur_data_source == DATA_SOURCE_LIVE && devc->limit_samples && devc->num_samples >= devc->limit_samples)
- sdi->driver->dev_acquisition_stop((struct sr_dev_inst *)sdi);
+ sr_dev_acquisition_stop((struct sr_dev_inst *)sdi);
}
static void process_measurement(const struct sr_dev_inst *sdi)
static void process_byte(const struct sr_dev_inst *sdi, const unsigned char c)
{
struct dev_context *devc;
- unsigned int i;
devc = sdi->priv;
if (devc->buffer_len < BUFFER_SIZE) {
devc->buffer[devc->buffer_len++] = c;
} else {
- for (i = 1; i < BUFFER_SIZE; i++)
- devc->buffer[i - 1] = devc->buffer[i];
+ memmove(devc->buffer, devc->buffer + 1, BUFFER_SIZE - 1);
devc->buffer[BUFFER_SIZE - 1] = c;
}
static void process_usage_byte(const struct sr_dev_inst *sdi, uint8_t c)
{
struct dev_context *devc;
- unsigned int i;
devc = sdi->priv;
if (devc->buffer_len < MEM_USAGE_BUFFER_SIZE) {
devc->buffer[devc->buffer_len++] = c;
} else {
- for (i = 1; i < MEM_USAGE_BUFFER_SIZE; i++)
- devc->buffer[i - 1] = devc->buffer[i];
+ memmove(devc->buffer, devc->buffer + 1, MEM_USAGE_BUFFER_SIZE - 1);
devc->buffer[MEM_USAGE_BUFFER_SIZE - 1] = c;
}
static void process_memory_byte(const struct sr_dev_inst *sdi, uint8_t c)
{
struct dev_context *devc;
- unsigned int i;
devc = sdi->priv;
if (devc->buffer_len < MEM_DATA_BUFFER_SIZE) {
devc->buffer[devc->buffer_len++] = c;
} else {
- for (i = 1; i < MEM_DATA_BUFFER_SIZE; i++)
- devc->buffer[i - 1] = devc->buffer[i];
+ memmove(devc->buffer, devc->buffer + 1, MEM_DATA_BUFFER_SIZE - 1);
devc->buffer[MEM_DATA_BUFFER_SIZE - 1] = c;
}