package com.alfeye.powerdemo; import android.content.Intent; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.SeekBar; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import com.alfeye.a1io.A1IoDevBaseUtil; import com.alfeye.a1io.A1IoDevManager; import com.alfeye.seriallib.Listener.OnDistanceListener; import com.alfeye.seriallib.SerialDevice.DistanceSensor; import com.alfeye.seriallib.android_serialport_api.SerialPortFinder; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; public class MainActivity extends AppCompatActivity { @BindView(R.id.bts_3D5) Button bts3D5; @BindView(R.id.btx_3D5) Button btx3D5; @BindView(R.id.bts_2B1) Button bts2B1; @BindView(R.id.btx_2B1) Button btx2B1; @BindView(R.id.bts_2A2) Button bts2A2; @BindView(R.id.btx_2A2) Button btx2A2; @BindView(R.id.bts_2A6) Button bts2A6; @BindView(R.id.btx_2A6) Button btx2A6; @BindView(R.id.bts_3D4) Button bts3D4; @BindView(R.id.btx_3D4) Button btx3D4; @BindView(R.id.bts_2B2) Button bts2B2; @BindView(R.id.btx_2B2) Button btx2B2; @BindView(R.id.bts_4A5) Button bts4A5; @BindView(R.id.btx_4A5) Button btx4A5; @BindView(R.id.bts_4D2) Button bts4D2; @BindView(R.id.btx_4D2) Button btx4D2; @BindView(R.id.bt_open) Button btOpen; @BindView(R.id.bt_close) Button btClose; @BindView(R.id.tv_jl) TextView tvJl; @BindView(R.id.seekBar_Open) SeekBar seekBar_Open; @BindView(R.id.seekBar_Close) SeekBar seekBarClose; @BindView(R.id.tv_Open) TextView tvOpen; @BindView(R.id.tv_Close) TextView tvClose; @BindView(R.id.spinner) Spinner spinner; @BindView(R.id.bts_Smt) Button btsSmt; @BindView(R.id.bts_Xmt) Button btsXmt; @BindView(R.id.bts_wBo) Button btsWBo; @BindView(R.id.bts_4A41) Button bts4A41; @BindView(R.id.bts_4A42) Button bts4A42; @BindView(R.id.bts_2A2s1) Button bts2A2s1; @BindView(R.id.bts_2A2s2) Button bts2A2s2; @BindView(R.id.bt_BtLight) Button btBtLight; @BindView(R.id.btn_config_system) Button btnConfigSystem; private StringBuilder stringBuilder; private DistanceSensor sr04Device; /** * 距离感应器 */ private boolean isOpen = false; //开灯距离 private int MIN_SRDEV = 800; //关灯距离 private int SRDEVNO = 1200; //缓存集合 private List integers = new ArrayList<>(); //最大缓存数量 private int MaxCacheNumber = 5; private ArrayAdapter arr_adapter; private String port = "/dev/ttyUSB0"; private String[] allDevices; private ActionBar actionBarBreak; private SensorManager sensorManager; private Sensor ligthSensor; private boolean btLightFlag; private A1IoDevBaseUtil basUtil; @Override protected void onDestroy() { super.onDestroy(); basUtil.closeLED(); basUtil.closeDIST(); sr04Device.close(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (event.getKeyCode() == 140) { actionBarBreak.setBackgroundDrawable(getResources().getDrawable(R.color.colorAccent)); } return super.onKeyDown(keyCode, event); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (event.getKeyCode() == 140) { actionBarBreak.setBackgroundDrawable(getResources().getDrawable(R.color.colorPrimary)); } return super.onKeyUp(keyCode, event); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); actionBarBreak = getSupportActionBar(); sr04Device = new DistanceSensor("/dev/ttyUSB0", new Sr04DeviceDate()); stringBuilder = new StringBuilder(); allDevices = new SerialPortFinder().getAllDevicesPath(); //适配器 arr_adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, allDevices); //设置样式 arr_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //加载适配器 if (allDevices != null && allDevices.length > 0) { spinner.setSelection(0, true); } spinner.setAdapter(arr_adapter); spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView adapterView, View view, int i, long l) { if (allDevices != null && allDevices.length > 0) { sr04Device.close(); sr04Device.setPort(allDevices[i]); } } @Override public void onNothingSelected(AdapterView adapterView) { } }); seekBar_Open.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { MIN_SRDEV = i; tvOpen.setText("开灯距离:" + i); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); seekBarClose.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { SRDEVNO = i; tvClose.setText("关灯距离:" + i); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); //获取SensorManager对象 sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); //获取Sensor对象 ligthSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); sensorManager.registerListener(new MySensorListener(), ligthSensor, SensorManager.SENSOR_DELAY_NORMAL); basUtil = A1IoDevManager.initIOManager(); // startService(new Intent(this,MyService.class)); } public class Sr04DeviceDate implements OnDistanceListener { @Override public void onRevData(final int i1) { Log.e("---", "--->" + "----" + i1); serialDeviceOpenLamp(i1); showTextView(i1 + ""); } } @Override protected void onPause() { super.onPause(); } /** * 开灯 * * @param distance */ private void serialDeviceOpenLamp(int distance) { if (distance != 0) { integers.add(distance); if (integers.size() >= MaxCacheNumber) { Collections.sort(integers); if (integers.get(MaxCacheNumber - 1) <= MIN_SRDEV && !isOpen) { isOpen = true; basUtil.openLED(100); } else if (integers.get(0) >= SRDEVNO && isOpen) { isOpen = false; basUtil.closeLED(); } integers.clear(); } } else { //==0可能被按住 integers.clear(); } } @Override protected void onResume() { super.onResume(); } int num = 10; @OnClick({R.id.bts_3D5, R.id.btx_3D5, R.id.bts_2B1, R.id.btx_2B1, R.id.bts_2A2, R.id.btx_2A2, R.id.bts_2A6, R.id.btx_2A6, R.id.bts_3D4, R.id.btx_3D4, R.id.bts_2B2, R.id.btx_2B2, R.id.bts_4A5, R.id.btx_4A5, R.id.bts_4D2, R.id.btx_4D2 , R.id.bt_open, R.id.bt_close, R.id.bts_Smt, R.id.bts_Xmt, R.id.bts_wBo, R.id.bts_4A41, R.id.bts_4A42 , R.id.bts_2A2s1, R.id.bts_2A2s2, R.id.bt_BtLight, R.id.btn_config_system, R.id.bt_Weigen}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.btn_config_system: startActivity(new Intent(MainActivity.this, SystemConfigActivity.class)); break; case R.id.bts_3D5: //打开补光灯 basUtil.openLED(num); num = (num + 10) >= 100 ? 100 : (num + 10); break; case R.id.btx_3D5: //关闭补光灯 basUtil.closeLED(); num = 10; break; case R.id.bts_2B1: //距感电源上电 basUtil.openDIST(); break; case R.id.btx_2B1: //距感电源下电 basUtil.closeDIST(); break; case R.id.bts_2A2: //红外灯光上电 basUtil.openIRDA(); break; case R.id.btx_2A2: //红外灯光下电 basUtil.closeIRDA(); break; case R.id.bts_2A6: //4G上电 basUtil.open4G(); break; case R.id.btx_2A6: //4G下电 basUtil.close4G(); break; case R.id.bts_3D4: //打开门铃 basUtil.openBELL(); break; case R.id.btx_3D4: //关闭门铃 basUtil.closeBELL(); break; case R.id.bts_2B2: //开锁 basUtil.openUNLOCK(); break; case R.id.btx_2B2: //关锁 basUtil.closeUNLOCK(); break; case R.id.bts_4A5: //串口上电 basUtil.openPORT(); break; case R.id.btx_4A5: //串口下电 basUtil.closePORT(); break; case R.id.bts_4D2: //U口上电 basUtil.openUK(); break; case R.id.btx_4D2: //U口下电 basUtil.closeUK(); break; case R.id.bt_open: //距感电源上电 basUtil.openDIST(); //打开距感 boolean open = sr04Device.open(); if (open) { Toast.makeText(this, "打开成功", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "打开失败", Toast.LENGTH_SHORT).show(); } break; case R.id.bt_close: // 距感电源下电 basUtil.closeDIST(); // 关闭距感 sr04Device.close(); break; case R.id.bt_Weigen: startActivity(new Intent(MainActivity.this, WeiGenActivity.class)); break; case R.id.bts_wBo: startActivity(new Intent(MainActivity.this, TestDistanceActivitys.class)); break; case R.id.bts_Xmt: //扫描头下电 basUtil.CloseScanningHead(); break; case R.id.bts_Smt: //扫描头上电 basUtil.openScanningHead(); break; case R.id.bts_4A41: //预留 未定义 openPower("4A4", 0); break; case R.id.bts_4A42: //预留 未定义 openPower("4A4", 1); break; case R.id.bts_2A2s1: //预留 未定义 openPower("2A2", 0); break; case R.id.bts_2A2s2: //预留 未定义 openPower("2A2", 1); break; case R.id.bt_BtLight: if (btLightFlag) { btLightFlag = false; } else { btLightFlag = true; } break; default: } } /** * A1 IO控制 * * @param flag 1为上电,0为下电 */ private boolean openPower(String io, int flag) { try { BufferedWriter bufWriter = new BufferedWriter(new FileWriter("/sys/class/gpio_control/gpio/gpio_control")); bufWriter.write(io + flag); bufWriter.close(); return true; } catch (IOException e) { } return false; } public class MySensorListener implements SensorEventListener { @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { if (btLightFlag) { //获取精度 float acc = event.accuracy; //获取光线强度 float lux = event.values[0]; showTextView(lux + ""); } } } public void showTextView(String tl) { Observable.just(tl) .observeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer() { @Override public void accept(String s) throws Exception { stringBuilder.insert(0, s + "\n"); tvJl.setText(stringBuilder + ""); if (stringBuilder.length() >= 80) { stringBuilder.delete(stringBuilder.length() - 10, stringBuilder.length()); } } }); } } /** * 10-10 17:30:41.797 2351 2351 E LogToFile: DISPLAY=A1_V1.0_20181008 * 10-10 17:30:41.797 2351 2351 E LogToFile: MODEL=A1 * 10-10 17:30:41.797 2351 2351 E LogToFile: DEVICE=A1 * 10-10 17:30:41.797 2351 2351 E LogToFile: java.lang.UnsatisfiedLinkError: No implementation found for java.io.FileDescriptor android_serialport_api.SerialPort.open(java.lang.String, int, int) (tried Java_android_1serialport_1api_SerialPort_open and Java_android_1serialport_1api_SerialPort_open__Ljava_lang_String_2II) * 10-10 17:30:41.797 2351 2351 E LogToFile: at android_serialport_api.SerialPort.open(Native Method) * 10-10 17:30:41.797 2351 2351 E LogToFile: at android_serialport_api.SerialPort.(SerialPort.java:61) * 10-10 17:30:41.797 2351 2351 E LogToFile: at com.alfeye.ComAssistant.SerialHelper.open(SerialHelper.java:46) * 10-10 17:30:41.797 2351 2351 E LogToFile: at com.alfeye.SerialDevice.DistanceSensor.open(DistanceSensor.java:93) * 10-10 17:30:41.797 2351 2351 E LogToFile: at com.alfeye.alfeyeTools.onResume(alfeyeTools.java:80) * 10-10 17:30:41.797 2351 2351 E LogToFile: at com.example.tuniface.idface.tuniFaceDetectionlocalData.onResume(tuniFaceDetectionlocalData.java:605) * 10-10 17:30:41.797 2351 2351 E LogToFile: at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1269) * 10-10 17:30:41.797 2351 2351 E LogToFile: at android.app.Activity.performResume(Activity.java:6813) * 10-10 17:30:41.797 2351 2351 E LogToFile: at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3407) * 10-10 17:30:41.797 2351 2351 E LogToFile: at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3470) * 10-10 17:30:41.797 2351 2351 E LogToFile: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2733) * 10-10 17:30:41.797 2351 2351 E LogToFile: at android.app.ActivityThread.-wrap12(ActivityThread.java) * 10-10 17:30:41.797 2351 2351 E LogToFile: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478) * 10-10 17 */