Writes can be partial, in theory at least (note, all writes are currently

length 1).
This commit is contained in:
Ben Laurie
2013-09-08 06:06:27 +01:00
parent 1ba778437e
commit dfe4469e2c
+20 -3
View File
@@ -52,6 +52,23 @@ typedef struct {
static navdata_port port; static navdata_port port;
static int nav_fd; static int nav_fd;
static void navdata_write(const uint8_t *buf, size_t count)
{
size_t written = 0;
while(written < count)
{
ssize_t n = write(nav_fd, buf + written, count - written);
if (n < 0)
{
perror("navdata_write: Write failed");
// FIXME: what's sensible to do at this point?
return;
}
written += n;
}
}
int navdata_init() int navdata_init()
{ {
nav_fd = open("/dev/ttyO1", O_RDWR | O_NOCTTY | O_NONBLOCK); nav_fd = open("/dev/ttyO1", O_RDWR | O_NOCTTY | O_NONBLOCK);
@@ -82,14 +99,14 @@ int navdata_init()
// stop acquisition // stop acquisition
uint8_t cmd=0x02; uint8_t cmd=0x02;
write(nav_fd, &cmd, 1); navdata_write(&cmd, 1);
baro_calibrated = 0; baro_calibrated = 0;
acquire_baro_calibration(); acquire_baro_calibration();
// start acquisition // start acquisition
cmd=0x01; cmd=0x01;
write(nav_fd, &cmd, 1); navdata_write(&cmd, 1);
navdata = malloc(sizeof(measures_t)); navdata = malloc(sizeof(measures_t));
navdata_imu_available = 0; navdata_imu_available = 0;
@@ -111,7 +128,7 @@ void acquire_baro_calibration()
// start baro calibration acquisition // start baro calibration acquisition
uint8_t cmd=0x17; // send cmd 23 uint8_t cmd=0x17; // send cmd 23
write(nav_fd, &cmd, 1); navdata_write(&cmd, 1);
uint8_t calibBuffer[22]; uint8_t calibBuffer[22];
int calib_bytes_read, calib_bytes_left, readcount; int calib_bytes_read, calib_bytes_left, readcount;