Commit 3c4fc6fe authored by Federico Vaga's avatar Federico Vaga

wrtd:serializer: fix timestamp serializer, seconds is 64bit

Signed-off-by: Federico Vaga's avatarFederico Vaga <federico.vaga@cern.ch>
parent 6dbb25ac
......@@ -133,20 +133,22 @@ static inline void wrnc_msg_seek ( struct wrnc_msg *buf, int pos )
static inline int wrtd_msg_timestamp ( struct wrnc_msg *buf, struct wr_timestamp *ts )
{
if (_wrnc_msg_check_buffer ( buf, 3 ) < 0)
if (_wrnc_msg_check_buffer ( buf, 4 ) < 0)
return -1;
if (buf->direction == WRNC_MSG_DIR_SEND)
{
buf->data[buf->datalen + 0] = ts->seconds;
buf->data[buf->datalen + 1] = ts->ticks;
buf->data[buf->datalen + 2] = ts->frac;
buf->datalen += 3;
buf->data[buf->datalen + 0] = (ts->seconds >> 32) & 0xFFFFFFFF;
buf->data[buf->datalen + 1] = ts->seconds & 0xFFFFFFFF;
buf->data[buf->datalen + 2] = ts->ticks;
buf->data[buf->datalen + 3] = ts->frac;
buf->datalen += 4;
} else {
ts->seconds = buf->data[buf->offset + 0];
ts->ticks = buf->data[buf->offset + 1];
ts->frac = buf->data[buf->offset + 2];
buf->offset += 3;
ts->seconds = buf->data[buf->offset + 0] << 32;
ts->seconds |= buf->data[buf->offset + 1];
ts->ticks = buf->data[buf->offset + 2];
ts->frac = buf->data[buf->offset + 3];
buf->offset += 4;
}
return 0;
......
......@@ -57,7 +57,7 @@ int wrtd_in_state_get(struct wrtd_node *dev, unsigned int input,
struct wrtd_input_state *state)
{
struct wrtd_desc *wrtd = (struct wrtd_desc *)dev;
struct wrnc_msg msg = wrnc_msg_init(16);
struct wrnc_msg msg = wrnc_msg_init(19);
int err;
uint32_t id, seq = 0;
uint32_t dead_time_cycles;
......@@ -392,13 +392,14 @@ int wrtd_in_delay_set(struct wrtd_node *dev, unsigned int input,
wrtd_pico_to_ts(&delay_ps, &t);
/* Build the message */
msg.datalen = 6;
msg.datalen = 7;
msg.data[0] = WRTD_CMD_TDC_CHAN_SET_DELAY;
msg.data[1] = 0;
msg.data[2] = input;
msg.data[3] = t.seconds;
msg.data[4] = t.ticks;
msg.data[5] = t.frac;
msg.data[3] = t.seconds >> 32;
msg.data[4] = t.seconds & 0xFFFFFFFF;
msg.data[5] = t.ticks;
msg.data[6] = t.frac;
/* Send the message and get answer */
err = wrtd_in_send_and_receive_sync(wrtd, &msg);
......@@ -436,13 +437,14 @@ int wrtd_in_timebase_offset_set(struct wrtd_node *dev, unsigned int input,
wrtd_pico_to_ts(&offset, &t);
/* Build the message */
msg.datalen = 6;
msg.datalen = 7;
msg.data[0] = WRTD_CMD_TDC_CHAN_SET_TIMEBASE_OFFSET;
msg.data[1] = 0;
msg.data[2] = input;
msg.data[3] = t.seconds;
msg.data[4] = t.ticks;
msg.data[5] = t.frac;
msg.data[3] = t.seconds >> 32;
msg.data[4] = t.seconds & 0xFFFFFFFF;
msg.data[5] = t.ticks;
msg.data[6] = t.frac;
/* Send the message and get answer */
err = wrtd_in_send_and_receive_sync(wrtd, &msg);
......
......@@ -141,7 +141,7 @@ int wrtd_out_state_get(struct wrtd_node *dev, unsigned int output,
struct wrtd_output_state *state)
{
struct wrtd_desc *wrtd = (struct wrtd_desc *)dev;
struct wrnc_msg msg = wrnc_msg_init (16);
struct wrnc_msg msg = wrnc_msg_init(20);
int err, dummy = 0;
uint32_t seq = 0, id;
uint32_t dead_time_ticks, pulse_width_ticks;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment