Kevin Dallas, the General Manager of the Windows Embedded Business delivered one of the keynotes at last weeks Embedded Systems East conference in Boston. The keynote is divided into two parts, the first being somewhat future looking, and the second being an announcement about the launch of CE 6.0 R2 (the launch event is taking place at Embedded Technology World, November 14-16, Yokohama, Japan) and a look at some of the technologies being delivered as part of the R2 release.
Here's a write up of the two demos I delivered during Kevin's keynote.
We can see that there’s a shift in the developer space towards higher level tools and programming languages, it’s only a few years ago that most embedded systems were programmed in assembler, some of these devices could be running without an operating system and just boot directly into the assembler code, over time developers have moved away from assembler and have started using operating systems to provide some of the services they they used to write by hand, developers have moved to more productive development languages such as C or C++, and have added development libraries into their toolkit that provide commonly used functions and primitives for arrays, strings and more. Many developers have moved to even higher level languages such as Java or C#, the move to higher level languages does two things, first the developer is far more productive than they could ever be in Assembler which reduces development and testing time for the product – second, higher level languages make developers less error prone, take a typical C/C++ application, it’s very easy for a developer to leak objects from their code, which may not be too much of an issue for a desktop application, but in embedded systems that are expected to run for days, weeks, months, or years – any object leak could build up over time and cause the application and system to fail. Add into the mix the changes in hardware, desktop and embedded systems are moving from single core, through many-core, to distributed (networked) cores. Writing single threaded/single core applications is fairly straight forward, writing multi-threaded applications and dealing with synchronization across threads can be complex, scaling a multi-threaded application across heterogeneous cores or distributed cores can be extremely complex to develop, and test.
Perhaps it’s time for embedded developers to stop thinking about building embedded systems from an operating system stack perspective (TCP stack, IPV4, Web Server, media player etc.) and start to think about building stand-alone and distributed systems at a higher level. Consider building a stand-alone system, or distributed system from a set of services, each service maintains its own state and can be connected to other services either running on the same machine or connected to services running on other networked devices, which might not be running on the same embedded operating system.
The diagram below shows a Color Segment service which looks for specific colors in a web cam image (the web cam service is ‘wrapped’ by the Color Segment service) – the Color Segment service counts the number of areas within the image that contain the specific color, and passes this information to ‘subscribed’ services (note that there can be more than one subscription to a service) – in the diagram below we simply check to see whether the number of color areas are greater than zero, if this is the case then we pass this information to a Text to Speech (TTS) service to announce that the camera has seen the color – note that the TTS engine could easily be running on a different node on the network.
The second demo gives a sneak peek at one of the technologies that will be shipping with CE 6.0 R2 – this is the Microsoft implementation of DPWS (Devices Profile for Web Services) which we call WSD, or Web Services on Devices – I’m sure that many of you reading this article have been in a conference room and have needed to connect a laptop or desktop computer to a video projector, this commonly involves taking the VGA snake, plugging this into the VGA port of your laptop and then pressing various function keys, or changing screen resolution/color depth to match the capabilities of the projector – this can be time consuming, and frustrating – Windows Vista ships with the ability to search for and connect to ‘network projectors’ this means that you don’t need a VGA cable, you don’t need to worry about function keys, screen resolution or color depth – you simply search for the projector, connect, and display your presentation or document. But how does this work? – Windows Vista already ships with a WSD stack, and the Networked Projectors are also running a WSD stack (which was not exposed in the CE 6.0 product), the CE 6.0 R2 release will include the WSD stack and sample applications. WSD provides the technologies for connecting devices to devices and devices to PCs in both the enterprise and consumer space – how might this be used? – we’ve already seen an example of this in the enterprise space with Networked projectors, the same technologies could also be applied to printers and other office equipment. In the consumer space one area that WSD might be used in is Home Automation, consider that you might have a central home control/automation unit, this unit may not know about each of the home automation companies or devices, but through device discovery can be informed about new devices as they come onto (or leave) the network, and through WSDL (Web Services Description Language) has a well defined contract that defines the capabilities of the device and the functions and events supported by the device.
The second demo showed a Windows Vista WSD application displaying a bubble moving around on the screen – from a CE 6.0 R2 ICOP eBox reference board we ran a WSD application that added a CE 6.0 “Bubble” into the Vista application, now, using events fired from the CE 6.0 application we can remotely control/move the bubble around the Vista screen.