High-Level Design

Rationale

WinAmp has been one of the most popular music players since it began in 1997. With the users in place, who would not want to have a standalone remote to control WinAmp?

Background

I have wanted to build a WinAmp remote control for a long time now. Several years ago I found a plugin that allowed the user to control the basic functionality of WinAmp with a few pushbuttons over serial communications. From that point I figured the next logical step was to provide feedback to the user via an LCD. That is when the idea was born. I had neither the time nor effort available until we were required to build something for ECE 476. I approached Joe with the idea, and aside from him wanting to build a self contained air hockey puck, he was all for the idea... and the WinAmp Controller was born.

Logical Structure

The WinAmp controller can be split into two basic pieces: the plugin and the controller, which communicate serially.

Plugin
The plugin is a way to hook into WinAmp. It is also known as a dynamic linked library or dll. It is nothing more than a backend server waiting on requests via the com port. When a request is received (a byte comes in on the receive line), the data is translated and the request is serviced either by sending a command to WinAmp, or returning some data regarding the request.

Controller
The controller provides the interface for the user, consisting of eight buttons and an LCD. The hardware runs on a 16.0 MHz Atmel Mega 32 microcontroller.

Hardware/Software Tradeoffs
As a first step we wrote an external application to control WinAamp. The drawbacks of this implementation were lack of overall control of WinAmp, and the application had to be started separate from, and after WinAmp had started. The external application limited the control to simply play, pause, stop, volume, and track changes.
Since our goal was to provide the user with a more powerful interface, including viewing current song information and the entire playlist, we had to develop a plugin. Now we have total control of WinAmp’s API and the plugin loads when WinAmp is started.