ev3dev-lang
ev3dev-lang copied to clipboard
Updating the JS binding for recent changes
@ddemidov Can I get a list of the changes that I need to adapt to on my Node.js side? I believe that there were changes to the LED spec, but didn't follow closely enough to fully grasp the changes that I should make. Also, what's the situation regarding supporting the various ev3dev platforms (RasPi, BB, etc)? Do we need to change the default instances?
P.S. Sorry I've been so out-of-touch :wink:
UPDATE: Current TODO list
- [ ] Fix default names/instances for battery class
- [x] Update examples and add new examples based on updates/additions
- Additional ideas (after initial batch of example additions):
- Requires a specific port
- Uses the new sensor wrappers
- Additional ideas (after initial batch of example additions):
- [x] Test all codepaths on EV3
- [ ] Update packaging for new structure
- [ ] Add buttons?
- [ ] Add sound?
- [ ] Update spec to change pattern strings
Here are the changes, I hope did not miss anything. Btw, thanks for opening this, it will also be useful for C++ bindings.
Motors
- Added specification for
LargeMotorandMediumMotor.
Sensors
- Added specification for
TouchSensor.
Buttons, RemoteControl
- We have created a
ButtonBaseclass in python that provides some basic functionality for buttons and remote control. This is not in specification, but I think is worth noting. - Added mapping between
InfraredSensorvalues inIR-REMOTEmode andRemoteControlbuttons. - Added per platform specification for GPIO files and button values for EV3.
Leds
This is the biggest change in specification.
- Led interface was switched to group-based. We used to group EV3 leds by color. That is, we had
redgroup ofred_leftandred_rightleds andgreengroup ofgreen_leftandgreen_right. That only allowed us to operate on all leds at once to create colors likeamberororange. Group based interface makes led groups based on their location. We haveleftandrightgroups for EV3. This allows the user to think in terms or logicalledthat can create different colors. For example, the following code is now supported in python:
# Set left logical led to red color.
Leds.set_color(Leds.LEFT, Leds.RED)
# Set trigger for the right logical led, make it 50% bright:
Leds.set(Leds.RIGHT, trigger='timer', brightness_pct=0.5)
This also scales well onto other platforms. For example, PiStorms have two logical groups, each having Red, Blue, and Green physical leds.
- Added per-platform specification for led groups and colors.
Sound
- This is not in specification, but we changed how sound works in python. Instead of using platform-specific sysfs node, we switched to using
/usr/bin/beepfor making beeps. See description of sound interface here.
The way we currently work with different platforms may change in the future, see discussion in ev3dev/ev3dev#412. Also see #115.
Great! Thanks. I'll start working on these changes today.
@ddemidov I noticed that the systemDeviceNameConvention uses a {0} to denote the numbers in a name. I think that was something I added as a test a while ago, and now we both replace that with a * for use. Should we just make that replacement in the spec?
Oh, and what's the current status on detecting the running platform for buttons/LEDs? I saw a long discussion somewhere referencing a fair amount of Linux magic that I didn't understand... was that concluded? If not, what are you doing for C++ and Python in this area?
and now we both replace that with a * for use. Should we just make that replacement in the spec?
I don't see why not.
Oh, and what's the current status on detecting the running platform for buttons/LEDs?
I think that is still in the planning phase. I made rhempel/ev3dev-lang-python#90 with this in mind, but nothing besides that.