Does still not work properly

Dependencies:   mbed

Committer:
Markus_Paar
Date:
Thu Sep 15 05:40:44 2011 +0000
Revision:
0:319f1e8e3bdd
V2

Who changed what in which revision?

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