#
# Methods
#
def printDevParams(parmSet):
	for param in parmSet:
		print("*** param id={} name={} ***".format(param.id, param.name))
		printData(param, "--")

def printData(data, indent):
	print("{} data description='{}'".format(indent, data.description))

	if data.is_enumeration:
		text = "{} enum value={} default={} allowed='".format(indent, data.value, data.default_value)
		for val in data.allowed_values:
			text += "{} ({}), ".format(val.value, val.visible_name or val.identifier)
		text += "'"
	elif data.is_range_type:
		text = "{} range value={} default={} min={} max={}".format(indent, data.value, data.default_value, data.min_value, data.max_value)
	elif data.is_union:
		text = "{} union value={} default={}".format(indent, data.value, data.default_value)
	else:
		text = "{} value={} default={}".format(indent, data.value, data.default_value)

	print(text)

	if data.has_sub_elements:
		for subData in data:
			printData(subData, indent + "--")

#
# Main program
#
proj = projects.primary

found = proj.find('EtherCAT_Master', True)
assert(found, 'No EtherCAT Master found')

master = found[0]

params = master.device_parameters
print("Show device parameters")
if len(params) > 0:
	printDevParams(params)

print("Show host parameters of the connectors")
for conn in master.connectors:
	print("****** connector={} id={} ******".format(conn.interface, conn.connector_id))
	parms = conn.host_parameters
	if len(parms) > 0:
		printDevParams(parms)

params = master.connectors.by_id(2).host_parameters

print("Change master cycle time")

param = params.by_id(805326848)
print("Current value={}".format(param.value))

param.value = "5000"
print("New value={}".format(param.value))

