After spending some time searching for a suitable idea for a senior graduate Computer Science project, the idea of remotely controlling a computer was raised. The idea was inspired by the remote controlling devices that some professors at our university purchased to make teaching easier and more interactive, but the problem was that those devices cost money, professors had to carry them from class to class in addition to their other gadgets, and the functionalities those controlling devices have are quite limited.
It's obvious that nowadays everyone carries a phone or PDA, so our visionary idea was: "why not use our phones or PDA, which we always carry, in controlling our computers instead of buying an extra device".
The system we proposed gained acceptance and encouragement from the supervisor as well as other professors at our university. So the next step was research. We did some reading and downloaded some APIs, and had to make many decisions regarding which APIs to use and what programming languages are most suitable for such a system, etc.
Before going to real implementation, we did a feasibility study. After making sure that the system can be implemented, we moved on to creating a design for the system. We selected the server-client architecture because naturally our system is comprised of two components, which are the computer (server), and the phone or PDA (client).
We selected Java 2SE for programming the server side, and Java 2ME for programming the client side, and the connectivity medium we selected was Bluetooth because of its amazing properties. These properties include speed, reliability, and the ability to pass through barriers.
The server side is divided into many layers stacked on top of each other, each layer receives data from the one beneath it, processes the that data, and delivers the result to the layer on top of it. This design adheres to the component based design which provides a high level of coherence and cohesion. These two measures are highly preferred in the contemporary software engineering trends.
Figure 1 below shows the design of the server side:

Figure 1
The bottom layer displayed in Figure 1 is the Bluetooth hardware; on top of it is Microsoft's XP2 Bluetooth Enumerator and Radio, which fetches the data received from the hardware layer, USB Bluetooth Dongle, and delivers this data to BlueCove's Bluetooth stack after passing through the Java Native Interface (JNI) tool; this JNI tool acts as a translator between Microsoft's XP2 Bluetooth Enumerator and Radio and BlueCove's Bluetooth stack.
A Bluetooth stack is a device driver that relies on the operating system's access to Bluetooth hardware. Programmers use Bluetooth stacks to gain control of Bluetooth hardware. Some of these Bluetooth stacks are free and others are commercial. We selected BlueCove's Bluetooth stack because of its platform independence and being open source. Another Bluetooth Stack is Harold Bluetooth stack.
On top of BlueCove's Bluetooth stack is Sun's Microsystems Bluetooth API, this API is standardized as the JSR-82; this API gives programmers the ability to perform Bluetooth operations which are discovery, device management and connectivity.
The top layer is a set of classes, each of which performs a certain task.

Anne-Birte Stensgaard, Senior News Editor



