提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
例如:记录Android驱动层和系统层做键值上报广播功能,kl文件是驱动和系统层的桥梁,kl文件写的内容是驱动文件设好的键值,后面的名字需要给系统层使用。
一、framework层如何配合驱动层做键值映射
示例:如何把上报流程从kl文件传到应用层,kl文件反应的是驱动上报的键值,后面的命名则是系统层读取的键值(如果已经有调试好广播名,也可以直接改为那个广播名,那么只要按下按键就会触发广播)下面是整理的补丁,系统定义的键值和kl文件里面的不需要一样,只需要保证名字是一样的,如KEYCODE_XX(kl中定义的宏)
diff --git a/frameworks/native/include/android/keycodes.h b/frameworks/native/include/android/keycodes.h
index 186bf8c5963..7e56b996694 100755
--- a/frameworks/native/include/android/keycodes.h
+++ b/frameworks/native/include/android/keycodes.h
@@ -779,7 +779,8 @@ enum {
AKEYCODE_PROFILE_SWITCH = 288,
//hw++ for scanl 2d satrt
AKEYCODE_MYSCAN_L = 289,
- AKEYCODE_MYSCAN_R = 290
+ AKEYCODE_MYSCAN_R = 290,
+ AKEYCODE_SCAN_POGO = 291
//hw++ for scanl 2d end
// NOTE: If you add a new keycode here you must also add it to several other files.
// Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list.
diff --git a/frameworks/native/libs/input/InputEventLabels.cpp b/frameworks/native/libs/input/InputEventLabels.cpp
index 08ec9077058..a302d3589e9 100755
--- a/frameworks/native/libs/input/InputEventLabels.cpp
+++ b/frameworks/native/libs/input/InputEventLabels.cpp
@@ -316,7 +316,8 @@ namespace android {
DEFINE_KEYCODE(THUMBS_DOWN), \
DEFINE_KEYCODE(PROFILE_SWITCH), \
DEFINE_KEYCODE(MYSCAN_L), \
- DEFINE_KEYCODE(MYSCAN_R)
+ DEFINE_KEYCODE(MYSCAN_R), \
+ DEFINE_KEYCODE(SCAN_POGO)
//hw++ for 2d scan
// NOTE: If you add a new axis here you must also add it to several other files.
diff --git a/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java b/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 283b99067e2..1179a073621 100755
--- a/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -2574,29 +2574,29 @@ public class PhoneWindowManager implements WindowManagerPolicy {
};
private static final String keyFactoryKit = "+-+-++--";
- private static String factoryKitSerial = "";
- private void activateFactoryKit() {
- try {
- Intent intent = new Intent();
- intent.setComponent(new android.content.ComponentName("com.qti.factory",
- "com.qti.factory.Framework.DevicesTest"));
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- mContext.startActivity(intent);
- android.util.Log.i("krn", "ACTIVATE FACTORY KIT");
- } catch (Exception e) { }
- }
- private void updateFactorySerial(String key) {
- android.util.Log.i("krn", factoryKitSerial + "&" + key);
- factoryKitSerial += key;
- if (keyFactoryKit.equals(factoryKitSerial)) {
- activateFactoryKit();
- factoryKitSerial = "";
- } else {
- int len = factoryKitSerial.length();
- String checkStr = keyFactoryKit.substring(0, len);
- if (!checkStr.equals(factoryKitSerial))
- factoryKitSerial = "";
- }
+ private static String factoryKitSerial = "";
+ private void activateFactoryKit() {
+ try {
+ Intent intent = new Intent();
+ intent.setComponent(new android.content.ComponentName("com.qti.factory",
+ "com.qti.factory.Framework.DevicesTest"));
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ mContext.startActivity(intent);
+ android.util.Log.i("krn", "ACTIVATE FACTORY KIT");
+ } catch (Exception e) { }
+ }
+ private void updateFactorySerial(String key) {
+ android.util.Log.i("krn", factoryKitSerial + "&" + key);
+ factoryKitSerial += key;
+ if (keyFactoryKit.equals(factoryKitSerial)) {
+ activateFactoryKit();
+ factoryKitSerial = "";
+ } else {
+ int len = factoryKitSerial.length();
+ String checkStr = keyFactoryKit.substring(0, len);
+ if (!checkStr.equals(factoryKitSerial))
+ factoryKitSerial = "";
+ }
}
boolean keycodeRelease = true; //hw++
@@ -2895,6 +2895,8 @@ boolean keycodeRelease = true; //hw++
case KeyEvent.KEYCODE_MYSCAN_L:
case KeyEvent.KEYCODE_MYSCAN_R:
+ case KeyEvent.KEYCODE_SCAN_POGO:
+
android.util.Log.i("ysq","scanservice_running:"+Settings.Global.getInt(mContext.getContentResolver(),"scanservice_running",-1));
if(Settings.Global.getInt(mContext.getContentResolver(),"scanservice_running",-1)==1){ //add by ysq intercept scankey
@@ -2921,6 +2923,17 @@ boolean keycodeRelease = true; //hw++
keycodeRelease = true;
return -1;
}
+ if(keyCode == KeyEvent.KEYCODE_SCAN_POGO && down && keycodeRelease){//hw ++
+ android.util.Log.d("hw++","KEYCODE_SCAN_POGO down");
+ mContext.sendBroadcast(new Intent(ACTION_KEYEVENT_KEYCODE_SCAN_R_DOWN));
+ keycodeRelease = false;
+ return -1;
+ }else if(keyCode == KeyEvent.KEYCODE_SCAN_POGO && up){//hw ++
+ android.util.Log.d("hw++","KEYCODE_SCAN_POGO up");
+ mContext.sendBroadcast(new Intent(ACTION_KEYEVENT_KEYCODE_SCAN_R_UP));
+ keycodeRelease = true;
+ return -1;
+ }
}
break;
diff --git a/frameworks/base/data/keyboards/Generic.kl b/frameworks/base/data/keyboards/Generic.kl
index d180c9af349..6ea0566e38f 100755
--- a/frameworks/base/data/keyboards/Generic.kl
+++ b/frameworks/base/data/keyboards/Generic.kl
@@ -80,7 +80,7 @@ key 57 SPACE
key 58 CAPS_LOCK
key 59 F1
key 60 F2
-key 61 F3
+key 61 SCAN_POGO
key 62 F4
key 63 F5
key 64 F6
diff --git a/frameworks/base/core/api/current.txt b/frameworks/base/core/api/current.txt
index 018394f4baa..533778bed0a 100644
--- a/frameworks/base/core/api/current.txt
+++ b/frameworks/base/core/api/current.txt
@@ -47622,6 +47622,7 @@ package android.view {
field public static final int KEYCODE_RIGHT_BRACKET = 72; // 0x48
field public static final int KEYCODE_RO = 217; // 0xd9
field public static final int KEYCODE_S = 47; // 0x2f
+ field public static final int KEYCODE_SCAN_POGO = 291; // 0x123
field public static final int KEYCODE_SCROLL_LOCK = 116; // 0x74
field public static final int KEYCODE_SEARCH = 84; // 0x54
field public static final int KEYCODE_SEMICOLON = 74; // 0x4a
diff --git a/frameworks/base/core/java/android/view/KeyEvent.java b/frameworks/base/core/java/android/view/KeyEvent.java
index 6af8fa4080c..dbde1d3a7ed 100755
--- a/frameworks/base/core/java/android/view/KeyEvent.java
+++ b/frameworks/base/core/java/android/view/KeyEvent.java
@@ -833,6 +833,7 @@ public class KeyEvent extends InputEvent implements Parcelable {
//hw++ for 2d start
public static final int KEYCODE_MYSCAN_L = 289;
public static final int KEYCODE_MYSCAN_R = 290;
+ public static final int KEYCODE_SCAN_POGO = 291;
/**
* Integer value of the last KEYCODE. Increases as new keycodes are added to KeyEvent.
* @hide
@@ -1982,6 +1983,7 @@ public class KeyEvent extends InputEvent implements Parcelable {
case KeyEvent.KEYCODE_SYSTEM_NAVIGATION_RIGHT:
case KeyEvent.KEYCODE_MYSCAN_L: //hw++ for 2d scan
case KeyEvent.KEYCODE_MYSCAN_R: //hw++ for 2d scan
+ case KeyEvent.KEYCODE_SCAN_POGO: //hw++ for 2d scan
return true;
}
diff --git a/frameworks/base/core/res/res/values/attrs.xml b/frameworks/base/core/res/res/values/attrs.xml
index 04d5f0cd03f..c878f9da319 100755
--- a/frameworks/base/core/res/res/values/attrs.xml
+++ b/frameworks/base/core/res/res/values/attrs.xml
@@ -1986,6 +1986,7 @@
<enum name="KEYCODE_PROFILE_SWITCH" value="288" />
<enum name="KEYCODE_MYSCAN_L" value="289" /> <!-- hw++ for 2d scan-->
<enum name="KEYCODE_MYSCAN_R" value="290" /> <!-- hw++ for 2d scan-->
+ <enum name="KEYCODE_SCAN_POGO" value="291" /> <!-- ysj++ for 2d scan-->
</attr>
<!-- ***************************************************************** -->
Android中如果在framework中有修改过内容,如:current.txt需要使用make update-api来更新,否则编译会报错
二、如何查看应用层的键值广播
1.问题分析
已经从kl文件改到键值,键值能上报(中断OK)但是没有响应的动作,一改成旧的键值就可以:
一是可能kl文件映射驱动有问题
二是做完了上报流程但是最后广播那里apk接收不到(可以cat vendor/etc/scanner_config.xml看看广播是哪些,自己添加的广播app识别不到没用),所以可以替换kl文件先做试验,还可以找app查看键值上报的名字是哪个
2.方法
修改kl文件看看是不是驱动映射出了问题,要么看看是不是广播看看扫码用的apk没有识别到
如何做kl重新挂载:
dumpsys input //看kl文件位置,
adb pull xx/Generic.kl //看看里面是什么然后可以做修改,能直接验证不用重新编译版本
/*remount要解锁,所以先解锁*/
adb reboot bootloader , fastboot flashing unlock , fastboot reboot ,adb root , adb disable-verity ,adb reboot
adb root , adb remount , adb push xx/Generic.kl (改好后的),然后再reboot
``
---