Skip to content

Commit bfb018f

Browse files
committed
Use inheritance and driveName info from specification
This uses newly-updated specification information to generate subclasses of Motor and Sensor.
1 parent d14ee31 commit bfb018f

File tree

2 files changed

+132
-65
lines changed

2 files changed

+132
-65
lines changed

ev3dev/ev3dev.py

Lines changed: 105 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,10 @@ class Motor(Device):
166166
SYSTEM_CLASS_NAME = 'tacho-motor'
167167
SYSTEM_DEVICE_NAME_CONVENTION = 'motor*'
168168

169-
def __init__(self, port='', name='*', **kwargs ):
170-
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, port_name=port, **kwargs )
169+
def __init__(self, port=None, name=SYSTEM_DEVICE_NAME_CONVENTION, **kwargs ):
170+
if port is not None:
171+
kwargs['port_name'] = port
172+
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, **kwargs )
171173

172174
#~autogen
173175
#~autogen python_generic-get-set classes.motor>currentClass
@@ -595,23 +597,42 @@ def reset( self, **kwargs ):
595597

596598

597599
#~autogen
600+
#~autogen python_generic-class classes.largeMotor>currentClass
601+
598602

599603
class LargeMotor(Motor):
604+
600605
"""
601-
EV3 large motor.
606+
EV3 large servo motor
602607
"""
603608

604-
def __init__(self, port='', name='*', **kwargs):
605-
Motor.__init__(self, port, name, driver_name='lego-ev3-l-motor', **kwargs)
609+
SYSTEM_CLASS_NAME = Motor.SYSTEM_CLASS_NAME
610+
SYSTEM_DEVICE_NAME_CONVENTION = Motor.SYSTEM_DEVICE_NAME_CONVENTION
611+
612+
def __init__(self, port=None, name=SYSTEM_DEVICE_NAME_CONVENTION, **kwargs ):
613+
if port is not None:
614+
kwargs['port_name'] = port
615+
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, driver_name=['lego-ev3-l-motor', ], **kwargs )
616+
617+
#~autogen
618+
#~autogen python_generic-class classes.mediumMotor>currentClass
619+
606620

607621
class MediumMotor(Motor):
622+
608623
"""
609-
EV3 medium motor.
624+
EV3 medium servo motor
610625
"""
611626

612-
def __init__(self, port='', name='*', **kwargs):
613-
Motor.__init__(self, port, name, driver_name='lego-ev3-m-motor', **kwargs)
627+
SYSTEM_CLASS_NAME = Motor.SYSTEM_CLASS_NAME
628+
SYSTEM_DEVICE_NAME_CONVENTION = Motor.SYSTEM_DEVICE_NAME_CONVENTION
629+
630+
def __init__(self, port=None, name=SYSTEM_DEVICE_NAME_CONVENTION, **kwargs ):
631+
if port is not None:
632+
kwargs['port_name'] = port
633+
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, driver_name=['lego-ev3-m-motor', ], **kwargs )
614634

635+
#~autogen
615636
#~autogen python_generic-class classes.dcMotor>currentClass
616637

617638

@@ -626,8 +647,10 @@ class DcMotor(Device):
626647
SYSTEM_CLASS_NAME = 'dc-motor'
627648
SYSTEM_DEVICE_NAME_CONVENTION = 'motor*'
628649

629-
def __init__(self, port='', name='*', **kwargs ):
630-
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, port_name=port, **kwargs )
650+
def __init__(self, port=None, name=SYSTEM_DEVICE_NAME_CONVENTION, **kwargs ):
651+
if port is not None:
652+
kwargs['port_name'] = port
653+
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, **kwargs )
631654

632655
#~autogen
633656
#~autogen python_generic-get-set classes.dcMotor>currentClass
@@ -841,8 +864,10 @@ class ServoMotor(Device):
841864
SYSTEM_CLASS_NAME = 'servo-motor'
842865
SYSTEM_DEVICE_NAME_CONVENTION = 'motor*'
843866

844-
def __init__(self, port='', name='*', **kwargs ):
845-
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, port_name=port, **kwargs )
867+
def __init__(self, port=None, name=SYSTEM_DEVICE_NAME_CONVENTION, **kwargs ):
868+
if port is not None:
869+
kwargs['port_name'] = port
870+
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, **kwargs )
846871

847872
#~autogen
848873
#~autogen python_generic-get-set classes.servoMotor>currentClass
@@ -1034,8 +1059,10 @@ class Sensor(Device):
10341059
SYSTEM_CLASS_NAME = 'lego-sensor'
10351060
SYSTEM_DEVICE_NAME_CONVENTION = 'sensor*'
10361061

1037-
def __init__(self, port='', name='*', **kwargs ):
1038-
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, port_name=port, **kwargs )
1062+
def __init__(self, port=None, name=SYSTEM_DEVICE_NAME_CONVENTION, **kwargs ):
1063+
if port is not None:
1064+
kwargs['port_name'] = port
1065+
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, **kwargs )
10391066

10401067
#~autogen
10411068
#~autogen python_generic-get-set classes.sensor>currentClass
@@ -1136,17 +1163,19 @@ def value(self, n):
11361163
#~autogen python_generic-class classes.i2cSensor>currentClass
11371164

11381165

1139-
class I2cSensor(Device):
1166+
class I2cSensor(Sensor):
11401167

11411168
"""
11421169
A generic interface to control I2C-type EV3 sensors.
11431170
"""
11441171

1145-
SYSTEM_CLASS_NAME = 'lego-sensor'
1146-
SYSTEM_DEVICE_NAME_CONVENTION = 'sensor*'
1172+
SYSTEM_CLASS_NAME = Sensor.SYSTEM_CLASS_NAME
1173+
SYSTEM_DEVICE_NAME_CONVENTION = Sensor.SYSTEM_DEVICE_NAME_CONVENTION
11471174

1148-
def __init__(self, port='', name='*', **kwargs ):
1149-
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, port_name=port, **kwargs )
1175+
def __init__(self, port=None, name=SYSTEM_DEVICE_NAME_CONVENTION, **kwargs ):
1176+
if port is not None:
1177+
kwargs['port_name'] = port
1178+
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, driver_name=['nxt-i2c-sensor', ], **kwargs )
11501179

11511180
#~autogen
11521181
#~autogen python_generic-get-set classes.i2cSensor>currentClass
@@ -1179,17 +1208,19 @@ def poll_ms(self, value):
11791208
#~autogen python_generic-class classes.colorSensor>currentClass
11801209

11811210

1182-
class ColorSensor(Device):
1211+
class ColorSensor(Sensor):
11831212

11841213
"""
11851214
LEGO EV3 color sensor.
11861215
"""
11871216

1188-
SYSTEM_CLASS_NAME = 'lego-sensor'
1189-
SYSTEM_DEVICE_NAME_CONVENTION = 'sensor*'
1217+
SYSTEM_CLASS_NAME = Sensor.SYSTEM_CLASS_NAME
1218+
SYSTEM_DEVICE_NAME_CONVENTION = Sensor.SYSTEM_DEVICE_NAME_CONVENTION
11901219

1191-
def __init__(self, port='', name='*', **kwargs ):
1192-
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, port_name=port, **kwargs )
1220+
def __init__(self, port=None, name=SYSTEM_DEVICE_NAME_CONVENTION, **kwargs ):
1221+
if port is not None:
1222+
kwargs['port_name'] = port
1223+
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, driver_name=['lego-ev3-color', ], **kwargs )
11931224

11941225
#~autogen
11951226
#~autogen python_generic-property-value classes.colorSensor>currentClass
@@ -1207,17 +1238,19 @@ def __init__(self, port='', name='*', **kwargs ):
12071238
#~autogen python_generic-class classes.ultrasonicSensor>currentClass
12081239

12091240

1210-
class UltrasonicSensor(Device):
1241+
class UltrasonicSensor(Sensor):
12111242

12121243
"""
12131244
LEGO EV3 ultrasonic sensor.
12141245
"""
12151246

1216-
SYSTEM_CLASS_NAME = 'lego-sensor'
1217-
SYSTEM_DEVICE_NAME_CONVENTION = 'sensor*'
1247+
SYSTEM_CLASS_NAME = Sensor.SYSTEM_CLASS_NAME
1248+
SYSTEM_DEVICE_NAME_CONVENTION = Sensor.SYSTEM_DEVICE_NAME_CONVENTION
12181249

1219-
def __init__(self, port='', name='*', **kwargs ):
1220-
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, port_name=port, **kwargs )
1250+
def __init__(self, port=None, name=SYSTEM_DEVICE_NAME_CONVENTION, **kwargs ):
1251+
if port is not None:
1252+
kwargs['port_name'] = port
1253+
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, driver_name=['lego-ev3-us', 'lego-nxt-us', ], **kwargs )
12211254

12221255
#~autogen
12231256
#~autogen python_generic-property-value classes.ultrasonicSensor>currentClass
@@ -1235,17 +1268,19 @@ def __init__(self, port='', name='*', **kwargs ):
12351268
#~autogen python_generic-class classes.gyroSensor>currentClass
12361269

12371270

1238-
class GyroSensor(Device):
1271+
class GyroSensor(Sensor):
12391272

12401273
"""
12411274
LEGO EV3 gyro sensor.
12421275
"""
12431276

1244-
SYSTEM_CLASS_NAME = 'lego-sensor'
1245-
SYSTEM_DEVICE_NAME_CONVENTION = 'sensor*'
1277+
SYSTEM_CLASS_NAME = Sensor.SYSTEM_CLASS_NAME
1278+
SYSTEM_DEVICE_NAME_CONVENTION = Sensor.SYSTEM_DEVICE_NAME_CONVENTION
12461279

1247-
def __init__(self, port='', name='*', **kwargs ):
1248-
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, port_name=port, **kwargs )
1280+
def __init__(self, port=None, name=SYSTEM_DEVICE_NAME_CONVENTION, **kwargs ):
1281+
if port is not None:
1282+
kwargs['port_name'] = port
1283+
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, driver_name=['lego-ev3-gyro', ], **kwargs )
12491284

12501285
#~autogen
12511286
#~autogen python_generic-property-value classes.gyroSensor>currentClass
@@ -1263,17 +1298,19 @@ def __init__(self, port='', name='*', **kwargs ):
12631298
#~autogen python_generic-class classes.infraredSensor>currentClass
12641299

12651300

1266-
class InfraredSensor(Device):
1301+
class InfraredSensor(Sensor):
12671302

12681303
"""
12691304
LEGO EV3 infrared sensor.
12701305
"""
12711306

1272-
SYSTEM_CLASS_NAME = 'lego-sensor'
1273-
SYSTEM_DEVICE_NAME_CONVENTION = 'sensor*'
1307+
SYSTEM_CLASS_NAME = Sensor.SYSTEM_CLASS_NAME
1308+
SYSTEM_DEVICE_NAME_CONVENTION = Sensor.SYSTEM_DEVICE_NAME_CONVENTION
12741309

1275-
def __init__(self, port='', name='*', **kwargs ):
1276-
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, port_name=port, **kwargs )
1310+
def __init__(self, port=None, name=SYSTEM_DEVICE_NAME_CONVENTION, **kwargs ):
1311+
if port is not None:
1312+
kwargs['port_name'] = port
1313+
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, driver_name=['lego-ev3-ir', ], **kwargs )
12771314

12781315
#~autogen
12791316
#~autogen python_generic-property-value classes.infraredSensor>currentClass
@@ -1293,17 +1330,19 @@ def __init__(self, port='', name='*', **kwargs ):
12931330
#~autogen python_generic-class classes.soundSensor>currentClass
12941331

12951332

1296-
class SoundSensor(Device):
1333+
class SoundSensor(Sensor):
12971334

12981335
"""
12991336
LEGO NXT Sound Sensor
13001337
"""
13011338

1302-
SYSTEM_CLASS_NAME = 'lego-nxt-sound'
1303-
SYSTEM_DEVICE_NAME_CONVENTION = 'sensor*'
1339+
SYSTEM_CLASS_NAME = Sensor.SYSTEM_CLASS_NAME
1340+
SYSTEM_DEVICE_NAME_CONVENTION = Sensor.SYSTEM_DEVICE_NAME_CONVENTION
13041341

1305-
def __init__(self, port='', name='*', **kwargs ):
1306-
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, port_name=port, **kwargs )
1342+
def __init__(self, port=None, name=SYSTEM_DEVICE_NAME_CONVENTION, **kwargs ):
1343+
if port is not None:
1344+
kwargs['port_name'] = port
1345+
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, driver_name=['lego-nxt-sound', ], **kwargs )
13071346

13081347
#~autogen
13091348
#~autogen python_generic-property-value classes.soundSensor>currentClass
@@ -1318,17 +1357,19 @@ def __init__(self, port='', name='*', **kwargs ):
13181357
#~autogen python_generic-class classes.lightSensor>currentClass
13191358

13201359

1321-
class LightSensor(Device):
1360+
class LightSensor(Sensor):
13221361

13231362
"""
13241363
LEGO NXT Light Sensor
13251364
"""
13261365

1327-
SYSTEM_CLASS_NAME = 'lego-nxt-light'
1328-
SYSTEM_DEVICE_NAME_CONVENTION = 'sensor*'
1366+
SYSTEM_CLASS_NAME = Sensor.SYSTEM_CLASS_NAME
1367+
SYSTEM_DEVICE_NAME_CONVENTION = Sensor.SYSTEM_DEVICE_NAME_CONVENTION
13291368

1330-
def __init__(self, port='', name='*', **kwargs ):
1331-
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, port_name=port, **kwargs )
1369+
def __init__(self, port=None, name=SYSTEM_DEVICE_NAME_CONVENTION, **kwargs ):
1370+
if port is not None:
1371+
kwargs['port_name'] = port
1372+
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, driver_name=['lego-nxt-light', ], **kwargs )
13321373

13331374
#~autogen
13341375
#~autogen python_generic-property-value classes.lightSensor>currentClass
@@ -1352,10 +1393,12 @@ class Led(Device):
13521393
"""
13531394

13541395
SYSTEM_CLASS_NAME = 'leds'
1355-
SYSTEM_DEVICE_NAME_CONVENTION = ''
1396+
SYSTEM_DEVICE_NAME_CONVENTION = '*'
13561397

1357-
def __init__(self, port='', name='*', **kwargs ):
1358-
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, port_name=port, **kwargs )
1398+
def __init__(self, port=None, name=SYSTEM_DEVICE_NAME_CONVENTION, **kwargs ):
1399+
if port is not None:
1400+
kwargs['port_name'] = port
1401+
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, **kwargs )
13591402

13601403
#~autogen
13611404
#~autogen python_generic-get-set classes.led>currentClass
@@ -1449,10 +1492,12 @@ class PowerSupply(Device):
14491492
"""
14501493

14511494
SYSTEM_CLASS_NAME = 'power_supply'
1452-
SYSTEM_DEVICE_NAME_CONVENTION = ''
1495+
SYSTEM_DEVICE_NAME_CONVENTION = '*'
14531496

1454-
def __init__(self, port='', name='*', **kwargs ):
1455-
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, port_name=port, **kwargs )
1497+
def __init__(self, port=None, name=SYSTEM_DEVICE_NAME_CONVENTION, **kwargs ):
1498+
if port is not None:
1499+
kwargs['port_name'] = port
1500+
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, **kwargs )
14561501

14571502
#~autogen
14581503
#~autogen python_generic-get-set classes.powerSupply>currentClass
@@ -1532,10 +1577,12 @@ class LegoPort(Device):
15321577
"""
15331578

15341579
SYSTEM_CLASS_NAME = 'lego_port'
1535-
SYSTEM_DEVICE_NAME_CONVENTION = ''
1580+
SYSTEM_DEVICE_NAME_CONVENTION = '*'
15361581

1537-
def __init__(self, port='', name='*', **kwargs ):
1538-
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, port_name=port, **kwargs )
1582+
def __init__(self, port=None, name=SYSTEM_DEVICE_NAME_CONVENTION, **kwargs ):
1583+
if port is not None:
1584+
kwargs['port_name'] = port
1585+
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, **kwargs )
15391586

15401587
#~autogen
15411588
#~autogen python_generic-get-set classes.legoPort>currentClass
Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,33 @@
1-
{% assign class_name = currentClass.friendlyName | camel_case | capitalize %}
2-
{% assign device_name_convention = currentClass.systemDeviceNameConvention | replace: '\{0\}', '*' %}
3-
class {{ class_name }}(Device):
1+
{%
2+
assign class_name = currentClass.friendlyName | camel_case | capitalize %}{%
3+
if currentClass.systemDeviceNameConvention %}{%
4+
assign device_name_convention = currentClass.systemDeviceNameConvention | replace: '\{\d\}', '*' %}{%
5+
else %}{%
6+
assign device_name_convention = '*' %}{%
7+
endif %}{%
8+
if currentClass.inheritance %}{%
9+
assign base_class = currentClass.inheritance | camel_case | capitalize %}{%
10+
else %}{%
11+
assign base_class = 'Device' %}{%
12+
endif%}
13+
14+
class {{ class_name }}({{ base_class }}):
415

516
"""{% for line in currentClass.description %}
617
{{ line }}{% endfor %}
718
"""
8-
19+
{% if currentClass.inheritance %}
20+
SYSTEM_CLASS_NAME = {{ base_class }}.SYSTEM_CLASS_NAME
21+
SYSTEM_DEVICE_NAME_CONVENTION = {{ base_class }}.SYSTEM_DEVICE_NAME_CONVENTION
22+
{% else %}
923
SYSTEM_CLASS_NAME = '{{ currentClass.systemClassName }}'
1024
SYSTEM_DEVICE_NAME_CONVENTION = '{{ device_name_convention }}'
11-
12-
def __init__(self, port='', name='*', **kwargs ):
13-
Device.__init__( self, self.SYSTEM_CLASS_NAME, name, port_name=port, **kwargs )
25+
{% endif %}
26+
def __init__(self, port=None, name=SYSTEM_DEVICE_NAME_CONVENTION, **kwargs ):
27+
if port is not None:
28+
kwargs['port_name'] = port
29+
Device.__init__( self, self.SYSTEM_CLASS_NAME, name{%
30+
if currentClass.driverName %}, driver_name=[{%
31+
for name in currentClass.driverName %}'{{name}}', {%
32+
endfor %}]{%
33+
endif %}, **kwargs )

0 commit comments

Comments
 (0)