Commit 66440d9a authored by Juan David González Cobas's avatar Juan David González Cobas

Merge branch 'david-libertm-get-channel-status' into david-libertm-devel

This branch implements a separate function to obtain the enable/disable
status of channels.
Reported-by: 's avatarSaul Novel <saul.novel.gonzalez@cern.ch>
parents 498a056d 2d0a4cb3
......@@ -339,6 +339,25 @@ class ErtmTest(cmd.Cmd):
print('error {} in disable_channel: {}'.format(err, msg))
return
def do_get_channel_enable(self, args):
"display channel enable/disable status"
try:
conn, channel = args.split()
connector = self.connector_idx[conn.lower()]
channel = int(channel)
except (ValueError, KeyError) as e:
print('usage: get_channel_enable/gce {clka|clkb|lo|ref} channel')
return
state = c_uint(0)
err = self.lib.ertm_get_enable_state(self.handle, connector, channel, byref(state))
if err:
msg = self.errmsg(err)
print('error {} in get_channel_enable: {}'.format(err, msg))
return
st = state.value
print("{:s}{:02d}: {:s} ({:d})".format(
conn.upper(), channel, "on" if st else "off", st))
def do_get_level_adjust(self, args):
"display amplification level of connector."
try:
......
......@@ -635,19 +635,16 @@ static void update_board_config(struct ertm_status *st,
ertm_get_board_config(st, bs);
}
static int ertm_get_freq_sync_state(struct ertm_status *handle,
static int ertm_get_freq_sync_out_state(struct ertm_status *handle,
enum ertm_connector connector, int channel,
uint32_t *freq, int *sync_state)
uint32_t *freq, int *sync_state, uint8_t *out_state)
{
int err = 0;
struct ertm14_board_state *bs;
uint32_t *freg;
uint8_t *ssreg;
int enable;
/* channel param is irrelevant for lo/ref */
if (connector == ERTM_LO || connector == ERTM_REF) {
channel = ERTM_LOREF_MIN_CH;
}
if ((err = bad_inputs(handle, connector, channel)) != 0)
return err;
......@@ -656,19 +653,23 @@ static int ertm_get_freq_sync_state(struct ertm_status *handle,
case ERTM_CLKA:
freg = &bs->clka_freq_hz[channel];
ssreg = &bs->clka_sync_state[channel];
enable = !!(bs->clka_enable_mask & (1<<channel));
// clkab_set_output_divider(ERTM14_OUT_CLKA, channel, freq);
break;
case ERTM_CLKB:
freg = &bs->clkb_freq_hz[channel];
ssreg = &bs->clkb_sync_state[channel];
enable = !!(bs->clkb_enable_mask & (1<<channel));
break;
case ERTM_LO:
freg = &bs->lo.ftw;
ssreg = &bs->lo.sync_state;
enable = bs->lo.out_state[channel];
break;
case ERTM_REF:
freg = &bs->ref.ftw;
ssreg = &bs->ref.sync_state;
enable = bs->ref.out_state[channel];
break;
default:
errno = EINVAL;
......@@ -677,6 +678,7 @@ static int ertm_get_freq_sync_state(struct ertm_status *handle,
update_board_config(handle, &handle->state->board_state);
*freq = *freg;
*sync_state = *ssreg;
*out_state = enable;
return 0;
}
......@@ -684,15 +686,39 @@ static int ertm_get_freq_sync_state(struct ertm_status *handle,
int ertm_get_freq(struct ertm_status *handle,
enum ertm_connector connector, int channel, uint32_t *freq)
{
int unused;
return ertm_get_freq_sync_state(handle, connector, channel, freq, &unused);
uint32_t u;
void *unused1 = &u, *unused2 = &u;
/* channel param is irrelevant for lo/ref freq */
if (connector == ERTM_LO || connector == ERTM_REF) {
channel = ERTM_LOREF_MIN_CH;
}
return ertm_get_freq_sync_out_state(handle, connector, channel,
freq, unused1, unused2);
}
int ertm_get_sync_state(struct ertm_status *handle,
enum ertm_connector connector, int channel, int *sync_state)
{
uint32_t unused;
return ertm_get_freq_sync_state(handle, connector, channel, &unused, sync_state);
uint32_t u;
void *unused1 = &u, *unused2 = &u;
/* channel param is irrelevant for lo/ref sync state */
if (connector == ERTM_LO || connector == ERTM_REF) {
channel = ERTM_LOREF_MIN_CH;
}
return ertm_get_freq_sync_out_state(handle, connector, channel,
unused1, sync_state, unused2);
return 0;
}
int ertm_get_enable_state(struct ertm_status *handle,
enum ertm_connector connector, int channel, uint8_t *enable_state)
{
uint32_t u;
void *unused1 = &u, *unused2 = &u;
return ertm_get_freq_sync_out_state(handle, connector, channel,
unused1, unused2, enable_state);
return 0;
}
......
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