I’m busy bashing out my Win32 code for the “choose an API” session at ESC East, I’m using Visual Studio 2005/Platform Builder to build/deploy/debug/test my CE 6.0 image, and have a couple of choices for application development.
- Write a Win32 C/C++ application as a “subproject” in Platform Builder – this means that the application is integrated into the O/S when I build either the O/S or the application
- Create an SDK for my OSDesign, install the SDK on the same development machine, and then use a second instance of Visual Studio to write/deploy/debug the application – without touching the running operating system.
I decided to go with the second option – but… the process of building an SDK and installing the SDK seems pointless if I already have the built operating system with the appropriate header files and libraries – If I’m developing locally (on the same machine as my Platform Builder install), would it be useful to have an “Instant SDK” option? – which takes the .h/.lib for your current workspace, drops it into the appropriate folder, and registers the SDK with VS 2005?
The process of building the MSI is useful if you want to publish the SDK to other teams internally, or to customers.
- Mike
The .NET Micro Framework team are running a competition called the Dare to dream different challenge. Like most competitions there are a number of rounds, as follows.
- Round 1 – Submit your idea (October 8th – December 15th 2008)
- Round 2 – Create a working prototype (January 15th – March 31st 2009)
- Round 3 – Show your thing, doing its thing (April 15 – May 31st 2009) – includes prizes!
More information about the competition, and the .NET Micro Framework over on the competition web site.
- Mike
Just found this video on Engadget – Does this make you want to go to the PDC? (or come to my sessions at ESC East!)
- Mike
I’m going to be presenting a couple of sessions at ESC East, Boston October 26th-30th (both of my sessions are on Tuesday, 28th October).
One of the sessions covers the topic of “Which API should I use” for an embedded device, for the session I will be building a digital picture frame based on CE 6.0 R2 – there are a number of requirements for the frame which I will list in a second – and then follow up with some additional posts that cover off each of the requirements.
You have a number of choices when writing your code – this includes Win32 (C/C++), MFC (also C/C++), or managed code (C#/VB). There are perhaps two things to think about when choosing your API set, one is device performance, the other is developer performance.
Device performance may include the “real-time” performance of the system, or at least having your code (and operating system) run within the hardware/software bounds that are required to fulfill the device scenarios defined by you or your customer.
Related to performance is reliability – you may be really good at writing small, fast code, but if the code is buggy, or leaks handles/memory then you have the potential to have an unstable system.
For the talk at ESC East I will focus on the two API options exposed on Windows CE, these are :Win32, and .NET Compact Framework (in my case using C# as the development language – I’m a “curly brace guy”).
In a nutshell Win32 gives you low-level access to your embedded device, perhaps you can think of Win32 as being the assembly language of Windows. Giving you a lot of flexibility, but also requiring you, the developer, to do most of the heavy lifting, including cleaning up after yourself (memory/handle/object allocation/free). In some cases you may need additional frameworks to add support for useful classes/libraries (strings for example), examples are MFC, ATL, WTL, STL. Win32 is required for some o/s pieces, including Drivers and Services, and typically used for all “real-time” work. Interestingly, Maarten Struys wrote an article called “Real-Time Behavior of the .NET Compact Framework” so it may be possible to build a hybrid device that requires real-time behavior and uses both Win32 and .NET Compact Framework.
Managed development (.NET Compact Framework) – The .NET Compact Framework exposes a set of application development libraries that provide the developer with a toolbox of classes/APIs that provide for rapid application development – using a language like C# also gives the combined benefits of C++ and Java programming combined into one language. Unlike C/C++/Win32 you can be a lazy programmer (I’m not saying that you should be), letting the framework clean up behind you – if an object you’ve created goes out of scope then the Garbage Collector will come along behind you and clean up. There is of course a hit for taking the Compact Framework into your image, for .NET CF 2.0 this is about 4MB. Perhaps this is ok given the upside in application development speed and the reduction in leaks.
ok, now over to the DPF requirements.
- Must be internet connected (wired or wireless) – I won’t spend any time talking about how to get the device connected, perhaps that’s another post – having a frame that just loads images from a USB stick, or from a Windows Media Connect source is so… last century.
- Must consume an image RSS feed – I’m using FrameIt (super cool!) – here’s my demo feed http://demofeed.frameit.com [1]
- Supports JPG Image format only (but only because the images coming from the RSS feed are JPG) [2]
For my session that means that I will focus on three things.
- Code to pull the RSS file down from FrameIt (so I can parse out the enclosures)
- Code to parse the RSS feed, and then pull down the images (could probably re-use the code from step 1).
- Code to display the images (nothing fancy, no cool transitions, but enough to show the images being displayed)
I will probably get the Compact Framework code done first, since that should be quick and easy!
Look out for some more posts on this subject coming soon…
- Mike
[1] – FrameIt – I really like the FrameIt concept, the fact that the DPF doesn’t need to know anything other than how to parse an RSS feed and pull down images from an enclosure rocks – this means that the FrameIt back-end owns building the images for the frame, and can aggregate content from a number of different sources – the frame only needs to subscribe to the one RSS feed.
[2] If you are using Win32 and want to load image formats other than BMP then you need to resort to the Windows CE Imaging APIs, these are COM based, and even though Don Box thinks COM is Love I’m not sure that I completely agree. There’s a Win32 sample for loading images here in the Wince600 install tree %_PUBLICROOT%\GDIEX\SDK\SAMPLES\SIMPLE
ESC Boston is running October 26-30, the Windows Embedded team is running a series of sessions (and labs) covering Windows Embedded CE 6.0, and Windows Embedded Standard (Windows XP Embedded) – here’s the list of sessions that will be presented.
First up, Windows Embedded Standard (Windows XP Embedded).
| Session name | Description |
| Introduction to Windows Embedded Standard & Roadmap | Come and learn about Windows Embedded Standard, the next release of Windows Embedded based on the Windows XP Professional code base. The latest innovations in Windows Embedded Standard enables new scenarios for embedded systems such as thin clients, cash registers, bank ATMs, gaming consoles, medical equipment, and numerous other embedded devices. This session provides you with the product overview, walks you through its new exciting technologies, discusses some of the new scenarios enabled by the product, and introduces you to the Windows Embedded suite of tools that enable customization of applications, services, and drivers for your embedded systems. |
| Windows Embedded Standard- Developer Considerations From Image Inception To Deployment | So your boss has just given you a project to complete with Windows Embedded Standard – how do you begin? Are you interested in learning how to plan for supporting your images? Do you know what components to add or how to componentization third-party drivers and applications? Do you want to know more about basic troubleshooting steps? Join us as we dig deeper into the end-to-end developer scenario of creating an embedded device- from choosing media, optimizing footprint and adding applications to securing and updating the device. |
| Using Write Filters to build reliable devices | Write Filters combined with other embedded enabling features are commonly used to implement stateless and semi-stateless devices. This can increase predictability, reliability and performance; while decreasing footprint, surface attack, and boot time. This talk will help you decide which Write Filter fits your scenario. You’ll learn the benefits of each Write Filter technology, and how to configure and effectively use them through interactive demonstrations. We will cover some basic scenarios using write filters and take an in depth look at underlying technologies. |
| Leveraging the Windows Presentation Framework (WPF) in an embedded Environment | The Windows Presentation Foundation is a graphical subsystem that was introduced in the .NET Framework 3.0. It provides a unified programming experience, and provides a very clear boundary between user interface and business logic. Because of both the flexibility in deployment options in WPF applications, and also the fact that WPF unifies a host of application services such as user interface, 2D and 3D drawing, fixed and adaptive documents, advanced typography, vector graphics, raster graphics, animation, data binding, audio and video, and a host of other rich UI features, it has become an ideal candidate for embedded developers wishing to replace the explorer interface in Windows Embedded Standard with a custom, rich user interface. This presentation will explore the creation of a mock UI application from scratch using WPF. I will go over the basics of WPF, as well as touch on some more advanced topics such as animation and data binding. One objective is also showing the advantages of using WPF over other technologies such as WinForms. In addition to building a WPF application, I will go thorough deploying this WPF application to a running Windows Embedded Standard environment and replacing the explorer UI. |
| Windows Embedded Standard: Remote Debugging | As Windows Embedded Standard will be used in more embedded devices with custom hardware components, there will be more demand to debug on the targeted device hardware platform. This session will demonstrate remote debugging solutions for both native and managed applications in addition to kernel level debugging. It will explore what debugging components are necessary on the target device and host environment and how to configure them for remote debugging |
| Servicing devices and Integrating System Center Products with Windows Embedded Standard | My device is up and running in the field- now what? This session provides an overview of the various servicing options available to the embedded developer and the IT Professional administering the device. In particular, we will partner with a product expert as we will delve into the inner working of integrating WES with System Center Configuration Manager, which is newly supported in Standard. Come learn about how these powerful tools can be utilized for both deploying and updating devices. |
and now the Windows Embedded CE 6.0 sessions.
| Session name | Description |
| Discover Windows Embedded CE technologies, tools and roadmaps. | Windows Embedded CE is a componentized real time operating system which enables building a wide variety of device types. This session will give you a clear overview of what Windows Embedded CE is, and where it is heading. You will see what it takes to build an image from scratch and will get familiar with the tools. A mandatory session for anyone interested in Windows Embedded CE. |
| Deep Dive into the build process of Windows Embedded CE | Windows Embedded CE ships with a a full tool set supporting both operating system and application development . By leveraging Visual Studio and Platform Builder one can select the exact features needed for a device. A developer will also be able to access, modify and compile Windows Embedded CE source code. This session will describe the build process and will bring you behind the scenes of the graphical development tool. |
| Building Real time systems with Windows Embedded CE | Hard Real Time support is a prerequisite for embedded systems used in critical environments. Windows Embedded CE is a hard real time embedded operating system, during this session you will learn how the OS manages hardware interrupts, and what tools developers can use to debug and test their real time applications. And of course this session would not be a real session without demos! |
| Develop the next generation of Windows Embedded CE applications using Visual Studio and .Net or native code. | Windows Embedded CE 6.0 supports three application development models, including Win32, MFC, and .NET Managed Code. There are a number of factors to be considered when making the decision of what API to use on your project before you begin to write code and avoid costly rework. This demo heavy session walks you through and compares the process of writing an application using Win32, MFC and C# (Managed) for Windows Embedded CE 6.0. |
| Debugging Windows Embedded CE kernel and applications | Debug tools are very important for a developer to build a robust and high performance embedded system. The Windows Embedded CE tool set provides a lot of debug tools enabling debugging of kernel, and applications, and also ships with tools to remotely monitor a target device. This session will show you demos of these tools, and you will be given the opportunity to ask questions of developers using these tools daily. You will also be able to play with these tools in our Labs room. |
| Building connected and distributed systems using Windows Embedded | Devices are moving from a stand-alone, disconnected world to having network connectivity, and this change introduces the possibility for devices to expose content and functionality to other devices, or for devices to consume content from other devices, or even cloud services. This session focuses on the underlying technologies and programming models used to allow devices to discover each other and exchange information. Topics include the Devices Profile for Web Services (DPWS), and a distributed programming model that uses the Concurrency and Distributed Services Runtimes (CCR/DSS). |
I’ve highlighted two sessions that I will be presenting at the conference (both on Tuesday!) – hope to see you there.
- Mike
The United Nations has identified some of the hardest challenges in the world today in its Millennium Goals. This year the Imagine Cup uses these ambitious challenges as a guiding light to inspire change all over the world. Learn more about the eight Millennium Goals
Information on the Embedded Competition can be found here.
The Registration Period begins on August 29, 2008, at 12:01 AM GMT, and ends on March 1, 2008, at 11:59 PM GMT.
If you wish to participate in this Invitational, you must register at www.imaginecup.com
- Mike
Direct Insight are running hands on technical sessions at this years Embedded Systems Show (October 1-2, NEC, Birmingham, UK) – Here’s your chance to get hands on experience with building operating systems and writing applications, plus the opportunity to talk to technical experts about your experience or projects.
Here’s the Agenda for the session (run on both days of the event).
Windows Embedded Operating System Choice Platform experience showcase Choosing an embedded platform Windows XP Embedded / Standard practical overview Configuring Target Designer Configuring and building XPe / Standard Windows Embedded CE 6.0 practical overview Configuring CE 6.0 using Platform Builder Deployment of an CE6.0 OS build Platform debug and remote tools Target application development Target application deployment Expert Panel Q&A Sign up for the session is here
- Mike
Yesterday I posted “I am a Device” to the blog, and got a comment back that “we are what we eat”, so we could be a cheeseburger, or a slice of lemon loaf, but we cannot be a “PC” – but there are a number of similarities between a PC and a person, some of which are listed below – how many items need to be the same before you can say that you really are a PC?
- Central Processing Unit – Check! – Some peoples CPU appear to be faster/better than others, same is also true of a PC
- Memory – Check! – again, some people appear to have more, better, faster memory than others
- Basic Input/Output System (BIOS) – Check! (moving right along…)
- Support for a wide array of peripherals – Check! – Most of us use a large array of peripherals every day, like my car for example – My car requires an appropriate driver, some drivers are better than others, some drivers are known to crash every so often…
- Mail – Check! – I have the ability to both send and receive mail (through the postal system), I only send useful mail, and I get a ton of junk mail in return (wouldn’t it be good to have a “real mail” filter)
- Viruses – Check!
- Browser – Check! – Some people are very good at spending hours wandering around the shopping mall!
- Office – Check! – This is where I spend most of my time, in fact, I’m sat in my office while I’m typing this blog post.
- Windows – Check! – Luckily I’ve been at Microsoft long enough to have a Window office, and have quite the view of the new campus construction site.
Did I miss anything?
- Mike
You’ve probably seen the new “I’m a PC” adverts, either on TV or the internets (what do you think of the adverts?), there’s also downloadable Life without walls (wallpapers) available from the Windows Vista Team Blog – the tagline for the wallpapers is “Windows | Life without walls”.
But, I’m in the Windows Embedded team, and spend my time thinking about devices, and building software for devices (and playing the odd game of squash!), so I think my tagline should be "I'm a device!" - interestingly, if you really are a device, let's say a networked media player, then your view of the world is "other devices", devices that serve up media, or devices that consume media, from this viewpoint, the PC is just another device on the network.
- Mike
I saw a posting to “/.” last week that talked about a mobile internet device shell (MID) for Windows Embedded CE 6.0 – here’s the post.
The shell is developed by Quarta Mobile, and will be made available as “open source” – here’s a link to the Quarta site.
There’s a photo of a netbook device running the MID shell on the Quarta site (see below) – The shell looks very similar to the Windows CE “Standard Shell” that ships with the CE 6.0 product – there’s not too much detail on the Quarta site about the capabilities of the shell, and downloads are shown as “coming soon”.

- Mike
Check out this low cost .NET Micro Framework board from GHI Electronics -
The GHI web site also contains a video of the board being used to play a .MP3 file from a USB stick - pretty cool!
The board is listed at $99, and has the following hardware and software features.
Software:
- Micro Framework 2.5 and 3.0
- USB Host (MS, HID, Printer and more)
- FAT File System
- Peripherals (SPI, PWM...etc.)
Hardware:
- 72Mhz ARM7 Processor
- USB Host/Device
- Plenty of Digital I/O
- Interrupt Inputs
- SPI (8/16 bit)
- I2C
- 4 UART
- 2 CAN Channels
- 4 10-bit Analog Inputs
- 10-bit Analog Output
- 4-bit SD Memory Interface (uSD connector)
- PWM
- Low Power and Hibernate Modes
- -40 to +85 Operational
- Lead Free
[UPDATE] GHI have a projects page that includes sample code, and some videos showing the code running - here's a link to the page.
- Mike

Zune 3.0 software is available for download today. What's new? - check out the new features list here. There are new device features, Software Features, and Social Features.
Here's some of the device features:
- New device hardware (16GB, 120GB)
- Buy from FM radio
- Games!!
- Clock
- Browse Marketplace wirelessly
- Mike
Graças ao Windows Live tradução (Equipe de tradução de automática do Microsoft Research), a documentação de CE 6.0 agora está disponível em português! -Eis um link para o material traduzido.
Thanks to Windows Live Translation (Microsoft Research Machine Translation team), the CE 6.0 documentation is now available in Portuguese! - here's a link to the translated material.
- Mike
Travis Hobrla has posted a new video to MSDN Channel 9 titled "Porting Drivers to CE 6.0" - this session has been presented at MEDC a couple of times (and I think was also presented at ESC West and TechEd this year) - This presentation covers everything you need to know to port your driver to CE6.0 including access checking, marshalling, thread permissions, and security.
- Mike