Serial stepper motor interface API 
*Subject:
 API for controlling a serial stepper motor
*Version:
 1.0
*Status:
 final
*Author:
 Jeroen Vreeken
*Date:
 14-6-2001
  Introduction    
This is the API for a stepper motor controller connected to a standard 
serial port.
The protocol is designed to allow the control of multiple (up to 256)
independand motors.
The motors must have a safety to prevent turning to far.
The user must be able to read the status of the motor.
  API 
The interface works at a fixed baudrate of 9600bps. Each command will consist of three bytes. After each command the interface will return a status byte.
Where needed counting will start at zero.
Build-up of a command:
 
-  byte0 will contain the motor number. Usually zero.
-  byte1 will contain the command. A list of valid commands is given later on in this document.
-  byte2 will contain additional data for this command.
Build-up of the status byte:
 
-  bit0 will signal if the motor turns left.
-  bit1 will signal if the motor turns right.
-  bit2 indicates that the motor is against the left safety stop.
-  bit3 indicates that the motor is against the right safety stop.
-  bit4 - bit7 these bits are not used and shall be zero.
These are the valid commands:
 
-  0 STATUS 
 Nothing will happen, just the status byte will be returned. The data byte will be ignored.
-  1 LEFT_N 
 The motor will make N steps to the left unless it hits the left safety first.
 The data byte will contain N.
-  2 RIGHT_N 
 The motor will make N steps to the right unless it hits the right safety first.
 The data byte will contain N.
-  3 LEFT 
 The motor will continuously turn left until it hits the left safety stop.
 The data byte is ignored.
-  4 RIGHT 
 The motor will continuously turn right until it hits the right safety stop.
 The data byte is ignored.
-  5 SWEEP 
 The motor will start making a sweeping movement.
 The data byte is ignored.
-  6 STOP 
 The motor will stop moving.
 The data byte is ignored.
-  7 SPEED 
 This command controls the speed of the motor, 0 is the slowest, 255 the fastest.
Note that motion does not use all of these commands, implementing a subset of these commands will also work.