Commit 0dde34d4 authored by Federico Vaga's avatar Federico Vaga

wrtd:lib: fix wrong concept in get trigger by id

A trigger can be assigned, on output, to different channel. So, when
we look for a trigger ID we must specify on which channel and not
just getting the first one assigned.
Signed-off-by: Federico Vaga's avatarFederico Vaga <federico.vaga@cern.ch>
parent cbe71599
......@@ -416,33 +416,33 @@ int wrtd_out_trig_state_get_by_handle(struct wrtd_node *dev,
* It returns a trigget from a given identifier.
* Whenever is possible you should prefer wrtd_out_trig_state_get_by_handle()
* @param[in] dev device token
* @param[in] output index (0-based) of output channel
* @param[in] id identifier of the trigger to retrieve
* @param[out] trigger trigger status
* @return 0 on success, -1 on error and errno is set appropriately
*/
int wrtd_out_trig_state_get_by_id(struct wrtd_node *dev,
unsigned int output,
struct wrtd_trig_id *tid,
struct wrtd_output_trigger_state *trigger)
{
struct wrtd_desc *wrtd = (struct wrtd_desc *)dev;
uint32_t seq = 0, id;
int ret, i;
int ret;
struct wrnc_msg msg = wrnc_msg_init(6);
for (i = 0; i < FD_NUM_CHANNELS; ++i) {
struct wrnc_msg msg = wrnc_msg_init(6);
id = WRTD_CMD_FD_TRIG_GET_BY_ID;
wrnc_msg_header(&msg, &id, &seq);
wrnc_msg_int32(&msg, &i);
wrtd_msg_trig_id(&msg, tid);
id = WRTD_CMD_FD_TRIG_GET_BY_ID;
wrnc_msg_header(&msg, &id, &seq);
wrnc_msg_int32(&msg, &output);
wrtd_msg_trig_id(&msg, tid);
ret = __wrtd_out_trig_get(wrtd, i, &msg, trigger);
if (!ret)
return 0;
ret = __wrtd_out_trig_get(wrtd, output, &msg, trigger);
if (ret) {
errno = EWRTD_NOFOUND_TRIGGER;
return -1;
}
errno = EWRTD_NOFOUND_TRIGGER;
return -1;
return 0;
}
......
......@@ -279,6 +279,7 @@ extern int wrtd_out_trig_state_get_by_index(struct wrtd_node *dev,
unsigned int output,
struct wrtd_output_trigger_state *trigger);
extern int wrtd_out_trig_state_get_by_id(struct wrtd_node *dev,
unsigned int output,
struct wrtd_trig_id *id,
struct wrtd_output_trigger_state *trigger);
extern int wrtd_out_trig_state_get_by_handle(struct wrtd_node *dev,
......
......@@ -205,7 +205,7 @@ static int trig_enable(struct wrtd_node *wrtd, int output,
return err;
/* Get a trigger */
err = wrtd_out_trig_state_get_by_id(wrtd, &tid, &trig);
err = wrtd_out_trig_state_get_by_id(wrtd, output, &tid, &trig);
if (err)
return err;
......@@ -283,7 +283,7 @@ static int wrtd_cmd_trig_delay(struct wrtd_node *wrtd, int output,
return err;
/* Get a trigger */
err = wrtd_out_trig_state_get_by_id(wrtd, &tid, &trig);
err = wrtd_out_trig_state_get_by_id(wrtd, output, &tid, &trig);
if (err)
return err;
......@@ -311,7 +311,7 @@ static int wrtd_cmd_trig_cond_delay(struct wrtd_node *wrtd, int output,
return err;
/* Get a trigger */
err = wrtd_out_trig_state_get_by_id(wrtd, &tid, &trig);
err = wrtd_out_trig_state_get_by_id(wrtd, output, &tid, &trig);
if (err)
return err;
......@@ -443,7 +443,7 @@ static int wrtd_cmd_trig_unassign(struct wrtd_node *wrtd, int output,
return err;
/* Get a trigger */
err = wrtd_out_trig_state_get_by_id(wrtd, &tid, &trig);
err = wrtd_out_trig_state_get_by_id(wrtd, output, &tid, &trig);
if (err)
return err;
......@@ -531,7 +531,7 @@ static int wrtd_cmd_trig_find(struct wrtd_node *wrtd, int output,
if (ret)
return -1;
ret = wrtd_out_trig_state_get_by_id(wrtd, &id, &state);
ret = wrtd_out_trig_state_get_by_id(wrtd, output, &id, &state);
if (ret)
return -1;
......
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