6 from webiopi.devices import serial, digital, analog, sensor, shield, clock, memory
8 PACKAGES = [serial, digital, analog, sensor, shield, clock, memory]
10 for package
in PACKAGES:
11 if hasattr(package, name):
12 return getattr(package, name)
13 if hasattr(package,
"DRIVERS"):
14 for driver
in package.DRIVERS:
15 if name
in package.DRIVERS[driver]:
16 (fp, pathname, stuff) = imp.find_module(package.__name__.replace(
".",
"/") +
"/" + driver)
17 module = imp.load_module(driver, fp, pathname, stuff)
18 return getattr(module, name)
24 raise Exception(
"Device driver not found for %s" % device)
26 dev = devClass(**args)
32 funcs = {
"GET": {},
"POST": {}}
34 func = getattr(dev, att)
35 if callable(func)
and hasattr(func,
"routed"):
37 logger.debug(
"Mapping %s.%s to REST %s /GPIO/%s" % (dev, att, func.method, func.path))
39 logger.debug(
"Mapping %s.%s to REST %s /devices/%s/%s" % (dev, att, func.method, name, func.path))
40 funcs[func.method][func.path] = func
42 DEVICES[name] = {
'device': dev,
'functions': funcs}
44 logger.info(
"GPIO - Native mapped to REST API /GPIO")
46 logger.info(
"%s - %s mapped to REST API /devices/%s" % (dev.__family__(), dev, name))
49 devices = [k
for k
in DEVICES.keys()]
51 device = DEVICES[name][
"device"]
52 logger.debug(
"Closing device %s - %s" % (name, device))
61 for devName
in DEVICES:
64 instance = DEVICES[devName][
"device"]
65 if hasattr(instance,
"__family__"):
66 family = instance.__family__()
67 if isinstance(family, str):
68 devices.append({devname: devName, devtype:family})
71 devices.append({devname: devName, devtype:fam})
74 devices.append({devname: devName, type:instance.__str__()})
76 return types.jsonDumps(sorted(devices, key=
lambda dev: dev[devname]))