Custom Firmware Server Example

WiPhone's firmware can be updated through a remote Server. An updated firmware file is first uploaded to a remote server by developers. Whenever the phone boots up, it checks and see if a newer firmware version is available to download. Information about this update is available within an ini file located at the server.

version=0.8.27
url=https://wiphone.io/static/releases/firmware/WiPhone.ino-0.8.27.bin

Within the ini file, version number of available firmware to download and a url from where it could be downloaded is available. Upon startup, the WiPhone will load this ini file, check the version in ini file against the local version. If the server version is newer and auto update is set to true, the firmware binary will be downloaded and installed.

SSL Certificates

The firmware binary and ini file are downloaded using https and the certificate chain for the certificate used for the site hosting the firmware is needed in the spiffs data partition. The name of the custom pem file is: user.pem. An example pem file is located in the data directory and it contains the Lets Encrypt certificate which is used for the official WiPhone firmware repository.

WiPhone configuration

The WiPhone has an app called: Firmware Settings located in the Settings menu. Within this app, there is a text field where user can enter a URL. This URL is the location of the ini file which contains the server firmware version number along with the link to that firmware binary. User can change this URL to a custom URL for server, the WiPhone will load this ini file on boot and check for new firmware versions.

Firmware update code

The code to handle the firmware update can be found in the ota.cpp and ota.h files which points to default official WiPhone firmware repository. It is possible to alter the default URL which appears inside the "Firmware Settings" app. This URL can be found in the ota.h file. The lines which can be changed are below:-

#define DEFAULT_INI_HOST "wiphone.io"
#define DEFAULT_INI_LOC "/static/releases/firmware/WiPhone-phone.ini"

The DEFAULT_INI_HOST is the hostname for the firmware repository and DEFAULT_INI_LOC is the location of the ini file on the host. In above example, the phone will load the ini file to the following location: https://wiphone.io/static/releases/firmware/WiPhone-phone.ini So by User is allowed to Change these values to set a dfferent default firmware downlad server of their own.

Failed updates

When a release fails to install on the WiPhone it is marked as failed within the SPIFFS data partition of the phone. This prevents the phone from trying to load the same failed version again and again and just looping forever trying to install the same version. It is possible to force the phone to install a failed firmware version from the Firmware app using the reset button. This button will reset all firmware settings on the phone and place them back to the default state as set in the source code.

Steps to setup custom server

  1. Install a web server, nginx for example, and add your domain to the virtual hosts.
  2. Setup SSL on the domain being used for the firmware server.
  3. Upload the firmware binary along with an ini file in the correct format.
  4. Setup the WiPhone update so that it will load the above ini file.
  5. Reboot the WiPhone and it should load the firmware from your server

This video will teach you how to Host your own Firmware Server on WiPhone.