#! /usr/bin/python3

import os
import xusb
import xtalk

def env_debug_mask(module, env_name, default_value):
	debug_mask = os.getenv(env_name, default_value)
	module.set_debug_mask(int(debug_mask, 0));

def env_verbose(module, env_name, default_value):
	verbose = os.getenv(env_name, default_value)
	module.set_verbose(int(verbose, 0));

env_debug_mask(xusb, "XTALK_DEBUG", "0x0")
env_debug_mask(xtalk, "XTALK_DEBUG", "0x0")
env_verbose(xusb, "XTALK_VERBOSE", "0")
env_verbose(xtalk, "XTALK_VERBOSE", "0")

# List of specs to search
specs = (
	xusb.Spec(0xe4e4, 0x1183, "Power Supplies"),
	xusb.Spec(0xe4e4, 0x1162, "Astribanks"),
	xusb.Spec(0xe4e4, 0x1161, "Astribanks-USB"),
	xusb.Spec(0xe4e4, 0x1191, "XPanels"),
	xusb.Spec(0xe4e4, 0xbb01, "Zigbees"),
	)

# Find all devices
print("Searching for devices:")
all_devs = []
interesting_specs = dict()	# that have devices

for s in specs:
	spec_name = s.name()
	devs = s.find_all()
	if not devs:
		continue
	print("\t-> %d %s" % (len(devs), spec_name))
	interesting_specs[spec_name] = devs[0]	# representative
	all_devs += devs

def handle_dev(d):
	s = d.spec()	# Which spec does it belong to?
	spec_name = s.name()
	print("Found XTALK device (%s)" % spec_name)
	i = d.claim(1)
	print("\t-> %s\t%s" % (i.name(), d.serial()))
	d.showinfo()
	t = xtalk.Xtalksync(i)
	t.set_timeout(1000)
	print("PROTOCOL NAME:", t.name())
	print("PROTOCOL VERSION:", t.proto_query())
	print(t)
	i = None

# Test each device
print("Devices found:")
for d in all_devs:
	handle_dev(d)
