mirror of
https://github.com/S3NEO/android_device_samsung_msm8226-common.git
synced 2024-11-06 21:55:45 +00:00
adb: remove legacy support
we already integrated the new one in kernel
This commit is contained in:
parent
3876947d6b
commit
babea0063a
16 changed files with 968 additions and 127 deletions
|
@ -15,13 +15,8 @@
|
||||||
# Inherit from qcom-common
|
# Inherit from qcom-common
|
||||||
-include device/samsung/qcom-common/BoardConfigCommon.mk
|
-include device/samsung/qcom-common/BoardConfigCommon.mk
|
||||||
|
|
||||||
#-include vendor/qcom/proprietary/common/msm8226/BoardConfigVendor.mk
|
|
||||||
|
|
||||||
VENDOR_PATH := device/samsung/msm8226-common
|
VENDOR_PATH := device/samsung/msm8226-common
|
||||||
|
|
||||||
#QC_PROP_ROOT := vendor/qcom/proprietary
|
|
||||||
#PROTOBUF_SUPPORTED := true
|
|
||||||
|
|
||||||
include device/samsung/msm8226-common/board/*.mk
|
include device/samsung/msm8226-common/board/*.mk
|
||||||
|
|
||||||
TARGET_SPECIFIC_HEADER_PATH := $(VENDOR_PATH)/include
|
TARGET_SPECIFIC_HEADER_PATH := $(VENDOR_PATH)/include
|
||||||
|
@ -32,12 +27,14 @@ BOARD_HARDWARE_CLASS += $(VENDOR_PATH)/cmhw
|
||||||
# Filesystem
|
# Filesystem
|
||||||
TARGET_FS_CONFIG_GEN := device/samsung/msm8226-common/config.fs
|
TARGET_FS_CONFIG_GEN := device/samsung/msm8226-common/config.fs
|
||||||
|
|
||||||
#ADB
|
BOARD_USES_QCOM_HARDWARE := true
|
||||||
TARGET_USES_LEGACY_ADB_INTERFACE :=true
|
|
||||||
|
|
||||||
#HIDL
|
# HIDL
|
||||||
PRODUCT_COPY_FILES += \
|
DEVICE_MANIFEST_FILE := $(VENDOR_PATH)/manifest.xml
|
||||||
$(VENDOR_PATH)/manifest.xml:system/vendor/manifest.xml
|
DEVICE_MATRIX_FILE := $(VENDOR_PATH)/compatibility_matrix.xml
|
||||||
|
|
||||||
|
# Light
|
||||||
|
TARGET_PROVIDES_LIBLIGHT := true
|
||||||
|
|
||||||
# Fonts
|
# Fonts
|
||||||
EXTENDED_FONT_FOOTPRINT := true
|
EXTENDED_FONT_FOOTPRINT := true
|
||||||
|
|
86
compatibility_matrix.xml
Normal file
86
compatibility_matrix.xml
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
<compatibility-matrix version="1.0" type="device">
|
||||||
|
<hal format="hidl" optional="false">
|
||||||
|
<name>android.frameworks.displayservice</name>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>IDisplayService</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl" optional="false">
|
||||||
|
<name>android.frameworks.schedulerservice</name>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>ISchedulingPolicyService</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl" optional="false">
|
||||||
|
<name>android.frameworks.sensorservice</name>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>ISensorManager</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl" optional="false">
|
||||||
|
<name>android.hardware.graphics.composer</name>
|
||||||
|
<version>2.1</version>
|
||||||
|
<interface>
|
||||||
|
<name>IComposer</name>
|
||||||
|
<instance>vr</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl" optional="false">
|
||||||
|
<name>android.hidl.allocator</name>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>IAllocator</name>
|
||||||
|
<instance>ashmem</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl" optional="false">
|
||||||
|
<name>android.hidl.manager</name>
|
||||||
|
<version>1.1</version>
|
||||||
|
<interface>
|
||||||
|
<name>IServiceManager</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl" optional="false">
|
||||||
|
<name>android.hidl.memory</name>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>IMapper</name>
|
||||||
|
<instance>ashmem</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl" optional="false">
|
||||||
|
<name>android.hidl.token</name>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>ITokenManager</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl" optional="false">
|
||||||
|
<name>android.system.net.netd</name>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>INetd</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl" optional="false">
|
||||||
|
<name>android.system.wifi.keystore</name>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>IKeystore</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="native" optional="false">
|
||||||
|
<name>netutils-wrapper</name>
|
||||||
|
<version>1.0</version>
|
||||||
|
</hal>
|
||||||
|
</compatibility-matrix>
|
27
liblights/Android.mk
Normal file
27
liblights/Android.mk
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2014 The CyanogenMod Project
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
LOCAL_PATH:= $(call my-dir)
|
||||||
|
# HAL module implemenation stored in
|
||||||
|
# hw/<COPYPIX_HARDWARE_MODULE_ID>.<ro.board.platform>.so
|
||||||
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
|
LOCAL_SRC_FILES := lights.c
|
||||||
|
LOCAL_MODULE_RELATIVE_PATH := hw
|
||||||
|
LOCAL_SHARED_LIBRARIES := liblog libhardware
|
||||||
|
LOCAL_MODULE := lights.$(TARGET_BOARD_PLATFORM)
|
||||||
|
LOCAL_MODULE_TAGS := optional
|
||||||
|
LOCAL_VENDOR_MODULE := true
|
||||||
|
include $(BUILD_SHARED_LIBRARY)
|
190
liblights/NOTICE
Normal file
190
liblights/NOTICE
Normal file
|
@ -0,0 +1,190 @@
|
||||||
|
|
||||||
|
Copyright (c) 2014, The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
362
liblights/lights.c
Normal file
362
liblights/lights.c
Normal file
|
@ -0,0 +1,362 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2008 The Android Open Source Project
|
||||||
|
* Copyright (C) 2013 The CyanogenMod Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
//#define LOG_NDEBUG 0
|
||||||
|
#define LOG_TAG "lights"
|
||||||
|
#include <log/log.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <hardware/lights.h>
|
||||||
|
|
||||||
|
#define UNUSED __attribute__((unused))
|
||||||
|
|
||||||
|
static pthread_once_t g_init = PTHREAD_ONCE_INIT;
|
||||||
|
static pthread_mutex_t g_lock = PTHREAD_MUTEX_INITIALIZER;
|
||||||
|
|
||||||
|
char const*const PANEL_FILE = "/sys/class/leds/lcd-backlight/brightness";
|
||||||
|
char const*const BUTTON_FILE = "/sys/class/leds/button-backlight/brightness";
|
||||||
|
|
||||||
|
char const*const LED_BLINK = "/sys/class/sec/led/led_blink";
|
||||||
|
|
||||||
|
struct led_config {
|
||||||
|
unsigned int color;
|
||||||
|
int delay_on, delay_off;
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct led_config g_leds[3]; // For battery, notifications, and attention.
|
||||||
|
static int g_cur_led = -1; // Presently showing LED of the above.
|
||||||
|
|
||||||
|
void init_g_lock(void)
|
||||||
|
{
|
||||||
|
pthread_mutex_init(&g_lock, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int write_int(char const *path, int value)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
static int already_warned;
|
||||||
|
|
||||||
|
already_warned = 0;
|
||||||
|
|
||||||
|
ALOGV("write_int: path %s, value %d", path, value);
|
||||||
|
fd = open(path, O_RDWR);
|
||||||
|
|
||||||
|
if (fd >= 0) {
|
||||||
|
char buffer[20];
|
||||||
|
int bytes = sprintf(buffer, "%d\n", value);
|
||||||
|
int amt = write(fd, buffer, bytes);
|
||||||
|
close(fd);
|
||||||
|
return amt == -1 ? -errno : 0;
|
||||||
|
} else {
|
||||||
|
if (already_warned == 0) {
|
||||||
|
ALOGE("write_int failed to open %s\n", path);
|
||||||
|
already_warned = 1;
|
||||||
|
}
|
||||||
|
return -errno;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Currently unused.
|
||||||
|
static int read_int(char const *path)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
char buffer[2];
|
||||||
|
|
||||||
|
fd = open(path, O_RDONLY);
|
||||||
|
|
||||||
|
if (fd >= 0) {
|
||||||
|
read(fd, buffer, 1);
|
||||||
|
}
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
return atoi(buffer);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int write_str(char const *path, const char* value)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
static int already_warned;
|
||||||
|
|
||||||
|
already_warned = 0;
|
||||||
|
|
||||||
|
ALOGV("write_str: path %s, value %s", path, value);
|
||||||
|
fd = open(path, O_RDWR);
|
||||||
|
|
||||||
|
if (fd >= 0) {
|
||||||
|
int amt = write(fd, value, strlen(value));
|
||||||
|
close(fd);
|
||||||
|
return amt == -1 ? -errno : 0;
|
||||||
|
} else {
|
||||||
|
if (already_warned == 0) {
|
||||||
|
ALOGE("write_str failed to open %s\n", path);
|
||||||
|
already_warned = 1;
|
||||||
|
}
|
||||||
|
return -errno;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int rgb_to_brightness(struct light_state_t const *state)
|
||||||
|
{
|
||||||
|
int color = state->color & 0x00ffffff;
|
||||||
|
|
||||||
|
return ((77*((color>>16) & 0x00ff))
|
||||||
|
+ (150*((color>>8) & 0x00ff)) + (29*(color & 0x00ff))) >> 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Previously used by set_light_leds.
|
||||||
|
static int get_calibrated_color(struct light_state_t const *state, int brightness)
|
||||||
|
{
|
||||||
|
int red = (state->color >> 16) & 0xFF;
|
||||||
|
int green = ((state->color >> 8) & 0xFF) * 0.7;
|
||||||
|
int blue = (state->color & 0x00FF) * 0.8;
|
||||||
|
|
||||||
|
return (((red * brightness) / 255) << 16) + (((green * brightness) / 255) << 8) + ((blue * brightness) / 255);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int is_lit(struct light_state_t const* state)
|
||||||
|
{
|
||||||
|
return state->color & 0x00ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int set_light_backlight(UNUSED struct light_device_t *dev,
|
||||||
|
struct light_state_t const *state)
|
||||||
|
{
|
||||||
|
int err = 0;
|
||||||
|
int brightness = rgb_to_brightness(state);
|
||||||
|
|
||||||
|
pthread_mutex_lock(&g_lock);
|
||||||
|
err = write_int(PANEL_FILE, brightness);
|
||||||
|
|
||||||
|
pthread_mutex_unlock(&g_lock);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
set_light_buttons(UNUSED struct light_device_t* dev,
|
||||||
|
struct light_state_t const* state)
|
||||||
|
{
|
||||||
|
int err = 0;
|
||||||
|
int on = is_lit(state);
|
||||||
|
|
||||||
|
pthread_mutex_lock(&g_lock);
|
||||||
|
err = write_int(BUTTON_FILE, on?1:0);
|
||||||
|
pthread_mutex_unlock(&g_lock);
|
||||||
|
|
||||||
|
return err;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static int close_lights(struct light_device_t *dev)
|
||||||
|
{
|
||||||
|
ALOGV("close_light is called");
|
||||||
|
if (dev)
|
||||||
|
free(dev);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* LEDs */
|
||||||
|
static int write_leds(const struct led_config *led)
|
||||||
|
{
|
||||||
|
static const struct led_config led_off = {0, 0, 0};
|
||||||
|
|
||||||
|
char blink[32];
|
||||||
|
int count, err;
|
||||||
|
|
||||||
|
if (led == NULL)
|
||||||
|
led = &led_off;
|
||||||
|
|
||||||
|
if ((count = snprintf(blink, sizeof(blink)-1, "0x%08x %d %d", led->color,
|
||||||
|
led->delay_on, led->delay_off)) < 0) {
|
||||||
|
return -errno;
|
||||||
|
} else if ((unsigned int)count >= sizeof(blink)-1) {
|
||||||
|
ALOGE("%s: Truncated string: blink=\"%s\".", __func__, blink);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ALOGD("%s: color=0x%08x, delay_on=%d, delay_off=%d, blink=\"%s\".",
|
||||||
|
__func__, led->color, led->delay_on, led->delay_off, blink);
|
||||||
|
|
||||||
|
/* Add '\n' here to make the above log message clean. */
|
||||||
|
blink[count] = '\n';
|
||||||
|
blink[count+1] = '\0';
|
||||||
|
|
||||||
|
pthread_mutex_lock(&g_lock);
|
||||||
|
err = write_str(LED_BLINK, blink);
|
||||||
|
pthread_mutex_unlock(&g_lock);
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int set_light_leds(struct light_state_t const *state, int type)
|
||||||
|
{
|
||||||
|
struct led_config *led;
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
|
ALOGD("%s: type=%d, color=0x%010x, fM=%d, fOnMS=%d, fOffMs=%d.", __func__,
|
||||||
|
type, state->color,state->flashMode, state->flashOnMS, state->flashOffMS);
|
||||||
|
|
||||||
|
if (type < 0 || (unsigned int)type >= sizeof(g_leds)/sizeof(g_leds[0]))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
/* type is one of:
|
||||||
|
* 0. battery
|
||||||
|
* 1. notifications
|
||||||
|
* 2. attention
|
||||||
|
* which are multiplexed onto the same physical LED in the above order. */
|
||||||
|
led = &g_leds[type];
|
||||||
|
|
||||||
|
switch (state->flashMode) {
|
||||||
|
case LIGHT_FLASH_NONE:
|
||||||
|
/* Set LED to a solid color, spec is unclear on the exact behavior here. */
|
||||||
|
led->delay_on = led->delay_off = 0;
|
||||||
|
break;
|
||||||
|
case LIGHT_FLASH_TIMED:
|
||||||
|
case LIGHT_FLASH_HARDWARE:
|
||||||
|
led->delay_on = state->flashOnMS;
|
||||||
|
led->delay_off = state->flashOffMS;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
led->color = state->color & 0x00ffffff;
|
||||||
|
|
||||||
|
if (led->color > 0) {
|
||||||
|
/* This LED is lit. */
|
||||||
|
if (type >= g_cur_led) {
|
||||||
|
/* And it has the highest priority, so show it. */
|
||||||
|
err = write_leds(led);
|
||||||
|
g_cur_led = type;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* This LED is not (any longer) lit. */
|
||||||
|
if (type == g_cur_led) {
|
||||||
|
/* But it is currently showing, switch to a lower-priority LED. */
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = type-1; i >= 0; i--) {
|
||||||
|
if (g_leds[i].color > 0) {
|
||||||
|
/* Found a lower-priority LED to switch to. */
|
||||||
|
err = write_leds(&g_leds[i]);
|
||||||
|
goto switched;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* No LEDs are lit, turn off. */
|
||||||
|
err = write_leds(NULL);
|
||||||
|
switched:
|
||||||
|
g_cur_led = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int set_light_leds_battery(UNUSED struct light_device_t *dev,
|
||||||
|
struct light_state_t const *state)
|
||||||
|
{
|
||||||
|
return set_light_leds(state, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int set_light_leds_notifications(UNUSED struct light_device_t *dev,
|
||||||
|
struct light_state_t const *state)
|
||||||
|
{
|
||||||
|
return set_light_leds(state, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int set_light_leds_attention(UNUSED struct light_device_t *dev,
|
||||||
|
struct light_state_t const *state)
|
||||||
|
{
|
||||||
|
struct light_state_t fixed;
|
||||||
|
|
||||||
|
memcpy(&fixed, state, sizeof(fixed));
|
||||||
|
|
||||||
|
/* The framework does odd things with the attention lights, fix them up to
|
||||||
|
* do something sensible here. */
|
||||||
|
switch (fixed.flashMode) {
|
||||||
|
case LIGHT_FLASH_NONE:
|
||||||
|
/* LightsService.Light::stopFlashing calls with non-zero color. */
|
||||||
|
fixed.color = 0;
|
||||||
|
break;
|
||||||
|
case LIGHT_FLASH_HARDWARE:
|
||||||
|
/* PowerManagerService::setAttentionLight calls with onMS=3, offMS=0, which
|
||||||
|
* just makes for a slightly-dimmer LED. */
|
||||||
|
if (fixed.flashOnMS > 0 && fixed.flashOffMS == 0)
|
||||||
|
fixed.flashMode = LIGHT_FLASH_NONE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return set_light_leds(&fixed, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int open_lights(const struct hw_module_t *module, char const *name,
|
||||||
|
struct hw_device_t **device)
|
||||||
|
{
|
||||||
|
int (*set_light)(struct light_device_t *dev,
|
||||||
|
struct light_state_t const *state);
|
||||||
|
|
||||||
|
if (0 == strcmp(LIGHT_ID_BACKLIGHT, name))
|
||||||
|
set_light = set_light_backlight;
|
||||||
|
else if (0 == strcmp(LIGHT_ID_BUTTONS, name))
|
||||||
|
set_light = set_light_buttons;
|
||||||
|
else if (0 == strcmp(LIGHT_ID_BATTERY, name))
|
||||||
|
set_light = set_light_leds_battery;
|
||||||
|
else if (0 == strcmp(LIGHT_ID_NOTIFICATIONS, name))
|
||||||
|
set_light = set_light_leds_notifications;
|
||||||
|
else if (0 == strcmp(LIGHT_ID_ATTENTION, name))
|
||||||
|
set_light = set_light_leds_attention;
|
||||||
|
else
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
pthread_once(&g_init, init_g_lock);
|
||||||
|
|
||||||
|
struct light_device_t *dev = malloc(sizeof(struct light_device_t));
|
||||||
|
memset(dev, 0, sizeof(*dev));
|
||||||
|
|
||||||
|
dev->common.tag = HARDWARE_DEVICE_TAG;
|
||||||
|
dev->common.version = 0;
|
||||||
|
dev->common.module = (struct hw_module_t *)module;
|
||||||
|
dev->common.close = (int (*)(struct hw_device_t *))close_lights;
|
||||||
|
dev->set_light = set_light;
|
||||||
|
|
||||||
|
*device = (struct hw_device_t *)dev;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct hw_module_methods_t lights_module_methods = {
|
||||||
|
.open = open_lights,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct hw_module_t HAL_MODULE_INFO_SYM = {
|
||||||
|
.tag = HARDWARE_MODULE_TAG,
|
||||||
|
.version_major = 1,
|
||||||
|
.version_minor = 0,
|
||||||
|
.id = LIGHTS_HARDWARE_MODULE_ID,
|
||||||
|
.name = "D2 Lights Module",
|
||||||
|
.author = "The CyanogenMod Project",
|
||||||
|
.methods = &lights_module_methods,
|
||||||
|
};
|
220
manifest.xml
220
manifest.xml
|
@ -1,37 +1,51 @@
|
||||||
<manifest version="1.0" type="device">
|
<manifest version="1.0" type="device">
|
||||||
<hal format="hidl">
|
<hal format="hidl">
|
||||||
<name>android.hardware.graphics.allocator</name>
|
<name>android.hardware.audio</name>
|
||||||
<transport arch="32">passthrough</transport>
|
|
||||||
<version>2.0</version>
|
|
||||||
<interface>
|
|
||||||
<name>IAllocator</name>
|
|
||||||
<instance>default</instance>
|
|
||||||
</interface>
|
|
||||||
</hal>
|
|
||||||
<hal format="hidl">
|
|
||||||
<name>android.hardware.light</name>
|
|
||||||
<transport arch="32">passthrough</transport>
|
|
||||||
<version>2.0</version>
|
|
||||||
<interface>
|
|
||||||
<name>ILight</name>
|
|
||||||
<instance>default</instance>
|
|
||||||
</interface>
|
|
||||||
</hal>
|
|
||||||
<hal format="hidl">
|
|
||||||
<name>android.hardware.wifi</name>
|
|
||||||
<transport>hwbinder</transport>
|
<transport>hwbinder</transport>
|
||||||
<version>1.1</version>
|
<version>2.0</version>
|
||||||
<interface>
|
<interface>
|
||||||
<name>IWifi</name>
|
<name>IDevicesFactory</name>
|
||||||
<instance>default</instance>
|
<instance>default</instance>
|
||||||
</interface>
|
</interface>
|
||||||
</hal>
|
</hal>
|
||||||
<hal format="hidl">
|
<hal format="hidl">
|
||||||
<name>android.hardware.wifi.supplicant</name>
|
<name>android.hardware.audio.effect</name>
|
||||||
|
<transport>hwbinder</transport>
|
||||||
|
<version>2.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>IEffectsFactory</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.bluetooth</name>
|
||||||
<transport>hwbinder</transport>
|
<transport>hwbinder</transport>
|
||||||
<version>1.0</version>
|
<version>1.0</version>
|
||||||
<interface>
|
<interface>
|
||||||
<name>ISupplicant</name>
|
<name>IBluetoothHci</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.broadcastradio</name>
|
||||||
|
<transport arch="32">passthrough</transport>
|
||||||
|
<version>1.0</version>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.camera.provider</name>
|
||||||
|
<transport>hwbinder</transport>
|
||||||
|
<version>2.4</version>
|
||||||
|
<interface>
|
||||||
|
<name>ICameraProvider</name>
|
||||||
|
<instance>legacy/0</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.cas</name>
|
||||||
|
<transport>hwbinder</transport>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>IMediaCasService</name>
|
||||||
<instance>default</instance>
|
<instance>default</instance>
|
||||||
</interface>
|
</interface>
|
||||||
</hal>
|
</hal>
|
||||||
|
@ -44,6 +58,46 @@
|
||||||
<instance>default</instance>
|
<instance>default</instance>
|
||||||
</interface>
|
</interface>
|
||||||
</hal>
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.drm</name>
|
||||||
|
<transport>hwbinder</transport>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>ICryptoFactory</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
<interface>
|
||||||
|
<name>IDrmFactory</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.gnss</name>
|
||||||
|
<transport>hwbinder</transport>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>IGnss</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.graphics.allocator</name>
|
||||||
|
<transport>hwbinder</transport>
|
||||||
|
<version>2.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>IAllocator</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.graphics.composer</name>
|
||||||
|
<transport>hwbinder</transport>
|
||||||
|
<version>2.1</version>
|
||||||
|
<interface>
|
||||||
|
<name>IComposer</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
<hal format="hidl">
|
<hal format="hidl">
|
||||||
<name>android.hardware.graphics.mapper</name>
|
<name>android.hardware.graphics.mapper</name>
|
||||||
<transport arch="32">passthrough</transport>
|
<transport arch="32">passthrough</transport>
|
||||||
|
@ -53,9 +107,49 @@
|
||||||
<instance>default</instance>
|
<instance>default</instance>
|
||||||
</interface>
|
</interface>
|
||||||
</hal>
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.keymaster</name>
|
||||||
|
<transport>hwbinder</transport>
|
||||||
|
<version>3.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>IKeymasterDevice</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.light</name>
|
||||||
|
<transport>hwbinder</transport>
|
||||||
|
<version>2.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>ILight</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.media.omx</name>
|
||||||
|
<transport>hwbinder</transport>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>IOmx</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
<interface>
|
||||||
|
<name>IOmxStore</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.memtrack</name>
|
||||||
|
<transport>hwbinder</transport>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>IMemtrack</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
<hal format="hidl">
|
<hal format="hidl">
|
||||||
<name>android.hardware.nfc</name>
|
<name>android.hardware.nfc</name>
|
||||||
<transport arch="32">passthrough</transport>
|
<transport>hwbinder</transport>
|
||||||
<version>1.0</version>
|
<version>1.0</version>
|
||||||
<interface>
|
<interface>
|
||||||
<name>INfc</name>
|
<name>INfc</name>
|
||||||
|
@ -63,11 +157,11 @@
|
||||||
</interface>
|
</interface>
|
||||||
</hal>
|
</hal>
|
||||||
<hal format="hidl">
|
<hal format="hidl">
|
||||||
<name>android.hardware.sensors</name>
|
<name>android.hardware.power</name>
|
||||||
<transport arch="32">passthrough</transport>
|
<transport>hwbinder</transport>
|
||||||
<version>1.0</version>
|
<version>1.0</version>
|
||||||
<interface>
|
<interface>
|
||||||
<name>ISensors</name>
|
<name>IPower</name>
|
||||||
<instance>default</instance>
|
<instance>default</instance>
|
||||||
</interface>
|
</interface>
|
||||||
</hal>
|
</hal>
|
||||||
|
@ -93,4 +187,76 @@
|
||||||
<instance>slot1</instance>
|
<instance>slot1</instance>
|
||||||
</interface>
|
</interface>
|
||||||
</hal>
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.renderscript</name>
|
||||||
|
<transport arch="32">passthrough</transport>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>IDevice</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.sensors</name>
|
||||||
|
<transport>hwbinder</transport>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>ISensors</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.soundtrigger</name>
|
||||||
|
<transport>hwbinder</transport>
|
||||||
|
<version>2.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>ISoundTriggerHw</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.usb</name>
|
||||||
|
<transport>hwbinder</transport>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>IUsb</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.vibrator</name>
|
||||||
|
<transport>hwbinder</transport>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>IVibrator</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.wifi</name>
|
||||||
|
<transport>hwbinder</transport>
|
||||||
|
<version>1.1</version>
|
||||||
|
<interface>
|
||||||
|
<name>IWifi</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.wifi.supplicant</name>
|
||||||
|
<transport>hwbinder</transport>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>ISupplicant</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
<hal format="hidl">
|
||||||
|
<name>android.hardware.gatekeeper</name>
|
||||||
|
<transport arch="32">passthrough</transport>
|
||||||
|
<version>1.0</version>
|
||||||
|
<interface>
|
||||||
|
<name>IGatekeeper</name>
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|
|
@ -193,7 +193,7 @@ PRODUCT_PACKAGES += \
|
||||||
|
|
||||||
# Vibrator
|
# Vibrator
|
||||||
PRODUCT_PACKAGES += \
|
PRODUCT_PACKAGES += \
|
||||||
android.hardware.vibrator@1.0-impl
|
android.hardware.vibrator@1.0-service.lineage
|
||||||
|
|
||||||
# USB HAL
|
# USB HAL
|
||||||
PRODUCT_PACKAGES += \
|
PRODUCT_PACKAGES += \
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright 2019 The LineageOS Project
|
# Copyright 2016 The CyanogenMod Project
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# you may not use this file except in compliance with the License.
|
# you may not use this file except in compliance with the License.
|
||||||
|
@ -18,7 +18,7 @@ LOCAL_PATH:= $(call my-dir)
|
||||||
include $(CLEAR_VARS)
|
include $(CLEAR_VARS)
|
||||||
LOCAL_C_INCLUDES := $(TARGET_POWERHAL_HEADER_PATH)
|
LOCAL_C_INCLUDES := $(TARGET_POWERHAL_HEADER_PATH)
|
||||||
LOCAL_SRC_FILES := power.c
|
LOCAL_SRC_FILES := power.c
|
||||||
LOCAL_SHARED_LIBRARIES := liblog libcutils
|
LOCAL_SHARED_LIBRARIES := liblog libcutils libhardware
|
||||||
LOCAL_MODULE_RELATIVE_PATH := hw
|
LOCAL_MODULE_RELATIVE_PATH := hw
|
||||||
LOCAL_MODULE_TAGS := optional
|
LOCAL_MODULE_TAGS := optional
|
||||||
LOCAL_MODULE := power.msm8226
|
LOCAL_MODULE := power.msm8226
|
||||||
|
|
|
@ -23,7 +23,8 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <utils/Log.h>
|
#include <log/log.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
#include "power.h"
|
#include "power.h"
|
||||||
|
|
||||||
|
@ -38,7 +39,8 @@
|
||||||
static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
|
static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
|
||||||
static int boostpulse_fd = -1;
|
static int boostpulse_fd = -1;
|
||||||
|
|
||||||
static int current_power_profile = -1;
|
// Balanced profile by default
|
||||||
|
static int current_power_profile = 1;
|
||||||
static int requested_power_profile = -1;
|
static int requested_power_profile = -1;
|
||||||
|
|
||||||
static int sysfs_write_str(char *path, char *s)
|
static int sysfs_write_str(char *path, char *s)
|
||||||
|
@ -103,68 +105,16 @@ static void power_set_interactive_ext(int on) {
|
||||||
|
|
||||||
static void power_set_interactive(__attribute__((unused)) struct power_module *module, int on)
|
static void power_set_interactive(__attribute__((unused)) struct power_module *module, int on)
|
||||||
{
|
{
|
||||||
if (!is_profile_valid(current_power_profile)) {
|
/* We want to first set the input device state otherwise
|
||||||
ALOGD("%s: no power profile selected yet", __func__);
|
* it never gets turned off/on when our HAL isnt compatible with the power_profiles from
|
||||||
return;
|
* our framework
|
||||||
}
|
*/
|
||||||
|
|
||||||
power_set_interactive_ext(on);
|
power_set_interactive_ext(on);
|
||||||
|
|
||||||
if (on) {
|
|
||||||
sysfs_write_int(INTERACTIVE_PATH "hispeed_freq",
|
|
||||||
profiles[current_power_profile].hispeed_freq);
|
|
||||||
sysfs_write_int(INTERACTIVE_PATH "go_hispeed_load",
|
|
||||||
profiles[current_power_profile].go_hispeed_load);
|
|
||||||
sysfs_write_int(INTERACTIVE_PATH "target_loads",
|
|
||||||
profiles[current_power_profile].target_loads);
|
|
||||||
sysfs_write_int(CPUFREQ_PATH "scaling_min_freq",
|
|
||||||
profiles[current_power_profile].scaling_min_freq);
|
|
||||||
} else {
|
|
||||||
sysfs_write_int(INTERACTIVE_PATH "hispeed_freq",
|
|
||||||
profiles[current_power_profile].hispeed_freq_off);
|
|
||||||
sysfs_write_int(INTERACTIVE_PATH "go_hispeed_load",
|
|
||||||
profiles[current_power_profile].go_hispeed_load_off);
|
|
||||||
sysfs_write_int(INTERACTIVE_PATH "target_loads",
|
|
||||||
profiles[current_power_profile].target_loads_off);
|
|
||||||
sysfs_write_int(CPUFREQ_PATH "scaling_min_freq",
|
|
||||||
profiles[current_power_profile].scaling_min_freq_off);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_power_profile(int profile)
|
static void set_power_profile(__attribute__((unused)) int profile)
|
||||||
{
|
{
|
||||||
if (!is_profile_valid(profile)) {
|
return;
|
||||||
ALOGE("%s: unknown profile: %d", __func__, profile);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (profile == current_power_profile)
|
|
||||||
return;
|
|
||||||
|
|
||||||
ALOGD("%s: setting profile %d", __func__, profile);
|
|
||||||
|
|
||||||
sysfs_write_int(INTERACTIVE_PATH "boost",
|
|
||||||
profiles[profile].boost);
|
|
||||||
sysfs_write_int(INTERACTIVE_PATH "boostpulse_duration",
|
|
||||||
profiles[profile].boostpulse_duration);
|
|
||||||
sysfs_write_int(INTERACTIVE_PATH "go_hispeed_load",
|
|
||||||
profiles[profile].go_hispeed_load);
|
|
||||||
sysfs_write_int(INTERACTIVE_PATH "hispeed_freq",
|
|
||||||
profiles[profile].hispeed_freq);
|
|
||||||
sysfs_write_int(INTERACTIVE_PATH "min_sample_time",
|
|
||||||
profiles[profile].min_sample_time);
|
|
||||||
sysfs_write_int(INTERACTIVE_PATH "timer_rate",
|
|
||||||
profiles[profile].timer_rate);
|
|
||||||
sysfs_write_int(INTERACTIVE_PATH "above_hispeed_delay",
|
|
||||||
profiles[profile].above_hispeed_delay);
|
|
||||||
sysfs_write_int(INTERACTIVE_PATH "target_loads",
|
|
||||||
profiles[profile].target_loads);
|
|
||||||
sysfs_write_int(CPUFREQ_PATH "scaling_max_freq",
|
|
||||||
profiles[profile].scaling_max_freq);
|
|
||||||
sysfs_write_int(CPUFREQ_PATH "scaling_min_freq",
|
|
||||||
profiles[profile].scaling_min_freq);
|
|
||||||
|
|
||||||
current_power_profile = profile;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void power_hint(__attribute__((unused)) struct power_module *module,
|
static void power_hint(__attribute__((unused)) struct power_module *module,
|
||||||
|
@ -175,28 +125,6 @@ static void power_hint(__attribute__((unused)) struct power_module *module,
|
||||||
|
|
||||||
switch (hint) {
|
switch (hint) {
|
||||||
case POWER_HINT_INTERACTION:
|
case POWER_HINT_INTERACTION:
|
||||||
if (!is_profile_valid(current_power_profile)) {
|
|
||||||
ALOGD("%s: no power profile selected yet", __func__);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!profiles[current_power_profile].boostpulse_duration)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (boostpulse_open() >= 0) {
|
|
||||||
snprintf(buf, sizeof(buf), "%d", 1);
|
|
||||||
len = write(boostpulse_fd, &buf, sizeof(buf));
|
|
||||||
if (len < 0) {
|
|
||||||
strerror_r(errno, buf, sizeof(buf));
|
|
||||||
ALOGE("Error writing to boostpulse: %s\n", buf);
|
|
||||||
|
|
||||||
pthread_mutex_lock(&lock);
|
|
||||||
close(boostpulse_fd);
|
|
||||||
boostpulse_fd = -1;
|
|
||||||
pthread_mutex_unlock(&lock);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case POWER_HINT_SET_PROFILE:
|
case POWER_HINT_SET_PROFILE:
|
||||||
pthread_mutex_lock(&lock);
|
pthread_mutex_lock(&lock);
|
||||||
set_power_profile(*(int32_t *)data);
|
set_power_profile(*(int32_t *)data);
|
||||||
|
@ -262,7 +190,7 @@ struct power_module HAL_MODULE_INFO_SYM = {
|
||||||
.module_api_version = POWER_MODULE_API_VERSION_0_2,
|
.module_api_version = POWER_MODULE_API_VERSION_0_2,
|
||||||
.hal_api_version = HARDWARE_HAL_API_VERSION,
|
.hal_api_version = HARDWARE_HAL_API_VERSION,
|
||||||
.id = POWER_HARDWARE_MODULE_ID,
|
.id = POWER_HARDWARE_MODULE_ID,
|
||||||
.name = "msm8226 Power HAL",
|
.name = "MSM8226 Power HAL",
|
||||||
.author = "The LineageOS Project",
|
.author = "The LineageOS Project",
|
||||||
.methods = &power_module_methods,
|
.methods = &power_module_methods,
|
||||||
},
|
},
|
||||||
|
@ -272,4 +200,3 @@ struct power_module HAL_MODULE_INFO_SYM = {
|
||||||
.powerHint = power_hint,
|
.powerHint = power_hint,
|
||||||
.getFeature = get_feature
|
.getFeature = get_feature
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,8 @@ static power_profile profiles[PROFILE_MAX] = {
|
||||||
.target_loads = 80,
|
.target_loads = 80,
|
||||||
.target_loads_off = 90,
|
.target_loads_off = 90,
|
||||||
.scaling_max_freq = 1401600,
|
.scaling_max_freq = 1401600,
|
||||||
.scaling_min_freq = 787200,
|
// Our scaling_min_freq shouldnt be above our minimum any time!
|
||||||
|
.scaling_min_freq = 384000,
|
||||||
.scaling_min_freq_off = 300000,
|
.scaling_min_freq_off = 300000,
|
||||||
},
|
},
|
||||||
[PROFILE_HIGH_PERFORMANCE] = {
|
[PROFILE_HIGH_PERFORMANCE] = {
|
||||||
|
|
|
@ -34,9 +34,33 @@ LOCAL_SHARED_LIBRARIES := \
|
||||||
libdl \
|
libdl \
|
||||||
liblog \
|
liblog \
|
||||||
libutils \
|
libutils \
|
||||||
|
libhardware
|
||||||
|
|
||||||
LOCAL_STRIP_MODULE := false
|
LOCAL_STRIP_MODULE := false
|
||||||
|
LOCAL_VENDOR_MODULE := true
|
||||||
|
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
include $(BUILD_SHARED_LIBRARY)
|
||||||
|
|
||||||
|
include $(CLEAR_VARS)
|
||||||
|
LOCAL_MODULE_RELATIVE_PATH := hw
|
||||||
|
LOCAL_PROPRIETARY_MODULE := true
|
||||||
|
LOCAL_MODULE := android.hardware.sensors@1.0-service.s3ve3g
|
||||||
|
LOCAL_INIT_RC := android.hardware.sensors@1.0-service.s3ve3g.rc
|
||||||
|
LOCAL_SRC_FILES := \
|
||||||
|
service.cpp
|
||||||
|
|
||||||
|
LOCAL_SHARED_LIBRARIES := \
|
||||||
|
liblog \
|
||||||
|
libcutils \
|
||||||
|
libdl \
|
||||||
|
libbase \
|
||||||
|
libutils
|
||||||
|
|
||||||
|
LOCAL_SHARED_LIBRARIES += \
|
||||||
|
libhidlbase \
|
||||||
|
libhidltransport \
|
||||||
|
android.hardware.sensors@1.0
|
||||||
|
|
||||||
|
include $(BUILD_EXECUTABLE)
|
||||||
|
|
||||||
include $(call all-makefiles-under, $(LOCAL_PATH))
|
include $(call all-makefiles-under, $(LOCAL_PATH))
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
#include <hardware/sensors.h>
|
#include <hardware/sensors.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <cutils/log.h>
|
#include <log/log.h>
|
||||||
|
|
||||||
#include "SensorEventQueue.h"
|
#include "SensorEventQueue.h"
|
||||||
|
|
||||||
|
|
5
sensors/android.hardware.sensors@1.0-service.s3ve3g.rc
Normal file
5
sensors/android.hardware.sensors@1.0-service.s3ve3g.rc
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
service sensors-hal-1-0 /vendor/bin/hw/android.hardware.sensors@1.0-service.s3ve3g
|
||||||
|
class hal
|
||||||
|
user root
|
||||||
|
group system input wakelock
|
||||||
|
capabilities BLOCK_SUSPEND SYS_NICE
|
|
@ -18,7 +18,7 @@
|
||||||
#include "multihal.h"
|
#include "multihal.h"
|
||||||
|
|
||||||
#define LOG_NDEBUG 1
|
#define LOG_NDEBUG 1
|
||||||
#include <cutils/log.h>
|
#include <log/log.h>
|
||||||
#include <cutils/atomic.h>
|
#include <cutils/atomic.h>
|
||||||
#include <hardware/sensors.h>
|
#include <hardware/sensors.h>
|
||||||
|
|
||||||
|
|
31
sensors/service.cpp
Normal file
31
sensors/service.cpp
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2016 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define LOG_TAG "android.hardware.sensors@1.0-service.wt88047"
|
||||||
|
|
||||||
|
#include <android/hardware/sensors/1.0/ISensors.h>
|
||||||
|
#include <hidl/LegacySupport.h>
|
||||||
|
|
||||||
|
using android::hardware::sensors::V1_0::ISensors;
|
||||||
|
using android::hardware::defaultPassthroughServiceImplementation;
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
/* Sensors framework service needs at least two threads.
|
||||||
|
* One thread blocks on a "poll"
|
||||||
|
* The second thread is needed for all other HAL methods.
|
||||||
|
*/
|
||||||
|
return defaultPassthroughServiceImplementation<ISensors>(2);
|
||||||
|
}
|
25
sensors/service/Android.mk
Normal file
25
sensors/service/Android.mk
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
OLD_LOCAL_PATH := $(LOCAL_PATH)
|
||||||
|
LOCAL_PATH := $(call my-dir)
|
||||||
|
|
||||||
|
include $(CLEAR_VARS)
|
||||||
|
LOCAL_MODULE_RELATIVE_PATH := hw
|
||||||
|
LOCAL_PROPRIETARY_MODULE := true
|
||||||
|
LOCAL_MODULE := android.hardware.sensors@1.0-service.wt88047
|
||||||
|
LOCAL_INIT_RC := android.hardware.sensors@1.0-service.wt88047.rc
|
||||||
|
LOCAL_SRC_FILES := \
|
||||||
|
service.cpp
|
||||||
|
|
||||||
|
LOCAL_SHARED_LIBRARIES := \
|
||||||
|
liblog \
|
||||||
|
libcutils \
|
||||||
|
libdl \
|
||||||
|
libbase \
|
||||||
|
libutils
|
||||||
|
|
||||||
|
LOCAL_SHARED_LIBRARIES += \
|
||||||
|
libhidlbase \
|
||||||
|
libhidltransport \
|
||||||
|
android.hardware.sensors@1.0
|
||||||
|
|
||||||
|
include $(BUILD_EXECUTABLE)
|
||||||
|
LOCAL_PATH := $(OLD_LOCAL_PATH)
|
Loading…
Reference in a new issue