in tools/android-app/app/src/main/java/com/aws/iotfleetwise/FweApplication.java [304:382]
private void serviceCarProperties()
{
List<String> supportedProps = new ArrayList<>();
int[][] propInfo = Fwe.getVehiclePropertyInfo();
int[] propIds = getVehiclePropertyIds(propInfo);
for (int propId : propIds) {
String propName = VehiclePropertyIds.toString(propId);
CarPropertyConfig config = mCarPropertyManager.getCarPropertyConfig(propId);
if (config == null) {
Log.d("serviceCarProperties", "Property unavailable: "+propName);
continue;
}
int[] areaIds = config.getAreaIds();
Class<?> clazz = config.getPropertyType();
for (int areaIndex = 0; areaIndex < areaIds.length; areaIndex++) {
int signalId = getVehiclePropertySignalId(propInfo, propId, areaIndex, 0);
if (signalId < 0) {
Log.d("serviceCarProperties", String.format("More area IDs (%d) than expected (%d) for %s", areaIds.length, areaIndex + 1, propName));
break;
}
CarPropertyValue propVal;
try {
propVal = mCarPropertyManager.getProperty(clazz, propId, areaIds[areaIndex]);
} catch (IllegalArgumentException ignored) {
Log.w("serviceCarProperties", String.format("Could not get %s 0x%X", propName, areaIds[areaIndex]));
continue;
} catch (SecurityException e) {
Log.w("serviceCarProperties", String.format("Access denied for %s 0x%X", propName, areaIds[areaIndex]));
continue;
}
if (areaIndex == 0) {
supportedProps.add(propName);
}
StringBuilder sb = new StringBuilder();
sb.append(String.format("%s 0x%X: ", propName, areaIds[areaIndex]));
if (clazz.equals(Boolean.class)) {
double val = (boolean) propVal.getValue() ? 1.0 : 0.0;
sb.append(val);
Fwe.setVehicleProperty(signalId, val);
} else if (clazz.equals(Integer.class) || clazz.equals(Float.class)) {
double val = ((Number)propVal.getValue()).doubleValue();
sb.append(val);
Fwe.setVehicleProperty(signalId, val);
} else if (clazz.equals(Long.class)) {
long val = ((Number)propVal.getValue()).longValue();
sb.append(val);
Fwe.setVehicleProperty(signalId, val);
} else if (clazz.equals(Integer[].class) || clazz.equals(Long[].class)) {
sb.append("[");
for (int resultIndex = 0; resultIndex < Array.getLength(propVal.getValue()); resultIndex++) {
if (resultIndex > 0) {
signalId = getVehiclePropertySignalId(propInfo, propId, areaIndex, resultIndex);
if (signalId < 0) {
Log.d("serviceCarProperties", String.format("More results (%d) than expected (%d) for %s 0x%X", Array.getLength(propVal.getValue()), resultIndex + 1, propName, areaIds[areaIndex]));
break;
}
}
long val = ((Number)Array.get(propVal.getValue(), resultIndex)).longValue();
if (resultIndex > 0) {
sb.append(", ");
}
sb.append(val);
Fwe.setVehicleProperty(signalId, val);
}
sb.append("]");
} else {
Log.w("serviceCarProperties", "Unsupported type " + clazz.toString() + " for " + propName);
continue;
}
Log.i("serviceCarProperties", sb.toString());
}
}
if ((mSupportedVehicleProperties == null) && (supportedProps.size() > 0)) {
Collections.sort(supportedProps);
synchronized (mSupportedSignalsLock) {
mSupportedVehicleProperties = supportedProps;
}
}
}