[1]長按power鍵,下面有四個選項能夠選擇戶外,靜音,振動標準四種模式java
GlobalActions.java->createDialog():
if (!mHasVibrator) {
mSilentModeAction = new SilentModeToggleAction();
} else {
mSilentModeAction = new SilentModeTriStateAction(mContext, mAudioManager, mHandler);
}
it seems we use : mSilentModeAction = new SilentModeTriStateAction(mContext, mAudioManager, mHandler);android
[2] MONKEY test命令git
monkey --ignore-crashes --ignore-timeouts --kill-process-after-error --ignore-security-exceptions --throttle 1500 -v -v -v -s 5 60000000shell
[3]session
IOVDD :I/O supply voltage
VCI:analog supply voltage
VGH / VGL :high / low voltage for gate control signals and gate circuit of panel
VCOM:common voltage of panelapp
[4]less
raw就是平臺的isp yuv是sensor的isp,ide
若是yuv要支持自動對焦的話,會增長成本.函數
[5]oop
低溫進後攝閃屏AE unstable
[6]
圖庫進程報錯,沒法鏈接到相機的問題,重啓電腦就OK
目前這個問題跟高通溝通下來是由於內存不足,致使ISP分配不到內存,而camera有一個守護進程超時致使media server異常,從而camera的相關服務沒有正常退出,致使後邊再也進不去。
目前內存不足致使的異常咱們解決不了,咱們如今能作的是想辦法退出camera後能從新進入。
camera的接口,在應用裏邊能夠增長一種機制來檢測camera是否發生了異常。這種機制的思想是這樣的:
camera在預覽的時候會有callback上報,應用上註冊這個callback:
mCameraDevice.setPreviewCallback(mRawPreviewCallback)
這個callback中有個方法:
onPreviewFrame
這個方法能夠知道有沒有preview數據。
就能夠根據這個來實現camera的退出。
判斷依據是:若是在5秒內這個callback沒回來或者回來沒有數據,就認爲camera異常,應用主動退出。若是在5S內有數據的話就須要從新計時。
還要確認有沒有正常狀況有沒有誤觸發這個機制的可能。
[7]
一、LCD殘影通常是由panel的液晶特性決定的,處於規格之內就行了,若是頻繁出現就要查電壓了
二、閃爍以及相鄰像素之間的互相影響通常是由極性反轉的方式不正確致使的
三、形成顏色不正常的因素不少,除了數據位數,RGB的順序,PCLK的極性以外,PCLK的頻率,極性反轉的方式都會形成顏色的不正常
四、圖像的對比度能夠經過調節VCOM/VCOMH/VCOML來實現
五、形成LCD白屏的緣由有不少,但根本的緣由就是背光亮了可是沒有RGB數據過來或者背光亮了PANEL確不能正確顯示數據。從這個根本的緣由去尋找其餘的緣由,好比是否正常初始化,是否背光點得太早等等; 另外有時候若是寄存器的延時不夠的話也可能形成必定狀況下的白屏,尤爲是那些啓動屏幕,開始數據傳輸,或者讀寫之類的寄存器。
六、啓動時候的花屏通常能夠經過點背光以前的一個清data操做來完成,好比將FB的數據所有寫0
七、圖像出現上下或者左右不對齊通常是margin的參數不對, 抖動通常是sync的信號不穩定形成的
八、圖像出現水波紋相似於抖動閃爍的現象可能跟極性反轉有關係,也有可能和gate driver和source driver的電壓有關係
九、硬件的時序參數有時候不必定與datasheet上的參數徹底匹配,因此通常的開始的時候都讓時間稍微長一點,好比reset的時間,數據的設置時間和保持時間等等,調通之後再來優化速度
十、關於LCD背光,通常都有一個誤差,好比說背光偏暖就會使得圖像偏黃,若是背光偏冷就會使得圖像偏紫。這裏補充一點小知識,太陽光的七色光譜紅、橙、黃、綠、藍、靛、紫,紅光波長最長爲暖色,紫光波長最短偏冷色,色溫的單位是K(開爾文),越高就越偏冷,越低就越便暖。色溫上的喜愛是因人而定的,這跟咱們平常看到景物景色有關,例如在接近赤道的人,平常看到的平均色溫是在11000K(8000K(黃昏)~17000K(中午)),因此比較喜歡高色溫(看起來比較真實),相反的,在緯度較高的地區(平均色溫約6000K)的人就比較喜歡低色溫的(5600K或6500K),也就是說若是您用一臺高色溫的電視去表現北極的風景,看起來就感受偏青;相反的若您用低色溫的電視去看亞熱帶的風情,您會感受有點偏紅, 電視或者顯示屏的色溫是如何界定的呢?由於在中國的景色一年四季平均色溫約在8000K~9500K之間,因此電視臺在節目的製做都以觀衆的色溫爲9300K去攝影的。可是歐美由於平時的色溫和咱們有差別,以一年四季的平均色溫約6000K爲製做的參考的,因此咱們再看那些外來的片子時,就會發現5600K~6500K最適合觀看。通常來講色溫偏低給人的感受是比較偏暗,好比偏黃給人的感受就是偏暗,若是偏藍給人的感受就是偏亮。
十一、幾個LCD的光學參數,這裏只是粗暴地說說,具體地能夠參考一些資料說得很詳細。一個就是LCD的亮度參數mcd,m是毫的意思,其實真的參數是cd(坎貝拉),如今手機上的LED通常都是用的1500-1700mcd的。還有一個就是LCD的色度參數,衡量的參數不少,這裏只說色度系xyz3座標,表明紅綠藍,相應的下降就會偏另一種色,好比說x/y下降就會便藍,主要用在調顏色的誤差上,和上面的色溫是聯繫在一塊兒的
十二、lcd debug的時候有兩個很重要的技能,一個是用來debug顏色的問題,刷單色條;還一個就是debug初始化過程的回讀函數。刷色條的問題很簡單,按照RGB的格式分別在將R、G、B的位上置1就行了;至於回讀寄存器,通常datasheet上都有相關的時序,按照時序來讀就行了,這裏稍微說一下使用GPIO模擬SPI的話只須要將GPIO設成輸入而後讀寄存器就行了。回讀寄存器是必須的debug手段,能夠檢查數據是否下進去,若是下進去了說明指令自己有問題,若是讀出來爲全0或者全1之類的就要考慮一數據是否輸出?二數據輸出了可是確沒進panel,有兩種可能狀況,一種是可能打樣沒打好,panel和板子的鏈接沒連好,還有一種就是指令的格式不正確
[8]
camera:mclk修改成12M?
{
.seq_type = SENSOR_CLK,
.seq_val = SENSOR_CAM_MCLK,
.config_val = 12000000,
.delay = 5,
},
clock-8610.c:
static struct clk_freq_tbl ftbl_mclk0_1_clk[] = {
F_MM(12000000, gpll0,10, 1, 5),
F_MM(24000000, gpll0, 5, 1, 5),
F_MM(66670000, gpll0, 9, 0, 0),
F_END,
};
F = Fsrc / DIV * (m/n)
[9]
進後攝 圖庫進程報錯,沒法鏈接到相機?
由於內存不足,致使ISP分配不到內存,而camera有一個守護進程超時致使media server異常,從而camera的相關服務沒有正常退出,致使後邊再也進不去
--- a/mm-camera2/media-controller/modules/isp/algo/isp_tintless.c
+++ b/mm-camera2/media-controller/modules/isp/algo/isp_tintless.c
@@ -79,8 +79,9 @@ static void *isp_tintless_main_loop(void *data)
session->mesh_hw = out_table;
session->ready_frame_id = thread_data->in_frame_id;
pthread_mutex_unlock(&thread_data->lock_mutex);
+ }else{^M
+ pthread_mutex_unlock(&thread_data->lock_mutex);^M
}
- pthread_mutex_unlock(&thread_data->lock_mutex);
}
return NULL;
[10]不能用移動卡,請問如何解鎖
在adb shell裏 smd at+lctunlock
dsatLCvendor.c modem_proc裏的代碼
diff --git a/modem_proc/datamodem/interface/atcop/src/dsatLCvendor.c b/modem_proc/datamodem/interface/atcop/src/dsatLCvendor.c
index e3e3117..f8545a2 100644
--- a/modem_proc/datamodem/interface/atcop/src/dsatLCvendor.c
+++ b/modem_proc/datamodem/interface/atcop/src/dsatLCvendor.c
+#ifdef LCT_FEATURE_PLMN_LOCK
+ { "+LCTPLMN", RESTRICTED,
+ SPECIAL_NONE, 0, NULL, NULL,
+ XXX_exec_lctplmnlock_cmd, NULL},
+
+ { "+LCTUNLOCK", RESTRICTED,
+ SPECIAL_NONE, 0, NULL, NULL,
+ XXX_exec_lctplmnlock_clear_cmd, NULL},
+
+ { "+LCTLP", RESTRICTED,
+ SPECIAL_NONE, 0, NULL, NULL,
+ XXX_exec_lct_lock_policy_cmd, NULL},
+#endif
};
diff --git a/src/com/android/settings/MasterClearConfirm.java b/src/com/android/settings/MasterClearConfirm.java
old mode 100755
new mode 100644
index de48fc9..e07577c
--- a/src/com/android/settings/MasterClearConfirm.java
+++ b/src/com/android/settings/MasterClearConfirm.java
@@ -24,6 +24,7 @@ import android.app.Fragment;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
+import android.os.SystemProperties;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -41,6 +42,8 @@ import java.io.File;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.InputStream;
+import java.lang.Runtime;
+import java.lang.Process;
import android.widget.Toast;
import android.content.Intent;
@@ -89,6 +92,29 @@ public class MasterClearConfirm extends Activity {
* and invoke the Checkin Service to reset the device to its factory-default
* state (rebooting in the process).
*/
+
+ private static void sendCommand(String s) {
+ Log.d(TAG, "send_command()");
+ try{
+ Process proc = Runtime.getRuntime().exec(s);
+ Log.d(TAG, "send command is:" + s);
+ proc.waitFor();
+ }catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ private void enableSimLock() {
+ String device = SystemProperties.get("ro.product.name","");
+ Log.d(TAG, "device name = " + device);
+ if (device.equals("HTC XXX")) {
+ sendCommand("smd AT+XXXUNLOCK");
+ sendCommand("smd AT+XXXPLMN=1,\"20404,46099\"");
+ sendCommand("smd AT+XXXPLMN=3,\"46003\"");
+ sendCommand("smd AT+XXXLP=5");
+ }
+ }
+
private Button.OnClickListener mFinalClickListener = new Button.OnClickListener() {
public void onClick(View v) {
@@ -102,6 +128,10 @@ public class MasterClearConfirm extends Activity {
if (am != null) am.clearRtcAlarm();
// end
+
+ enableSimLock();
+
// format internal storage in {com.android.contacts.storage.StorageFormatterService}
if (mEraseInternalSdCard) {
[11]
將kernel裏的 qcom,mdss-dsi-traffic-mode 修改成 "non_burst_sync_pulse"; uboot的 pinfo->mipi.traffic_mode也要對應修改.。non_burst_sync_pulse對應的是0,1,2哪個。Mdss_dsi.h (kernel\drivers\video\msm\mdss)
#define DSI_NON_BURST_SYNCH_PULSE 0
#define DSI_NON_BURST_SYNCH_EVENT 1
#define DSI_BURST_MODE 2
[12]
USB接上電腦,顯示內部存儲卡free:1.36G,但經過手機->設置->存儲則發現可用空間爲1.56G.
如今往內部存儲卡里拷貝一直到free顯示0爲止,提示已滿。 按道理這個時候用手機拍視頻,應該提示存儲空間不足,但實際上用手機依然能夠錄一段200M的視頻。
frameworks/base/media/java/android/mtp/MtpDevice.java
Retrieves the {@link MtpStorageInfo} for a storage unit:
public MtpStorageInfo getStorageInfo(int storageId)
frameworks/base/media/jni/android_mtp_MtpDevice.cpp
…
409 {"native_get_device_info", "()Landroid/mtp/MtpDeviceInfo;",
410 (void *)android_mtp_MtpDevice_get_device_info},
411 {"native_get_storage_ids", "()[I", (void *)android_mtp_MtpDevice_get_storage_ids},
412 {"native_get_storage_info", "(I)Landroid/mtp/MtpStorageInfo;",
413 (void *)android_mtp_MtpDevice_get_storage_info},
android_mtp_MtpDevice_get_storage_info()->
MtpStorageInfo* storageInfo = device->getStorageInfo(storageID); ->
frameworks/av/media/mtp/MtpDevice.cpp
MtpStorageInfo* MtpDevice::getStorageInfo(MtpStorageID storageID) ->
sendRequest(MTP_OPERATION_GET_STORAGE_INFO))
frameworks/av/media/mtp/MtpServer.cpp
MtpServer::handleRequest() //處理MTP請求的核心函數
334 case MTP_OPERATION_GET_STORAGE_INFO:
335 response = doGetStorageInfo();
336 break;
doGetStorageInfo(): 獲取剩餘空間size:
mData.putUInt64(storage->getFreeSpace());
->
frameworks/av/media/mtp/MtpStorage.cpp
uint64_t MtpStorage::getFreeSpace():
74uint64_t MtpStorage::getFreeSpace() {
75 struct statfs stat;
76 if (statfs(getPath(), &stat))
77 return -1;
78 uint64_t freeSpace = (uint64_t)stat.f_bavail * (uint64_t)stat.f_bsize;
79 return (freeSpace > mReserveSpace ? freeSpace - mReserveSpace : 0);
80}
You can see there is some space reserved, so i guess on your platform the mReserveSpace is about 200MB.
The reason is, when system running, many services, apps, would save data to data partition, if at the same time, MTP function push a file to data partition and consume all the space, then there would be fatal error for the services and apps, right?
Plz. keep the original design if you fully understand its purpose.
[13]IIC speed
msm8610.dtsi
i2c@f9923000 { /* BLSP-1 QUP-1 */
cell-index = <1>;
compatible = "qcom,i2c-qup";
#address-cells = <1>;
#size-cells = <0>;
reg-names = "qup_phys_addr";
reg = <0xf9923000 0x1000>;
interrupt-names = "qup_err_intr";
interrupts = <0 95 0>;
qcom,i2c-bus-freq = <100000>;
qcom,i2c-src-freq = <19200000>;
qcom,sda-gpio = <&msmgpio 2 0>;
qcom,scl-gpio = <&msmgpio 3 0>;
qcom,master-id = <86>;
};
[13]NFC省晶振與不省晶振有什麼區別
不省晶體方案
clk是直接晶體產生供給NFC,軟件須要在NFC代碼位置進行配置,高通部分代碼是否須要配置須要軟件確認下
省晶體方案
clk公用RF的clk時鐘,高通部分代碼和NFC部分代碼都須要配置
[14]
sys/kernel/debug/spmi/spmi-0 寫入寄存器值 echo 0x1043 >address
cat data
01040 -- -- -- 4A
查看電池是否是充滿。
batterydata:
msm8226-qrd.dtsi/ {
qrd_batterydata: qcom,battery-data {
qcom,rpull-up-kohm = <100>;
qcom,vref-batt-therm = <1800000>;
/include/ "batterydata-qrd-4v35-2000mah.dtsi"
[15]
For HOST side, please see dsi_host_v2.c, and msm_dsi_host_init function.
For Slave side, please mdss_dsi_panel.c, and mdss_dsi_panel_init function.
If you want know the detail, please study the mdss source code and add more debug log on it.
BTW,
MDSS stands for Mobile Display SubSystem.
MDP stands for Mobile DIsplay Processor.
That is to say, MDP5 means that MDSS
[16]
./qcom/common/rootdir/etc/init.qcom
.syspart_fixup.sh中
touch /system/etc/boot_fixup
要如何修改它的權限呢,目錄下的文件和目錄權限全部者爲root,同時對於其餘用戶不可寫
touch /system/etc/boot_fixup
chown root root(or system) /system/etc/boot_fixup
chmod 664 /system/etc/boot_fixup
[17]應用程序寫文件到內置存儲卡將data空間佔滿,須要加保護,請問如何加保護?
static int has_free_blocks(s64 free_blocks, s64 dirty_blocks)
{
int ret;
- if(current->cred->uid > 10000 && (free_blocks - dirty_blocks) < 7680) {
+
+ if((free_blocks - dirty_blocks) < 7680) {
ret = get_pid_cmdline(current, buf);
if(ret > 0)
buf[ret] = 0;
else
return 1;
+ if(current->cred->uid <= 10000 && strcmp(buf, "/system/bin/sdcard"))
+ return 1;
pr_info("free_blocks: %s\n", buf);
10000是app最小的uid