package com.basic.security.utils; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.SystemClock; import com.alfeye.a1io.A1IoDevBaseUtil; import com.alfeye.a1io.A1IoDevManager; import com.alfeye.readcardlib.readcard.ReadCardUtil; import com.alfeye.seriallib.Listener.OnRadarDistanceListener; import com.alfeye.seriallib.SerialDevice.RadarDistanceSensor; import com.alfeye.seriallib.android_serialport_api.SerialPortFinder; import com.basic.security.activity.MainActivity; import com.basic.security.base.BaseApplication; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class BlackDevice { int lightStrong = 10; public ReadCardUtil readCardUtil; public static A1IoDevBaseUtil basUtil; public static RadarDistanceSensor distanceSensor; long startTime = 0; private static List integers = new ArrayList<>(); private static String[] allDevices; private static boolean isOpen = false; private static int MaxCacheNumber = 5; private static int MIN_SRDEV = 1000; private static int SRDEVNO = 1400; private static SensorManager sensorManager; private static Sensor lightSensor; public static synchronized void serialDeviceOpenLamp(int distance) { MainActivity activity = BaseApplication.getApplication().activity; if (BaseApplication.getApplication().activity.needLight()) { if (distance != 0) { integers.add(distance); if (integers.size() >= MaxCacheNumber) { Collections.sort(integers); if (integers.get(MaxCacheNumber - 1) <= MIN_SRDEV) { MainActivity.lastTimeDetectedFace = System.currentTimeMillis(); if (!isOpen) { isOpen = true; if (Constants.useLight) { basUtil.openLED(100); } basUtil.openIRDA(); } } if (integers.get(MaxCacheNumber - 1) <= MIN_SRDEV && !isOpen) { ProcessImageAndDrawResults.shouldExtractFeatureFirstTimeInWaitFace = 2; if (activity.currentFragment == activity.fragment_home) { activity.showFragment(activity.fragment_su_auto_wait_face); } } else if (integers.get(0) >= SRDEVNO && isOpen ) { } else { } integers.clear(); if (System.currentTimeMillis() - activity.lastTimeDetectedFace > 2 * 1000) { if (isOpen) { isOpen = false; basUtil.closeLED(); // basUtil.closeIRDA(); } } } } else { integers.clear(); } } if (System.currentTimeMillis() - activity.lastTimeDetectedFace > 2 * 1000) { if (isOpen) { isOpen = false; basUtil.closeLED(); // basUtil.closeIRDA(); } } } public static void initBlackDevice() { BaseApplication.getApplication().executorService.execute(()->{ while (true) { try { serialDeviceOpenLamp(0); SystemClock.sleep(1*1000); } catch (Exception e) { e.printStackTrace(); } } }); if (Constants.useAlf) { distanceSensor = new RadarDistanceSensor("/dev/ttyUSB0", new OnRadarDistanceListener() { @Override public void onRevData(final int data) { if (data > 0) { serialDeviceOpenLamp(data); } else { serialDeviceOpenLamp(-data); } } @Override public void onCmdResult(final String result) { BaseApplication.getApplication().activity.runOnUiThread(new Runnable() { @Override public void run() { if (result.contains("OK") || result.contains("TH")) { System.out.println("MainActivity.run " + result); } } }); } }); distanceSensor.open(); allDevices = new SerialPortFinder().getAllDevicesPath(); sensorManager = (SensorManager) BaseApplication.getApplication().activity. getSystemService(Context.SENSOR_SERVICE); lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); sensorManager.registerListener(new MySensorListener(), lightSensor, SensorManager.SENSOR_DELAY_NORMAL); basUtil = A1IoDevManager.initIOManager(); basUtil.openDIST(); basUtil.closeLED(); // basUtil.closeIRDA(); basUtil.openIRDA(); } } public static void close() { if (Constants.useAlf) { basUtil.closeLED(); basUtil.closeDIST(); distanceSensor.close(); basUtil.closeIRDA(); } } public static class MySensorListener implements SensorEventListener { @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { } } }