move most of patches to common tree

This commit is contained in:
Jan Engelmohr 2016-08-16 00:14:11 +02:00
parent 08936b8187
commit e0c91d78fa
22 changed files with 17654 additions and 0 deletions

40
patches/apply-patch.sh Normal file
View File

@ -0,0 +1,40 @@
#!/bin/bash
cd ../../../..
cd frameworks/av
git apply -v ../../device/elephone/p8000/patches/framework_av/0001-libmedia-stub-out-MTK-specific-bits-audio-working.patch
git apply -v ../../device/elephone/p8000/patches/framework_av/0002-camera.patch
git apply -v ../../device/elephone/p8000/patches/framework_av/0003-frameworks_av_fmradio_patch.patch
git apply -v ../../device/elephone/p8000/patches/framework_av/0001_engineering_mode_audio_settings_frameworks_av.patch
cd ../..
cd frameworks/base
git apply -v ../../device/elephone/p8000/patches/framework_base/0001-location-support-GNSS-extension-presumably-from-MTK.patch
git apply -v ../../device/elephone/p8000/patches/framework_base/0002-location-add-some-logs-just-to-be-confident.patch
git apply -v ../../device/elephone/p8000/patches/framework_base/0003-location-style-fix.patch
git apply -v ../../device/elephone/p8000/patches/framework_base/0004_minimal_xlog_frameworks_base.patch
git apply -v ../../device/elephone/p8000/patches/framework_base/0005-Update-for-mtk.patch
git apply -v ../../device/elephone/p8000/patches/framework_base/0001_engineering_mode_audio_settings_frameworks_base.patch
cd ../..
cd packages/apps/Settings/
git apply -v ../../../device/elephone/p8000/patches/packages_apps_Settings/0001-multisim.patch
cd ../../..
cd frameworks/opt/telephony
git apply -v ../../../device/elephone/p8000/patches/framework_opt_telephony/0001-Update-for-mtk.patch
cd ../../..
cd hardware/libhardware
git apply -v ../../device/elephone/p8000/patches/hardware_libhardware/fix-gps-light-audio.patch
git apply -v ../../device/elephone/p8000/patches/hardware_libhardware/0001_engineering_mode_audio_settings_hardware_libhardware.patch
cd ../..
cd hardware/libhardware_legacy
git apply -v ../../device/elephone/p8000/patches/hardware_libhardware_legacy/patch-for-mtk.patch
cd ../..
cd packages/services/Telephony
git apply -v ../../../device/elephone/p8000/patches/packages_services_telephony/NeedsFakeIccid.patch
cd ../../..
cd system/core
#git apply -v ../../device/elephone/p8000/patches/system_core/fix-boot-for-mtk.patch
git apply -v ../../device/elephone/p8000/patches/system_core/prevent-MTK-audio-and-silead-fingerprint-libs-from-spamming-log.patch
cd ../..
cd system/netd
git apply -v ../../device/elephone/p8000/patches/system_netd/hotpost-fix.patch
cd ../..
echo Patches Applied Successfully!

View File

@ -0,0 +1,256 @@
From 2914a74b5c21585ef16e2b76721ea48ca1bc835d Mon Sep 17 00:00:00 2001
From: Wang Xuerui <idontknw.wang@gmail.com>
Date: Tue, 25 Aug 2015 02:49:19 +0800
Subject: [PATCH 1/2] libmedia: stub out MTK-specific bits, audio working
Change-Id: I2b437e41599d0262838f86e794bfc887acc82821
---
media/libmedia/Android.mk | 9 ++
media/libmedia/mtkaudio_stubs.cpp | 215 ++++++++++++++++++++++++++++++++++++++
2 files changed, 224 insertions(+)
create mode 100644 media/libmedia/mtkaudio_stubs.cpp
diff --git a/media/libmedia/Android.mk b/media/libmedia/Android.mk
index 139d6f8..109ab26 100644
--- a/media/libmedia/Android.mk
+++ b/media/libmedia/Android.mk
@@ -124,6 +124,15 @@ LOCAL_C_INCLUDES := \
$(call include-path-for, audio-effects) \
$(call include-path-for, audio-utils)
+
+ifeq ($(MTK_HARDWARE),true)
+LOCAL_SRC_FILES += \
+ mtkaudio_stubs.cpp
+
+# StrongPointer.h
+LOCAL_C_INCLUDES += $(TOP)/frameworks/rs/server
+endif
+
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
diff --git a/media/libmedia/mtkaudio_stubs.cpp b/media/libmedia/mtkaudio_stubs.cpp
new file mode 100644
index 0000000..f67277c
--- /dev/null
+++ b/media/libmedia/mtkaudio_stubs.cpp
@@ -0,0 +1,215 @@
+// #include <MtpTypes.h>
+#include <system/audio.h>
+#include <StrongPointer.h>
+#include <media/IAudioFlinger.h>
+#include <hardware/audio.h>
+#include <stdlib.h>
+#include <dlfcn.h>
+
+namespace android {
+
+typedef void (*audio_error_callback)(status_t err);
+
+class AudioSystem
+{
+public:
+ static bool getVoiceUnlockDLInstance();
+ static int GetVoiceUnlockDLLatency();
+ static int SetVoiceUnlockSRC(uint outSR, uint outChannel);
+ static bool stopVoiceUnlockDL();
+ static bool startVoiceUnlockDL();
+ static int ReadRefFromRing(void*buf, uint32_t datasz,void* DLtime);
+ static int GetVoiceUnlockULTime(void* DLtime);
+ static void freeVoiceUnlockDLInstance();
+
+}; // class
+
+bool AudioSystem::getVoiceUnlockDLInstance()
+{
+ return 0;
+}
+
+int AudioSystem::GetVoiceUnlockDLLatency()
+{
+ return 0;
+}
+
+int AudioSystem::SetVoiceUnlockSRC(uint outSR, uint outChannel)
+{
+ return 0;
+}
+
+bool AudioSystem::stopVoiceUnlockDL()
+{
+ return 0;
+}
+
+bool AudioSystem::startVoiceUnlockDL()
+{
+ return 0;
+}
+
+int AudioSystem::ReadRefFromRing(void*buf, uint32_t datasz,void* DLtime)
+{
+ return 0;
+}
+
+int AudioSystem::GetVoiceUnlockULTime(void* DLtime)
+{
+ return 0;
+}
+
+void AudioSystem::freeVoiceUnlockDLInstance()
+{
+ return;
+}
+
+class IATVCtrlClient
+{
+};
+
+class IATVCtrlService: public IInterface
+{
+public:
+ DECLARE_META_INTERFACE(ATVCtrlService);
+};
+
+class BpATVCtrlService : public BpInterface<IATVCtrlService>
+{
+public:
+ BpATVCtrlService(const sp<IBinder>& impl)
+ : BpInterface<IATVCtrlService>(impl)
+ {
+ }
+ virtual ~BpATVCtrlService()
+ {
+ }
+ virtual int ATVCS_matv_init()
+ {
+ return 0;
+ }
+ virtual int ATVCS_matv_ps_init(int on)
+ {
+ return 0;
+ }
+ virtual int ATVCS_matv_set_parameterb(int in)
+ {
+ return 0;
+ }
+ virtual int ATVCS_matv_suspend(int on)
+ {
+ return 0;
+ }
+ virtual int ATVCS_matv_shutdown()
+ {
+ return 0;
+ }
+ virtual void ATVCS_matv_chscan(int mode)
+ {
+ }
+ virtual void ATVCS_matv_chscan_stop()
+ {
+ }
+ virtual int ATVCS_matv_get_chtable(int ch, void *entry, int len)
+ {
+ return 0;
+ }
+ virtual int ATVCS_matv_set_chtable(int ch, void *entry, int len)
+ {
+ return 0;
+ }
+ virtual int ATVCS_matv_clear_chtable()
+ {
+ return 0;
+ }
+ virtual void ATVCS_matv_change_channel(int ch)
+ {
+ }
+ virtual void ATVCS_matv_set_country(int country)
+ {
+ }
+ virtual void ATVCS_matv_set_tparam(int mode)
+ {
+ }
+ virtual void ATVCS_matv_audio_play()
+ {
+ }
+ virtual void ATVCS_matv_audio_stop()
+ {
+ }
+ virtual int ATVCS_matv_audio_get_format()
+ {
+ return 0;
+ }
+ virtual void ATVCS_matv_audio_set_format(int val)
+ {
+ }
+ virtual int ATVCS_matv_audio_get_sound_system()
+ {
+ return 0;
+ }
+ virtual int ATVCS_matv_adjust(int item, int val)
+ {
+ return 0;
+ }
+ virtual int ATVCS_matv_get_chipdep(int item)
+ {
+ return 0;
+ }
+ virtual int ATVCS_matv_set_chipdep(int item, int val)
+ {
+ return 0;
+ }
+ virtual void ATVCS_matv_register_callback()
+ {
+ }
+ virtual void registerClient(const sp<IATVCtrlClient>& client)
+ {
+ }
+ virtual void registerClient_FM(const sp<IATVCtrlClient>& client)
+ {
+ }
+ virtual void CLI(char input)
+ {
+ }
+ virtual int ATVCS_fm_powerup(void *parm, int len)
+ {
+ return 0;
+ }
+ virtual int ATVCS_fm_powerdown()
+ {
+ return 0;
+ }
+ virtual int ATVCS_fm_getrssi()
+ {
+ return 0;
+ }
+ virtual int ATVCS_fm_tune(void *parm, int len)
+ {
+ return 0;
+ }
+ virtual int ATVCS_fm_seek(void *parm, int len)
+ {
+ return 0;
+ }
+ virtual int ATVCS_fm_scan(void *parm, int len)
+ {
+ return 0;
+ }
+ virtual int ATVCS_fm_mute(int val)
+ {
+ return 0;
+ }
+ virtual int ATVCS_fm_getchipid()
+ {
+ return 0;
+ }
+ virtual int ATVCS_fm_isFMPowerUp()
+ {
+ return 0;
+ }
+};
+
+IMPLEMENT_META_INTERFACE(ATVCtrlService, "android.media.IATVCtrlService");
+
+} // namespace
--
1.9.1

View File

@ -0,0 +1,223 @@
commit 9984de64aa6511eea71611dbe2d7d20b210c05db
Author: Dmitry Smirnov <divis1969@gmail.com>
Date: Fri Apr 15 22:59:57 2016 +0300
Add MTK-specific APIs to access NV audio data
These data are used by Engineering app to configure audio parameters (volume)
Change-Id: I6786517942b1311c543262df0c62ca528c461d48
diff --git a/include/media/AudioSystem.h b/include/media/AudioSystem.h
index 698bf2e..606b015 100644
--- a/include/media/AudioSystem.h
+++ b/include/media/AudioSystem.h
@@ -332,6 +332,9 @@ public:
static status_t registerPolicyMixes(Vector<AudioMix> mixes, bool registration);
+ static status_t getAudioData(int par, unsigned long size, char * buffer);
+ static status_t setAudioData(int par, unsigned long size, char * buffer);
+
// ----------------------------------------------------------------------------
class AudioPortCallback : public RefBase
diff --git a/include/media/IAudioFlinger.h b/include/media/IAudioFlinger.h
index 54be5f3..dc88930 100644
--- a/include/media/IAudioFlinger.h
+++ b/include/media/IAudioFlinger.h
@@ -258,6 +258,9 @@ public:
/* Get the HW synchronization source used for an audio session */
virtual audio_hw_sync_t getAudioHwSyncForSession(audio_session_t sessionId) = 0;
+
+ virtual status_t getAudioData(int par, unsigned long size, char * buffer) = 0;
+ virtual status_t setAudioData(int par, unsigned long size, char * buffer) = 0;
};
diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp
index 9cae21c..d7b28b1 100644
--- a/media/libmedia/AudioSystem.cpp
+++ b/media/libmedia/AudioSystem.cpp
@@ -999,4 +999,18 @@ void AudioSystem::AudioPolicyServiceClient::onAudioPatchListUpdate()
}
}
+status_t AudioSystem::getAudioData(int par, unsigned long size, char * buffer)
+{
+ const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
+ if (af == 0) return 0;
+ return af->getAudioData(par, size, buffer);
+}
+
+status_t AudioSystem::setAudioData(int par, unsigned long size, char * buffer)
+{
+ const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
+ if (af == 0) return 0;
+ return af->setAudioData(par, size, buffer);
+}
+
}; // namespace android
diff --git a/media/libmedia/IAudioFlinger.cpp b/media/libmedia/IAudioFlinger.cpp
index 3f76506..366f42c 100644
--- a/media/libmedia/IAudioFlinger.cpp
+++ b/media/libmedia/IAudioFlinger.cpp
@@ -85,6 +85,8 @@ enum {
#ifdef QCOM_DIRECTTRACK
CREATE_DIRECT_TRACK,
#endif
+ GET_AUDIO_DATA,
+ SET_AUDIO_DATA,
};
#define MAX_ITEMS_PER_LIST 1024
@@ -944,6 +946,44 @@ public:
}
return (audio_hw_sync_t)reply.readInt32();
}
+
+ virtual status_t getAudioData(int par, unsigned long size, char * buffer)
+ {
+ ALOGV("getAudioData: %d, %d, %p", par, size, buffer);
+ if (buffer == NULL || size == 0) {
+ return BAD_VALUE;
+ }
+ Parcel data, reply;
+ data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
+ data.writeInt32(par);
+ data.writeInt32(size);
+ data.write(buffer, size);
+ status_t status = remote()->transact(GET_AUDIO_DATA, data, &reply);
+ if (status != NO_ERROR ||
+ (status = (status_t)reply.readInt32()) != NO_ERROR) {
+ return status;
+ }
+ reply.read(buffer, size);
+ return status;
+ }
+
+ virtual status_t setAudioData(int par, unsigned long size, char * buffer)
+ {
+ ALOGV("setAudioData: %d, %d, %p", par, size, buffer);
+ if (buffer == NULL || size == 0) {
+ return BAD_VALUE;
+ }
+ Parcel data, reply;
+ data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
+ data.writeInt32(par);
+ data.writeInt32(size);
+ data.write(buffer, size);
+ status_t status = remote()->transact(SET_AUDIO_DATA, data, &reply);
+ if (status == NO_ERROR) {
+ status = (status_t)reply.readInt32();
+ }
+ return status;
+ }
};
IMPLEMENT_META_INTERFACE(AudioFlinger, "android.media.IAudioFlinger");
@@ -1465,6 +1505,42 @@ status_t BnAudioFlinger::onTransact(
reply->writeInt32(getAudioHwSyncForSession((audio_session_t)data.readInt32()));
return NO_ERROR;
} break;
+ case GET_AUDIO_DATA: {
+ CHECK_INTERFACE(IAudioFlinger, data, reply);
+ int par = data.readInt32();
+ unsigned long size = data.readInt32();
+ ALOGV("GET_AUDIO_DATA: %d, %d", par, size);
+ char * buffer = (char*)calloc(size, 1);
+ if (buffer == NULL) {
+ reply->writeInt32(NO_MEMORY);
+ reply->writeInt32(0);
+ return NO_ERROR;
+ }
+ status_t status = getAudioData(par, size, buffer);
+ reply->writeInt32(status);
+ if (status == NO_ERROR) {
+ reply->write(buffer, size);
+ }
+ free(buffer);
+ return NO_ERROR;
+ } break;
+ case SET_AUDIO_DATA: {
+ CHECK_INTERFACE(IAudioFlinger, data, reply);
+ int par = data.readInt32();
+ unsigned long size = data.readInt32();
+ ALOGV("SET_AUDIO_DATA: %d, %d", par, size);
+ char * buffer = (char*)calloc(size, 1);
+ if (buffer == NULL) {
+ reply->writeInt32(NO_MEMORY);
+ reply->writeInt32(0);
+ return NO_ERROR;
+ }
+ data.read(buffer, size);
+ status_t status = setAudioData(par, size, buffer);
+ reply->writeInt32(status);
+ free(buffer);
+ return NO_ERROR;
+ } break;
default:
return BBinder::onTransact(code, data, reply, flags);
}
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 0c9b646..1e39951 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -3334,6 +3334,42 @@ void AudioFlinger::dumpTee(int fd, const sp<NBAIO_Source>& source, audio_io_hand
}
#endif
+status_t AudioFlinger::getAudioData(int par, unsigned long size, char * buffer)
+{
+ status_t result = BAD_VALUE;
+ ALOGV("getAudioData: par=%d, size=%d, buffer=%p", par, size, buffer);
+ Mutex::Autolock _l(mLock);
+ if (mPrimaryHardwareDev != NULL) {
+ audio_hw_device_t *dev = mPrimaryHardwareDev->hwDevice();
+ if (dev != NULL && dev->get_audio_data != NULL) {
+ result = dev->get_audio_data(dev, par, size, buffer);
+ } else {
+ ALOGE("getAudioData: dev or get_audio_data is NULL");
+ }
+ } else {
+ ALOGE("getAudioData: mPrimaryHardwareDev is NULL");
+ }
+ return result;
+}
+
+status_t AudioFlinger::setAudioData(int par, unsigned long size, char * buffer)
+{
+ status_t result = BAD_VALUE;
+ ALOGV("setAudioData: par=%d, size=%d, buffer=%p", par, size, buffer);
+ Mutex::Autolock _l(mLock);
+ if (mPrimaryHardwareDev != NULL) {
+ audio_hw_device_t *dev = mPrimaryHardwareDev->hwDevice();
+ if (dev != NULL && dev->set_audio_data != NULL) {
+ result = dev->set_audio_data(dev, par, size, buffer);
+ } else {
+ ALOGE("setAudioData: dev or get_audio_data is NULL");
+ }
+ } else {
+ ALOGE("setAudioData: mPrimaryHardwareDev is NULL");
+ }
+ return result;
+}
+
status_t AudioFlinger::onTransact(
uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
{
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index 60eed29..4067df8 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -295,6 +295,9 @@ public:
/* Get the HW synchronization source used for an audio session */
virtual audio_hw_sync_t getAudioHwSyncForSession(audio_session_t sessionId);
+ virtual status_t getAudioData(int par, unsigned long size, char * buffer);
+ virtual status_t setAudioData(int par, unsigned long size, char * buffer);
+
virtual status_t onTransact(
uint32_t code,
const Parcel& data,

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,139 @@
commit 0c5b6c0502f6feff62ec97405ea76aaacdde25fd
Author: Jan Engelmohr <jan.engelmohr@mailbox.tu-dresden.de>
Date: Thu May 5 00:47:41 2016 +0200
added frameworks_av patch for MTKs FM Radio
Change-Id: I50724ad6535650f376d13df992f1e5695da580bd
diff --git a/include/media/MediaPlayerInterface.h b/include/media/MediaPlayerInterface.h
index b95f949..4760ba2 100644
--- a/include/media/MediaPlayerInterface.h
+++ b/include/media/MediaPlayerInterface.h
@@ -54,6 +54,7 @@ enum player_type {
// argument to the 'test:' url in the setDataSource call.
TEST_PLAYER = 5,
DASH_PLAYER = 6,
+ FM_AUDIO_PLAYER=7,
};
diff --git a/media/libmediaplayerservice/Android.mk b/media/libmediaplayerservice/Android.mk
index 8f06c55..7425a76 100644
--- a/media/libmediaplayerservice/Android.mk
+++ b/media/libmediaplayerservice/Android.mk
@@ -43,6 +43,7 @@ LOCAL_SHARED_LIBRARIES := \
libutils \
libvorbisidec \
libdrmframework \
+ libmtkplayer
LOCAL_STATIC_LIBRARIES := \
libstagefright_nuplayer \
@@ -55,6 +56,7 @@ LOCAL_C_INCLUDES := \
$(TOP)/frameworks/av/media/libstagefright/webm \
$(TOP)/frameworks/native/include/media/openmax \
$(TOP)/external/tremolo/Tremolo \
+ $(TOP)/device/elephone/p8000/MediaTek/fmaudioplayer
LOCAL_MODULE:= libmediaplayerservice
diff --git a/media/libmediaplayerservice/MediaPlayerFactory.cpp b/media/libmediaplayerservice/MediaPlayerFactory.cpp
index 03fae91..54ea2cf 100644
--- a/media/libmediaplayerservice/MediaPlayerFactory.cpp
+++ b/media/libmediaplayerservice/MediaPlayerFactory.cpp
@@ -1,4 +1,9 @@
/*
+* Copyright (C) 2014 MediaTek Inc.
+* Modification based on code covered by the mentioned copyright
+* and/or permission notice(s).
+*/
+/*
**
** Copyright 2012, The Android Open Source Project
**
@@ -33,6 +38,7 @@
#include "TestPlayerStub.h"
#include "StagefrightPlayer.h"
#include "nuplayer/NuPlayerDriver.h"
+#include "FMAudioPlayer.h"
#include <dlfcn.h>
namespace android {
@@ -387,6 +393,21 @@ class TestPlayerFactory : public MediaPlayerFactory::IFactory {
return new TestPlayerStub();
}
};
+class FMPlayerFactory : public MediaPlayerFactory::IFactory {
+ public:
+ virtual float scoreFactory(const sp<IMediaPlayer>& client,
+ const char* url,
+ float curScore) {
+ if(strncmp(url, "THIRDPARTY://MEDIAPLAYER_PLAYERTYPE_FM", 38) == 0)
+ return 1.0;
+ return 0.0;
+ }
+
+ virtual sp<MediaPlayerBase> createPlayer() {
+ return new FMAudioPlayer();
+ return NULL;
+ }
+};
void MediaPlayerFactory::registerBuiltinFactories() {
Mutex::Autolock lock_(&sLock);
@@ -398,6 +419,7 @@ void MediaPlayerFactory::registerBuiltinFactories() {
registerFactory_l(new NuPlayerFactory(), NU_PLAYER);
registerFactory_l(new SonivoxPlayerFactory(), SONIVOX_PLAYER);
registerFactory_l(new TestPlayerFactory(), TEST_PLAYER);
+ registerFactory_l(new FMPlayerFactory(), FM_AUDIO_PLAYER);
const char* FACTORY_LIB = "libdashplayer.so";
const char* FACTORY_CREATE_FN = "CreateDASHFactory";
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 0c9b646..4d89d05 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -1,4 +1,9 @@
/*
+* Copyright (C) 2014 MediaTek Inc.
+* Modification based on code covered by the mentioned copyright
+* and/or permission notice(s).
+*/
+/*
** Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
** Not a Contribution.
** Copyright 2007, The Android Open Source Project
@@ -1151,6 +1156,19 @@ status_t AudioFlinger::setStreamVolume(audio_stream_type_t stream, float value,
thread->setStreamVolume(stream, value);
}
+ // change by hochi for fm volume
+ if(stream == AUDIO_STREAM_MUSIC)
+ {
+ sp<ThreadBase> thread;
+ thread = checkPlaybackThread_l(output);
+ if (thread == primaryPlaybackThread_l())
+ {
+ //MTK_ALOG_D("setStreamVolume FM value = %f",value);
+ audio_hw_device_t *dev = mPrimaryHardwareDev->hwDevice();
+ dev->set_parameters (dev,String8::format("SetFmVolume=%f",value));
+ }
+ }
+
return NO_ERROR;
}
@@ -1165,6 +1183,12 @@ status_t AudioFlinger::setStreamMute(audio_stream_type_t stream, bool muted)
if (status != NO_ERROR) {
return status;
}
+ if(stream == AUDIO_STREAM_MUSIC)
+ {
+ //MTK_ALOG_D("setStreamMute MATV muted=%d",muted);
+ audio_hw_device_t *dev = mPrimaryHardwareDev->hwDevice();
+ dev->set_parameters (dev,String8::format("SetMatvMute=%d",muted));
+ }
ALOG_ASSERT(stream != AUDIO_STREAM_PATCH, "attempt to mute AUDIO_STREAM_PATCH");
if (uint32_t(stream) == AUDIO_STREAM_ENFORCED_AUDIBLE) {

View File

@ -0,0 +1,366 @@
commit ffa414aa4983229d7423c6b57e73c5c299513b72
Author: Jan Engelmohr <jan.engelmohr@mailbox.tu-dresden.de>
Date: Mon Mar 28 16:21:53 2016 +0200
first silead fingerprint patch
Change-Id: Ice6b8be45223d1e0e5f4f02cb1e5aadc9b32252c
diff --git a/core/java/android/app/KeyguardManager.java b/core/java/android/app/KeyguardManager.java
index ddd21e6..3d5b720 100644
--- a/core/java/android/app/KeyguardManager.java
+++ b/core/java/android/app/KeyguardManager.java
@@ -289,4 +289,14 @@ public class KeyguardManager {
}
}
+/* Vanzo:hanshengpeng on: Thu, 21 May 2015 17:09:00 +0800
+ * fingerprint add by sileadinc
+ */
+ public void dismissKeyguard() {
+ try {
+ mWM.dismissKeyguard();
+ } catch (RemoteException ex) {
+ }
+ }
+// End of Vanzo:hanshengpeng
}
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 4042abc..68199cc 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -1,4 +1,9 @@
/*
+* Copyright (C) 2014 MediaTek Inc.
+* Modification based on code covered by the mentioned copyright
+* and/or permission notice(s).
+*/
+/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -1959,4 +1964,13 @@ public class LockPatternUtils {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.REQUIRE_PASSWORD_TO_DECRYPT, required ? 1 : 0);
}
+
+ /**
+ * @internal
+ * M: reset Lockout attempt Dead line, to reset it as 0
+ * The deadline value has to be reset after each time system rebooted
+ */
+ public void resetLockoutAttemptDeadline() {
+ setLong(LOCKOUT_ATTEMPT_DEADLINE, 0L);
+ }
}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
index 28f3a9d..5483ada 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
@@ -1,4 +1,9 @@
/*
+* Copyright (C) 2014 MediaTek Inc.
+* Modification based on code covered by the mentioned copyright
+* and/or permission notice(s).
+*/
+/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -31,6 +36,10 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.FrameLayout;
+/* Vanzo:hanshengpeng on: Thu, 21 May 2015 17:09:48 +0800
+ */
+import android.os.Handler;
+// End of Vanzo:hanshengpeng
import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
@@ -355,6 +364,28 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe
}
}
+/* Vanzo:hanshengpeng on: Thu, 21 May 2015 17:09:54 +0800
+ * fingerprint add by sileadinc
+ */
+ public void showAutoDismissDialog(String message, int timeout) {
+ final AlertDialog dialog = new AlertDialog.Builder(mContext)
+ .setMessage(message).create();
+ if (!(mContext instanceof Activity)) {
+ dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
+ }
+ dialog.show();
+ Handler handler = new Handler();
+ handler.postDelayed(new Runnable() {
+ @Override
+ public void run () {
+ Log.d(TAG, "before dialog dismiss ");
+ dialog.dismiss();
+ }
+ },timeout);
+ }
+// End of Vanzo:hanshengpeng
+
+
private void showAlmostAtAccountLoginDialog() {
final int timeoutInSeconds = (int) LockPatternUtils.FAILED_ATTEMPT_TIMEOUT_MS / 1000;
final int count = LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 264e4b4..a8ef034 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -1,4 +1,9 @@
/*
+* Copyright (C) 2014 MediaTek Inc.
+* Modification based on code covered by the mentioned copyright
+* and/or permission notice(s).
+*/
+/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -123,6 +128,13 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
private static final int MSG_SIM_SUBSCRIPTION_INFO_CHANGED = 326;
private static final int MSG_SERVICE_STATE_CHANGED = 327;
private static final int MSG_FINGERPRINT_STATE_CHANGED = 328;
+/* Vanzo:hanshengpeng on: Thu, 21 May 2015 17:03:15 +0800
+ * fingerprint add by sileadinc
+ */
+ private static final int MSG_FINGER_UNMATCH = 330;
+ public final static String FINGER_PRINT_UNMATCH_ACTION = "com.silead.fp.lockscreen.action.UNMATCH";
+ private KeyguardFingerPrintCallback mFPCallback;
+// End of Vanzo:hanshengpeng
private static KeyguardUpdateMonitor sInstance;
@@ -244,6 +256,13 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
case MSG_SIM_SUBSCRIPTION_INFO_CHANGED:
handleSimSubscriptionInfoChanged();
break;
+/* Vanzo:hanshengpeng on: Thu, 21 May 2015 17:04:15 +0800
+ * fingerprint add by sileadinc
+ */
+ case MSG_FINGER_UNMATCH:
+ handleFingerUnmatch((String) msg.obj);
+ break;
+// End of Vanzo:hanshengpeng
}
}
};
@@ -441,6 +460,16 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
}
}
+/* Vanzo:hanshengpeng on: Thu, 21 May 2015 17:11:30 +0800
+ * fingerprint add by sileadinc
+ */
+ private void handleFingerUnmatch(String msg) {
+ Log.d(TAG, "handleFingerUnmatch msg: " + msg+":"+mFPCallback);
+ if (mFPCallback != null) {
+ mFPCallback.onFingerPrintUnmatch(msg);
+ }
+ }
+// End of Vanzo:hanshengpeng
public boolean isFaceUnlockRunning(int userId) {
return mUserFaceUnlockRunning.get(userId);
}
@@ -545,6 +574,17 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
Message msg = mHandler.obtainMessage(MSG_SERVICE_STATE_CHANGED, subId, 0, state);
msg.sendToTarget();
}
+/* Vanzo:hanshengpeng on: Thu, 21 May 2015 17:11:48 +0800
+ * fingerprint add by sileadinc
+ */
+ else if (FINGER_PRINT_UNMATCH_ACTION.equals(action)) {
+ final String msg_shown = intent.getStringExtra("msg_shown");
+ final int timeout = intent.getIntExtra("msg_timeout", 2000);
+ if (DEBUG) Log.d(TAG, "received FINGER_PRINT_UNMATCH_ACTION with msg = "
+ + msg_shown);
+ mHandler.sendMessage(mHandler.obtainMessage(MSG_FINGER_UNMATCH, msg_shown));
+ }
+// End of Vanzo:hanshengpeng
}
};
@@ -797,6 +837,13 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
bootCompleteFilter.addAction(Intent.ACTION_BOOT_COMPLETED);
context.registerReceiver(mBroadcastReceiver, bootCompleteFilter);
+/* Vanzo:hanshengpeng on: Thu, 21 May 2015 17:12:04 +0800
+ * fingerprint add by sileadinc
+ */
+ // if (com.android.featureoption.FeatureOption.VANZO_FEATURE_ADD_SILEADINC_FP) {
+ context.registerReceiver(mBroadcastReceiver, new IntentFilter(FINGER_PRINT_UNMATCH_ACTION));
+ // }
+// End of Vanzo:hanshengpeng
final IntentFilter allUserFilter = new IntentFilter();
allUserFilter.addAction(Intent.ACTION_USER_INFO_CHANGED);
allUserFilter.addAction(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED);
@@ -832,6 +879,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
trustManager.registerTrustListener(this);
mLockPatternUtils = new LockPatternUtils(mContext);
+ //visi0nary
+ FingerprintManager fpm;
+ fpm = (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);
+ fpm.startListening(mFingerprintManagerReceiver);
}
private boolean isDeviceProvisionedInSettingsDb() {
@@ -1232,6 +1283,14 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
sendUpdates(callback);
}
+/* Vanzo:hanshengpeng on: Thu, 21 May 2015 17:12:26 +0800
+ * fingerprint add by sileadinc
+ */
+ public void registerFingerPrintCallback(KeyguardFingerPrintCallback callback) {
+ if (DEBUG) Log.v(TAG, "registerFingerPrintCallback for " + callback);
+ mFPCallback = callback;
+ }
+// End of Vanzo:hanshengpeng
private void sendUpdates(KeyguardUpdateMonitorCallback callback) {
// Notify listener of the current state
callback.onRefreshBatteryInfo(mBatteryStatus);
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardViewBase.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewBase.java
index a89a446..46cf9b4 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardViewBase.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewBase.java
@@ -1,4 +1,9 @@
/*
+* Copyright (C) 2014 MediaTek Inc.
+* Modification based on code covered by the mentioned copyright
+* and/or permission notice(s).
+*/
+/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -149,6 +154,13 @@ public abstract class KeyguardViewBase extends FrameLayout implements SecurityCa
return false;
}
+/* Vanzo:hanshengpeng on: Thu, 21 May 2015 17:13:38 +0800
+ * fingerprint add by sileadinc
+ */
+ public void showAutoDismissDialog(String msg, int timeout) {
+ mSecurityContainer.showAutoDismissDialog(msg,timeout);
+ }
+// End of Vanzo:hanshengpeng
protected void announceCurrentSecurityMethod() {
mSecurityContainer.announceCurrentSecurityMethod();
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index 352bfba..d920208 100755
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -1,4 +1,9 @@
/*
+* Copyright (C) 2014 MediaTek Inc.
+* Modification based on code covered by the mentioned copyright
+* and/or permission notice(s).
+*/
+/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -92,6 +97,7 @@ import java.util.List;
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
+import com.android.keyguard.KeyguardFingerPrintCallback;
/**
* Mediates requests related to the keyguard. This includes queries about the
@@ -376,6 +382,20 @@ public class KeyguardViewMediator extends SystemUI {
private final ArrayList<IKeyguardStateCallback> mKeyguardStateCallbacks = new ArrayList<>();
+/* Vanzo:hanshengpeng on: Thu, 21 May 2015 17:05:26 +0800
+ * fingerprint add by sileadinc
+ */
+ private KeyguardFingerPrintCallback mFingerPrintCallback =
+ new KeyguardFingerPrintCallback() {
+ @Override
+ public void onFingerPrintUnmatch(String msg) {
+ Log.d(TAG, "onFingerPrintUnmatch msg = "+msg);
+ mStatusBarKeyguardViewManager.showAutoDismissDialog(msg, 2000);
+ }
+ };
+// End of Vanzo:hanshengpeng
+
+
private boolean mCryptKeeperEnabled = true;
KeyguardUpdateMonitorCallback mUpdateCallback = new KeyguardUpdateMonitorCallback() {
@@ -918,6 +938,15 @@ public class KeyguardViewMediator extends SystemUI {
if (DEBUG) Log.d(TAG, "onSystemReady");
mSystemReady = true;
mUpdateMonitor.registerCallback(mUpdateCallback);
+ mLockPatternUtils.resetLockoutAttemptDeadline();
+ //mPowerOffAlarmManager.onSystemReady();
+/* Vanzo:hanshengpeng on: Thu, 21 May 2015 17:14:32 +0800
+ * fingerprint add by sileadinc
+ */
+ //if (FeatureOption.VANZO_FEATURE_ADD_SILEADINC_FP) {
+ mUpdateMonitor.registerFingerPrintCallback(mFingerPrintCallback);
+ //}
+// End of Vanzo:hanshengpeng
// Suppress biometric unlock right after boot until things have settled if it is the
// selected security method, otherwise unsuppress it. It must be unsuppressed if it is
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
index ffe6862..278256e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
@@ -1,4 +1,9 @@
/*
+* Copyright (C) 2014 MediaTek Inc.
+* Modification based on code covered by the mentioned copyright
+* and/or permission notice(s).
+*/
+/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -261,4 +266,11 @@ public class KeyguardBouncer {
ensureView();
return mKeyguardView.interceptMediaKey(event);
}
+/* Vanzo:hanshengpeng on: Thu, 21 May 2015 17:15:38 +0800
+ * fingerprint add by sileadinc
+ */
+ public void showAutoDismissDialog(String msg, int timeout) {
+ mKeyguardView.showAutoDismissDialog(msg,timeout);
+ }
+// End of Vanzo:hanshengpeng
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
index afdf8b2..17f20a9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -1,4 +1,9 @@
/*
+* Copyright (C) 2014 MediaTek Inc.
+* Modification based on code covered by the mentioned copyright
+* and/or permission notice(s).
+*/
+/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -493,4 +498,12 @@ public class StatusBarKeyguardViewManager {
public boolean isKeyguardShowingMedia() {
return mPhoneStatusBar.isKeyguardShowingMedia();
}
+
+/* Vanzo:hanshengpeng on: Thu, 21 May 2015 17:05:53 +0800
+ * fingerprint add by sileadinc
+ */
+ public void showAutoDismissDialog(String msg, int timeout) {
+ mBouncer.showAutoDismissDialog(msg,timeout);
+ }
+// End of Vanzo:hanshengpeng
}

View File

@ -0,0 +1,379 @@
From d34940d327f07ccfdb1be9b59e6d1d35aa5f45a5 Mon Sep 17 00:00:00 2001
From: Wang Xuerui <idontknw.wang@gmail.com>
Date: Fri, 28 Aug 2015 05:33:39 +0800
Subject: [PATCH 1/5] location: support GNSS extension presumably from MTK
Change-Id: Ic1ed2e75389a34fc975e1afd6a4cb14d6982b316
---
location/java/android/location/GpsStatus.java | 36 +++++++++
.../java/android/location/IGpsStatusListener.aidl | 5 ++
.../java/android/location/LocationManager.java | 25 +++++++
.../server/location/GpsLocationProvider.java | 86 +++++++++++++++++++++-
.../server/location/GpsStatusListenerHelper.java | 26 +++++++
...android_server_location_GpsLocationProvider.cpp | 55 ++++++++++++++
6 files changed, 229 insertions(+), 4 deletions(-)
diff --git a/location/java/android/location/GpsStatus.java b/location/java/android/location/GpsStatus.java
index 4af55a6..a647488 100644
--- a/location/java/android/location/GpsStatus.java
+++ b/location/java/android/location/GpsStatus.java
@@ -165,6 +165,42 @@ public final class GpsStatus {
}
/**
+ * Used internally within {@link LocationManager} to copy GPS status
+ * data from the Location Manager Service to its cached GpsStatus instance.
+ * Is synchronized to ensure that GPS status updates are atomic.
+ *
+ * This is modified to become aware of explicit GNSS support of &gt;32
+ * satellites.
+ */
+ synchronized void setStatusFromGnss(int gnssSvCount, int[] prns, float[] snrs,
+ float[] elevations, float[] azimuths,
+ boolean[] ephemerisPresences,
+ boolean[] almanacPresences,
+ boolean[] usedInFix) {
+ int i;
+
+ for (i = 0; i < mSatellites.length; i++) {
+ mSatellites[i].mValid = false;
+ }
+
+ for (i = 0; i < gnssSvCount; i++) {
+ int prn = prns[i] - 1;
+
+ if (prn >= 0 && prn < mSatellites.length) {
+ GpsSatellite satellite = mSatellites[prn];
+
+ satellite.mValid = true;
+ satellite.mSnr = snrs[i];
+ satellite.mElevation = elevations[i];
+ satellite.mAzimuth = azimuths[i];
+ satellite.mHasEphemeris = ephemerisPresences[i];
+ satellite.mHasAlmanac = almanacPresences[i];
+ satellite.mUsedInFix = usedInFix[i];
+ }
+ }
+ }
+
+ /**
* Used by {@link LocationManager#getGpsStatus} to copy LocationManager's
* cached GpsStatus instance to the client's copy.
* Since this method is only used within {@link LocationManager#getGpsStatus},
diff --git a/location/java/android/location/IGpsStatusListener.aidl b/location/java/android/location/IGpsStatusListener.aidl
index 62b1c6b..52865b7 100644
--- a/location/java/android/location/IGpsStatusListener.aidl
+++ b/location/java/android/location/IGpsStatusListener.aidl
@@ -29,5 +29,10 @@ oneway interface IGpsStatusListener
void onSvStatusChanged(int svCount, in int[] prns, in float[] snrs,
in float[] elevations, in float[] azimuths,
int ephemerisMask, int almanacMask, int usedInFixMask);
+ void onGnssSvStatusChanged(int gnssSvCount, in int[] prns, in float[] snrs,
+ in float[] elevations, in float[] azimuths,
+ in boolean[] ephemerisPresences,
+ in boolean[] almanacPresences,
+ in boolean[] usedInFix);
void onNmeaReceived(long timestamp, String nmea);
}
diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java
index 0eb4fdc..b4682e7 100644
--- a/location/java/android/location/LocationManager.java
+++ b/location/java/android/location/LocationManager.java
@@ -1448,6 +1448,31 @@ public class LocationManager {
}
@Override
+ public void onGnssSvStatusChanged(int gnssSvCount, int[] prns, float[] snrs,
+ float[] elevations, float[] azimuths,
+ boolean[] ephemerisPresences,
+ boolean[] almanacPresences,
+ boolean[] usedInFix) {
+ if (mListener != null) {
+ mGpsStatus.setStatusFromGnss(
+ gnssSvCount,
+ prns,
+ snrs,
+ elevations,
+ azimuths,
+ ephemerisPresences,
+ almanacPresences,
+ usedInFix);
+
+ Message msg = Message.obtain();
+ msg.what = GpsStatus.GPS_EVENT_SATELLITE_STATUS;
+ // remove any SV status messages already in the queue
+ mGpsHandler.removeMessages(GpsStatus.GPS_EVENT_SATELLITE_STATUS);
+ mGpsHandler.sendMessage(msg);
+ }
+ }
+
+ @Override
public void onNmeaReceived(long timestamp, String nmea) {
if (mNmeaListener != null) {
synchronized (mNmeaBuffer) {
diff --git a/services/core/java/com/android/server/location/GpsLocationProvider.java b/services/core/java/com/android/server/location/GpsLocationProvider.java
index 4e58c6c..92a74ea 100644
--- a/services/core/java/com/android/server/location/GpsLocationProvider.java
+++ b/services/core/java/com/android/server/location/GpsLocationProvider.java
@@ -1719,6 +1719,72 @@ public class GpsLocationProvider implements LocationProviderInterface {
}
/**
+ * Count number of GNSS satellites used in fix.
+ *
+ * We could not rely on Integer.bitCount as GNSS used-in-fix info is not
+ * represented as a bit-mask.
+ */
+ private int countGnssSvUsedInFix(final int gnssSvCount) {
+ int result = 0;
+
+ for (int i = 0; i < gnssSvCount; i++) {
+ if (mSvUsedInFix[i]) {
+ result++;
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * called from native code to update GNSS SV info
+ */
+ private void reportGnssSvStatus() {
+ final int svCount = native_read_gnss_sv_status(
+ mSvs,
+ mSnrs,
+ mSvElevations,
+ mSvAzimuths,
+ mSvEphemerisPresences,
+ mSvAlmanacPresences,
+ mSvUsedInFix);
+ mListenerHelper.onGnssSvStatusChanged(
+ svCount,
+ mSvs,
+ mSnrs,
+ mSvElevations,
+ mSvAzimuths,
+ mSvEphemerisPresences,
+ mSvAlmanacPresences,
+ mSvUsedInFix);
+
+ if (VERBOSE) {
+ Log.v(TAG, "GNSS SV count: " + svCount);
+ for (int i = 0; i < svCount; i++) {
+ Log.v(TAG, "sv: " + mSvs[i] +
+ " snr: " + mSnrs[i]/10 +
+ " elev: " + mSvElevations[i] +
+ " azimuth: " + mSvAzimuths[i] +
+ (!mSvEphemerisPresences[i] ? " " : " E") +
+ (!mSvAlmanacPresences[i] ? " " : " A") +
+ (!mSvUsedInFix[i] ? "" : "U"));
+ }
+ }
+
+ // return number of sets used in fix instead of total
+ updateStatus(mStatus, countGnssSvUsedInFix(svCount));
+
+ if (mNavigating && mStatus == LocationProvider.AVAILABLE && mLastFixTime > 0 &&
+ System.currentTimeMillis() - mLastFixTime > RECENT_FIX_TIMEOUT) {
+ // send an intent to notify that the GPS is no longer receiving fixes.
+ Intent intent = new Intent(LocationManager.GPS_FIX_CHANGE_ACTION);
+ intent.putExtra(LocationManager.EXTRA_GPS_ENABLED, false);
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
+ updateStatus(LocationProvider.TEMPORARILY_UNAVAILABLE, mSvCount);
+ }
+ }
+
+ /**
* called from native code to update AGPS status
*/
private void reportAGpsStatus(int type, int status, byte[] ipaddr) {
@@ -2352,12 +2418,18 @@ public class GpsLocationProvider implements LocationProviderInterface {
private static final int ALMANAC_MASK = 1;
private static final int USED_FOR_FIX_MASK = 2;
+ // GNSS extension
+ private static final int MAX_GNSS_SVS = 256;
+
// preallocated arrays, to avoid memory allocation in reportStatus()
- private int mSvs[] = new int[MAX_SVS];
- private float mSnrs[] = new float[MAX_SVS];
- private float mSvElevations[] = new float[MAX_SVS];
- private float mSvAzimuths[] = new float[MAX_SVS];
+ private int mSvs[] = new int[MAX_GNSS_SVS];
+ private float mSnrs[] = new float[MAX_GNSS_SVS];
+ private float mSvElevations[] = new float[MAX_GNSS_SVS];
+ private float mSvAzimuths[] = new float[MAX_GNSS_SVS];
private int mSvMasks[] = new int[3];
+ private boolean mSvEphemerisPresences[] = new boolean[MAX_GNSS_SVS];
+ private boolean mSvAlmanacPresences[] = new boolean[MAX_GNSS_SVS];
+ private boolean mSvUsedInFix[] = new boolean[MAX_GNSS_SVS];
private int mSvCount;
// preallocated to avoid memory allocation in reportNmea()
private byte[] mNmeaBuffer = new byte[120];
@@ -2377,6 +2449,12 @@ public class GpsLocationProvider implements LocationProviderInterface {
// mask[0] is ephemeris mask and mask[1] is almanac mask
private native int native_read_sv_status(int[] svs, float[] snrs,
float[] elevations, float[] azimuths, int[] masks);
+ // returns number of GNSS SVs
+ private native int native_read_gnss_sv_status(int[] svs, float[] snrs,
+ float[] elevations, float[] azimuths,
+ boolean[] ephemerisPresences,
+ boolean[] almanacPresences,
+ boolean[] usedInFix);
private native int native_read_nmea(byte[] buffer, int bufferSize);
private native void native_inject_location(double latitude, double longitude, float accuracy);
diff --git a/services/core/java/com/android/server/location/GpsStatusListenerHelper.java b/services/core/java/com/android/server/location/GpsStatusListenerHelper.java
index 376b4a5..9155c7f 100644
--- a/services/core/java/com/android/server/location/GpsStatusListenerHelper.java
+++ b/services/core/java/com/android/server/location/GpsStatusListenerHelper.java
@@ -104,6 +104,32 @@ abstract class GpsStatusListenerHelper extends RemoteListenerHelper<IGpsStatusLi
foreach(operation);
}
+ public void onGnssSvStatusChanged(
+ final int svCount,
+ final int[] prns,
+ final float[] snrs,
+ final float[] elevations,
+ final float[] azimuths,
+ final boolean[] ephemerisPresences,
+ final boolean[] almanacPresences,
+ final boolean[] usedInFix) {
+ Operation operation = new Operation() {
+ @Override
+ public void execute(IGpsStatusListener listener) throws RemoteException {
+ listener.onGnssSvStatusChanged(
+ svCount,
+ prns,
+ snrs,
+ elevations,
+ azimuths,
+ ephemerisPresences,
+ almanacPresences,
+ usedInFix);
+ }
+ };
+ foreach(operation);
+ }
+
public void onNmeaReceived(final long timestamp, final String nmea) {
Operation operation = new Operation() {
@Override
diff --git a/services/core/jni/com_android_server_location_GpsLocationProvider.cpp b/services/core/jni/com_android_server_location_GpsLocationProvider.cpp
index 0d3fdf6..49727e9 100644
--- a/services/core/jni/com_android_server_location_GpsLocationProvider.cpp
+++ b/services/core/jni/com_android_server_location_GpsLocationProvider.cpp
@@ -39,6 +39,7 @@ static jobject mCallbacksObj = NULL;
static jmethodID method_reportLocation;
static jmethodID method_reportStatus;
static jmethodID method_reportSvStatus;
+static jmethodID method_reportGnssSvStatus;
static jmethodID method_reportAGpsStatus;
static jmethodID method_reportNmea;
static jmethodID method_setEngineCapabilities;
@@ -69,6 +70,7 @@ static const GnssConfigurationInterface* sGnssConfigurationInterface = NULL;
// temporary storage for GPS callbacks
static GpsSvStatus sGpsSvStatus;
+static GnssSvStatus sGnssSvStatus;
static const char* sNmeaString;
static int sNmeaStringLength;
@@ -105,11 +107,21 @@ static void status_callback(GpsStatus* status)
static void sv_status_callback(GpsSvStatus* sv_status)
{
JNIEnv* env = AndroidRuntime::getJNIEnv();
+ ALOGD("sv_status_callback(%p)", sv_status);
memcpy(&sGpsSvStatus, sv_status, sizeof(sGpsSvStatus));
env->CallVoidMethod(mCallbacksObj, method_reportSvStatus);
checkAndClearExceptionFromCallback(env, __FUNCTION__);
}
+static void gnss_sv_status_callback(GnssSvStatus* sv_status)
+{
+ JNIEnv* env = AndroidRuntime::getJNIEnv();
+ ALOGD("gnss_sv_status_callback(%p)", sv_status);
+ memcpy(&sGnssSvStatus, sv_status, sizeof(sGnssSvStatus));
+ env->CallVoidMethod(mCallbacksObj, method_reportGnssSvStatus);
+ checkAndClearExceptionFromCallback(env, __FUNCTION__);
+}
+
static void nmea_callback(GpsUtcTime timestamp, const char* nmea, int length)
{
JNIEnv* env = AndroidRuntime::getJNIEnv();
@@ -156,6 +168,7 @@ GpsCallbacks sGpsCallbacks = {
location_callback,
status_callback,
sv_status_callback,
+ gnss_sv_status_callback,
nmea_callback,
set_capabilities_callback,
acquire_wakelock_callback,
@@ -446,6 +459,7 @@ static void android_location_GpsLocationProvider_class_init_native(JNIEnv* env,
method_reportLocation = env->GetMethodID(clazz, "reportLocation", "(IDDDFFFJ)V");
method_reportStatus = env->GetMethodID(clazz, "reportStatus", "(I)V");
method_reportSvStatus = env->GetMethodID(clazz, "reportSvStatus", "()V");
+ method_reportGnssSvStatus = env->GetMethodID(clazz, "reportGnssSvStatus", "()V");
method_reportAGpsStatus = env->GetMethodID(clazz, "reportAGpsStatus", "(II[B)V");
method_reportNmea = env->GetMethodID(clazz, "reportNmea", "(J)V");
method_setEngineCapabilities = env->GetMethodID(clazz, "setEngineCapabilities", "(I)V");
@@ -627,6 +641,44 @@ static jint android_location_GpsLocationProvider_read_sv_status(JNIEnv* env, job
return (jint) num_svs;
}
+static jint android_location_GpsLocationProvider_read_gnss_sv_status(JNIEnv* env, jobject obj,
+ jintArray prnArray, jfloatArray snrArray, jfloatArray elevArray, jfloatArray azumArray,
+ jbooleanArray ephemerisPresencesArray,
+ jbooleanArray almanacPresencesArray,
+ jbooleanArray usedInFixArray)
+{
+ // this should only be called from within a call to reportGnssSvStatus
+
+ jint* prns = env->GetIntArrayElements(prnArray, 0);
+ jfloat* snrs = env->GetFloatArrayElements(snrArray, 0);
+ jfloat* elev = env->GetFloatArrayElements(elevArray, 0);
+ jfloat* azim = env->GetFloatArrayElements(azumArray, 0);
+ jboolean* ephemeris_presences = env->GetBooleanArrayElements(ephemerisPresencesArray, 0);
+ jboolean* almanac_presences = env->GetBooleanArrayElements(almanacPresencesArray, 0);
+ jboolean* used_in_fix = env->GetBooleanArrayElements(usedInFixArray, 0);
+
+ int num_svs = sGnssSvStatus.num_svs;
+ for (int i = 0; i < num_svs; i++) {
+ prns[i] = sGnssSvStatus.sv_list[i].prn;
+ snrs[i] = sGnssSvStatus.sv_list[i].snr;
+ elev[i] = sGnssSvStatus.sv_list[i].elevation;
+ azim[i] = sGnssSvStatus.sv_list[i].azimuth;
+
+ ephemeris_presences[i] = sGnssSvStatus.sv_list[i].has_ephemeris ? 1 : 0;
+ almanac_presences[i] = sGnssSvStatus.sv_list[i].has_almanac ? 1 : 0;
+ used_in_fix[i] = sGnssSvStatus.sv_list[i].used_in_fix ? 1 : 0;
+ }
+
+ env->ReleaseIntArrayElements(prnArray, prns, 0);
+ env->ReleaseFloatArrayElements(snrArray, snrs, 0);
+ env->ReleaseFloatArrayElements(elevArray, elev, 0);
+ env->ReleaseFloatArrayElements(azumArray, azim, 0);
+ env->ReleaseBooleanArrayElements(ephemerisPresencesArray, ephemeris_presences, 0);
+ env->ReleaseBooleanArrayElements(almanacPresencesArray, almanac_presences, 0);
+ env->ReleaseBooleanArrayElements(usedInFixArray, used_in_fix, 0);
+ return (jint) num_svs;
+}
+
static void android_location_GpsLocationProvider_agps_set_reference_location_cellid(JNIEnv* env,
jobject obj, jint type, jint mcc, jint mnc, jint lac, jint psc, jint cid)
{
@@ -1444,6 +1496,9 @@ static JNINativeMethod sMethods[] = {
{"native_read_sv_status",
"([I[F[F[F[I)I",
(void*)android_location_GpsLocationProvider_read_sv_status},
+ {"native_read_gnss_sv_status",
+ "([I[F[F[F[Z[Z[Z)I",
+ (void*)android_location_GpsLocationProvider_read_gnss_sv_status},
{"native_read_nmea", "([BI)I", (void*)android_location_GpsLocationProvider_read_nmea},
{"native_inject_time", "(JJI)V", (void*)android_location_GpsLocationProvider_inject_time},
{"native_inject_location",
--
1.9.1

View File

@ -0,0 +1,82 @@
commit 0b06f324c638dddae0f644d939c3a863dab49008
Author: Dmitry Smirnov <divis1969@gmail.com>
Date: Fri Apr 15 23:06:58 2016 +0300
Add MTK-speific APIs to access NV audio data
These data is used by Engineering app to configure audio params (volume)
Change-Id: Id4a6736b00ca7e3dac8683e182bb02b03aedeae6
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index fee1ead..5626a15 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -1480,7 +1480,43 @@ exit:
return jStatus;
}
+static jint
+android_media_AudioSystem_setAudioData(JNIEnv *env, jobject clazz,
+ jint jA, jint jB, jbyteArray jArray)
+{
+ ALOGV("setAudioData");
+ if (jArray == NULL || env->GetArrayLength(jArray) == 0) {
+ ALOGE("setAudioData: emply buffer");
+ return (jint)AUDIO_JAVA_BAD_VALUE;
+ }
+
+ jbyte * buffer = env->GetByteArrayElements(jArray, NULL);
+
+ int status = AudioSystem::setAudioData((int)jA, (unsigned long)jB, (char*)buffer);
+
+ env->ReleaseByteArrayElements(jArray, buffer, 0);
+ ALOGV("setAudioData: status %d", status);
+ return (jint)status;
+}
+static jint
+android_media_AudioSystem_getAudioData(JNIEnv *env, jobject clazz,
+ jint jA, jint jB, jbyteArray jArray)
+{
+ ALOGV("getAudioData");
+ if (jArray == NULL || env->GetArrayLength(jArray) == 0) {
+ ALOGE("getAudioData: emply buffer");
+ return (jint)AUDIO_JAVA_BAD_VALUE;
+ }
+
+ jbyte * buffer = env->GetByteArrayElements(jArray, NULL);
+
+ int status = AudioSystem::getAudioData((int)jA, (unsigned long)jB, (char*)buffer);
+
+ env->ReleaseByteArrayElements(jArray, buffer, 0);
+ ALOGV("getAudioData: status %d", status);
+ return (jint)status;
+}
// ----------------------------------------------------------------------------
@@ -1525,6 +1561,10 @@ static JNINativeMethod gMethods[] = {
(void *)android_media_AudioSystem_getAudioHwSyncForSession},
{"registerPolicyMixes", "(Ljava/util/ArrayList;Z)I",
(void *)android_media_AudioSystem_registerPolicyMixes},
+ {"getAudioData", "(II[B)I",
+ (void *)android_media_AudioSystem_getAudioData},
+ {"setAudioData", "(II[B)I",
+ (void *)android_media_AudioSystem_setAudioData},
};
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index bf79e9a..50b94ae 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -604,5 +604,8 @@ public class AudioSystem
public static native int getAudioHwSyncForSession(int sessionId);
public static native int registerPolicyMixes(ArrayList<AudioMix> mixes, boolean register);
+
+ public static native int getAudioData(int par, int size, byte[] data);
+ public static native int setAudioData(int par, int size, byte[] data);
}

View File

@ -0,0 +1,38 @@
commit 7087ac5dfe4196fa3b51a9e534a43854e382cc02
Author: Jan Engelmohr <jan.engelmohr@mailbox.tu-dresden.de>
Date: Sun Apr 3 21:22:13 2016 +0200
added missing fingerprint callback class
Change-Id: Ibfc1ab6608042f485de96a07fe4898b7af93774f
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardFingerPrintCallback.java b/packages/Keyguard/src/com/android/keyguard/KeyguardFingerPrintCallback.java
new file mode 100644
index 0000000..36cfdf1
--- /dev/null
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardFingerPrintCallback.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2012 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.
+ */
+
+package com.android.keyguard;
+
+/**
+ * Callback for general information relevant to lock screen.
+ */
+public class KeyguardFingerPrintCallback {
+ public void onFingerPrintUnmatch(String msg) { }
+}

View File

@ -0,0 +1,90 @@
From f19189f89c5a9c77c3f8635117c739126f6a25d0 Mon Sep 17 00:00:00 2001
From: Wang Xuerui <idontknw.wang@gmail.com>
Date: Fri, 28 Aug 2015 05:35:12 +0800
Subject: [PATCH 2/5] location: add some logs, just to be confident
you know, this is MTK...
Change-Id: Ie16cdec573d24f1a23d09ddb3b864c4fcec8e39d
---
...android_server_location_GpsLocationProvider.cpp | 35 ++++++++++++++++++++--
1 file changed, 32 insertions(+), 3 deletions(-)
diff --git a/services/core/jni/com_android_server_location_GpsLocationProvider.cpp b/services/core/jni/com_android_server_location_GpsLocationProvider.cpp
index 49727e9..84d17b9 100644
--- a/services/core/jni/com_android_server_location_GpsLocationProvider.cpp
+++ b/services/core/jni/com_android_server_location_GpsLocationProvider.cpp
@@ -491,12 +491,15 @@ static void android_location_GpsLocationProvider_class_init_native(JNIEnv* env,
"(Landroid/location/GpsNavigationMessageEvent;)V");
err = hw_get_module(GPS_HARDWARE_MODULE_ID, (hw_module_t const**)&module);
+ ALOGV("hw_get_module err=%d module=%p", err, module);
if (err == 0) {
hw_device_t* device;
err = module->methods->open(module, GPS_HARDWARE_MODULE_ID, &device);
+ ALOGV("module->methods->open err=%d device=%p", err, device);
if (err == 0) {
gps_device_t* gps_device = (gps_device_t *)device;
sGpsInterface = gps_device->get_gps_interface(gps_device);
+ ALOGV("gps_device->get_gps_interface() = %p", sGpsInterface);
}
}
if (sGpsInterface) {
@@ -521,6 +524,16 @@ static void android_location_GpsLocationProvider_class_init_native(JNIEnv* env,
(const GnssConfigurationInterface*)sGpsInterface->get_extension(
GNSS_CONFIGURATION_INTERFACE);
}
+
+ ALOGV("sGpsXtraInterface = %p", sGpsXtraInterface);
+ ALOGV("sAGpsInterface = %p", sAGpsInterface);
+ ALOGV("sGpsNiInterface = %p", sGpsNiInterface);
+ ALOGV("sGpsDebugInterface = %p", sGpsDebugInterface);
+ ALOGV("sAGpsRilInterface = %p", sAGpsRilInterface);
+ ALOGV("sGpsGeofencingInterface = %p", sGpsGeofencingInterface);
+ ALOGV("sGpsMeasurementInterface = %p", sGpsMeasurementInterface);
+ ALOGV("sGpsNavigationMessageInterface = %p", sGpsNavigationMessageInterface);
+ ALOGV("sGnssConfigurationInterface = %p", sGnssConfigurationInterface);
}
static jboolean android_location_GpsLocationProvider_is_supported(JNIEnv* env, jclass clazz) {
@@ -533,18 +546,34 @@ static jboolean android_location_GpsLocationProvider_is_supported(JNIEnv* env, j
static jboolean android_location_GpsLocationProvider_init(JNIEnv* env, jobject obj)
{
+ ALOGV("GpsLocationProvider_init");
// this must be set before calling into the HAL library
if (!mCallbacksObj)
mCallbacksObj = env->NewGlobalRef(obj);
// fail if the main interface fails to initialize
- if (!sGpsInterface || sGpsInterface->init(&sGpsCallbacks) != 0)
+ int ret;
+
+ ALOGV("init: sGpsInterface=%p sGpsXtraInterface=%p", sGpsInterface, sGpsXtraInterface);
+ if (sGpsInterface) {
+ ret = sGpsInterface->init(&sGpsCallbacks);
+ ALOGV("init: sGpsInterface->init() ret=%d", ret);
+ if (ret != 0) {
+ return JNI_FALSE;
+ }
+ } else {
return JNI_FALSE;
+ }
// if XTRA initialization fails we will disable it by sGpsXtraInterface to NULL,
// but continue to allow the rest of the GPS interface to work.
- if (sGpsXtraInterface && sGpsXtraInterface->init(&sGpsXtraCallbacks) != 0)
- sGpsXtraInterface = NULL;
+ if (sGpsXtraInterface) {
+ ret = sGpsXtraInterface->init(&sGpsXtraCallbacks);
+ ALOGV("init: sGpsXtraInterface->init() ret=%d", ret);
+ if (ret != 0) {
+ sGpsXtraInterface = NULL;
+ }
+ }
if (sAGpsInterface)
sAGpsInterface->init(&sAGpsCallbacks);
if (sGpsNiInterface)
--
1.9.1

View File

@ -0,0 +1,35 @@
From 4b81d92c16297d7dd0eabe771f455068dbfc74aa Mon Sep 17 00:00:00 2001
From: Wang Xuerui <idontknw.wang@gmail.com>
Date: Fri, 28 Aug 2015 06:18:05 +0800
Subject: [PATCH 3/5] location: style fix
Change-Id: Ia7cc4b44f418273eec9154d1ce7e58e950e48ec2
---
services/core/jni/com_android_server_location_GpsLocationProvider.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/services/core/jni/com_android_server_location_GpsLocationProvider.cpp b/services/core/jni/com_android_server_location_GpsLocationProvider.cpp
index 84d17b9..7d2fbe1 100644
--- a/services/core/jni/com_android_server_location_GpsLocationProvider.cpp
+++ b/services/core/jni/com_android_server_location_GpsLocationProvider.cpp
@@ -107,7 +107,7 @@ static void status_callback(GpsStatus* status)
static void sv_status_callback(GpsSvStatus* sv_status)
{
JNIEnv* env = AndroidRuntime::getJNIEnv();
- ALOGD("sv_status_callback(%p)", sv_status);
+ ALOGD("sv_status_callback(%p)", sv_status);
memcpy(&sGpsSvStatus, sv_status, sizeof(sGpsSvStatus));
env->CallVoidMethod(mCallbacksObj, method_reportSvStatus);
checkAndClearExceptionFromCallback(env, __FUNCTION__);
@@ -116,7 +116,7 @@ static void sv_status_callback(GpsSvStatus* sv_status)
static void gnss_sv_status_callback(GnssSvStatus* sv_status)
{
JNIEnv* env = AndroidRuntime::getJNIEnv();
- ALOGD("gnss_sv_status_callback(%p)", sv_status);
+ ALOGD("gnss_sv_status_callback(%p)", sv_status);
memcpy(&sGnssSvStatus, sv_status, sizeof(sGnssSvStatus));
env->CallVoidMethod(mCallbacksObj, method_reportGnssSvStatus);
checkAndClearExceptionFromCallback(env, __FUNCTION__);
--
1.9.1

View File

@ -0,0 +1,137 @@
commit 5dc569d2ff6c2d9fdb7db6df5a772df17fbff428
Author: Jan Engelmohr <jan.engelmohr@mailbox.tu-dresden.de>
Date: Tue May 17 11:08:10 2016 +0200
minimal Xlog implmentation
Change-Id: I27a1e6b46c004c2d4d571f466eb54e8b094e71ac
diff --git a/core/java/com/mediatek/xlog/Xlog.java b/core/java/com/mediatek/xlog/Xlog.java
new file mode 100755
index 0000000..4be6749
--- /dev/null
+++ b/core/java/com/mediatek/xlog/Xlog.java
@@ -0,0 +1,123 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+ * the prior written permission of MediaTek inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of MediaTek Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+ * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+ * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+ * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+ * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek
+ * Software") have been modified by MediaTek Inc. All revisions are subject to
+ * any receiver's applicable license agreements with MediaTek Inc.
+ */
+
+package com.mediatek.xlog;
+
+import android.util.Log;
+
+public final class Xlog {
+ /**
+ * API for verbose log.
+ * @internal
+ */
+ public static int v(String tag, String msg) {
+ return 0;
+ }
+
+ /**
+ * API for verbose log.
+ * @internal
+ */
+ public static int v(String tag, String msg, Throwable tr) {
+ return 0;
+ }
+
+ /**
+ * API for debug log.
+ * @internal
+ */
+ public static int d(String tag, String msg) {
+ return 0;
+ }
+
+ /**
+ * API for debug log.
+ * @internal
+ */
+ public static int d(String tag, String msg, Throwable tr) {
+ return 0;
+ }
+
+ /**
+ * API for info log.
+ * @internal
+ */
+ public static int i(String tag, String msg) {
+ return 0;
+ }
+
+ /**
+ * API for info log.
+ * @internal
+ */
+ public static int i(String tag, String msg, Throwable tr) {
+ return 0;
+ }
+
+ /**
+ * API for info log.
+ * @internal
+ */
+ public static int w(String tag, String msg) {
+ return 0;
+ }
+
+ /**
+ * API for warning log.
+ * @internal
+ */
+ public static int w(String tag, String msg, Throwable tr) {
+ return 0;
+ }
+
+ /**
+ * API for warning log.
+ * @internal
+ */
+ public static int e(String tag, String msg) {
+ return 0;
+ }
+
+ /**
+ * API for verbose log.
+ * @internal
+ */
+ public static int e(String tag, String msg, Throwable tr) {
+ return 0;
+ }
+
+}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,27 @@
commit b7a4c9488cc2b00ee019ea03016a65027d4e9018
Author: Dmitry Smirnov <divis1969@gmail.com>
Date: Fri Apr 15 22:51:05 2016 +0300
Add MTK-specific APIs of the audio HAL
These APIs allow Engineering app to read/write audio data from/to NV
Change-Id: Ic1b59119081b41b8d1f59abfbf24a33b3d97a7a6
diff --git a/include/hardware/audio.h b/include/hardware/audio.h
index c3cb740..02372f5 100644
--- a/include/hardware/audio.h
+++ b/include/hardware/audio.h
@@ -753,6 +753,12 @@ struct audio_hw_device {
int (*listen_set_parameters)(struct audio_hw_device *dev,
const char *kv_pairs);
#endif
+ int (*dummy1)(void);
+ int (*dummy2)(void);
+ int (*dummy3)(void);
+ int (*dummy4)(void);
+ int (*set_audio_data)(struct audio_hw_device *dev, int par1, size_t len, void *ptr);
+ int (*get_audio_data)(struct audio_hw_device *dev, int par1, size_t len, void *ptr);
};
typedef struct audio_hw_device audio_hw_device_t;

View File

@ -0,0 +1,88 @@
diff -ur libhardware/include/hardware/gps.h libhardware_mtk/include/hardware/gps.h
--- libhardware/include/hardware/gps.h 2016-01-22 15:47:44.063878000 -0800
+++ libhardware_mtk/include/hardware/gps.h 2016-01-23 05:25:12.364466000 -0800
@@ -37,6 +37,9 @@
/** Milliseconds since January 1, 1970 */
typedef int64_t GpsUtcTime;
+/** Maximum number of GNSS SVs for gps_sv_status_callback(). */
+#define GNSS_MAX_SVS 256
+
/** Maximum number of SVs for gps_sv_status_callback(). */
#define GPS_MAX_SVS 32
@@ -482,6 +485,33 @@
float azimuth;
} GpsSvInfo;
+
+/** Represents GNSS SV information. */
+typedef struct {
+ /** set to sizeof(GnssSvInfo) */
+ size_t size;
+ /** Pseudo-random number for the SV. */
+ int prn;
+ /** Signal to noise ratio. */
+ float snr;
+ /** Elevation of SV in degrees. */
+ float elevation;
+ /** Azimuth of SV in degrees. */
+ float azimuth;
+ /**
+ * SVs have ephemeris data.
+ */
+ bool has_ephemeris;
+ /**
+ * SVs have almanac data.
+ */
+ bool has_almanac;
+ /**
+ * SVs were used for computing the most recent position fix.
+ */
+ bool used_in_fix;
+} GnssSvInfo;
+
/** Represents SV status. */
typedef struct {
/** set to sizeof(GpsSvStatus) */
@@ -511,6 +541,18 @@
} GpsSvStatus;
+/** Represents GNSS SV status. */
+typedef struct {
+ /** set to sizeof(GnssSvStatus) */
+ size_t size;
+
+ /** Number of SVs currently visible. */
+ int num_svs;
+
+ /** Contains an array of GNSS SV information. */
+ GnssSvInfo sv_list[GNSS_MAX_SVS];
+} GnssSvStatus;
+
/* 2G and 3G */
/* In 3G lac is discarded */
typedef struct {
@@ -550,6 +592,12 @@
*/
typedef void (* gps_sv_status_callback)(GpsSvStatus* sv_info);
+/**
+ * Callback with GNSS SV status information.
+ * Can only be called from a thread created by create_thread_cb.
+ */
+typedef void (* gnss_sv_status_callback)(GnssSvStatus* sv_info);
+
/** Callback for reporting NMEA sentences.
* Can only be called from a thread created by create_thread_cb.
*/
@@ -583,6 +631,7 @@
gps_location_callback location_cb;
gps_status_callback status_cb;
gps_sv_status_callback sv_status_cb;
+ gnss_sv_status_callback gnss_sv_status_cb;
gps_nmea_callback nmea_cb;
gps_set_capabilities set_capabilities_cb;
gps_acquire_wakelock acquire_wakelock_cb;

View File

@ -0,0 +1,72 @@
diff -ur libhardware_legacy/vibrator/Android.mk libhardware_legacy_mtk/vibrator/Android.mk
--- libhardware_legacy/vibrator/Android.mk 2016-01-22 15:47:44.299870000 -0800
+++ libhardware_legacy_mtk/vibrator/Android.mk 2016-01-23 05:25:45.217410359 -0800
@@ -2,3 +2,8 @@
LOCAL_SRC_FILES += vibrator/vibrator.c
+ifdef BOARD_HAVE_OPENSOURCE_IMMVIBE
+LOCAL_SHARED_LIBRARIES += libimmvibeconnector
+LOCAL_CFLAGS += -DHAVE_OPENSOURCE_IMMVIBE
+LOCAL_CPPFLAGS += -DHAVE_OPENSOURCE_IMMVIBE
+endif
diff -ur libhardware_legacy/vibrator/vibrator.c libhardware_legacy_mtk/vibrator/vibrator.c
--- libhardware_legacy/vibrator/vibrator.c 2016-01-22 15:47:44.299870000 -0800
+++ libhardware_legacy_mtk/vibrator/vibrator.c 2016-01-23 05:25:45.217410359 -0800
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
#include <hardware_legacy/vibrator.h>
#include "qemu.h"
@@ -21,6 +22,12 @@
#include <fcntl.h>
#include <errno.h>
+#include <cutils/log.h>
+
+#ifdef HAVE_OPENSOURCE_IMMVIBE
+#include <immvibeconn.h>
+#endif
+
#define THE_DEVICE "/sys/class/timed_output/vibrator/enable"
int vibrator_exists()
@@ -33,6 +40,11 @@
}
#endif
+#ifdef HAVE_OPENSOURCE_IMMVIBE
+ /* TODO */
+ return 1;
+#endif
+
fd = open(THE_DEVICE, O_RDWR);
if(fd < 0)
return 0;
@@ -51,6 +63,23 @@
}
#endif
+#ifdef HAVE_OPENSOURCE_IMMVIBE
+ fd = immvibe_conn_open();
+ if (fd < 0) {
+ return errno;
+ }
+
+ if (timeout_ms) {
+ ret = immvibe_conn_vibrate(fd, timeout_ms);
+ } else {
+ ret = immvibe_conn_stop(fd);
+ }
+
+ close(fd);
+
+ return ret ? -1 : 0;
+#endif
+
fd = open(THE_DEVICE, O_RDWR);
if(fd < 0)
return errno;

View File

@ -0,0 +1,71 @@
commit a30f5239dedbd4d6fe3e0035cfa9fd1e535adc0a
Author: Jan Engelmohr <jan.engelmohr@mailbox.tu-dresden.de>
Date: Mon Apr 25 18:25:38 2016 +0200
first shots at multiSIM disabling
Change-Id: Ifbfbdaf644c327d421632af8a306d171bae9818b
diff --git a/src/com/android/settings/sim/MultiSimEnablerPreference.java b/src/com/android/settings/sim/MultiSimEnablerPreference.java
index a7fbf7d..81d95e0 100644
--- a/src/com/android/settings/sim/MultiSimEnablerPreference.java
+++ b/src/com/android/settings/sim/MultiSimEnablerPreference.java
@@ -42,6 +42,8 @@ import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;
import android.os.Handler;
import android.os.Message;
+import android.os.RemoteException;
+import android.os.ServiceManager;
import android.preference.Preference;
import android.preference.SwitchPreference;
import android.provider.Settings;
@@ -64,6 +66,7 @@ import android.widget.Toast;
import com.android.internal.telephony.SubscriptionController;
import com.android.internal.telephony.TelephonyIntents;
+import com.android.internal.telephony.ITelephony;
import com.android.settings.R;
import com.android.settings.Utils;
@@ -99,6 +102,7 @@ public class MultiSimEnablerPreference extends SwitchPreference implements
private boolean mExplicitlyDisabled = false;
private SubscriptionManager mSubscriptionManager;
+ private ITelephony mITelephony;
private int[] mTintArr;
private String[] mColorStrings;
@@ -115,6 +119,7 @@ public class MultiSimEnablerPreference extends SwitchPreference implements
mTintArr = context.getResources().getIntArray(com.android.internal.R.array.sim_colors);
mColorStrings = context.getResources().getStringArray(R.array.color_picker);
mTintSelectorPos = 0;
+ mITelephony = ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));
setOnPreferenceChangeListener(this);
setPersistent(false);
@@ -354,6 +359,17 @@ public class MultiSimEnablerPreference extends SwitchPreference implements
Toast.makeText(getContext(), textResId, Toast.LENGTH_LONG).show();
}
+ private void setRadioStateForSpecificSIM(boolean checked, int subscriberID) {
+ if(subscriberID != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ try {
+ mITelephony.setRadioForSubscriber(subscriberID, checked);
+ }
+ catch (RemoteException re) {
+ re.printStackTrace();
+ }
+ }
+ }
+
private void sendSubConfigurationRequest(boolean enable) {
if (mParentHandler == null) {
return;
@@ -361,6 +377,7 @@ public class MultiSimEnablerPreference extends SwitchPreference implements
mTargetState = enable;
showProgressDialog(enable);
+ setRadioStateForSpecificSIM(enable, mSir.getSubscriptionId());
if (enable) {
SubscriptionManager.activateSubId(mSir.getSubscriptionId());
} else {

View File

@ -0,0 +1,49 @@
From a945c5e9b1d19788cbd414795f6bfb2325c11024 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=8B=E5=8F=B6=E9=9A=8F=E9=A3=8Eivan?=
<yanziily@gmail.com>
Date: Sun, 3 Jan 2016 22:03:19 +0800
Subject: [PATCH] Update for mtk
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Change-Id: Ia628e1992fd978c17da6f9c526160adcdae9a693
Signed-off-by: 秋叶随风ivan <yanziily@gmail.com>
---
src/com/android/phone/CardStateMonitor.java | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/com/android/phone/CardStateMonitor.java b/src/com/android/phone/CardStateMonitor.java
index da128c9..9288005 100644
--- a/src/com/android/phone/CardStateMonitor.java
+++ b/src/com/android/phone/CardStateMonitor.java
@@ -70,6 +70,8 @@ public class CardStateMonitor extends Handler {
private static final int EVENT_ICC_CHANGED = 1;
private static final int EVENT_ICCID_LOAD_DONE = 2;
+ private boolean mNeedsFakeIccid = false;
+
static class CardInfo {
boolean mLoadingIcc;
String mIccId;
@@ -185,6 +187,9 @@ public class CardStateMonitor extends Handler {
String iccId = null;
if (iccIdResult.exception != null) {
logd("Exception in GET ICCID," + iccIdResult.exception);
+ if(mNeedsFakeIccid) {
+ iccId = IccConstants.FAKE_ICCID;
+ }
} else {
iccId = IccUtils.bcdToString(data, 0, data.length);
logd("get iccid on card" + cardIndex + ", iccId=" + iccId);
@@ -229,6 +234,7 @@ public class CardStateMonitor extends Handler {
if (validApp != null) {
IccFileHandler fileHandler = validApp.getIccFileHandler();
if (fileHandler != null) {
+ mNeedsFakeIccid = fileHandler.needsFakeIccid();
fileHandler.loadEFTransparent(IccConstants.EF_ICCID,
obtainMessage(EVENT_ICCID_LOAD_DONE, sub));
request = true;
--
1.9.1

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,80 @@
From d6dad36eaa04fcaf481afad5807d31403ec865be Mon Sep 17 00:00:00 2001
Message-Id: <d6dad36eaa04fcaf481afad5807d31403ec865be.1469614455.git.gzwalter79@gmail.com>
From: walter79 <gzwalter79@gmail.com>
Date: Wed, 27 Jul 2016 12:14:03 +0200
Subject: [PATCH] Prevent MTK audio and silead fingerprint libs from spamming
in the log
thanks to fire855
---
liblog/logd_write.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/liblog/logd_write.c b/liblog/logd_write.c
index 4b9c7c7..34fb9b1 100644
--- a/liblog/logd_write.c
+++ b/liblog/logd_write.c
@@ -457,6 +457,61 @@ int __android_log_write(int prio, const char *tag, const char *msg)
if (!tag)
tag = "";
+ // Prevent MTK audio and silead fingerprint libs from spamming in the log
+ if (!strcmp(tag, "AudioMTKFilterManager") ||
+ !strcmp(tag, "AudioMTKFilter") ||
+ !strcmp(tag, "AudioMTKStreamOut") ||
+ !strcmp(tag, "AudioVPWStreamIn") ||
+ !strcmp(tag, "AudioDigitalControl") ||
+ !strcmp(tag, "AudioLoopbackController") ||
+ !strcmp(tag, "AudioMTKVolumeController") ||
+ !strcmp(tag, "AudioDigitalControl") ||
+ !strcmp(tag, "AudioAnalogControl") ||
+ !strcmp(tag, "AudioAfeReg") ||
+ !strcmp(tag, "AudioAnalogReg") ||
+ !strcmp(tag, "AudioPlatformDevice") ||
+ !strcmp(tag, "AudioMachineDevice") ||
+ !strcmp(tag, "MtkAudioLoud") ||
+ !strcmp(tag, "LoopbackManager") ||
+ !strcmp(tag, "AudioInterConnection") ||
+ !strcmp(tag, "SLCODE") ||
+ (strstr(tag, "ccci") != NULL) ||
+ (strstr(tag, "Eis") != NULL) ||
+ (strstr(tag, "aaa") != NULL) ||
+ (strstr(tag, "af_") != NULL) ||
+ (strstr(tag, "ae_") != NULL) ||
+ (strstr(tag, "IMem") != NULL) ||
+ (strstr(tag, "iio") != NULL) ||
+ (strstr(tag, "Mdp") != NULL) ||
+ (strstr(tag, "isp_tuning") != NULL) ||
+ (strstr(tag, "Ae") != NULL) ||
+ (strstr(tag, "flash") != NULL) ||
+ (strstr(tag, "flicker_hal") != NULL) ||
+ (strstr(tag, "NVRAM") != NULL) ||
+ (strstr(tag, "Flicker") != NULL) ||
+ (strstr(tag, "TuningMgr") != NULL) ||
+ (strstr(tag, "MDP") != NULL) ||
+ (strstr(tag, "Iop") != NULL) ||
+ (strstr(tag, "Isp") != NULL) ||
+ (strstr(tag, "VDO") != NULL) ||
+ (strstr(tag, "MtkOmx") != NULL) ||
+ (strstr(tag, "MtkCam") != NULL) ||
+ (strstr(tag, "AfAlgo") != NULL) ||
+ (strstr(tag, "isp_mgr_") != NULL) ||
+ (strstr(tag, "SeninfDrvImp") != NULL) ||
+ (strstr(tag, "NormalPipe") != NULL) ||
+ (strstr(tag, "awb_state") != NULL) ||
+ (strstr(tag, "paramctrl_attributes") != NULL) ||
+ (strstr(tag, "LensMCU") != NULL) ||
+ (strstr(tag, "GraphicBuffer") != NULL) ||
+ (strstr(tag, "MALI") != NULL) ||
+ (strstr(tag, "GED") != NULL) ||
+ (strstr(tag, "SocketClient") != NULL) ||
+ (strstr(tag, "BT3") != NULL)) {
+ return 0;
+ }
+
+
/* XXX: This needs to go! */
if (!strcmp(tag, "HTC_RIL") ||
!strncmp(tag, "RIL", 3) || /* Any log tag with "RIL" as the prefix */
--
1.9.1

View File

@ -0,0 +1,30 @@
diff -ur netd/server/SoftapController.cpp netd_mtk/server/SoftapController.cpp
--- netd/server/SoftapController.cpp 2016-01-22 15:55:47.409331000 -0800
+++ netd_mtk/server/SoftapController.cpp 2016-01-23 05:24:28.098782000 -0800
@@ -48,7 +48,7 @@
#endif
#ifdef LIBWPA_CLIENT_EXISTS
-static const char HOSTAPD_UNIX_FILE[] = "/data/misc/wifi/hostapd/wlan0";
+static const char HOSTAPD_UNIX_FILE[] = "/data/misc/wifi/hostapd/ap0";
static const char HOSTAPD_SOCKETS_DIR[] = "/data/misc/wifi/sockets";
static const char HOSTAPD_DHCP_DIR[] = "/data/misc/dhcp";
#endif
@@ -161,7 +161,7 @@
if (!pid) {
ensure_entropy_file_exists();
- if (execl(HOSTAPD_BIN_FILE, HOSTAPD_BIN_FILE,
+ if (execl(HOSTAPD_BIN_FILE, HOSTAPD_BIN_FILE, "-d",
"-e", WIFI_ENTROPY_FILE,
HOSTAPD_CONF_FILE, (char *) NULL)) {
ALOGE("execl failed (%s)", strerror(errno));
@@ -246,7 +246,7 @@
asprintf(&wbuf, "interface=%s\ndriver=nl80211\nctrl_interface="
"/data/misc/wifi/hostapd\nssid=%s\nchannel=%d\nieee80211n=1\n"
"hw_mode=g\nignore_broadcast_ssid=%d\nwowlan_triggers=any\n",
- argv[2], argv[3], channel, hidden);
+ /*argv[2]*/"ap0", argv[3], channel, hidden);
if (argc > 7) {
if (!strcmp(argv[6], "wpa-psk")) {