diff --git a/README.rst b/README.rst index 8ecedd0..bf468d9 100644 --- a/README.rst +++ b/README.rst @@ -2,17 +2,19 @@ gpiozero ======== -.. image:: https://badge.fury.io/py/gpiozero.svg - :target: https://badge.fury.io/py/gpiozero - :alt: Latest Version +.. only:: builder_html -.. image:: https://travis-ci.org/RPi-Distro/python-gpiozero.svg?branch=master - :target: https://travis-ci.org/RPi-Distro/python-gpiozero - :alt: Build Tests + .. image:: https://badge.fury.io/py/gpiozero.svg + :target: https://badge.fury.io/py/gpiozero + :alt: Latest Version -.. image:: https://img.shields.io/codecov/c/github/RPi-Distro/python-gpiozero/master.svg?maxAge=2592000 - :target: https://codecov.io/github/RPi-Distro/python-gpiozero - :alt: Code Coverage + .. image:: https://travis-ci.org/RPi-Distro/python-gpiozero.svg?branch=master + :target: https://travis-ci.org/RPi-Distro/python-gpiozero + :alt: Build Tests + + .. image:: https://img.shields.io/codecov/c/github/RPi-Distro/python-gpiozero/master.svg?maxAge=2592000 + :target: https://codecov.io/github/RPi-Distro/python-gpiozero + :alt: Code Coverage A simple interface to GPIO devices with Raspberry Pi. diff --git a/docs/api_generic.rst b/docs/api_generic.rst index 2645561..5b3c6ae 100644 --- a/docs/api_generic.rst +++ b/docs/api_generic.rst @@ -23,7 +23,8 @@ classes (most of which are documented in their corresponding chapters): devices like HATs There are also several `mixin classes`_ for adding important functionality -at numerous points in the hierarchy, which is illustrated below: +at numerous points in the hierarchy, which is illustrated below (mixin classes +are represented in purple, while abstract classes are shaded lighter): .. image:: images/device_hierarchy.* diff --git a/docs/api_input.rst b/docs/api_input.rst index 898f603..4791c1c 100644 --- a/docs/api_input.rst +++ b/docs/api_input.rst @@ -52,7 +52,8 @@ Base Classes The classes in the sections above are derived from a series of base classes, some of which are effectively abstract. The classes form the (partial) -hierarchy displayed in the graph below: +hierarchy displayed in the graph below (abstract classes are shaded lighter +than concrete classes): .. image:: images/input_device_hierarchy.* diff --git a/docs/api_other.rst b/docs/api_other.rst index a8efaa4..35729dd 100644 --- a/docs/api_other.rst +++ b/docs/api_other.rst @@ -35,7 +35,8 @@ Base Classes The classes in the sections above are derived from a series of base classes, some of which are effectively abstract. The classes form the (partial) -hierarchy displayed in the graph below: +hierarchy displayed in the graph below (abstract classes are shaded lighter +than concrete classes): .. image:: images/other_device_hierarchy.* diff --git a/docs/api_output.rst b/docs/api_output.rst index 7bd888a..4a2a178 100644 --- a/docs/api_output.rst +++ b/docs/api_output.rst @@ -62,7 +62,8 @@ Base Classes The classes in the sections above are derived from a series of base classes, some of which are effectively abstract. The classes form the (partial) -hierarchy displayed in the graph below: +hierarchy displayed in the graph below (abstract classes are shaded lighter +than concrete classes): .. image:: images/output_device_hierarchy.* diff --git a/docs/api_spi.rst b/docs/api_spi.rst index 7fdc3bb..09338ac 100644 --- a/docs/api_spi.rst +++ b/docs/api_spi.rst @@ -121,7 +121,8 @@ Base Classes The classes in the sections above are derived from a series of base classes, some of which are effectively abstract. The classes form the (partial) -hierarchy displayed in the graph below: +hierarchy displayed in the graph below (abstract classes are shaded lighter +than concrete classes): .. image:: images/spi_device_hierarchy.* diff --git a/docs/images/class_graph b/docs/images/class_graph new file mode 100755 index 0000000..6780167 --- /dev/null +++ b/docs/images/class_graph @@ -0,0 +1,173 @@ +#!/usr/bin/python3 + +import re +import sys +import argparse +from pathlib import Path + + +ABSTRACT_CLASSES = { + 'Device', + 'GPIODevice', + 'SmoothedInputDevice', + 'AnalogInputDevice', + 'MCP3xxx', + 'MCP33xx', + 'CompositeDevice', + 'CompositeOutputDevice', + 'LEDCollection', + 'InternalDevice', +} + +OMIT_CLASSES = { + 'object', + 'GPIOBase', + 'GPIOMeta', + 'frozendict', + 'WeakMethod', + '_EnergenieMaster', +} + + +def main(args=None): + """ + A simple application for generating GPIO Zero's charts. Specify the root + class to generate with -i (multiple roots can be specified). Specify parts + of the hierarchy to exclude with -x. Output is in a format suitable for + feeding to graphviz's dot application. + """ + if args is None: + args = sys.argv[1:] + my_path = Path(__file__).parent + # XXX make this relative to repo root rather than this script + default_path = my_path / '..' / '..' / 'gpiozero' + default_path = default_path.resolve() + parser = argparse.ArgumentParser(description=main.__doc__) + parser.add_argument('-p', '--path', action='append', metavar='PATH', + default=[], help= + "search under PATH for Python source files; can be " + "specified multiple times, defaults to %s" % default_path) + parser.add_argument('-i', '--include', action='append', metavar='BASE', + default=[], help= + "only include classes which have BASE somewhere in " + "their ancestry; can be specified multiple times") + parser.add_argument('-x', '--exclude', action='append', metavar='BASE', + default=[], help= + "exclude any classes which have BASE somewhere in " + "their ancestry; can be specified multiple times") + parser.add_argument('output', nargs='?', type=argparse.FileType('w'), + default=sys.stdout, help= + "the file to write the output to; defaults to stdout") + args = parser.parse_args(args) + if not args.path: + args.path = [str(default_path)] + + m = make_class_map(args.path, OMIT_CLASSES) + if args.include or args.exclude: + m = filter_map(m, include_roots=set(args.include), exclude_roots=set(args.exclude)) + args.output.write(render_map(m, ABSTRACT_CLASSES)) + + +def make_class_map(search_paths, omit): + """ + Find all Python source files under *search_paths*, extract (via a crude + regex) all class definitions and return a mapping of class-name to the list + of base classes. + + All classes listed in *omit* will be excluded from the result, but not + their descendents (useful for excluding "object" etc.) + """ + def find_classes(): + class_re = re.compile(r'^class (?P\w+)(?:\((?P.*)\))?:', re.MULTILINE) + for path in search_paths: + for py_file in Path(path).rglob('*.py'): + with py_file.open() as f: + for match in class_re.finditer(f.read()): + if match.group('name') not in omit: + yield match.group('name'), [ + base.strip() + for base in (match.group('bases') or '').split(',') + if base.strip() not in omit + ] + return { + name: bases + for name, bases in find_classes() + } + + +def filter_map(class_map, include_roots, exclude_roots): + """ + Returns *class_map* (which is a mapping such as that returned by + :func:`make_class_map`), with only those classes which have at least one + of the *include_roots* in their ancestry, and none of the *exclude_roots*. + """ + def has_parent(cls, parent): + return cls == parent or any( + has_parent(base, parent) for base in class_map.get(cls, ())) + + return { + name: bases + for name, bases in class_map.items() + if (not include_roots or any(has_parent(name, root) for root in include_roots)) + and not any(has_parent(name, root) for root in exclude_roots) + } + + +def render_map(class_map, abstract): + """ + Renders *class_map* (which is a mapping such as that returned by + :func:`make_class_map`) to graphviz's dot language. + + The *abstract* sequence determines which classes will be rendered lighter + to indicate their abstract nature. All classes with names ending "Mixin" + will be implicitly rendered in a different style. + """ + def all_names(class_map): + for name, bases in class_map.items(): + yield name + for base in bases: + yield base + + template = """\ +digraph classes {{ + graph [rankdir=RL]; + node [shape=rect, style=filled, fontname=Sans, fontsize=10]; + edge []; + + /* Mixin classes */ + node [color="#c69ee0", fontcolor="#000000"] + + {mixin_nodes} + + /* Abstract classes */ + node [color="#9ec6e0", fontcolor="#000000"] + + {abstract_nodes} + + /* Concrete classes */ + node [color="#2980b9", fontcolor="#ffffff"]; + + {edges} +}} +""" + + return template.format( + mixin_nodes='\n '.join( + '{name};'.format(name=name) + for name in set(all_names(class_map)) + if name.endswith('Mixin') + ), + abstract_nodes='\n '.join( + '{name};'.format(name=name) + for name in abstract & set(all_names(class_map)) + ), + edges='\n '.join( + '{name}->{base};'.format(name=name, base=base) + for name, bases in class_map.items() + for base in bases + ), + ) + + +if __name__ == '__main__': + main() diff --git a/docs/images/composite_device_hierarchy.dot b/docs/images/composite_device_hierarchy.dot index 4fe7c50..ab4dd98 100644 --- a/docs/images/composite_device_hierarchy.dot +++ b/docs/images/composite_device_hierarchy.dot @@ -1,7 +1,7 @@ /* vim: set et sw=4 sts=4: */ digraph classes { - graph [rankdir=BT]; + graph [rankdir=RL]; node [shape=rect, style=filled, fontname=Sans, fontsize=10]; edge []; @@ -24,6 +24,7 @@ digraph classes { PiLiter->LEDBoard; PiLiterBarGraph->LEDBarGraph; TrafficLights->LEDBoard; + SnowPi->LEDBoard; PiTraffic->TrafficLights; PiStop->TrafficLights; TrafficLightsBuzzer->CompositeOutputDevice; diff --git a/docs/images/composite_device_hierarchy.pdf b/docs/images/composite_device_hierarchy.pdf index 6d032bd..77942f8 100644 Binary files a/docs/images/composite_device_hierarchy.pdf and b/docs/images/composite_device_hierarchy.pdf differ diff --git a/docs/images/composite_device_hierarchy.png b/docs/images/composite_device_hierarchy.png index 484f2c5..b4a1671 100644 Binary files a/docs/images/composite_device_hierarchy.png and b/docs/images/composite_device_hierarchy.png differ diff --git a/docs/images/composite_device_hierarchy.svg b/docs/images/composite_device_hierarchy.svg index 87b1d0b..dbd3962 100644 --- a/docs/images/composite_device_hierarchy.svg +++ b/docs/images/composite_device_hierarchy.svg @@ -1,228 +1,238 @@ - - - + + classes - + Device - -Device + +Device CompositeDevice - -CompositeDevice + +CompositeDevice CompositeDevice->Device - - + + CompositeOutputDevice - -CompositeOutputDevice + +CompositeOutputDevice CompositeOutputDevice->CompositeDevice - - + + LEDCollection - -LEDCollection + +LEDCollection LEDCollection->CompositeOutputDevice - - + + LEDBoard - -LEDBoard + +LEDBoard LEDBoard->LEDCollection - - + + LEDBarGraph - -LEDBarGraph + +LEDBarGraph LEDBarGraph->LEDCollection - - + + PiLiter - -PiLiter + +PiLiter PiLiter->LEDBoard - - + + PiLiterBarGraph - -PiLiterBarGraph + +PiLiterBarGraph PiLiterBarGraph->LEDBarGraph - - + + TrafficLights - -TrafficLights + +TrafficLights TrafficLights->LEDBoard - - + + + + +SnowPi + +SnowPi + + +SnowPi->LEDBoard + + -PiTraffic - -PiTraffic +PiTraffic + +PiTraffic -PiTraffic->TrafficLights - - +PiTraffic->TrafficLights + + -PiStop - -PiStop +PiStop + +PiStop -PiStop->TrafficLights - - +PiStop->TrafficLights + + -TrafficLightsBuzzer - -TrafficLightsBuzzer +TrafficLightsBuzzer + +TrafficLightsBuzzer -TrafficLightsBuzzer->CompositeOutputDevice - - +TrafficLightsBuzzer->CompositeOutputDevice + + -FishDish - -FishDish +FishDish + +FishDish -FishDish->TrafficLightsBuzzer - - +FishDish->TrafficLightsBuzzer + + -TrafficHat - -TrafficHat +TrafficHat + +TrafficHat -TrafficHat->TrafficLightsBuzzer - - +TrafficHat->TrafficLightsBuzzer + + -Robot - -Robot +Robot + +Robot -Robot->CompositeDevice - - +Robot->CompositeDevice + + -RyanteckRobot - -RyanteckRobot +RyanteckRobot + +RyanteckRobot -RyanteckRobot->Robot - - +RyanteckRobot->Robot + + -CamJamKitRobot - -CamJamKitRobot +CamJamKitRobot + +CamJamKitRobot -CamJamKitRobot->Robot - - +CamJamKitRobot->Robot + + -Motor - -Motor +Motor + +Motor -Motor->CompositeDevice - - +Motor->CompositeDevice + + -Servo - -Servo +Servo + +Servo -Servo->CompositeDevice - - +Servo->CompositeDevice + + -AngularServo - -AngularServo +AngularServo + +AngularServo -AngularServo->Servo - - +AngularServo->Servo + + -Energenie - -Energenie +Energenie + +Energenie -Energenie->Device - - +Energenie->Device + + -ButtonBoard - -ButtonBoard +ButtonBoard + +ButtonBoard -ButtonBoard->CompositeDevice - - +ButtonBoard->CompositeDevice + + diff --git a/docs/images/device_hierarchy.dot b/docs/images/device_hierarchy.dot index 2db340c..a794678 100644 --- a/docs/images/device_hierarchy.dot +++ b/docs/images/device_hierarchy.dot @@ -1,7 +1,7 @@ /* vim: set et sw=4 sts=4: */ digraph classes { - graph [rankdir=BT]; + graph [rankdir=RL]; node [shape=rect, style=filled, fontname=Sans, fontsize=10]; edge []; @@ -60,11 +60,21 @@ digraph classes { SPIDevice->Device; AnalogInputDevice->SPIDevice; MCP3xxx->AnalogInputDevice; + MCP30xx->MCP3xxx; + MCP32xx->MCP3xxx; MCP33xx->MCP3xxx; - MCP3004->MCP3xxx; - MCP3008->MCP3xxx; - MCP3204->MCP3xxx; - MCP3208->MCP3xxx; + MCP3xx2->MCP3xxx; + + MCP3001->MCP30xx; + MCP3002->MCP30xx; + MCP3004->MCP30xx; + MCP3008->MCP30xx; + MCP3201->MCP32xx; + MCP3202->MCP32xx; + MCP3204->MCP32xx; + MCP3208->MCP32xx; + MCP3002->MCP3xx2; + MCP3202->MCP3xx2; MCP3301->MCP33xx; MCP3302->MCP33xx; MCP3304->MCP33xx; @@ -75,10 +85,15 @@ digraph classes { LEDCollection->CompositeOutputDevice; LEDBoard->LEDCollection; LEDBarGraph->LEDCollection; + LedBorg->RGBLED; + ButtonBoard->CompositeDevice; + ButtonBoard->HoldMixin; PiLiter->LEDBoard; PiLiterBarGraph->LEDBarGraph; TrafficLights->LEDBoard; + SnowPi->LEDBoard; PiTraffic->TrafficLights; + PiStop->TrafficLights; TrafficLightsBuzzer->CompositeOutputDevice; FishDish->TrafficLightsBuzzer; TrafficHat->TrafficLightsBuzzer; @@ -90,10 +105,14 @@ digraph classes { CamJamKitRobot->Robot; Motor->CompositeDevice; Motor->SourceMixin; + Servo->CompositeDevice; + Servo->SourceMixin; + AngularServo->Servo; InternalDevice->Device; InternalDevice->EventsMixin; TimeOfDay->InternalDevice; PingServer->InternalDevice; + CPUTemperature->InternalDevice; } diff --git a/docs/images/device_hierarchy.pdf b/docs/images/device_hierarchy.pdf index 6115eb4..5aecea9 100644 Binary files a/docs/images/device_hierarchy.pdf and b/docs/images/device_hierarchy.pdf differ diff --git a/docs/images/device_hierarchy.png b/docs/images/device_hierarchy.png index c46f5a0..42e1073 100644 Binary files a/docs/images/device_hierarchy.png and b/docs/images/device_hierarchy.png differ diff --git a/docs/images/device_hierarchy.svg b/docs/images/device_hierarchy.svg index 99eb67c..d5d5b09 100644 --- a/docs/images/device_hierarchy.svg +++ b/docs/images/device_hierarchy.svg @@ -1,568 +1,728 @@ - - - + + classes - + ValuesMixin - -ValuesMixin + +ValuesMixin SourceMixin - -SourceMixin + +SourceMixin SharedMixin - -SharedMixin + +SharedMixin EventsMixin - -EventsMixin + +EventsMixin HoldMixin - -HoldMixin + +HoldMixin Device - -Device + +Device Device->ValuesMixin - - + + GPIODevice - -GPIODevice + +GPIODevice GPIODevice->Device - - + + SmoothedInputDevice - -SmoothedInputDevice + +SmoothedInputDevice SmoothedInputDevice->EventsMixin - - + + InputDevice - -InputDevice + +InputDevice SmoothedInputDevice->InputDevice - - + + AnalogInputDevice - -AnalogInputDevice + +AnalogInputDevice SPIDevice - -SPIDevice + +SPIDevice AnalogInputDevice->SPIDevice - - + + MCP3xxx - -MCP3xxx + +MCP3xxx MCP3xxx->AnalogInputDevice - - + + MCP33xx - -MCP33xx + +MCP33xx -MCP33xx->MCP3xxx - - +MCP33xx->MCP3xxx + + CompositeDevice - -CompositeDevice + +CompositeDevice -CompositeDevice->Device - - +CompositeDevice->Device + + CompositeOutputDevice - -CompositeOutputDevice + +CompositeOutputDevice -CompositeOutputDevice->SourceMixin - - +CompositeOutputDevice->SourceMixin + + -CompositeOutputDevice->CompositeDevice - - +CompositeOutputDevice->CompositeDevice + + LEDCollection - -LEDCollection + +LEDCollection -LEDCollection->CompositeOutputDevice - - +LEDCollection->CompositeOutputDevice + + InternalDevice - -InternalDevice + +InternalDevice -InternalDevice->EventsMixin - - +InternalDevice->EventsMixin + + -InternalDevice->Device - - +InternalDevice->Device + + InputDevice->GPIODevice - - + + DigitalInputDevice - -DigitalInputDevice + +DigitalInputDevice DigitalInputDevice->EventsMixin - - + + DigitalInputDevice->InputDevice - - + + Button - -Button + +Button Button->HoldMixin - - + + Button->DigitalInputDevice - - + + MotionSensor - -MotionSensor + +MotionSensor MotionSensor->SmoothedInputDevice - - + + LightSensor - -LightSensor + +LightSensor LightSensor->SmoothedInputDevice - - + + LineSensor - -LineSensor + +LineSensor LineSensor->SmoothedInputDevice - - + + DistanceSensor - -DistanceSensor + +DistanceSensor DistanceSensor->SmoothedInputDevice - - + + OutputDevice - -OutputDevice + +OutputDevice OutputDevice->SourceMixin - - + + OutputDevice->GPIODevice - - + + DigitalOutputDevice - -DigitalOutputDevice + +DigitalOutputDevice DigitalOutputDevice->OutputDevice - - + + LED - -LED + +LED LED->DigitalOutputDevice - - + + Buzzer - -Buzzer + +Buzzer Buzzer->DigitalOutputDevice - - + + PWMOutputDevice - -PWMOutputDevice + +PWMOutputDevice PWMOutputDevice->OutputDevice - - + + PWMLED - -PWMLED + +PWMLED PWMLED->PWMOutputDevice - - + + RGBLED - -RGBLED + +RGBLED RGBLED->SourceMixin - - + + RGBLED->Device - - + + SPIDevice->Device - - + + + + +MCP30xx + +MCP30xx + + +MCP30xx->MCP3xxx + + + + +MCP32xx + +MCP32xx + + +MCP32xx->MCP3xxx + + + + +MCP3xx2 + +MCP3xx2 + + +MCP3xx2->MCP3xxx + + + + +MCP3001 + +MCP3001 + + +MCP3001->MCP30xx + + + + +MCP3002 + +MCP3002 + + +MCP3002->MCP30xx + + + + +MCP3002->MCP3xx2 + + -MCP3004 - -MCP3004 +MCP3004 + +MCP3004 - -MCP3004->MCP3xxx - - + +MCP3004->MCP30xx + + -MCP3008 - -MCP3008 +MCP3008 + +MCP3008 - -MCP3008->MCP3xxx - - + +MCP3008->MCP30xx + + + + +MCP3201 + +MCP3201 + + +MCP3201->MCP32xx + + + + +MCP3202 + +MCP3202 + + +MCP3202->MCP32xx + + + + +MCP3202->MCP3xx2 + + -MCP3204 - -MCP3204 +MCP3204 + +MCP3204 - -MCP3204->MCP3xxx - - + +MCP3204->MCP32xx + + -MCP3208 - -MCP3208 +MCP3208 + +MCP3208 - -MCP3208->MCP3xxx - - + +MCP3208->MCP32xx + + -MCP3301 - -MCP3301 +MCP3301 + +MCP3301 -MCP3301->MCP33xx - - +MCP3301->MCP33xx + + -MCP3302 - -MCP3302 +MCP3302 + +MCP3302 -MCP3302->MCP33xx - - +MCP3302->MCP33xx + + -MCP3304 - -MCP3304 +MCP3304 + +MCP3304 -MCP3304->MCP33xx - - +MCP3304->MCP33xx + + -LEDBoard - -LEDBoard +LEDBoard + +LEDBoard -LEDBoard->LEDCollection - - +LEDBoard->LEDCollection + + -LEDBarGraph - -LEDBarGraph +LEDBarGraph + +LEDBarGraph -LEDBarGraph->LEDCollection - - +LEDBarGraph->LEDCollection + + + + +LedBorg + +LedBorg + + +LedBorg->RGBLED + + + + +ButtonBoard + +ButtonBoard + + +ButtonBoard->HoldMixin + + + + +ButtonBoard->CompositeDevice + + -PiLiter - -PiLiter +PiLiter + +PiLiter -PiLiter->LEDBoard - - +PiLiter->LEDBoard + + -PiLiterBarGraph - -PiLiterBarGraph +PiLiterBarGraph + +PiLiterBarGraph -PiLiterBarGraph->LEDBarGraph - - +PiLiterBarGraph->LEDBarGraph + + -TrafficLights - -TrafficLights +TrafficLights + +TrafficLights -TrafficLights->LEDBoard - - +TrafficLights->LEDBoard + + + + +SnowPi + +SnowPi + + +SnowPi->LEDBoard + + -PiTraffic - -PiTraffic +PiTraffic + +PiTraffic -PiTraffic->TrafficLights - - +PiTraffic->TrafficLights + + + + +PiStop + +PiStop + + +PiStop->TrafficLights + + -TrafficLightsBuzzer - -TrafficLightsBuzzer +TrafficLightsBuzzer + +TrafficLightsBuzzer -TrafficLightsBuzzer->CompositeOutputDevice - - +TrafficLightsBuzzer->CompositeOutputDevice + + -FishDish - -FishDish +FishDish + +FishDish -FishDish->TrafficLightsBuzzer - - +FishDish->TrafficLightsBuzzer + + -TrafficHat - -TrafficHat +TrafficHat + +TrafficHat -TrafficHat->TrafficLightsBuzzer - - +TrafficHat->TrafficLightsBuzzer + + -Robot - -Robot +Robot + +Robot -Robot->SourceMixin - - +Robot->SourceMixin + + -Robot->CompositeDevice - - +Robot->CompositeDevice + + -Energenie - -Energenie +Energenie + +Energenie -Energenie->SourceMixin - - +Energenie->SourceMixin + + -Energenie->Device - - +Energenie->Device + + -RyanteckRobot - -RyanteckRobot +RyanteckRobot + +RyanteckRobot -RyanteckRobot->Robot - - +RyanteckRobot->Robot + + -CamJamKitRobot - -CamJamKitRobot +CamJamKitRobot + +CamJamKitRobot -CamJamKitRobot->Robot - - +CamJamKitRobot->Robot + + -Motor - -Motor +Motor + +Motor -Motor->SourceMixin - - +Motor->SourceMixin + + -Motor->CompositeDevice - - +Motor->CompositeDevice + + + + +Servo + +Servo + + +Servo->SourceMixin + + + + +Servo->CompositeDevice + + + + +AngularServo + +AngularServo + + +AngularServo->Servo + + -TimeOfDay - -TimeOfDay +TimeOfDay + +TimeOfDay -TimeOfDay->InternalDevice - - +TimeOfDay->InternalDevice + + -PingServer - -PingServer +PingServer + +PingServer -PingServer->InternalDevice - - +PingServer->InternalDevice + + + + +CPUTemperature + +CPUTemperature + + +CPUTemperature->InternalDevice + + diff --git a/docs/images/input_device_hierarchy.dot b/docs/images/input_device_hierarchy.dot index cbf8ea6..80dbdbc 100644 --- a/docs/images/input_device_hierarchy.dot +++ b/docs/images/input_device_hierarchy.dot @@ -1,7 +1,7 @@ /* vim: set et sw=4 sts=4: */ digraph classes { - graph [rankdir=BT]; + graph [rankdir=RL]; node [shape=rect, style=filled, fontname=Sans, fontsize=10]; edge []; diff --git a/docs/images/input_device_hierarchy.pdf b/docs/images/input_device_hierarchy.pdf index 7b2e60b..6e47729 100644 Binary files a/docs/images/input_device_hierarchy.pdf and b/docs/images/input_device_hierarchy.pdf differ diff --git a/docs/images/input_device_hierarchy.png b/docs/images/input_device_hierarchy.png index 9ea7569..4991013 100644 Binary files a/docs/images/input_device_hierarchy.png and b/docs/images/input_device_hierarchy.png differ diff --git a/docs/images/input_device_hierarchy.svg b/docs/images/input_device_hierarchy.svg index 3f41742..7126887 100644 --- a/docs/images/input_device_hierarchy.svg +++ b/docs/images/input_device_hierarchy.svg @@ -1,108 +1,108 @@ - - - + + classes - + Device - -Device + +Device GPIODevice - -GPIODevice + +GPIODevice GPIODevice->Device - - + + SmoothedInputDevice - -SmoothedInputDevice + +SmoothedInputDevice InputDevice - -InputDevice + +InputDevice SmoothedInputDevice->InputDevice - - + + InputDevice->GPIODevice - - + + DigitalInputDevice - -DigitalInputDevice + +DigitalInputDevice DigitalInputDevice->InputDevice - - + + Button - -Button + +Button Button->DigitalInputDevice - - + + MotionSensor - -MotionSensor + +MotionSensor MotionSensor->SmoothedInputDevice - - + + LightSensor - -LightSensor + +LightSensor LightSensor->SmoothedInputDevice - - + + LineSensor - -LineSensor + +LineSensor LineSensor->SmoothedInputDevice - - + + DistanceSensor - -DistanceSensor + +DistanceSensor DistanceSensor->SmoothedInputDevice - - + + diff --git a/docs/images/other_device_hierarchy.dot b/docs/images/other_device_hierarchy.dot index c8654d7..b0e5796 100644 --- a/docs/images/other_device_hierarchy.dot +++ b/docs/images/other_device_hierarchy.dot @@ -1,7 +1,7 @@ /* vim: set et sw=4 sts=4: */ digraph classes { - graph [rankdir=BT]; + graph [rankdir=RL]; node [shape=rect, style=filled, fontname=Sans, fontsize=10]; edge []; @@ -16,4 +16,5 @@ digraph classes { InternalDevice->Device; TimeOfDay->InternalDevice; PingServer->InternalDevice; + CPUTemperature->InternalDevice; } diff --git a/docs/images/other_device_hierarchy.pdf b/docs/images/other_device_hierarchy.pdf index dcfa7de..d87d5f3 100644 Binary files a/docs/images/other_device_hierarchy.pdf and b/docs/images/other_device_hierarchy.pdf differ diff --git a/docs/images/other_device_hierarchy.png b/docs/images/other_device_hierarchy.png index 52da6f1..c43215e 100644 Binary files a/docs/images/other_device_hierarchy.png and b/docs/images/other_device_hierarchy.png differ diff --git a/docs/images/other_device_hierarchy.svg b/docs/images/other_device_hierarchy.svg index 275484c..1063e8c 100644 --- a/docs/images/other_device_hierarchy.svg +++ b/docs/images/other_device_hierarchy.svg @@ -1,48 +1,58 @@ - - - + + classes - + Device - -Device + +Device InternalDevice - -InternalDevice + +InternalDevice InternalDevice->Device - - + + TimeOfDay - -TimeOfDay + +TimeOfDay TimeOfDay->InternalDevice - - + + PingServer - -PingServer + +PingServer PingServer->InternalDevice - - + + + + +CPUTemperature + +CPUTemperature + + +CPUTemperature->InternalDevice + + diff --git a/docs/images/output_device_hierarchy.dot b/docs/images/output_device_hierarchy.dot index 6a92a52..a678408 100644 --- a/docs/images/output_device_hierarchy.dot +++ b/docs/images/output_device_hierarchy.dot @@ -1,7 +1,7 @@ /* vim: set et sw=4 sts=4: */ digraph classes { - graph [rankdir=BT]; + graph [rankdir=RL]; node [shape=rect, style=filled, fontname=Sans, fontsize=10]; edge []; diff --git a/docs/images/output_device_hierarchy.pdf b/docs/images/output_device_hierarchy.pdf index b7ffe95..0374108 100644 Binary files a/docs/images/output_device_hierarchy.pdf and b/docs/images/output_device_hierarchy.pdf differ diff --git a/docs/images/output_device_hierarchy.png b/docs/images/output_device_hierarchy.png index 7afa368..28699f1 100644 Binary files a/docs/images/output_device_hierarchy.png and b/docs/images/output_device_hierarchy.png differ diff --git a/docs/images/output_device_hierarchy.svg b/docs/images/output_device_hierarchy.svg index 4f1cad2..f896bb9 100644 --- a/docs/images/output_device_hierarchy.svg +++ b/docs/images/output_device_hierarchy.svg @@ -1,108 +1,108 @@ - - - + + classes - + Device - -Device + +Device GPIODevice - -GPIODevice + +GPIODevice GPIODevice->Device - - + + OutputDevice - -OutputDevice + +OutputDevice OutputDevice->GPIODevice - - + + DigitalOutputDevice - -DigitalOutputDevice + +DigitalOutputDevice DigitalOutputDevice->OutputDevice - - + + LED - -LED + +LED LED->DigitalOutputDevice - - + + Buzzer - -Buzzer + +Buzzer Buzzer->DigitalOutputDevice - - + + PWMOutputDevice - -PWMOutputDevice + +PWMOutputDevice PWMOutputDevice->OutputDevice - - + + PWMLED - -PWMLED + +PWMLED PWMLED->PWMOutputDevice - - + + RGBLED - -RGBLED + +RGBLED RGBLED->Device - - + + LedBorg - -LedBorg + +LedBorg LedBorg->RGBLED - - + + diff --git a/docs/images/spi_device_hierarchy.dot b/docs/images/spi_device_hierarchy.dot index a205b03..80c0e0b 100644 --- a/docs/images/spi_device_hierarchy.dot +++ b/docs/images/spi_device_hierarchy.dot @@ -1,5 +1,5 @@ digraph classes { - graph [rankdir=BT]; + graph [rankdir=RL]; node [shape=rect, style=filled, fontname=Sans, fontsize=10]; edge []; diff --git a/docs/images/spi_device_hierarchy.pdf b/docs/images/spi_device_hierarchy.pdf index 65ba0cd..2148942 100644 Binary files a/docs/images/spi_device_hierarchy.pdf and b/docs/images/spi_device_hierarchy.pdf differ diff --git a/docs/images/spi_device_hierarchy.png b/docs/images/spi_device_hierarchy.png index 7639917..ecddc15 100644 Binary files a/docs/images/spi_device_hierarchy.png and b/docs/images/spi_device_hierarchy.png differ diff --git a/docs/images/spi_device_hierarchy.svg b/docs/images/spi_device_hierarchy.svg index b801f8e..fcf33a6 100644 --- a/docs/images/spi_device_hierarchy.svg +++ b/docs/images/spi_device_hierarchy.svg @@ -4,205 +4,205 @@ - - + + classes - + Device - -Device + +Device SPIDevice - -SPIDevice + +SPIDevice SPIDevice->Device - - + + AnalogInputDevice - -AnalogInputDevice + +AnalogInputDevice AnalogInputDevice->SPIDevice - - + + MCP3xxx - -MCP3xxx + +MCP3xxx MCP3xxx->AnalogInputDevice - - + + MCP30xx - -MCP30xx + +MCP30xx MCP30xx->MCP3xxx - - + + MCP32xx - -MCP32xx + +MCP32xx MCP32xx->MCP3xxx - - + + MCP3xx2 - -MCP3xx2 + +MCP3xx2 MCP3xx2->MCP3xxx - - + + MCP33xx - -MCP33xx + +MCP33xx MCP33xx->MCP3xxx - - + + MCP3001 - -MCP3001 + +MCP3001 MCP3001->MCP30xx - - + + MCP3002 - -MCP3002 + +MCP3002 MCP3002->MCP30xx - - + + MCP3002->MCP3xx2 - - + + MCP3004 - -MCP3004 + +MCP3004 MCP3004->MCP30xx - - + + MCP3008 - -MCP3008 + +MCP3008 MCP3008->MCP30xx - - + + MCP3201 - -MCP3201 + +MCP3201 MCP3201->MCP32xx - - + + MCP3202 - -MCP3202 + +MCP3202 MCP3202->MCP32xx - - + + MCP3202->MCP3xx2 - - + + MCP3204 - -MCP3204 + +MCP3204 MCP3204->MCP32xx - - + + MCP3208 - -MCP3208 + +MCP3208 MCP3208->MCP32xx - - + + MCP3301 - -MCP3301 + +MCP3301 MCP3301->MCP33xx - - + + MCP3302 - -MCP3302 + +MCP3302 MCP3302->MCP33xx - - + + MCP3304 - -MCP3304 + +MCP3304 MCP3304->MCP33xx - - + +