  Introduction
  ------------
  This is a sample Java application designed to showcase the functionality of 
  the Firmware Update feature. From time to time, new firmware may need to be 
  programmed on some of your remote devices. The Remote Firmware Update feature 
  allows you to update the firmware (single or multiple partitions or targets), 
  through Device Cloud, on those devices that support the feature.
 
  When the application is launched, it instantiates a new Cloud Connector for 
  Java. After that, Cloud Connector is started. Once the connection is 
  established, the application waits until a firmware update request is received 
  and simulates the update process.


  Main files
  ----------
    * com.etherios.connector.firmwareupdate.MainApp.java:
      Main application class. Instantiates and starts the Cloud Connector object.

    * com.etherios.connector.firmwareupdate.ConnectorEventsListener.java: 
      Class that handles the connector events.

    * com.etherios.connector.firmwareupdate.FirmwareHook.java:
      Class that manages the firmware update process.

    * connector_config.txt:
      Cloud Connector general settings.

    * firmware_targets.xml:
      File which defines the targets for the firmware update process.


  Requirements
  ------------
  To run this example you will need:
    * A PC connected to the Internet to host and run the application.
    * A Device Cloud account.
      For further information on how to create a Device Cloud account go to
      the 'Creating a Device Cloud Account' topic of the Getting Started.


  Example setup
  -------------
    1) Cloud Connector is properly configured.
       This can be done editing the 'connector_config.txt' file which is 
       located in the 'res' folder of the project. Make sure that the 
       'vendor_id' field is filled with your account Vendor ID.
       
       For further information on how to configure the 'connector_config.txt'
       file, go to the 'Cloud Connector Configuration' topic of the
       Developer's Guide.

    2) The device is registered in your Device Cloud account.
       By default, it is registered automatically because the Device ID is 
       provisioned from Device Cloud. If you want to modify this behavior, 
       read the 'Device ID Type' section (Developer's Guide > Cloud Connector 
       Configuration > General Settings).

    3) The firmware targets file is properly configured.
       For further information on how to configure that file, read the 
       'Updating the Firmware through Device Cloud' topic inside 'Creating a
       Device Cloud Connected Application' of the Developer's Guide.

    4) The Application Descriptor needs the following API Permissions:

        java.util.PropertyPermission "*" "read,write"
        javax.microedition.io.AccessPointPermission "*"
        javax.microedition.io.Connector.file.read
        javax.microedition.io.Connector.file.write
        javax.microedition.io.SocketProtocolPermission "socket://:*"
        javax.microedition.io.SocketProtocolPermission "socket://*:*"
        javax.microedition.io.SSLProtocolPermission "ssl://:*"
        javax.microedition.io.SSLProtocolPermission "ssl://*:*"
        javax.microedition.location.LocationPermission "location" "location"

    5) The Etherios public certificate is imported to the device's keystore.
       For further information, read the 'Adding the Etherios Certificate to
       Your Device' topic inside 'Creating and Building a Java Project with 
       Cloud Connector support' of the Developer's Guide.


  Running the example
  -------------------
  The example is already configured, so all you need to do is to build and 
  launch the application. Refer to the general instructions about how to build, 
  run, and debug the examples for further information.

  To verify that the application is running successfully, follow these steps:

     1) Login into your Device Cloud account.

     2) Once logged in click on the 'Device Management' tab.

     3) Verify that your device is connected (you can also check it from the
        output of the logger).

     4) Right click on your device, select 'Firmware' and then 'Update Firmware'.

     5) Choose your firmware image (note that the file has to satisfy the 
        pattern specified in the firmware targets file) and click on the 'Update
        Firmware' button.

  Once this is done, you will see the update process in the output console. When
  it finishes, the firmware image will appear where you specified in the
  firmware targets file.
