======================================
FreshRoastSR700 Communication Protocol
======================================
All of the communication between the FreshRoastSR700 and the computer are 
happening over serial. The device contains a USB to serial adapter that uses 
the CH341 chip set. With this, it creates a virtual serial port that the program 
and roaster communicate over. Each of them send 14 byte packets back and forth 
between each other. Below is the basic packet structure of the serial 
communications between the devices.

+------------+------------------+--------+---------------+-----------+----------------+--------------+---------------------+---------+
| Header     | Temperature Unit | Flags  | Current State | Fan Speed | Time Remaining | Heat Setting | Current Temperature | Footer  |
+============+==================+========+===============+===========+================+==============+=====================+=========+
| 2 bytes    | 2 bytes          | 1 byte | 2 bytes       | 1 byte    | 1 byte         | 1 byte       | 2 bytes             | 2 bytes |
+------------+------------------+--------+---------------+-----------+----------------+--------------+---------------------+---------+

An example packet would look like the following:

+------------+------------------+--------+---------------+-----------+----------------+--------------+---------------------+---------+
| Header     | Temperature Unit | Flags  | Current State | Fan Speed | Time Remaining | Heat Setting | Current Temperature | Footer  |
+============+==================+========+===============+===========+================+==============+=====================+=========+
|AA AA       | 61 74            | 63     | 02 01         | 01        | 32             | 01           | 00 00               | AA FA   |
+------------+------------------+--------+---------------+-----------+----------------+--------------+---------------------+---------+

Packet fields
-------------
**Header (2 bytes)** - This field is 2 bytes and is almost always ``AA AA``. 
When initializing communications with the roaster, the computer sends ``AA 55``.

**Temperature Unit (2 bytes)** - The next 2 bytes are used to set the unit 
(Celsius or Fahrenheit) of the temperature being returned from the roaster. 
For Fahrenheit, this field should be ``61 74``.

**Flags (1 byte)** - This field of the packet is used to determine what type 
of packet is being sent or received.

``63`` - The packet was sent by the computer.

``00`` - The packet was sent by the roaster.

``A0`` - The current settings on the roaster that had been set manually.

``AA`` - A beginning or middle line of a previously run recipe that had been 
saved to the roaster.

``AF`` - Last line of a previously run recipe that had been saved to the roaster.

**Current State (2 bytes)** - This section controls the current state of the 
roaster. This field is responsible for making the roaster start and stop.

``02 01`` - Idle (Shows current timer and fan speed values)

``04 02`` - Roasting

``04 04`` - Cooling

``08 01`` - Sleeping (Displays "-" in both fan speed and timer fields on the 
roaster)

**Fan Speed (1 byte)** - This field is the current fan speed in hex. Below is 
a list of valid values for 
this field.

``01``, ``02``, ``03``, ``04``, ``05``, ``06``, ``07``, ``08``, ``09``

**Time Remaining (1 byte)** - This field is the time remaining in hex. The 
time remaining is a decimal representation of time as displayed on the 
roaster. For example, one minute and thirty seconds would appear as 1.5 on 
the roaster and should be set as `0F` in hex. Additionally, five minutes and 
fifty-four seconds would be represented as 5.9 on the roaster and ``3B`` in hex.

**Heat Setting (1 byte)** - This field is the heat setting for the roaster. 
This value will not cause the roaster to start roasting. It only dictates what 
the roaster will do once it begins. Below is a list of valid values.

``00`` - No Heat (Cooling)

``01`` - Low Heat

``02`` - Medium Heat

``03`` - High Heat

**Current Temperature (2 bytes)** - This field is the current temperature as 
recorded by the roaster encoded in hex. When the roaster does not read a 
temperature of 150°F or higher, it sends the following hex: ``FF 00``. If the 
temperature is higher than 150°F, the temperature is sent encoded in hex. For 
example, 352°F is ``01 60``.

**Footer (2 bytes)** - This field signifies the end of a packet and is 
always ``AA FA``. 

Packet Sequences
----------------
The FreshRoastSR700 has a distinct packet sequence that must be followed in 
order to communicate with the roaster.

To start off, every communication between the roaster and the computer is 
initiated by the computer. It is initiated with a packet that looks like the 
packet below.

``AA 55 61 74 63 00 00 00 00 00 00 00 AA FA``

This packet is a blank packet with the header set to ``55``. This then signals 
the roaster to send back the last recipe that had been loaded onto the roaster. 
Below is an example of the data that roaster would send back.

``AA AA 61 74 A0 00 00 09 3B 02 00 00 AA FA`` -- Manual setting currently on the 
roaster.

``AA AA 61 74 AA 00 00 09 03 03 00 00 AA FA`` -- First line of the recipe 
currently on the roaster.

``AA AA 61 74 AA 00 00 09 01 02 00 00 AA FA`` -- Second line of the recipe 
currently on the roaster.

``AA AA 61 74 AF 00 00 09 1C 00 00 00 AA FA`` -- Last line of the recipe 
currently on the roaster.

The roaster sends the above packets one right after another. It doesn't wait 
for the computer to respond until after the last line of sequence is sent. The 
last packet sent is denoted by ``AF`` in the flags field.

After this, the computer sends back the heat setting, fan speed, and time 
remaining it wants the roaster to be set to. This is all sent in a single 
packet like the following.

``AA AA 61 74 63 02 01 01 3B 01 00 00 AA FA`` -- heat=low, fan speed=1, time=5.9
minutes

The roaster then sends back the current settings including the current 
temperature of the roaster if it's 150°F or higher. The response packet would 
look like the following.

``AA AA 61 74 00 02 01 01 32 01 FF 00 AA FA``

This continues indefinitely until the connection is closed. A packet should be 
sent from the computer every quarter of a second, and no sooner. When the 
roaster should begin roasting, set the current state to roasting. The roaster 
cannot go directly to cooling, and must be first set to roasting.