BUILD CONFIGURATIONS

This directory contain canned build configurations for the hn70ap board. Each of
them starts with a number that represents a test order.

0_boot: This configuration does nothing more than a hello world. It will blink
the HEARTBEAT LED and stop here. NuttX shell will not start. This can be used
to check that the CPU is booting using the external 20 MHz XTAL. This
configuration does not contain a bootloader, so it can only be installed via
JTAG, and it cannot be upgraded.

1_memories: This configuration enables the external EEPROM and FLASH memories.
Then it tries to read the SST26 unique identifier and the MAC address stored
in the EEPROM. This configuration does not contain a bootloader and can only
be installed via JTAG, and it cannot be upgraded.

2_oled: This configuration contains initialization code and drivers for a small
OLED screen on the i2c bus. It contains a "fb" example application that will
draw some rectangles on the screen. It also initializes the external memories.

This configuration contains the full bootloader and an application
that can receive a software update from the serial console, then write it to
the bootloader partition, then reboot. After the reboot, the bootloader will
check the validity of the contents in the external flash, and if an update is
present, it will copy it into the internal STM32 flash memory, then transfer
control to it. You can use the hn70ap_makeupdate utility to build an updater
image to be sent to the board. You can use the hn70ap_serialupdate utility
to transfer the update to the board.

3_ethernet: This configuration will attempt to initialize the external PHY and
internal MAC. Then a daemon is started in the background to manage link up/down
events, and start a DHCP request when the link is up.

4_auxradio: This configuration will attempt to detect and initialize the
auxiliary radio module connected to the board. It requires a specific branch
of the NuttX code that contains the proper radio driver, found at:

https://bitbucket.com/slorquet/nuttx/branches/radio

This branch contains development code for the si4463 driver. For the moment
a canned config generated by SiLabs WDS is used, but the goal is to reverse
engineer this tool and allow the user to configure the radio at runtime.
Once development is finished, this driver will be added to the official NuttX
tree, but this event is not expected to happen soon.

Other configurations assume a fully functional board, and are made for real
hn70ap applications, eg router, access point, freedv hotspot.
They will be defined later.

full: This is the latest configuration. It contains code to initialize all
peripherals and boots the hn70ap system daemon that will mount the flash file
system, initialize EEPROM settings, then start the shell.

beacon: This configuration initializes the aux radio and does not have
ethernet enabled. At boot, the beacon app is autostarted, and the code sends
regular data packet on 435 MHz. This is currently used on a secondary board
to test packet reception on my main prototype board.

Applications
============

beacon: A radio beacon that sends data on the air, until the board is stopped.
Future improvements will start a background thread and leave the shell available
so the beacon can be stopped.

config: This tool can be user to manipulate the contents of the configuration
EEPROM. You can list and change settings.

update: A firmware updater that is able to download a new firmware image in the
external flash. Download can be made via a serial port (via the console) or via
tftp (this is faster). Future improvements will support the use of LZF
compression to speed up the data transfer.

sysdaemon: This is the main hn70ap application. It is started on boot in most
useful configuration. The tool initializes some executive framework that will
 - init and read the configuration settings in the EEPROM
 - mount the external flash SMART filesystem
 - start a network monitor to detect cable insertion/removal events, and start
   DHCP operations (if enabled) right after the cable is detected.

