Qual F&Q

[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

相关文章
相关标签/搜索