高通开发Qual F&Q

[1]长按power键,下面有四个选项可以选择户外,静音,振动标准四种模式

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);

[2] MONKEY test命令

monkey --ignore-crashes --ignore-timeouts --kill-process-after-error --ignore-security-exceptions --throttle 1500 -v -v -v -s 5 60000000

[3]

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 panel

[4]

raw就是平台的isp yuv是sensor的isp,

如果yuv要支持自动对焦的话,会增加成本.

[5]

低温进后摄闪屏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]

     1、LCD残影一般是由panel的液晶特性决定的,处于规格以内就好了,如果频繁出现就要查电压了

     2、闪烁以及相邻像素之间的互相影响一般是由极性反转的方式不正确导致的

     3、造成颜色不正常的因素很多,除了数据位数,RGB的顺序,PCLK的极性之外,PCLK的频率,极性反转的方式都会造成颜色的不正常

     4、图像的对比度可以通过调节VCOM/VCOMH/VCOML来实现

     5、造成LCD白屏的原因有很多,但根本的原因就是背光亮了但是没有RGB数据过来或者背光亮了PANEL确不能正确显示数据。从这个根本的原因去寻找其他的原因,比如是否正常初始化,是否背光点得太早等等; 另外有时候如果寄存器的延时不够的话也可能造成一定情况下的白屏,尤其是那些启动屏幕,开始数据传输,或者读写之类的寄存器。

     6、启动时候的花屏一般可以通过点背光之前的一个清data操作来完成,比如将FB的数据全部写0

     7、图像出现上下或者左右不对齐一般是margin的参数不对, 抖动一般是sync的信号不稳定造成的

     8、图像出现水波纹类似于抖动闪烁的现象可能跟极性反转有关系,也有可能和gate driver和source driver的电压有关系

     9、硬件的时序参数有时候不一定与datasheet上的参数完全匹配,所以一般的开始的时候都让时间稍微长一点,比如reset的时间,数据的设置时间和保持时间等等,调通以后再来优化速度

     10、关于LCD背光,一般都有一个偏差,比如说背光偏暖就会使得图像偏黄,如果背光偏冷就会使得图像偏紫。这里补充一点小知识,太阳光的七色光谱红、橙、黄、绿、蓝、靛、紫,红光波长最长为暖色,紫光波长最短偏冷色,色温的单位是K(开尔文),越高就越偏冷,越低就越便暖。色温上的喜好是因人而定的,这跟我们日常看到景物景色有关,例如在接近赤道的人,日常看到的平均色温是在11000K(8000K(黄昏)~17000K(中午)),所以比较喜欢高色温(看起来比较真实),相反的,在纬度较高的地区(平均色温约6000K)的人就比较喜欢低色温的(5600K或6500K),也就是说如果您用一台高色温的电视去表现北极的风景,看起来就感觉偏青;相反的若您用低色温的电视去看亚热带的风情,您会感觉有点偏红, 电视或者显示屏的色温是如何界定的呢?因为在中国的景色一年四季平均色温约在8000K~9500K之间,所以电视台在节目的制作都以观众的色温为9300K去摄影的。但是欧美因为平时的色温和我们有差异,以一年四季的平均色温约6000K为制作的参考的,所以我们再看那些外来的片子时,就会发现5600K~6500K最适合观看。一般来说色温偏低给人的感觉是比较偏暗,比如偏黄给人的感觉就是偏暗,如果偏蓝给人的感觉就是偏亮。

      11、几个LCD的光学参数,这里只是粗暴地说说,具体地可以参考一些资料说得很详细。一个就是LCD的亮度参数mcd,m是毫的意思,其实真的参数是cd(坎贝拉),现在手机上的LED一般都是用的1500-1700mcd的。还有一个就是LCD的色度参数,衡量的参数很多,这里只说色度系xyz3坐标,代表红绿蓝,相应的降低就会偏另外一种色,比如说x/y降低就会便蓝,主要用在调颜色的偏差上,和上面的色温是联系在一起的

      12、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

展开阅读全文

ORM中的F表达式和Q表达式

03-09

<p style="color:#666666;">rn <span style="color:#FF0000;"><strong>适合人群:</strong></span> rn</p>rn<p style="color:#666666;">rn <span>1、具有一定Python语言基础,有一定的web前端基础,想要深入学习Python Web框架的朋友;</span> rn</p>rn<p style="color:#666666;">rn <span>2、学习完“跟着王进老师学开发Python篇”“跟着王进老师学Web前端开发”的朋友;</span> rn</p>rn<p style="color:#666666;">rn <span>3、有Django基础,但是想学习企业级项目实战的朋友;</span> rn</p>rn<p style="color:#666666;">rn <span>4、喜欢 Django 框架并想深入研究的朋友;</span> rn</p>rn<p style="color:#666666;">rn <span>5、有一定的数据库基础</span> rn</p>rn<p style="color:#666666;">rn <span>&nbsp;</span> rn</p>rn<p style="color:#666666;">rn <span style="color:#FF0000;"><strong>课程目标:</strong></span><br />rn<span>本系列课程是从零基础开始并深入讲解Django,最终学会使用Django框架开发企业级的项目。课程知识点全网最详细,项目实战贴近企业需求。本系列课程除了非常详细的讲解Django框架本身的知识点以外,还讲解了web开发中所需要用到的技术,学完本系列课程后,您将独立做出一个具有后台管理系统,并且前端非常优美实用的网站。</span>rn</p>rn<p style="color:#666666;">rn <span>&nbsp;</span> rn</p>rn<p style="color:#666666;">rn <span style="color:#FF0000;"><strong>课程内容:</strong></span><br />rn<span>在人工智能大行其道的时代,许多开发者对Python这门编程语言都比较熟悉。但是如何用它实现一个企业级别的项目,可能许多朋友还存在一些困惑。联科教育“跟着王进老师学Python”系列课程是专门针对想要从事Python Web开发的朋友而准备的,并且按照企业需求的标准定制的学习路线。学习路线中包含Python基础和进阶、Web前端、MySQL数据库、Flask和Django框架以及N多个企业真实项目。在学习完本系列中所有的课程后,从前端页面的实现,到后台代码的编写,再到数据库的管理,一人可以搞定一个公司网站的事情,掌握实现全栈开发,让你升职加薪不是梦!</span> rn</p>rn<p style="color:#666666;">rn <br />rn</p>rn<p style="color:#666666;">rn <span>本季课程介绍了Django中ORM模型,使用ORM模型的优势;Django中ORM模型常用的字段,ORM实现数据查询;Django后台管理等。所有应用均通过案例“在线图书商城”完成讲解和演示,完整项目,贯穿全部知识点,边学边练,帮助大家快速掌握知识,了解企业要求。</span> rn</p>rn<p style="color:#666666;">rn <span><br />rn</span> rn</p>rn<p style="color:#666666;">rn <span><img src="https://img-bss.csdn.net/201903090625208525.png" alt="" /><br />rn</span> rn</p>

没有更多推荐了,返回首页