Move DirectoryExists() to common.c/h.
Add backend support for memory mapped channel blocks.

Once the feature is complete, this will allow external scripts or
programs to overlay data onto channel output data.  Currently this
can be used to test channels from the command line as well as turn
blocks of channels on or off.

A new 'fppmm' binary has been added as a client interface to the
memory mapped channel data file.  Currently this binary can be
used to:

  - turn test mode on or off
  - set individual channel values when in test mode
  - individually enable/disable overlay of mapped blocks' data
  - copy raw data from a specified file onto the channel output data

Theoretically the 'raw data' import feature could be used to
overlay a bitmap image onto a matrix if the channels were defined
and aligned in the right direction and order.  Currently it is left
up to the external process creating this raw data file to align the
channel data up properly if the display item has folded strings, or
other configurations which cause the channel data to be out of order
or non-contiguous.
Fix missing support to get info on a mapped channel block.

Fixes 'fpp -m MAP' output.
Add groundwork for documenting FPP config files.
Allow users to see and download files from the 'upload' directory.

If there is a failed upload attempt, the file may get stuck
here and we also plan on using this later for other features, so
add the ability to see what files are in the 'upload' directory
and download them for other use.

The plan is also to rework the download at some point to allow
downloading any uploaded file (sequences, media, etc.).
include memorymap.h for prototypes.
Fix USB DMX Open support and add a debug message to serial util.
Move GetE131LocalAddressFromInterface() and add a debug helper

Move GetE131LocalAddressFromInterface() from channeloutput/E131.c to
common.c as a more generic GetInterfaceAddress(char *interface) so we
can use it elsewhere.

Add HexDump(char *title, void *data, int len) which can dump a
block of data in hex and human readable format for debugging.
Add some generic table classes for UI consistency

Usage will be in a later commit.
Move Credits to their own page.
Logging changes.

- Have fppd load saved LogLevel and LogMask settings at startup
- Remove references to old 'verbose' setting
- Add a UI for changing the log level and mask
- Move parsing of --log-level and --log-mask options to helper
  functions in log.c.
- Rework command socket handling of LogLevel and LogMask changes
  to make it easier for UI to change these on the fly without
  having to duplicate code or spawn fpp.

As part of the above:

- Add fppjson.php.  This is like fppxml.php, but returns JSON
  which is much easier to deal with in JavaScript and PHP since
  there are helper functions which convert between JSON and
  native data types.  For now, fppxml.php stays and has not
  been converted, but the groundwork is layed for future additions
  to use JSON and allow future conversion from XML to JSON of
  existing calls.
- Add JavaScript and PHP arrays to track all settings stored in
  /home/pi/media/settings config file.  settings[SETTING_NAME]
  and $settings[SETTING_NAME] in JavaScript and PHP respectively.
  In the future, this will allow us to get rid of a lot of the
  "global $varname" type lines sprinkled through the code in
  favor of one "global $settings" line.  It also means we don't
  have to add new variables each time we add a new setting to
  the config file, the new setting is automatically added to
  the settings arrays.
Make sure the header byte for DMX Open packets is always initialized.
Add (disabled) Pixelnet-Open support.

This extends USBPixelnet.c to support cheap sub-$10 USB to
RS485 adapters to send Pixelnet data as an option to a
Falcon Pixelnet/DMX add-on card or Lynx USB Dongle.

New feature is currently disabled pending changes to the setup UI
for these alternate channel output methods.
Preliminary support for direct-attached WS2801 pixels.

The included code can drive WS2801 pixels directly from
the SPI port on the Raspberry Pi.  Currently this
functionality is disabled until the new Channel Output
setup UI is completed.  There also may need to be some
tuning since SPI-connected lights were not totally in
sync with USB-connected lights on the same Pi.
make sure we clean up fppmm object files
Use HexDump() for debugging channel output data.

Use the more generic HexDump() routine rather than the
duplicate-functionality dump routine in channeloutput.c.
Display the number of bytes being displayed by HexDump()
Add Channel Remap UI.

Allows user to remap blocks of channels to avoid having
to resequence to map around failed or moved hardware.
Fix errant /li tag.
Tweak layout of buttons on channel remap screen.