Some time ago I got a LED display in my hands and decided to
play a bit with it by programming it with the
coin-up game Frogger.
The display still sits in my office but now it displays various statistics
from customer sites. Every night it connects to the customers' servers and
collects key performance numbers, which then scrolls by all day.
It's actually a great Monday morning motivation gadget. You know:
Monday morning - when you're still half asleep and think to yourself
"Now why did I get up to go to work today?! It's not even noon yet".
My eyes accidentally catches the display information and I recall that
the hard work definitely helps thousands of people get on with their lives.
After installing Windows Vista on my workstation I figured I'd try to
convert the bulky LED display into a real Vista SideShow device.
Don't confuse SideShow with the Vista Sidebar although the two
technologies are linked as I will mention later.
Vista SideShow gadgets is a new technology Microsoft added to Windows Vista
which allows auxiliary devices (usually displays, but any device such as an MP3 player will
do) to receive information from the PC. The most appealing feature could be
the ability to sync PC information (say your email or calendar) with an
auxiliary device incorporated in the lid of your laptop computer,
and access this information even when your laptop has been powered down.
The LED display in my office isn't exactly mobile. Still, the ability to
hook it up with the Windows Media Player to display what songs I'm currently
playing would be pretty cool.
Obviously, the current task it performs, displaying statistics, can be entirely
replaced by attaching it to a RSS Feed gadget.
Collecting the statistics in an RSS feed would give it greater exposure, since
anyone on the network can subscribe to it in the Internet Explorer browser as well.
Once you have developed your own SideShow device, you can attach numerous gadgets to
it that collect and present a wealth of information - including a RSS Feed gadget, which
is included in the standard Vista installation.
About the code
To create a SideShow device you will need to write a Windows Device Driver. It's not as bad as it sounds, because you'll be using the new user-mode Device Driver Framework (UMDF) which, most importantly, runs in user-mode rather than at kernel level. Design-wise UMDF is using an architecture identical to COM even though it is not powered by the OLE subsystem.
The code for my LED display is basically a rewrite of the WDK sample code (there is only one
sample offered) provided with the Windows Vista Device Driver kit.
The driver must implement the following C++ interfaces:
IDriverEntry
IPnpCallbackHardware
ISideShowDriver
IQueueCallbackXXX
The point of all this is probably that the UMDF framework also
allows you to easily communicate with a USB device
and extending the basic SideShow skeleton code above to do just
that will probably be the preferred option when communicating with
the device hardware. It's just that my LED display gets updated
using a simple TCP/IP stream so I'm getting by with pretty much
what the default WDK sample explains.
![]() To push content to the device you must link the device to one or more SideShow gadgets on the PC. You can use one of the preinstalled SideShow gadgets in Vista or download new ones from the Microsoft Gallery website. SideShow even integrates with some of the Vista Sidebar gadgets. When you develop a new Sidebar gadget you can pinpoint specific information that should also be exposed to the SideShow devices. Nice thinking Microsoft.
There aren't really a lot of SideShow gadgets available at the moment.
SideShow probably isn't a huge success right now because there hardly is
any hardware that supports it.
|
Source Code Dependencies
Windows VistaMicrosoft Visual C++ 6.0
Microsoft ATL Library
Microsoft Windows DDK
Installation Guide
- To install the component, go to the Control Panel and choose Install New Hardware.
- Pick manual install, choose the Windows SideShow type and browse for the INF file.
Download Files
![]() | Source Code (33 Kb) |