firmware update from USB stick, does not work properly. If someone can get it work, please inform me.

Dependencies:   mbed

Committer:
Markus_Paar
Date:
Fri Apr 01 07:51:52 2011 +0000
Revision:
0:dad421e28e26
0.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Markus_Paar 0:dad421e28e26 1 /**
Markus_Paar 0:dad421e28e26 2 * =============================================================================
Markus_Paar 0:dad421e28e26 3 * Firmware updater (Version 0.0.1)
Markus_Paar 0:dad421e28e26 4 * =============================================================================
Markus_Paar 0:dad421e28e26 5 * Copyright (c) 2010 Shinichiro Nakamura (CuBeatSystems)
Markus_Paar 0:dad421e28e26 6 *
Markus_Paar 0:dad421e28e26 7 * Permission is hereby granted, free of charge, to any person obtaining a copy
Markus_Paar 0:dad421e28e26 8 * of this software and associated documentation files (the "Software"), to deal
Markus_Paar 0:dad421e28e26 9 * in the Software without restriction, including without limitation the rights
Markus_Paar 0:dad421e28e26 10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
Markus_Paar 0:dad421e28e26 11 * copies of the Software, and to permit persons to whom the Software is
Markus_Paar 0:dad421e28e26 12 * furnished to do so, subject to the following conditions:
Markus_Paar 0:dad421e28e26 13 *
Markus_Paar 0:dad421e28e26 14 * The above copyright notice and this permission notice shall be included in
Markus_Paar 0:dad421e28e26 15 * all copies or substantial portions of the Software.
Markus_Paar 0:dad421e28e26 16 *
Markus_Paar 0:dad421e28e26 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Markus_Paar 0:dad421e28e26 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Markus_Paar 0:dad421e28e26 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Markus_Paar 0:dad421e28e26 20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Markus_Paar 0:dad421e28e26 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Markus_Paar 0:dad421e28e26 22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
Markus_Paar 0:dad421e28e26 23 * THE SOFTWARE.
Markus_Paar 0:dad421e28e26 24 * =============================================================================
Markus_Paar 0:dad421e28e26 25 */
Markus_Paar 0:dad421e28e26 26
Markus_Paar 0:dad421e28e26 27 #ifndef FIRMWARE_UPDATER_H
Markus_Paar 0:dad421e28e26 28 #define FIRMWARE_UPDATER_H
Markus_Paar 0:dad421e28e26 29
Markus_Paar 0:dad421e28e26 30 #include "mbed.h"
Markus_Paar 0:dad421e28e26 31 #include "LocalFileSystem.h"
Markus_Paar 0:dad421e28e26 32 #include "MSCFileSystem.h"
Markus_Paar 0:dad421e28e26 33 #include <string>
Markus_Paar 0:dad421e28e26 34
Markus_Paar 0:dad421e28e26 35 /**
Markus_Paar 0:dad421e28e26 36 * @code
Markus_Paar 0:dad421e28e26 37 * #include "mbed.h"
Markus_Paar 0:dad421e28e26 38 * #include "FirmwareUpdater.h"
Markus_Paar 0:dad421e28e26 39 * #include "EthernetNetIf.h"
Markus_Paar 0:dad421e28e26 40 *
Markus_Paar 0:dad421e28e26 41 * EthernetNetIf eth;
Markus_Paar 0:dad421e28e26 42 * FirmwareUpdater fwup("http://mbed.org/media/uploads/shintamainjp/", "firmware", true);
Markus_Paar 0:dad421e28e26 43 *
Markus_Paar 0:dad421e28e26 44 * // There are 2 files for the firmware.
Markus_Paar 0:dad421e28e26 45 * // 1. firmware.txt : firmware version file.
Markus_Paar 0:dad421e28e26 46 * // 2. firmware.bin : firmware binary file.
Markus_Paar 0:dad421e28e26 47 *
Markus_Paar 0:dad421e28e26 48 * int main() {
Markus_Paar 0:dad421e28e26 49 * eth.setup();
Markus_Paar 0:dad421e28e26 50 * if (fwup.exist() == 0) {
Markus_Paar 0:dad421e28e26 51 * printf("Found a new firmware.\n");
Markus_Paar 0:dad421e28e26 52 * if (fwup.execute() == 0) {
Markus_Paar 0:dad421e28e26 53 * printf("Update succeed.\n");
Markus_Paar 0:dad421e28e26 54 * printf("Resetting this system...\n\n\n\n\n");
Markus_Paar 0:dad421e28e26 55 * fwup.reset();
Markus_Paar 0:dad421e28e26 56 * } else {
Markus_Paar 0:dad421e28e26 57 * printf("Update failed!\n");
Markus_Paar 0:dad421e28e26 58 * }
Markus_Paar 0:dad421e28e26 59 * }
Markus_Paar 0:dad421e28e26 60 * }
Markus_Paar 0:dad421e28e26 61 * @endcode
Markus_Paar 0:dad421e28e26 62 */
Markus_Paar 0:dad421e28e26 63 class FirmwareUpdater {
Markus_Paar 0:dad421e28e26 64 public:
Markus_Paar 0:dad421e28e26 65 /**
Markus_Paar 0:dad421e28e26 66 * Create.
Markus_Paar 0:dad421e28e26 67 *
Markus_Paar 0:dad421e28e26 68 * @param url URL for firmware. Do not include a target file name.
Markus_Paar 0:dad421e28e26 69 * @param name An application name. Do not include a extention.
Markus_Paar 0:dad421e28e26 70 * @param log True if logging.
Markus_Paar 0:dad421e28e26 71 */
Markus_Paar 0:dad421e28e26 72 FirmwareUpdater(std::string src_name, std::string dest_name, bool log = false);
Markus_Paar 0:dad421e28e26 73
Markus_Paar 0:dad421e28e26 74 /**
Markus_Paar 0:dad421e28e26 75 * Dispose.
Markus_Paar 0:dad421e28e26 76 */
Markus_Paar 0:dad421e28e26 77 ~FirmwareUpdater();
Markus_Paar 0:dad421e28e26 78
Markus_Paar 0:dad421e28e26 79 /**
Markus_Paar 0:dad421e28e26 80 * Get a URL.
Markus_Paar 0:dad421e28e26 81 *
Markus_Paar 0:dad421e28e26 82 * @return URL.
Markus_Paar 0:dad421e28e26 83 */
Markus_Paar 0:dad421e28e26 84 const std::string get_src_name() const;
Markus_Paar 0:dad421e28e26 85
Markus_Paar 0:dad421e28e26 86 /**
Markus_Paar 0:dad421e28e26 87 * Get a name.
Markus_Paar 0:dad421e28e26 88 *
Markus_Paar 0:dad421e28e26 89 * @return name.
Markus_Paar 0:dad421e28e26 90 */
Markus_Paar 0:dad421e28e26 91 const std::string get_dest_name() const;
Markus_Paar 0:dad421e28e26 92
Markus_Paar 0:dad421e28e26 93 /**
Markus_Paar 0:dad421e28e26 94 * Checking a new firmware.
Markus_Paar 0:dad421e28e26 95 * Compare versions of the software between local storage on mbed and on webserver.
Markus_Paar 0:dad421e28e26 96 *
Markus_Paar 0:dad421e28e26 97 * @return Return 0 if a new firmware exists.
Markus_Paar 0:dad421e28e26 98 */
Markus_Paar 0:dad421e28e26 99 int exist();
Markus_Paar 0:dad421e28e26 100
Markus_Paar 0:dad421e28e26 101 /**
Markus_Paar 0:dad421e28e26 102 * Execute update.
Markus_Paar 0:dad421e28e26 103 *
Markus_Paar 0:dad421e28e26 104 * @return Return 0 if it succeed.
Markus_Paar 0:dad421e28e26 105 */
Markus_Paar 0:dad421e28e26 106 int execute();
Markus_Paar 0:dad421e28e26 107
Markus_Paar 0:dad421e28e26 108 /**
Markus_Paar 0:dad421e28e26 109 * Reset system.
Markus_Paar 0:dad421e28e26 110 */
Markus_Paar 0:dad421e28e26 111 void reset();
Markus_Paar 0:dad421e28e26 112
Markus_Paar 0:dad421e28e26 113 private:
Markus_Paar 0:dad421e28e26 114 static const std::string EXT_BIN;
Markus_Paar 0:dad421e28e26 115 static const std::string EXT_BINTMP;
Markus_Paar 0:dad421e28e26 116 static const std::string EXT_TXT;
Markus_Paar 0:dad421e28e26 117 static const std::string EXT_TXTTMP;
Markus_Paar 0:dad421e28e26 118 const std::string src_name;
Markus_Paar 0:dad421e28e26 119 const std::string dest_name;
Markus_Paar 0:dad421e28e26 120 const bool log;
Markus_Paar 0:dad421e28e26 121 LocalFileSystem local;
Markus_Paar 0:dad421e28e26 122
Markus_Paar 0:dad421e28e26 123
Markus_Paar 0:dad421e28e26 124 /**
Markus_Paar 0:dad421e28e26 125 * Fetch a file.
Markus_Paar 0:dad421e28e26 126 *
Markus_Paar 0:dad421e28e26 127 * @param src_url URL of a source file.
Markus_Paar 0:dad421e28e26 128 * @param local_file Local file name.
Markus_Paar 0:dad421e28e26 129 *
Markus_Paar 0:dad421e28e26 130 * @return Return 0 if it succeed.
Markus_Paar 0:dad421e28e26 131 */
Markus_Paar 0:dad421e28e26 132 int fetch(std::string src_url, std::string local_file);
Markus_Paar 0:dad421e28e26 133
Markus_Paar 0:dad421e28e26 134 /**
Markus_Paar 0:dad421e28e26 135 * Copy a file.
Markus_Paar 0:dad421e28e26 136 *
Markus_Paar 0:dad421e28e26 137 * @param local_file1 Source file.
Markus_Paar 0:dad421e28e26 138 * @param local_file2 Destination file.
Markus_Paar 0:dad421e28e26 139 *
Markus_Paar 0:dad421e28e26 140 * @return Return 0 if it succeed.
Markus_Paar 0:dad421e28e26 141 */
Markus_Paar 0:dad421e28e26 142 int copy(std::string local_file1, std::string local_file2);
Markus_Paar 0:dad421e28e26 143
Markus_Paar 0:dad421e28e26 144 /**
Markus_Paar 0:dad421e28e26 145 * Output a message to a log file.
Markus_Paar 0:dad421e28e26 146 *
Markus_Paar 0:dad421e28e26 147 * @param format ...
Markus_Paar 0:dad421e28e26 148 */
Markus_Paar 0:dad421e28e26 149 void LOG(const char* format, ...);
Markus_Paar 0:dad421e28e26 150
Markus_Paar 0:dad421e28e26 151 };
Markus_Paar 0:dad421e28e26 152
Markus_Paar 0:dad421e28e26 153 #endif