2010年11月5日金曜日

Practical library for mbed : Firmware updater


Languages



Overview
Network features on mbed is great. So there are so many mbed application in our world.
Sometime I need to update these mbed application firmware.
So I implemented a firmware update class.
You can update mbed if you put on a new firmware with version text file automatically.
It's really easy to update mbed in the distance.

The library compare versions between binary on a server and local file system on mbed.

How to use it?

mbed side

  1. Download your firmware. (e.g.: firm.bin) http://mbed.org/media/uploads/shintamainjp/firm.bin
  2. Make the version text file for the firmware. (e.g.: firm.txt) http://mbed.org/media/uploads/shintamainjp/firm.txt
10
You can check the sequences if logging option enabled.

Server side

  1. Put on a new firmware on HTTP server. (e.g.: firm.bin) http://mbed.org/media/uploads/shintamainjp/firm.bin
  2. Put on the version text file for the firmware (e.g.: firm.txt) http://mbed.org/media/uploads/shintamainjp/firm.txt
25

Setup the library

FirmwareUpdater fwup("http://mbed.org/media/uploads/shintamainjp/", "firm", true); 

Description

exist()
  • Compare version files between on a server and on a mbed.
  • Return 0 if a version on a server higher than a version on a mbed.
execute()
  • Download a new firmware binary file to a temporary file.
  • Download a new firmware version text file to a temporary file.
  • Copy these new files to .bin and .txt.
reset()
  • Reset mbed.

The interfaces

The interfaces are very simple.

The test program

#include "mbed.h"
#include "FirmwareUpdater.h"
#include "EthernetNetIf.h"

EthernetNetIf eth;
FirmwareUpdater fwup("http://mbed.org/media/uploads/shintamainjp/", "firm", true); 

// There are 2 files for the firmware.
//  1. firm.txt : firmware version file.
//  2. firm.bin : firmware binary file.

int main() {
    eth.setup();
    if (fwup.exist() == 0) {
        printf("Found a new firmware.\n");
        if (fwup.execute() == 0) {
            printf("Update succeed.\n");
            printf("Resetting this system...\n\n\n\n\n");
            fwup.reset();
        } else {
            printf("Update failed!\n");
        }
    }
 
    // Your application ...
}

The library

    0 件のコメント:

    コメントを投稿