Android系统层做键值上报广播

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

例如:记录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
``
---

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值