Commit 6370cb5a authored by Federico Vaga's avatar Federico Vaga

wrtd:lib:out: use standard ping and version function from librt

Signed-off-by: Federico Vaga's avatarFederico Vaga <federico.vaga@cern.ch>


NOTE
This commit has been created by `git subtree` on the Mock Turtle repository
on tag mock-turtle-2.0

This commit will not compile
parent 5ff3cdd0
...@@ -847,21 +847,9 @@ int wrtd_out_has_trigger(struct wrtd_node *dev, unsigned int output, ...@@ -847,21 +847,9 @@ int wrtd_out_has_trigger(struct wrtd_node *dev, unsigned int output,
int wrtd_out_ping(struct wrtd_node *dev) int wrtd_out_ping(struct wrtd_node *dev)
{ {
struct wrtd_desc *wrtd = (struct wrtd_desc *)dev; struct wrtd_desc *wrtd = (struct wrtd_desc *)dev;
struct wrnc_msg msg = wrnc_msg_init(3);
uint32_t id, seq = 0;
int err;
id = WRTD_CMD_FD_PING; return wrnc_rt_ping(wrtd->wrnc, WRTD_IN_FD_CONTROL,
wrnc_msg_header(&msg, &id, &seq); WRTD_OUT_FD_CONTROL);
/* Send the message and get answer */
err = wrtd_out_send_and_receive_sync(wrtd, &msg);
if (err) {
errno = EWRTD_INVALID_ANSWER_STATE;
return -1;
}
return wrtd_validate_acknowledge(&msg);
} }
/** /**
...@@ -873,30 +861,21 @@ int wrtd_out_ping(struct wrtd_node *dev) ...@@ -873,30 +861,21 @@ int wrtd_out_ping(struct wrtd_node *dev)
int wrtd_out_base_time(struct wrtd_node *dev, struct wr_timestamp *ts) int wrtd_out_base_time(struct wrtd_node *dev, struct wr_timestamp *ts)
{ {
struct wrtd_desc *wrtd = (struct wrtd_desc *)dev; struct wrtd_desc *wrtd = (struct wrtd_desc *)dev;
struct wrnc_msg msg = wrnc_msg_init(6); /* FIXME cannot use 2 */ uint32_t variables[] = {OUT_VAR_DEVICE_TIME_S, 0,
uint32_t id, seq = 0; OUT_VAR_DEVICE_TIME_T, 0};
struct wrnc_proto_header hdr = {
.slot_io = (WRTD_IN_FD_CONTROL << 4) |
(WRTD_OUT_FD_CONTROL & 0xF),
.flags = WRNC_PROTO_FLAG_SYNC,
.len = 4,
};
int err; int err;
id = WRTD_CMD_FD_BASE_TIME; err = wrnc_rt_variable_get(wrtd->wrnc, &hdr, variables, 2);
wrnc_msg_header(&msg, &id, &seq); if (err)
return err;
/* Send the message and get answer */ ts->seconds = variables[1];
err = wrtd_out_send_and_receive_sync(wrtd, &msg); ts->ticks = variables[3];
if (err) {
errno = EWRTD_INVALID_ANSWER_STATE;
return -1;
}
/* Deserialize and check the answer */
wrnc_msg_header(&msg, &id, &seq);
if(id != WRTD_REP_BASE_TIME_ID)
{
errno = EWRTD_INVALID_ANSWER_STATE;
return -1;
}
wrtd_msg_timestamp(&msg, ts);
return 0; return 0;
} }
...@@ -905,36 +884,13 @@ int wrtd_out_base_time(struct wrtd_node *dev, struct wr_timestamp *ts) ...@@ -905,36 +884,13 @@ int wrtd_out_base_time(struct wrtd_node *dev, struct wr_timestamp *ts)
/** /**
* It gets the output version * It gets the output version
* @param[in] dev device token * @param[in] dev device token
* @param[out] ts output device base time * @param[out] version the RT application version
* @return 0 on success, -1 on error and errno is set appropriately * @return 0 on success, -1 on error and errno is set appropriately
*/ */
int wrtd_out_version(struct wrtd_node *dev, uint32_t *gitsha1) int wrtd_out_version(struct wrtd_node *dev, struct wrnc_rt_version *version)
{ {
struct wrtd_desc *wrtd = (struct wrtd_desc *)dev; struct wrtd_desc *wrtd = (struct wrtd_desc *)dev;
struct wrnc_msg msg = wrnc_msg_init(6); /* FIXME cannot use 2 */
uint32_t id, seq = 0;
int err;
id = WRTD_CMD_FD_VERSION;
wrnc_msg_header(&msg, &id, &seq);
/* Send the message and get answer */
err = wrtd_out_send_and_receive_sync(wrtd, &msg);
if (err) {
errno = EWRTD_INVALID_ANSWER_STATE;
return -1;
}
/* Deserialize and check the answer */ return wrnc_rt_version_get(wrtd->wrnc, version,
wrnc_msg_header(&msg, &id, &seq); WRTD_IN_FD_CONTROL, WRTD_OUT_FD_CONTROL);
if(id != WRTD_REP_VERSION)
{
errno = EWRTD_INVALID_ANSWER_STATE;
return -1;
}
wrnc_msg_uint32(&msg, gitsha1);
return 0;
} }
...@@ -303,7 +303,8 @@ extern int wrtd_out_trig_enable(struct wrtd_node *dev, ...@@ -303,7 +303,8 @@ extern int wrtd_out_trig_enable(struct wrtd_node *dev,
struct wrtd_trigger_handle *handle, int enable); struct wrtd_trigger_handle *handle, int enable);
extern int wrtd_out_ping(struct wrtd_node *dev); extern int wrtd_out_ping(struct wrtd_node *dev);
extern int wrtd_out_base_time(struct wrtd_node *dev, struct wr_timestamp *ts); extern int wrtd_out_base_time(struct wrtd_node *dev, struct wr_timestamp *ts);
extern int wrtd_out_version(struct wrtd_node *dev, uint32_t *gitsha1); extern int wrtd_out_version(struct wrtd_node *dev,
struct wrnc_rt_version *version);
extern int wrtd_out_trigger_mode_set(struct wrtd_node *dev, extern int wrtd_out_trigger_mode_set(struct wrtd_node *dev,
unsigned int output, unsigned int output,
enum wrtd_trigger_mode mode); enum wrtd_trigger_mode mode);
......
...@@ -25,11 +25,31 @@ void help() ...@@ -25,11 +25,31 @@ void help()
fprintf(stderr, " -v show device version\n"); fprintf(stderr, " -v show device version\n");
} }
static void print_time(struct wr_timestamp *t)
{
fprintf(stdout, "\tbase time\ts:%"PRIu64" t:%d f:%d\n",
t->seconds, t->ticks, t->frac);
}
static void print_version(struct wrnc_rt_version *v)
{
fprintf(stdout, "\tRealTime Application Version:");
fprintf(stdout, "\tfpga_id\t\t%x\n",
v->fpga_id);
fprintf(stdout, "\trt_id\t\t%x\n",
v->rt_id);
fprintf(stdout, "\trt_version\t\t%x\n",
v->rt_version);
fprintf(stdout, "\tgit_version\t\t%x\n",
v->git_version);
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
struct wrtd_node *wrtd; struct wrtd_node *wrtd;
uint32_t dev_id = 0, n = 1, vo; uint32_t dev_id = 0, n = 1;
struct wrnc_rt_version vi; struct wrnc_rt_version vi, vo;
uint64_t period = 0; uint64_t period = 0;
struct wr_timestamp tsi, tso; struct wr_timestamp tsi, tso;
int err, time = 0, version = 0; int err, time = 0, version = 0;
...@@ -108,20 +128,9 @@ int main(int argc, char *argv[]) ...@@ -108,20 +128,9 @@ int main(int argc, char *argv[])
fprintf(stdout, "input : it is running!\n"); fprintf(stdout, "input : it is running!\n");
if (time) if (time)
fprintf(stdout, print_time(&tsi);
"\tbase time\ts:%"PRIu64" t:%d f:%d\n", if (version)
tsi.seconds, tsi.ticks, tsi.frac); print_version(&vi);
if (version) {
fprintf(stdout, "\tRealTime Application Version:");
fprintf(stdout, "\tfpga_id\t\t%x\n",
vi.fpga_id);
fprintf(stdout, "\trt_id\t\t%x\n",
vi.rt_id);
fprintf(stdout, "\trt_version\t\t%x\n",
vi.rt_version);
fprintf(stdout, "\tgit_version\t\t%x\n",
vi.git_version);
}
skip_input: skip_input:
/* check output */ /* check output */
err = wrtd_out_ping(wrtd); err = wrtd_out_ping(wrtd);
...@@ -133,12 +142,10 @@ int main(int argc, char *argv[]) ...@@ -133,12 +142,10 @@ int main(int argc, char *argv[])
fprintf(stdout, "output : it is running!\n"); fprintf(stdout, "output : it is running!\n");
if (time) if (time)
fprintf(stdout, print_time(&tso);
"\tbase time\ts:%"PRIu64" t:%d f:%d\n",
tso.seconds, tso.ticks, tso.frac);
if (version) if (version)
fprintf(stdout, print_version(&vo);
"\tversion\t\t%x\n", vo);
skip_output: skip_output:
fprintf(stdout, "\n"); fprintf(stdout, "\n");
usleep(period); usleep(period);
......
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