NexGen is a heterogeneous collection of computers, and embedded microprocessors. These possessors must all listen and talk together. To do this we must rely on some common language. This language is a protocol. There are different protocols for different jobs for instance we have: UDP, TCP, NTP, etc. And they have to be well defined, and understood by both parties. Protocols can be software or hardware based or a combination of both. The Wiki has lots of definitions of what a protocol is or is not so we will use a combination of their's. Our protocol should have the following features:
- A protocol is a common means for unrelated objects communicate to with each other.
- A protocol will define any data structures that it uses.
- A protocol describes the syntax, semantics, of it's use. This is called it's API or Advanced/Application Programming Interface.
- A protocol will have a formal description.
- A protocol optional could be defined with Abstract Syntax Notation One (ASN.1). A pdf document of ASN.1 can be found here.

- A protocol must be well understood.
- Protocols may include signaling, authentication and error detection and correction capabilities.
- One protocol may be the foundation for another, such as Tcp/Ip or Udp/Ip. Where Ip is really the underlying protocol.
- A protocol must be a public document.
There is one of our protocols, for one of our CDU's, Computer Display Unit. It is compriesed of several key components:
- The Keyboard. We will use a Ps2 keyboard for the keys.
- The Switches. There are four of them 2 rotary, and 2 thumb wheel switches. the thumb wheel switches are BCD encoded, so we will encode the rotary switches with a priority encoder 74LS148.
- The Display. The display is comprised of 5 alphanumeric displays, plus 13 additional seven segment display, and two tri-color leds. After looking around and finding 16 segment drivers (hardware) not very common we specified two(2) MAX6955 with an I2C interfaces.
Plus lets not forget about several other parts:
- Some intelligence for our CDU. So we thought we would use a Arduino. There small and cheap.
- Our Host. This is a program that runs on one of our Linux boxes.
- A Client. This is program that runs on the Arduino talking to our Switches, Display, and Keyboard.
Know remember that thing called a protocol? So the questions are:
- How does the Arduino communicate with the Host?
- How does the Host communicate with the Arduino?
- How does the Arduino communicate with the Display?
- How does the Arduino communicate with the Keyboard?
- And lastly how does the Arduino communicate with the Switches?
- Oh, yes how does the Host talk to simulator?
- And how does the Host listen to the simulator?
Cris ~
