package com.sonycsl.Kadecot.wamp.echonetlite;
import android.util.SparseArray;
import java.util.Collection;
import java.util.HashSet;
public final class ECHONETLiteTopicGenerator {
// TODO: raw フォルダに json ファイルをおいてすべての EPC Name を生成する
private static final String PREFIX = ECHONETLiteClient.BASE_URI + ".topic";
private static final SparseArray<String> CLASS_NAMES;
private static final SparseArray<SparseArray<String>> EPCS;
private static SparseArray<String> createSuperClassEpcNames() {
SparseArray<String> epcNames = new SparseArray<String>();
epcNames.put(0x80, "OperationStatus");
epcNames.put(0x81, "InstallationLocation");
epcNames.put(0x82, "StandardVersionInformation");
epcNames.put(0x83, "IdentificationNumber");
epcNames.put(0x84, "MeasuredInstantaneousPowerConsumption");
epcNames.put(0x85, "MeasuredCumulativePowerConsumption");
epcNames.put(0x86, "ManufacturesFaultCode");
epcNames.put(0x87, "CurrentLimitSetting");
epcNames.put(0x88, "FaultStatus");
epcNames.put(0x89, "FaultDescription");
epcNames.put(0x8A, "ManifacturerCode");
epcNames.put(0x8B, "BusinessFacilityCode");
epcNames.put(0x8C, "ProductCode");
epcNames.put(0x8D, "ProductionNumber");
epcNames.put(0x8E, "ProductionDate");
epcNames.put(0x8F, "PowerSavingOperationSetting");
epcNames.put(0x93, "RemoteControlSetting");
epcNames.put(0x97, "CurrentTimeSetting");
epcNames.put(0x98, "CurrentDateSetting");
epcNames.put(0x99, "PowerLimitSetting");
epcNames.put(0x9A, "CumulativeOperatingTime");
epcNames.put(0x9B, "SetMPropertyMap");
epcNames.put(0x9C, "GetMPropertyMap");
epcNames.put(0x9D, "StatusChangeAnnouncementPropertyMap");
epcNames.put(0x9E, "SetPropertyMap");
epcNames.put(0x9F, "GetPropertyMap");
return epcNames;
}
static {
CLASS_NAMES = new SparseArray<String>();
EPCS = new SparseArray<SparseArray<String>>();
SparseArray<String> epcNames;
/* HomeAirConditioner 0x01, 0x30 */
CLASS_NAMES.put(0x0130, "HomeAirConditioner");
epcNames = createSuperClassEpcNames();
epcNames.put(0x80, "OperationStatus");
epcNames.put(0x8F, "OperationPowerSaving");
epcNames.put(0xB0, "OperationModeSetting");
epcNames.put(0xB1, "AutomaticTemperatureControlSetting");
epcNames.put(0xB2, "NormalHighSpeedSilentOperationSetting");
epcNames.put(0xB3, "SetTemperatureValue");
epcNames.put(0xB4, "SetValueOfRerativeHumidityInDehumidifyingMode");
epcNames.put(0xB5, "SetTemperatureValueInCoolingMode");
epcNames.put(0xB6, "SetTemperatureValueInHeatingMode");
epcNames.put(0xB7, "SetTemperatureValueInDehumidifyingMode");
epcNames.put(0xB8, "RatedPowerConsumption");
epcNames.put(0xB9, "MeasuredValueOfCurrentConsumption");
epcNames.put(0xBA, "MeasuredValueOfRoomRelativeHumidify");
epcNames.put(0xBB, "MeasuredValueOfRoomTemperature");
epcNames.put(0xBC, "SetTemperatureValueOfUserRemoteControl");
epcNames.put(0xBD, "MeasuredCooledAirTemperature");
epcNames.put(0xBE, "MeasuredOutdoorAirTemperature");
epcNames.put(0xBF, "RelativeTemperatureSetting");
epcNames.put(0xA0, "AirFlowRateSetting");
epcNames.put(0xA1, "AutomaticControlOfAirFlowDirectionSetting");
epcNames.put(0xA3, "AutomaticSwingOfAirFlowSetting");
epcNames.put(0xA4, "AirFlowDirectionVerticalSetting");
epcNames.put(0xA5, "AirFlowDirectionHorizontalSetting");
epcNames.put(0xAA, "SpecialState");
epcNames.put(0xAB, "NonPriorityState");
epcNames.put(0xC0, "VentilationFunctionSetting");
epcNames.put(0xC1, "HumidifierFunctionSetting");
epcNames.put(0xC2, "VentilationAirFlowRateSetting");
epcNames.put(0xC4, "DegreeOfHumidificationSetting");
epcNames.put(0xC6, "MountedAirCleaningMethod");
epcNames.put(0xC7, "AirPurifierFunctionSetting");
epcNames.put(0xC8, "MountedAirRefreshMethod");
epcNames.put(0xC9, "AirRefresherFunctionSetting");
epcNames.put(0xCA, "MountedSelfCleaningMethod");
epcNames.put(0xCB, "SelfCleaningFunctionSetting");
epcNames.put(0xCC, "SpecialFunctionSetting");
epcNames.put(0xCD, "OperationStatusOfComponents");
epcNames.put(0xCE, "ThermostatSettingOverrideFunction");
epcNames.put(0xCF, "AirPurificationModeSetting");
epcNames.put(0x90, "OnTimerBasedReservationSetting");
epcNames.put(0x91, "OnTimerTimeSetting");
epcNames.put(0x92, "OnTimerRelativeTimeSetting");
epcNames.put(0x94, "OffTimerBasedReservationSetting");
epcNames.put(0x95, "OffTimerTimeSetting");
epcNames.put(0x96, "OffTimerRelativeTimeSetting");
EPCS.put(0x0130, epcNames);
}
static String getTopic(short classCode, String propertyName) {
int epc = Integer.decode(propertyName);
if (CLASS_NAMES.get(classCode) == null || EPCS.get(classCode) == null
|| EPCS.get(classCode).get(epc) == null) {
return PREFIX + "." + Integer.toHexString(classCode) + "." + propertyName;
}
return PREFIX + "." + CLASS_NAMES.get(classCode) + "." + EPCS.get(classCode).get(epc);
}
static Collection<String> getTopics() {
Collection<String> topics = new HashSet<String>();
for (int classi = 0; classi < CLASS_NAMES.size(); classi++) {
int className = CLASS_NAMES.keyAt(classi);
for (int epci = 0; epci < EPCS.size(); epci++) {
SparseArray<String> epc = EPCS.get(EPCS.keyAt(epci));
for (int epcni = 0; epcni < epc.size(); epcni++) {
topics.add(getTopic((short) className, String.valueOf(epc.keyAt(epcni))));
}
}
}
return topics;
}
}