24def configure(obj, tx_enable_flag, xpt_map0, xpt_map1, active_xpt_map):
26 if (len(xpt_map0) != 16
or len(xpt_map1) != 16):
27 raise click.ClickException(
"XPT map length must be 16. Lenghts of provided maps are, 0: {}, 1: {}".format(len(xpt_map0), len(xpt_map1)))
30 ipmi.writeRegOverIPMI(obj.ipmi_connection, 0x0, 0x01)
37 ipmi.writeRegOverIPMI(obj.ipmi_connection, 0x81, active_xpt_map)
40 ipmi.writeRegOverIPMI(obj.ipmi_connection, 0x80, 0x01)
45 print(
"Crossbar config applied")
46 obj.ipmi_connection.session.close()
51@crossbar.command('read-config', short_help='Reads the config of the clock cross-bar on the AFC')
68 tx_control_ctrl_reg_start = 0x20
71 reg_adr = tx_control_ctrl_reg_start+i
91 tx_state = 0b0110000
if tx_enable_flag & (1 << i)
else 0b0000000
93 ipmi.writeRegOverIPMI(ipmi_connection, reg_adr, tx_state)
100 for i
in range(2,18,2):
101 map_value_str = xpt_map[i-2:i]
102 map_value=int(map_value_str, 16)
103 reg_value_lo = int(
'{:08b}'.format(map_value)[4:], 2) << 4
104 reg_value_hi = int(
'{:08b}'.format(map_value)[:4], 2)
105 reg_value = reg_value_lo | reg_value_hi
106 xpt_reg_values.append(reg_value)
108 xpt_map_reg_adrs_start=[0x90, 0x98]
110 for i
in range(len(xpt_reg_values)):
111 reg_adr = xpt_map_reg_adrs_start[map_number]+i
112 reg_value = xpt_reg_values[i]
113 ipmi.writeRegOverIPMI(ipmi_connection, reg_adr, reg_value)
121 xpt_map_reg_adrs_start=[0x90, 0x98]
124 reg_adr = xpt_map_reg_adrs_start[map_number]+i
125 reg_value = ipmi.readRegOverIPMI(ipmi_connection, reg_adr)
126 reg_value_lo = reg_value & 0x0f
127 reg_value_hi = (reg_value >> 4) & 0x0f
128 xpt_map.append(reg_value_lo)
129 xpt_map.append(reg_value_hi)
158 configTable.set_deco(Texttable.VLINES | Texttable.BORDER | Texttable.HEADER)
159 configTable.set_cols_align([
"l",
"l",
"l",
"l"])
160 configTable.set_chars([
'-',
'|',
'+',
'-'])
161 configTable.header( [
'Output', style(
'Map 0', fg=map_0_colour), style(
'Map 1', fg=map_1_colour),
'Tx state'] )
163 for i
in range(len(map_0)):
164 tx_state = (tx[i] & 0b0110000) >> 4
165 tx_state_names = [
"Disabled",
"Standby",
"Squelched",
"Enabled"]
166 tx_state_colours=[
'red',
'white',
'blue',
'green']
167 configTable.add_row( [i, style(str(map_0[i]), fg=map_0_colour), style(str(map_1[i]), fg=map_1_colour), style(tx_state_names[tx_state], fg=tx_state_colours[tx_state])] )
169 return configTable.draw()