diff options
| author | Pavel Maltsev <pavelm@google.com> | 2016-11-14 16:23:36 -0800 |
|---|---|---|
| committer | Pavel Maltsev <pavelm@google.com> | 2016-11-17 11:38:52 -0800 |
| commit | 30c84c3046cd82e885385e0c435d28033a5f9ece (patch) | |
| tree | 714a671c2f830608b9bbdc8b218ad2707838386a /vehicle | |
| parent | 62f5274b628e215d83c7ef1937a83bfd8efc6d6c (diff) | |
| download | android_hardware_interfaces-30c84c3046cd82e885385e0c435d28033a5f9ece.tar.gz android_hardware_interfaces-30c84c3046cd82e885385e0c435d28033a5f9ece.tar.bz2 android_hardware_interfaces-30c84c3046cd82e885385e0c435d28033a5f9ece.zip | |
Add more HVAC properties to default vehicle HAL
Bug: b/32949617
Test: manually using Hvac app
Change-Id: Id65921f29828f6b0dc23cc589672e877aa969ae1
Diffstat (limited to 'vehicle')
| -rw-r--r-- | vehicle/2.0/IVehicleCallback.hal | 2 | ||||
| -rw-r--r-- | vehicle/2.0/default/android.hardware.vehicle@2.0-service.rc | 2 | ||||
| -rw-r--r-- | vehicle/2.0/default/impl/DefaultConfig.h | 104 | ||||
| -rw-r--r-- | vehicle/2.0/default/impl/DefaultVehicleHal.cpp | 120 | ||||
| -rw-r--r-- | vehicle/2.0/default/impl/DefaultVehicleHal.h | 20 |
5 files changed, 211 insertions, 37 deletions
diff --git a/vehicle/2.0/IVehicleCallback.hal b/vehicle/2.0/IVehicleCallback.hal index 504f78201..e7e05bfc9 100644 --- a/vehicle/2.0/IVehicleCallback.hal +++ b/vehicle/2.0/IVehicleCallback.hal @@ -32,7 +32,7 @@ interface IVehicleCallback { oneway onPropertyEvent(vec<VehiclePropValue> propValues); /* - * This method gets called if the client was susbscribed to a property using + * This method gets called if the client was subscribed to a property using * SubscribeFlags::SET_CALL flag and IVehicle#set(...) method was called. * * These events must be delivered to subscriber immediately without any diff --git a/vehicle/2.0/default/android.hardware.vehicle@2.0-service.rc b/vehicle/2.0/default/android.hardware.vehicle@2.0-service.rc index c4a8f8310..7c96da68c 100644 --- a/vehicle/2.0/default/android.hardware.vehicle@2.0-service.rc +++ b/vehicle/2.0/default/android.hardware.vehicle@2.0-service.rc @@ -1,4 +1,4 @@ service vehicle-hal-2.0 /system/bin/hw/android.hardware.vehicle@2.0-service class hal user system - group system readproc + group system diff --git a/vehicle/2.0/default/impl/DefaultConfig.h b/vehicle/2.0/default/impl/DefaultConfig.h index e620c2863..7985737ea 100644 --- a/vehicle/2.0/default/impl/DefaultConfig.h +++ b/vehicle/2.0/default/impl/DefaultConfig.h @@ -18,6 +18,7 @@ #define android_hardware_vehicle_V2_0_impl_DefaultConfig_H_ #include <android/hardware/vehicle/2.0/IVehicle.h> +#include <vehicle_hal_manager/VehicleUtils.h> namespace android { namespace hardware { @@ -35,23 +36,102 @@ const VehiclePropConfig kVehicleProperties[] = { }, { + .prop = VehicleProperty::HVAC_POWER_ON, + .access = VehiclePropertyAccess::READ_WRITE, + .changeMode = VehiclePropertyChangeMode::ON_CHANGE, + .permissionModel = VehiclePermissionModel::NO_RESTRICTION, + .supportedAreas = toInt(VehicleAreaZone::ROW_1) + }, + + { + .prop = VehicleProperty::HVAC_DEFROSTER, + .access = VehiclePropertyAccess::READ_WRITE, + .changeMode = VehiclePropertyChangeMode::ON_CHANGE, + .permissionModel = VehiclePermissionModel::NO_RESTRICTION, + .supportedAreas = + VehicleAreaWindow::FRONT_WINDSHIELD + | VehicleAreaWindow::REAR_WINDSHIELD + }, + + { + .prop = VehicleProperty::HVAC_RECIRC_ON, + .access = VehiclePropertyAccess::READ_WRITE, + .changeMode = VehiclePropertyChangeMode::ON_CHANGE, + .permissionModel = VehiclePermissionModel::NO_RESTRICTION, + .supportedAreas = toInt(VehicleAreaZone::ROW_1) + }, + + { + .prop = VehicleProperty::HVAC_AC_ON, + .access = VehiclePropertyAccess::READ_WRITE, + .changeMode = VehiclePropertyChangeMode::ON_CHANGE, + .permissionModel = VehiclePermissionModel::NO_RESTRICTION, + .supportedAreas = toInt(VehicleAreaZone::ROW_1) + }, + + { + .prop = VehicleProperty::HVAC_AUTO_ON, + .access = VehiclePropertyAccess::READ_WRITE, + .changeMode = VehiclePropertyChangeMode::ON_CHANGE, + .permissionModel = VehiclePermissionModel::NO_RESTRICTION, + .supportedAreas = toInt(VehicleAreaZone::ROW_1) + }, + + { .prop = VehicleProperty::HVAC_FAN_SPEED, .access = VehiclePropertyAccess::READ_WRITE, .changeMode = VehiclePropertyChangeMode::ON_CHANGE, .permissionModel = VehiclePermissionModel::NO_RESTRICTION, - .supportedAreas = static_cast<int32_t>( - VehicleAreaZone::ROW_1_LEFT | VehicleAreaZone::ROW_1_RIGHT), + .supportedAreas = toInt(VehicleAreaZone::ROW_1), .areaConfigs = init_hidl_vec({ - VehicleAreaConfig { - .areaId = toInt(VehicleAreaZone::ROW_2_LEFT), - .minInt32Value = 1, - .maxInt32Value = 7}, - VehicleAreaConfig { - .areaId = toInt(VehicleAreaZone::ROW_1_RIGHT), - .minInt32Value = 1, - .maxInt32Value = 5, - } - }), + VehicleAreaConfig { + .areaId = toInt(VehicleAreaZone::ROW_1), + .minInt32Value = 1, + .maxInt32Value = 7 + }}) + }, + + { + .prop = VehicleProperty::HVAC_FAN_DIRECTION, + .access = VehiclePropertyAccess::READ_WRITE, + .changeMode = VehiclePropertyChangeMode::ON_CHANGE, + .permissionModel = VehiclePermissionModel::NO_RESTRICTION, + .supportedAreas = toInt(VehicleAreaZone::ROW_1), + }, + + { + .prop = VehicleProperty::HVAC_TEMPERATURE_SET, + .access = VehiclePropertyAccess::READ_WRITE, + .changeMode = VehiclePropertyChangeMode::ON_CHANGE, + .permissionModel = VehiclePermissionModel::NO_RESTRICTION, + .supportedAreas = + VehicleAreaZone::ROW_1_LEFT + | VehicleAreaZone::ROW_1_RIGHT, + .areaConfigs = init_hidl_vec({ + VehicleAreaConfig { + .areaId = toInt(VehicleAreaZone::ROW_1_LEFT), + .minFloatValue = 16, + .maxFloatValue = 32, + }, + VehicleAreaConfig { + .areaId = toInt(VehicleAreaZone::ROW_1_RIGHT), + .minFloatValue = 16, + .maxFloatValue = 32, + }}) + }, + + { + .prop = VehicleProperty::NIGHT_MODE, + .access = VehiclePropertyAccess::READ, + .changeMode = VehiclePropertyChangeMode::ON_CHANGE, + .permissionModel = VehiclePermissionModel::NO_RESTRICTION, + }, + + { + .prop = VehicleProperty::GEAR_SELECTION, + .access = VehiclePropertyAccess::READ, + .changeMode = VehiclePropertyChangeMode::ON_CHANGE, + .permissionModel = VehiclePermissionModel::NO_RESTRICTION, }, { diff --git a/vehicle/2.0/default/impl/DefaultVehicleHal.cpp b/vehicle/2.0/default/impl/DefaultVehicleHal.cpp index 24d438dc5..c56248b1c 100644 --- a/vehicle/2.0/default/impl/DefaultVehicleHal.cpp +++ b/vehicle/2.0/default/impl/DefaultVehicleHal.cpp @@ -30,23 +30,56 @@ VehicleHal::VehiclePropValuePtr DefaultVehicleHal::get( VehiclePropValuePtr v; VehicleProperty property = requestedPropValue.prop; int32_t areaId = requestedPropValue.areaId; + auto& pool = *getValuePool(); switch (property) { case VehicleProperty::INFO_MAKE: - v = getValuePool()->obtainString("Default Car"); + v = pool.obtainString("Default Car"); break; case VehicleProperty::HVAC_FAN_SPEED: - int32_t value; - *outStatus = getHvacFanSpeed(areaId, &value); + v = pool.obtainInt32(mFanSpeed); + break; + case VehicleProperty::HVAC_POWER_ON: + v = pool.obtainBoolean(mHvacPowerOn); + break; + case VehicleProperty::HVAC_RECIRC_ON: + v = pool.obtainBoolean(mHvacRecircOn); + break; + case VehicleProperty::HVAC_AC_ON: + v = pool.obtainBoolean(mHvacAcOn); + break; + case VehicleProperty::HVAC_AUTO_ON: + v = pool.obtainBoolean(mHvacAutoOn); + break; + case VehicleProperty::HVAC_FAN_DIRECTION: + v = pool.obtainInt32(toInt(mFanDirection)); + break; + case VehicleProperty::HVAC_DEFROSTER: + bool defroster; + *outStatus = getHvacDefroster(areaId, &defroster); + if (StatusCode::OK == *outStatus) { + v = pool.obtainBoolean(defroster); + } + break; + case VehicleProperty::HVAC_TEMPERATURE_SET: + float value; + *outStatus = getHvacTemperature(requestedPropValue.areaId, + &value); if (StatusCode::OK == *outStatus) { - v = getValuePool()->obtainInt32(value); + v = pool.obtainFloat(value); } break; case VehicleProperty::INFO_FUEL_CAPACITY: - v = getValuePool()->obtainFloat(0.75f); + v = pool.obtainFloat(0.75f); break; case VehicleProperty::DISPLAY_BRIGHTNESS: - v = getValuePool()->obtainInt32(brightness); + v = pool.obtainInt32(mBrightness); + break; + case VehicleProperty::NIGHT_MODE: + v = pool.obtainBoolean(false); + break; + case VehicleProperty::GEAR_SELECTION: + v = pool.obtainInt32(toInt(VehicleGear::GEAR_PARK)); break; default: *outStatus = StatusCode::INVALID_ARG; @@ -63,16 +96,38 @@ VehicleHal::VehiclePropValuePtr DefaultVehicleHal::get( StatusCode DefaultVehicleHal::set(const VehiclePropValue& propValue) { auto property = propValue.prop; + const auto& v = propValue.value; StatusCode status = StatusCode::OK; switch (property) { + case VehicleProperty::HVAC_POWER_ON: + mHvacPowerOn = v.int32Values[0] == 1; + break; + case VehicleProperty::HVAC_RECIRC_ON: + mHvacRecircOn = v.int32Values[0] == 1; + break; + case VehicleProperty::HVAC_AC_ON: + mHvacAcOn = v.int32Values[0] == 1; + break; + case VehicleProperty::HVAC_AUTO_ON: + mHvacAutoOn = v.int32Values[0] == 1; + break; + case VehicleProperty::HVAC_DEFROSTER: + status = setHvacDefroster(propValue.areaId, v.int32Values[0] == 1); + break; + case VehicleProperty::HVAC_FAN_DIRECTION: + mFanDirection = + static_cast<VehicleHvacFanDirection>(v.int32Values[0]); + break; case VehicleProperty::HVAC_FAN_SPEED: - status = setHvacFanSpeed(propValue.areaId, - propValue.value.int32Values[0]); + mFanSpeed = v.int32Values[0]; + break; + case VehicleProperty::HVAC_TEMPERATURE_SET: + status = setHvacTemperature(propValue.areaId, v.floatValues[0]); break; case VehicleProperty::DISPLAY_BRIGHTNESS: - brightness = propValue.value.int32Values[0]; + mBrightness = v.int32Values[0]; break; default: status = StatusCode::INVALID_ARG; @@ -81,23 +136,52 @@ StatusCode DefaultVehicleHal::set(const VehiclePropValue& propValue) { return status; } -StatusCode DefaultVehicleHal::getHvacFanSpeed(int32_t areaId, - int32_t* outValue) { +StatusCode DefaultVehicleHal::getHvacTemperature(int32_t areaId, + float* outValue) { if (areaId == toInt(VehicleAreaZone::ROW_1_LEFT)) { - *outValue = fanSpeedRow1Left; - } else if (areaId == toInt(VehicleAreaZone::ROW_2_RIGHT)) { - *outValue = fanSpeedRow1Right; + *outValue = mRow1LeftHvacTemperatureSet; + } else if (areaId == toInt(VehicleAreaZone::ROW_1_RIGHT)) { + *outValue = mRow1RightHvacTemperatureSet; } else { return StatusCode::INVALID_ARG; } return StatusCode::OK; } -StatusCode DefaultVehicleHal::setHvacFanSpeed(int32_t areaId, int32_t value) { +StatusCode DefaultVehicleHal::setHvacTemperature( + int32_t areaId, float value) { if (areaId == toInt(VehicleAreaZone::ROW_1_LEFT)) { - fanSpeedRow1Left = value; - } else if (areaId == toInt(VehicleAreaZone::ROW_2_RIGHT)) { - fanSpeedRow1Right = value; + mRow1LeftHvacTemperatureSet = value; + } else if (areaId == toInt(VehicleAreaZone::ROW_1_RIGHT)) { + mRow1RightHvacTemperatureSet = value; + } else { + return StatusCode::INVALID_ARG; + } + return StatusCode::OK; +} + +StatusCode DefaultVehicleHal::getHvacDefroster(int32_t areaId, + bool* outValue) { + ALOGI("Getting Hvac defroster for area: 0x%x", areaId); + + if (areaId == toInt(VehicleAreaWindow::FRONT_WINDSHIELD)) { + *outValue = mFrontDefroster; + } else if (areaId == toInt(VehicleAreaWindow::REAR_WINDSHIELD)) { + *outValue = mRearDefroster; + } else { + ALOGE("Unable to get hvac defroster for area: 0x%x", areaId); + return StatusCode::INVALID_ARG; + } + + ALOGI("Getting Hvac defroster for area: 0x%x, OK", areaId); + return StatusCode::OK; +} + +StatusCode DefaultVehicleHal::setHvacDefroster(int32_t areaId, bool value) { + if (areaId == toInt(VehicleAreaWindow::FRONT_WINDSHIELD)) { + mFrontDefroster = value; + } else if (areaId == toInt(VehicleAreaWindow::REAR_WINDSHIELD)) { + mRearDefroster = value; } else { return StatusCode::INVALID_ARG; } diff --git a/vehicle/2.0/default/impl/DefaultVehicleHal.h b/vehicle/2.0/default/impl/DefaultVehicleHal.h index 4a81da35c..231f2b24f 100644 --- a/vehicle/2.0/default/impl/DefaultVehicleHal.h +++ b/vehicle/2.0/default/impl/DefaultVehicleHal.h @@ -53,12 +53,22 @@ public: } private: - StatusCode getHvacFanSpeed(int32_t areaId, int32_t* outValue); - StatusCode setHvacFanSpeed(int32_t areaId, int32_t value); + StatusCode getHvacTemperature(int32_t areaId, float* outValue); + StatusCode setHvacTemperature(int32_t areaId, float value); + StatusCode getHvacDefroster(int32_t areaId, bool* outValue); + StatusCode setHvacDefroster(int32_t areaId, bool value); private: - int32_t fanSpeedRow1Left = 3; - int32_t fanSpeedRow1Right = 5; - int32_t brightness = 7; + int32_t mFanSpeed = 3; + int32_t mBrightness = 7; + float mRow1LeftHvacTemperatureSet = 16; + float mRow1RightHvacTemperatureSet = 22; + bool mFrontDefroster = false; + bool mRearDefroster = false; + bool mHvacPowerOn = true; + bool mHvacRecircOn = true; + bool mHvacAcOn = true; + bool mHvacAutoOn = true; + VehicleHvacFanDirection mFanDirection = VehicleHvacFanDirection::FACE; }; } // impl |
