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,
int wrtd_out_ping(struct wrtd_node *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;
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;
}
return wrtd_validate_acknowledge(&msg);
return wrnc_rt_ping(wrtd->wrnc, WRTD_IN_FD_CONTROL,
WRTD_OUT_FD_CONTROL);
}
/**
......@@ -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)
{
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;
uint32_t variables[] = {OUT_VAR_DEVICE_TIME_S, 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;
id = WRTD_CMD_FD_BASE_TIME;
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 */
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);
err = wrnc_rt_variable_get(wrtd->wrnc, &hdr, variables, 2);
if (err)
return err;
ts->seconds = variables[1];
ts->ticks = variables[3];
return 0;
}
......@@ -905,36 +884,13 @@ int wrtd_out_base_time(struct wrtd_node *dev, struct wr_timestamp *ts)
/**
* It gets the output version
* @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
*/
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 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 */
wrnc_msg_header(&msg, &id, &seq);
if(id != WRTD_REP_VERSION)
{
errno = EWRTD_INVALID_ANSWER_STATE;
return -1;
}
wrnc_msg_uint32(&msg, gitsha1);
return 0;
return wrnc_rt_version_get(wrtd->wrnc, version,
WRTD_IN_FD_CONTROL, WRTD_OUT_FD_CONTROL);
}
......@@ -303,7 +303,8 @@ extern int wrtd_out_trig_enable(struct wrtd_node *dev,
struct wrtd_trigger_handle *handle, int enable);
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_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,
unsigned int output,
enum wrtd_trigger_mode mode);
......
......@@ -25,11 +25,31 @@ void help()
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[])
{
struct wrtd_node *wrtd;
uint32_t dev_id = 0, n = 1, vo;
struct wrnc_rt_version vi;
uint32_t dev_id = 0, n = 1;
struct wrnc_rt_version vi, vo;
uint64_t period = 0;
struct wr_timestamp tsi, tso;
int err, time = 0, version = 0;
......@@ -108,20 +128,9 @@ int main(int argc, char *argv[])
fprintf(stdout, "input : it is running!\n");
if (time)
fprintf(stdout,
"\tbase time\ts:%"PRIu64" t:%d f:%d\n",
tsi.seconds, tsi.ticks, tsi.frac);
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);
}
print_time(&tsi);
if (version)
print_version(&vi);
skip_input:
/* check output */
err = wrtd_out_ping(wrtd);
......@@ -133,12 +142,10 @@ int main(int argc, char *argv[])
fprintf(stdout, "output : it is running!\n");
if (time)
fprintf(stdout,
"\tbase time\ts:%"PRIu64" t:%d f:%d\n",
tso.seconds, tso.ticks, tso.frac);
print_time(&tso);
if (version)
fprintf(stdout,
"\tversion\t\t%x\n", vo);
print_version(&vo);
skip_output:
fprintf(stdout, "\n");
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