最近要实现一个功能,上层的APP需要打开底层某个外设,涉及到java层,native层,so库层,HAL层以及kernel层。这里进行简单的记录。
1、frameworks/base/media/java/android/media/AudioManager.java
public void AmSetVibratorMode(boolean on) {}
public boolean AmGetVibratorMode() {}
2、frameworks/base/services/core/java/com/android/server/audio/AudioService.java
public void AsSetVibratorMode(boolean on) {}
public boolean AsGetVibratorMode() {}
3、frameworks/base/media/java/android/media/AudioSystem.java
public static native int asSetVibratorMode(boolean on);
public static native boolean asIsVibratorMode();
4、frameworks/base/media/java/android/media/IAudioService.aidl
void AsSetVibratorMode(boolean on) ;
boolean AsGetVibratorMode();
5、frameworks/base/core/jni/android_media_AudioSystem.cpp
static jint android_media_AudioSystem_asSetVibratorMode(JNIEnv *env, jobject thiz, jboolean on){}
static jboolean android_media_AudioSystem_asIsVibratorMode(JNIEnv *env, jobject thiz){}
{"asSetVibratorMode", "(Z)I", (void *)android_media_AudioSystem_asSetVibratorMode}, //update static const JNINativeMethod gMethods[]
{"asIsVibratorMode", "()Z", (void *)android_media_AudioSystem_asIsVibratorMode},
6、frameworks/av/media/libmedia/AudioSystem.cpp
status_t AudioSystem::asSetVibratorMode(bool state){}
status_t AudioSystem::asIsVibratorMode(bool* state){}
7、frameworks/av/include/media/AudioSystem.h
static status_t asSetVibratorMode(bool state);
static status_t asIsVibratorMode(bool *state);
8、frameworks/av/services/audioflinger/AudioFlinger.cpp
status_t AudioFlinger::setVibratorMode(bool state){}
bool AudioFlinger::getVibratorMode() const{}
9、frameworks/av/services/audioflinger/AudioFlinger.h
virtual status_t setVibratorMode(bool state);
virtual bool getVibratorMode() const;
10、frameworks/av/media/libmedia/IAudioFlinger.cpp
SET_VIB_MODE,
GET_VIB_MODE,
virtual status_t setVibratorMode(bool state){}
virtual bool getVibratorMode() const{}
11、frameworks/av/include/media/IAudioFlinger.h
virtual status_t setVibratorMode(bool state) = 0;
virtual bool getVibratorMode() const = 0;
12、hardware/libhardware/include/hardware/audio.h
int (*set_vibrator_mode)(struct audio_hw_device *dev, bool state);
int (*get_vibrator_mode)(const struct audio_hw_device *dev, bool* state);
13、hardware/aw/audio/audio_hw.c
static int adev_set_vibrator_mode(struct audio_hw_device *dev, bool state){}
static int adev_get_vibrator_mode(const struct audio_hw_device *dev, bool *state){}
adev->device.set_vibrator_mode = adev_set_vibrator_mode;
adev->device.get_vibrator_mode = adev_get_vibrator_mode;
14、linux/kernel/sound/soc/sunxi/sun50iw3_sndcodec.c
static ssize_t modeStat_show(struct device *dev, struct device_attribute *attr, char *buf);
static ssize_t modeStat_store(struct device *dev, struct device_attribute *attr,const char *buf, size_t count);
原文:https://www.cnblogs.com/fbli/p/14623266.html