From 77acc8c2e9a14ead80e86339f263ccc99418f46a Mon Sep 17 00:00:00 2001
From: hjw <hjw@ma.nodka.com>
Date: Sat, 27 Jan 2024 14:02:49 +0000
Subject: [PATCH] 霍盛版本开机时开启红外感应读取(gpio95)

---
 app/src/main/java/com/jwipc/nodka_reboot_under/The_Service.java |   81 +++++++++++++++++++++++++++++++++++++---
 1 files changed, 74 insertions(+), 7 deletions(-)

diff --git a/app/src/main/java/com/jwipc/nodka_reboot_under/The_Service.java b/app/src/main/java/com/jwipc/nodka_reboot_under/The_Service.java
index 3c35eb9..b81bd45 100644
--- a/app/src/main/java/com/jwipc/nodka_reboot_under/The_Service.java
+++ b/app/src/main/java/com/jwipc/nodka_reboot_under/The_Service.java
@@ -2,25 +2,34 @@
 
 
 import com.jwipc.nodka_reboot_under.utils.Utils;
+import com.nodka.api.NodkaAPI;
 
 import android.app.Service;
+import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.os.Build;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Message;
+import android.os.PowerManager;
+import android.os.SystemClock;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
 
 public class The_Service extends Service{
 
-	
+
 	Utils mUtils = null;
 	public static Handler handler;
 	
 	public static final int apk_feed_dog = 1;
-	
-	
-	
-	
+
+	private NodkaAPI mNodkaAPI = MyApplication.getApplication().getNodkaAPI();
+	private Thread gpioThread;
+	private static boolean gpioRead;
+
 	@Override
 	public IBinder onBind(Intent arg0) {
 		// TODO Auto-generated method stub
@@ -38,9 +47,67 @@
 		
 		receive_BroadcastReceiver_byService();
 		mUtils.stop_watch_dog_apk_feed();
-		
+
+		if (Build.DISPLAY.startsWith("Android-11-V7.009")) {
+
+			// 霍盛版本红外感应功能 gpio口95
+			startGpioThread();
+		}
 	}
-	
+
+	private void startGpioThread() {
+		mNodkaAPI.gpio_export(95);
+		gpioRead = true;
+		gpioThread = new Thread(() -> {
+			while (gpioRead) {
+				if (!isInteractive() && isActive()) {
+					keycodePower();
+				}
+				SystemClock.sleep(500);
+			}
+		});
+		gpioThread.start();
+	}
+
+	private boolean isActive() {
+		return mNodkaAPI.gpio_read(95) == 1;
+	}
+
+	private void keycodePower() {
+		execRootCmdSilent("input keyevent KEYCODE_POWER");
+	}
+
+	private boolean isInteractive(){
+		PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
+		return powerManager.isInteractive();
+	}
+
+	public static int execRootCmdSilent(String cmd) {
+		int result = -1;
+		DataOutputStream dos = null;
+
+		try {
+			Process p = Runtime.getRuntime().exec("su");
+			dos = new DataOutputStream(p.getOutputStream());
+			dos.writeBytes(cmd + "\n");
+			dos.flush();
+			dos.writeBytes("exit\n");
+			dos.flush();
+			p.waitFor();
+			result = p.exitValue();
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			if (dos != null) {
+				try {
+					dos.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		return result;
+	}
 	
 	private void receive_BroadcastReceiver_byService()
 	{

--
Gitblit v1.6.2