Code Edge Logo

Code Edge

Software Developer

I am currently consulting and contracting through Code Edge on various QNX 4 and QNX 6 projects, including development on NOR flash drivers for Abiomed, USB and network driver development for General Electric (Oil & Gas), and work with QNX Software Systems itself on demo projects.

Bytown Tech Logo

Bytown Technology Group

Software Developer

After leaving QNX, I started software development contracting and consulting through Bytown Technology Group. I have consulted with Intrepid Control Systems with respect to QNX driver support for FTDI chips, supported Hilbert Technology on the lengthy process of porting their physics engine from running raw on a processor to on top of an embedded Linux OS (entirely out of RAM for I/O speed concerns), and developed a cross platform web services framework (in the form of a C static library) that allows various customers to rapidly develop web pages and forms in C, allowing for low level access to their software running off site (which proved to be impractical under typical web languages) through a web interface, along the same lines as router configuration web pages.

RIM logo

QNX Software Systems & Research in Motion

Developer on QNX's WebKit and Adobe Flash Player and AIR port for the BlackBerry® PlayBook

After (and considerably before) the RIM acquisition of QNX I was very involved in the QNX Graphics team on development of the BlackBerry® Tablet OS (now PlayBook OS, moving toward BlackBerry® 10) since the infancy of the BlackBerry® PlayBook.

BlackBerry PlayBook Firstly, I was tasked with the project of developing an application that VMware would run on a QNX OS image configured to simulate physical tablet conditions (that later became the official PlayBook Simulator released by RIM for developers) that demonstrated to RIM executives and QNX Field Application Engineers how well various graphic and HMI (human machine interfaces) technologies can work together under QNX, harnessing QNX's PPS "messaging system". The resulting application was an EKG (Electrocardiogram - heart rate monitor) simulator that ran under landscape orientation, running Flash Lite on the bottom half of the screen, and a native application using the Google 2D graphics library Skia on the top half. The EKG line was rendered using Skia, and the Flash interface contained sliders and buttons, that controlled the amplitude and heart rate of the EKG, as well as the lines colour. Upon receiving user input to these widgets, the Flash application would write ("publish") to a PPS object, which the Skia application was then notified of (by being "subscribed" to the object - PPS uses the magic of QNX Resource Managers), then it would change how the line rendered appropriately.

I also contributed to the Browser, Adobe Flash and AIR port, accelerometer, and the location manager on the PlayBook. I architected the location managing service daemon along with RIM pioneer Herb Little and QNX managers Jason Mawdsley and Paul Streatch. I then developed it, not surprisingly harnessing PPS objects. Before it was decided to add a GPS chipset to the PlayBook, the GPS fixes were obtained over a paired BlackBerry handset via BlueTooth, so the managing of the location data was far more complex, so the location manager had to accommodate this process. On the accelerometer, I contributed to the driver and supported Electronic Arts engineers implementing the Need For Speed and Tetris games that would later appear on the PlayBook at launch. On the Browser, I implemented storage for HTTPS certificates, cookies and icons, implemented HTML5 geolocation features (by connecting WebKit to the aforementioned location manager), and implented the JavaScript invoked dialog boxes, by connecting the Browser to the PPS based dialog box service. On the Adobe Flash and AIR port, I implemented the underlying ActionScript 3 flash.sensors.Geolocation (also simply by connecting to the location manager), stage.deviceOrientation and flash.sensors.Accelerometer APIs (by connecting to the accelerometer driver), and removed the dependencies on libraries licensed with the GPL.

I maintain that I am the youngest person to date to reside on either RIM's or QNX's BlackBerry® PlayBook engineering team.

QNX Logo

QNX Software Systems

Lead Digital Instrument Cluster Developer - QNX CAR

Capturing Real Time Data From the QNX CAR Prius

I was hired at QNX Software Systems initially as a summer student, and stayed employed continuously under various titles and HR hats (cooperative education school placement, part time and full time, all at some point or another) to comply with my education. I was put on the QNX CAR team and was tasked with the implementation of connecting the QNX CAR ecosystem to the steady stream of real time automotive data being given off the car (speed, RPM, lights, OBD Diagnostic Trouble Codes, etc.) in order to populate the digital instrument cluster (dashboard) and the various infotainment systems. Since the car in question at the time was a Prius, the On Board Diagnostic (OBD) system implemented the CAN protocol, so the CAN BUS to USB converter CANdapter was used. Since the CANdapter harnessed the FTDI 245R chipset, the QNX driver devc-serusb worked out of the box, which simply presents a resource manager /dev/serusbn which one interacts with as a virtual serial device - simply by using C's open(), read(), write(), close() and tcsetattr(). CAN BUS data flow chart

Once the connection to the car existed, I developed the multi threaded "higher level driver" OBD-CAN-parser, which connects to devc-serusb (and in turn the CAN connection) which continuously monitors the standard passive CAN frames being given off by the third generation Prius (a close relationship with Toyota was needed in order to obtain the full CAN codes under NDA), and can under a user desire (eg a button push somewhere in the car), can actively query for the standard SAE OBD diagnostic trouble codes. Since automotive manufacturers go beyond the SAE specification of just supporting diagnostic trouble codes, and implement their own specification of how diagnostic data comes off the CAN BUS, I designed and implemented a configuration file specification allowing for the dynamic handling of data coming off of different car's CAN BUS. From there, the transmission of the the data (to the dashboard, infotainment systems, etc.) became a concern - sockets seemed logical to use, but QNX presented the elegant solution of harnessing PPS (Persistent Publish/Subscribe) - a QNX implementation of inter-process communication simply by using file descriptors, in whatever shape or form the language you were using harnessed them. In fact, harnessing Qnet, sending the data over networks became seamless and transparent.

Digital Instrument Cluster The development of the digital instrument cluster was the next stage. QNX had previously implemented a typical dashboard by combining the use of Flash for easy, quick and elegant design, and OpenGL ES for the raw graphical performance that was required, but was interested in exploring a three dimensional implementation using solely OpenGL ES, harnessing Feeling Software's Collada engine for quick development results. Feeling Software was contracted to deliver a digital instrument cluster, and as they did so, I took their code drops and integrated them with the PPS objects, being published to by OBD-CAN-parser, and a fully functional digital instrument cluster yielded.
Digital Instrument Cluster
QNX CAR has won amongst other awards, an Adobe Max award, and more recently, its later implementation on a Porsche won the CES 2012 Best In Car Tech award.