/* * Firmware - Copyright(c) 2014 Joe Pasqua * Provided under the MIT License. See the LICENSE file for details. * Created: Nov 20, 2014 */ package org.noroomattheinn.visibletesla; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.Properties; import static org.noroomattheinn.tesla.Tesla.logger; /** * Firmware: Determine software version from firmware version * * @author Joe Pasqua <joe at NoRoomAtTheInn dot org> */ class Firmware { /*------------------------------------------------------------------------------ * * Constants and Enums * *----------------------------------------------------------------------------*/ private static final String FirmwareVersionsFile = "org/noroomattheinn/visibletesla/FirmwareVersions.properties"; // This data is collected from: // http://www.teslamotorsclub.com/showwiki.php?title=Model+S+software+firmware+changelog private static final String FirmwareVersionsURL = "https://dl.dropboxusercontent.com/u/7045813/VT2/FirmwareVersions.properties"; /*------------------------------------------------------------------------------ * * Internal State * *----------------------------------------------------------------------------*/ private static Properties firmwareVersions = loadFirmwareVersion( Firmware.class.getClassLoader().getResourceAsStream(FirmwareVersionsFile)); static String getSoftwareVersion(String firmwareVersion) { String v = firmwareVersions.getProperty(firmwareVersion); if (v != null) return v; try { InputStream is = new URL(FirmwareVersionsURL).openStream(); loadFirmwareVersion(is); v = firmwareVersions.getProperty(firmwareVersion); } catch (IOException ex) { logger.warning("Couldn't download firmware versions property file: " + ex); } if (v == null) { v = firmwareVersion; // Avoid testing for new versions of the firmware mapping file every // time around. We'll check again next time the App starts firmwareVersions.put(firmwareVersion, firmwareVersion); } return v; } private static Properties loadFirmwareVersion(InputStream is) { Properties p = new Properties(); try { p.load(is); } catch (IOException ex) { logger.warning("Couldn't load firmware versions property file: " + ex); } return p; } }