123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372 |
- package com.emato.ich.device;
- import android.util.Log;
- import com.cherry.sdk.controller.InitDevice;
- import com.cherry.sdk.controller.MoternDeviceController;
- import com.cherry.sdk.controller.callback.CmdCallback;
- import com.emato.ich.entity.Cabinet;
- import com.emato.ich.utils.JacksonUtils;
- import com.emato.ich.utils.LoggingUtils;
- import com.fasterxml.jackson.core.JsonProcessingException;
- import com.fasterxml.jackson.databind.JavaType;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Date;
- import java.util.List;
- import java.util.concurrent.CountDownLatch;
- import java.util.concurrent.atomic.AtomicBoolean;
- import java.util.stream.Collectors;
- /**
- * 0 : 操作成功
- * 1 : 操作失败
- * 1701:串口通讯超时
- * 1702:串口占用
- * 1703:串口发送数据错误
- * 1704:串口数据校验失败
- * 1705:开门时返回锁状态错误
- * 1801:不支持该操作
- * 单查柜门返回: unlocked(柜门关闭)locked(柜门打开)
- * 全查柜门返回 {“section”:1,”port”: 1, “unlocked”: true /false (true柜门打开,false柜门关闭)}
- * 其他指令无message返回
- */
- public class DeviceControl {
- public static final Object lock = new Object();
- private static final String TAG = "DeviceControl";
- private static final MoternDeviceController initedInstance;
- static {
- int boardType = 7;
- initedInstance = MoternDeviceController.getInstance();
- initedInstance.init(new InitDevice(boardType));
- }
- /**
- * 函数描述
- * 函数用途:查询锁版版本
- */
- public static void queryVersion(int section, CmdCallback cmdCallback) {
- Log.d(TAG, new Date() + "查询锁版本开始");
- DeviceResult result = new DeviceResult();
- initedInstance.queryVersion(section, cmdCallback);
- Log.d(TAG, new Date() + "查询锁版本结束");
- }
- /**
- * 函数用途:控制面板灯(仅3号类型设备支持)
- * 参数 :model, CmdCallback(model灯控指令如下)
- * 0; //开补光灯
- * 1; //关所有灯
- * 2; //打开白灯
- * 3; //关闭白灯
- * 4; //打开红外补光灯
- * 5; //关闭红外补光灯
- * 6; //打开红灯
- * 7; //打开绿灯
- */
- @Deprecated
- public static boolean setFaceLight(int mode, CmdCallback cmdCallback) {
- initedInstance.setFaceLight(mode, cmdCallback);
- return false;
- }
- /**
- * 函数用途:打开柜门
- * 参数 :section, port, CmdCallback
- */
- public static void unlockLocker(int section, int port, CmdCallback cmdCallback) {
- Log.i(TAG, new Date() + "unlockLocker: 打开柜门开始");
- initedInstance.unlockLocker(section, port, cmdCallback);
- Log.i(TAG, new Date() + "unlockLocker: 打开柜门结束");
- }
- /**
- * 函数用途:查询柜门状态
- * 参数 :section, port, CmdCallback
- */
- @Deprecated
- public static void queryLocker(int section, int port, CmdCallback cmdCallback) {
- initedInstance.queryLocker(section, port, cmdCallback);
- }
- // public static Cabinet aa(CountDownLatch countDownLatch, int startSection){
- // AtomicReference<AtomicInteger> section = new AtomicReference<>(new AtomicInteger(startSection));
- // AtomicBoolean ext = new AtomicBoolean(true);
- // Cabinet cabinet = new Cabinet();
- // List<Cabinet.CabinetPlat> lockPlateInfos = new ArrayList<>();
- //
- // while(ext.get()) {
- // querySection(section.get().get(), (code, data) -> {
- // if (code != 0) {
- // section.set(new AtomicInteger(section.get().incrementAndGet()));
- // countDownLatch.countDown();
- // ext.set(false);
- // return;
- // }
- // Cabinet.CabinetPlat lockPlateInfo = new Cabinet.CabinetPlat();
- // lockPlateInfo.setSection(section.get().get());
- //
- // AtomicReference<AtomicInteger> port = new AtomicReference<>(new AtomicInteger(1));
- // List<Cabinet.CabinetLocker> lockInfos = new ArrayList<>();
- //
- // AtomicBoolean inner = new AtomicBoolean(true);
- // CountDownLatch downLatch = new CountDownLatch(32);
- // while(inner.get()){
- // queryLocker(section.get().get(), port.get().get(), (code2, data2) -> {
- // if (code2 != 0) {
- // port.set(new AtomicInteger(1));
- // downLatch.countDown();
- // inner.set(false);
- // return;
- // }
- // Cabinet.CabinetLocker lockInfo = new Cabinet.CabinetLocker();
- // lockInfo.setPort(port.get().get());
- // lockInfo.setLocked(Arrays.asList(data2).contains("unlocked")+"");
- // lockInfos.add(lockInfo);
- //
- // lockPlateInfo.setCabinetLockers(lockInfos);
- // port.set(new AtomicInteger(port.get().incrementAndGet()));
- // downLatch.countDown();
- // });
- // }
- //
- // try {
- // downLatch.await();
- // } catch (InterruptedException e) {
- // Log.e(TAG, new Date() + "aa: 线程中断错误!", e);
- // }
- //
- // countDownLatch.countDown();
- // section.set(new AtomicInteger(section.get().incrementAndGet()));
- // lockPlateInfos.add(lockPlateInfo);
- // });
- // }
- // cabinet.setCabinetPlats(lockPlateInfos);
- // return cabinet;
- // }
- // public void sss(){
- // Cabinet cabinet = new Cabinet();
- // List<Cabinet.CabinetPlat> lockPlateInfos = new ArrayList<>();
- //
- // for (int i = 1; i <= 10; i++) {
- //
- // AtomicBoolean atomicBoolean = new AtomicBoolean(true);
- // if (!atomicBoolean.get()) {
- // break;
- // }
- // int finalI = i;
- // querySection(i, (code, data) -> {
- // if (code == 0) {
- //
- // Cabinet.CabinetPlat lockPlateInfo = new Cabinet.CabinetPlat();
- // lockPlateInfo.setSection(finalI);
- //
- // List<Cabinet.CabinetLocker> lockInfos = new ArrayList<>();
- // for (int j = 1; j <= 50; j++) {
- //
- // int finalJ = j;
- // queryLocker(finalI, j, (code2, data2) -> {
- //
- // if (code2 == 0) {
- // Cabinet.CabinetLocker lockInfo = new Cabinet.CabinetLocker();
- // lockInfo.setPort(finalJ);
- // lockInfo.setUnlocked(Arrays.asList(data2).contains("unlocked"));
- // lockInfos.add(lockInfo);
- //
- // lockPlateInfo.setCabinetLockers(lockInfos);
- // }
- //
- // });
- //
- // }
- // }
- // });
- // }
- //
- // cabinet.setCabinetPlats(lockPlateInfos);
- // }
- /**
- * 查询柜子信息
- * @param countDownLatch 计数器
- * @return 整个柜子信息
- */
- public static Cabinet queryCabinetInfo(CountDownLatch countDownLatch) {
- Cabinet cabinet = new Cabinet();
- List<Cabinet.CabinetPlat> lockPlateInfos = new ArrayList<>();
- for (int i = 1; i <= 10; i++) {
- queryLockListInfo(i, lockPlateInfos, countDownLatch);
- }
- cabinet.setCabinetPlats(lockPlateInfos);
- return cabinet;
- }
- /**
- * 查询柜子信息
- * @param finalI 锁板编号
- * @param lockPlateInfos 锁板信息集合
- * @param countDownLatch 计数器
- */
- private static void queryLockListInfo(int finalI, List<Cabinet.CabinetPlat> lockPlateInfos, CountDownLatch countDownLatch){
- querySection(finalI, (code, data) -> {
- if (code == 0) {
- String s = Arrays.asList(data).get(0);
- ObjectMapper objectMapper = JacksonUtils.objectmapper;
- JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, Cabinet.CabinetLocker.class);
- try {
- List<Cabinet.CabinetLocker> lockInfos = objectMapper.readValue(s, javaType);
- lockInfos = lockInfos.stream().filter(lockInfo -> lockInfo.getLocked().equals("false")).collect(Collectors.toList());
- // if (finalI <= 3) {
- // lockInfos = lockInfos.stream().filter(lockInfo -> lockInfo.getLocked().equals("false")).collect(Collectors.toList()).subList(0, 12);
- // } else if (finalI > 3) {
- // lockInfos = lockInfos.stream().filter(lockInfo -> lockInfo.getLocked().equals("false")).collect(Collectors.toList()).subList(0, 8);
- // }
- Cabinet.CabinetPlat lockPlateInfo = new Cabinet.CabinetPlat();
- lockPlateInfo.setCabinetLockers(lockInfos);
- lockPlateInfo.setSection(finalI);
- // TODO 查询锁版本
- // lockPlateInfo.setType("类型");
- lockPlateInfos.add(lockPlateInfo);
- } catch (JsonProcessingException e) {
- Log.e(TAG, new Date() + "queryCabinetInfo: JSON转换对象失败!", e);
- LoggingUtils.sendErrorLog("业务异常: 查询柜子信息时JSON转换对象失败! ", e);
- }
- }
- countDownLatch.countDown();
- });
- }
- /**
- * 函数用途:全开柜门
- * 参数 :section, CmdCallback
- */
- public static boolean unlockSection(int section, CmdCallback cmdCallback) {
- AtomicBoolean result = new AtomicBoolean(false);
- initedInstance.unlockSection(section, cmdCallback);
- return result.get();
- }
- /**
- * 函数用途:查询柜门状态
- * 参数 :section, CmdCallback
- */
- public static void querySection(int section, CmdCallback cmdCallback) {
- initedInstance.querySection(section, cmdCallback);
- }
- /**
- * 函数用途:控制柜门加热
- * 参数 :section, port, opt, CmdCallback
- * opt: 1 打开加热
- * opt: 2 关闭加热
- */
- @Deprecated
- public static boolean hotLocker() {
- initedInstance.hotLocker(1, 1, 1, new CmdCallback() {
- @Override
- public void onMessage(int i, String... strings) {
- }
- });
- return false;
- }
- /**
- * 函数用途:全控柜门加热
- * 参数 :section, opt, CmdCallback
- * opt: 1 打开加热
- * opt: 2 关闭加热
- */
- @Deprecated
- public static boolean hotSection() {
- initedInstance.hotSection(2, 1, new CmdCallback() {
- @Override
- public void onMessage(int i, String... strings) {
- Log.d(TAG, new Date() + "onMessage: " + i);
- Log.d(TAG, new Date() + "onMessage: " + Arrays.asList(strings));
- }
- });
- return false;
- }
- /**
- * 函数用途:控制柜门消毒 S905不支持
- * 参数 :section, port, opt, CmdCallback
- * opt: 1 打开消毒
- * opt: 2 关闭消毒
- */
- @Deprecated
- public static boolean degasLocker() {
- initedInstance.degasLocker(2, 1, 1, new CmdCallback() {
- @Override
- public void onMessage(int i, String... strings) {
- Log.d(TAG, "onMessage: " + i);
- }
- });
- return false;
- }
- /**
- * 函数用途:全控柜门消毒 S905不支持
- * 参数 :section, opt, CmdCallback
- * opt: 1 打开消毒
- * opt: 2 关闭消毒
- */
- @Deprecated
- public static boolean degasSection() {
- // initedInstance.degasSection(1, new CmdCallback() {
- // @Override
- // public void onMessage(int i, String... strings) {
- //
- // }
- // });
- return false;
- }
- /**
- * 函数用途:继电器控制 S905不支持
- * 参数 :section, port, opt, CmdCallback
- * opt: 1 开启继电器
- * opt: 0 关闭继电器
- */
- @Deprecated
- public static String relayOpt(int section, int port, int opt){
- initedInstance.relayOpt(section, port, opt, (i, s) -> {
- Log.d(TAG, "relayOpt: " + i);
- Log.d(TAG, "relayOpt: " + Arrays.asList(s));
- });
- return "";
- }
- private static class DefaultCmdCallbackHandler implements CmdCallback {
- private DeviceResult result;
- public DefaultCmdCallbackHandler() {
- this.result = new DeviceResult();
- }
- public DeviceResult getResult() {
- return result;
- }
- @Override
- public void onMessage(int i, String... strings) {
- result.setCode(i);
- result.setData(Arrays.asList(strings));
- }
- }
- }
|