|
@@ -77,7 +77,6 @@ import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Timer;
|
|
|
import java.util.TimerTask;
|
|
|
-import java.util.concurrent.CopyOnWriteArrayList;
|
|
|
|
|
|
import io.reactivex.Observable;
|
|
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
|
@@ -92,15 +91,19 @@ public class MyService extends Service {
|
|
|
private boolean isRead = true;
|
|
|
private boolean isRegularCleaning = false;
|
|
|
private ThreadPoolAdvanceParameter mPoolAdvanceParameter = new ThreadPoolAdvanceParameter();
|
|
|
- public final static int TOTAL_SUM = 6;
|
|
|
+ public final static int TOTAL_SUM = 14;
|
|
|
|
|
|
//存储两个数据:是否上过厕所,一开始上厕所的时间是什么时候
|
|
|
//CopyOnWriteArrayList并不是完全意义上的线程安全,如果涉及到remove操作,一定要谨慎处理。
|
|
|
//写操作是加锁,读操作是不加锁的。多读少写时使用
|
|
|
+ //厕所状态从0开始。
|
|
|
public static final List<HoleInformation> sHoleInformationList = new LinkedList<>();
|
|
|
+ //厕所序号从1开始。
|
|
|
public static final LinkedList<Integer> sCleaningLocationList = new LinkedList<>();//存储要清洗的位置。
|
|
|
|
|
|
private static volatile boolean isCleanOK = false;
|
|
|
+ private static volatile boolean isToiletClean = true;
|
|
|
+ private volatile Integer last;
|
|
|
|
|
|
@Nullable
|
|
|
@Override
|
|
@@ -112,13 +115,13 @@ public class MyService extends Service {
|
|
|
public void onCreate() {
|
|
|
super.onCreate();
|
|
|
Log.d(TAG, "MyServiceonCreate: ");
|
|
|
- EventBus.getDefault().register(this);
|
|
|
- for (int i = 0; i < TOTAL_SUM; i++) {
|
|
|
- sHoleInformationList.add(new HoleInformation(2, 0));//初始化
|
|
|
-
|
|
|
-
|
|
|
- // sToiletList.add(i, 1);//初始化,一开始都是没上过厕所的。
|
|
|
+ synchronized (sCleaningLocationList){
|
|
|
+ sHoleInformationList.clear();
|
|
|
+ for (int i = 0; i < TOTAL_SUM; i++) {
|
|
|
+ sHoleInformationList.add(new HoleInformation(2, 0));//初始化
|
|
|
+ }
|
|
|
}
|
|
|
+ EventBus.getDefault().register(this);
|
|
|
startRefreshime();
|
|
|
}
|
|
|
|
|
@@ -937,10 +940,8 @@ public class MyService extends Service {
|
|
|
|
|
|
} else if (messageEvent.getName().equals("DD120")) {
|
|
|
mThreadPoolMyservice.stopWriteDD120();
|
|
|
- Log.d(TAG, "addCleanTime120event: 廁所位置寫入成功");
|
|
|
mThreadPoolMyservice.stopSetM8();
|
|
|
mThreadPoolMyservice.startSetM8();
|
|
|
- Log.d(TAG, "cleanPositionNumX20: "+"D120执行了。");
|
|
|
} else if (messageEvent.getName().equals("M17")) {
|
|
|
mThreadPoolMyservice.stopSetM17();
|
|
|
if (isRegularCleaning) {
|
|
@@ -949,16 +950,38 @@ public class MyService extends Service {
|
|
|
mThreadPoolMyservice.startSetM8();
|
|
|
}
|
|
|
} else if (messageEvent.getName().equals("M8")) {
|
|
|
- isCleanOK = true;
|
|
|
+
|
|
|
mThreadPoolMyservice.stopSetM8();
|
|
|
Log.d(TAG, "addCleanTime120event: 開始清洗");
|
|
|
} else if (messageEvent.getName().equals("MM3")) {
|
|
|
mThreadPoolMyservice.stopWriteMM3();
|
|
|
+ last = 0;
|
|
|
cleanCount = 0;
|
|
|
Log.d(TAG, "addCleanTime120event: 開始复位");
|
|
|
-
|
|
|
+ } else if (messageEvent.getName().equals("MM10")) {
|
|
|
+ mThreadPoolMyservice.stopSetMM10();
|
|
|
+ mThreadPoolMyservice.stopRstRM10();
|
|
|
+ mThreadPoolMyservice.startRstRM10("M10");
|
|
|
+ } else if (messageEvent.getName().equals("RM10")) {
|
|
|
+ //急停复位两次的原因是因为这里会执行两次。
|
|
|
+ mThreadPoolMyservice.stopRstRM10();
|
|
|
+ new Handler().postDelayed(new Runnable() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ Log.d(TAG, "stopSetMMM3run: ");
|
|
|
+ if (mThreadPoolMyservice != null) {
|
|
|
+ mThreadPoolMyservice.stopSetMMM3();
|
|
|
+ mThreadPoolMyservice.startSetMMM3("M3");
|
|
|
+ Log.d(TAG, "isClean: 開始清洗3");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }, 2000);
|
|
|
+ } else if (messageEvent.getName().equals("MMM3")) {
|
|
|
+ Log.d(TAG, "stopSetMMM3runevent: ");
|
|
|
+ mThreadPoolMyservice.stopSetMMM3();
|
|
|
+ last = 0;
|
|
|
+ cleanCount = 0;
|
|
|
}
|
|
|
-
|
|
|
mPoolAdvanceParameter.stopAll();
|
|
|
mPoolAdvanceParameter.startALLRead();
|
|
|
break;
|
|
@@ -998,17 +1021,19 @@ public class MyService extends Service {
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
- } else if (name.equals("X12")) {
|
|
|
+ }/* else if (name.equals("X12")) {
|
|
|
String results = HexadecimalUtil.hexStringToByte(AsciiUtils.asciiByteArray2HexStr(responseFrame.getData()));
|
|
|
String s1 = HexadecimalUtil.flipString(results, 6).substring(0, TOTAL_SUM);//6个厕所蹲位
|
|
|
List<String> lis = Arrays.asList(s1.split(""));//第0位会是空字符串
|
|
|
ArrayList<String> result = new ArrayList(lis);//
|
|
|
result.remove(0);
|
|
|
- Log.d(TAG, "result event: " + result.get(0) + result.get(1));
|
|
|
+ String s = Arrays.toString(result.toArray());
|
|
|
+ Log.d(TAG, "X12event: "+result.size()+";s:"+s);
|
|
|
+ // Log.d(TAG, "result event: " + result.get(0) + result.get(1));
|
|
|
|
|
|
//todo 是否监听
|
|
|
//监控1号厕所
|
|
|
- /* monitoring(result.get(0), 1);
|
|
|
+ monitoring(result.get(0), 1);
|
|
|
//监控2号厕所
|
|
|
monitoring(result.get(1), 2);
|
|
|
//监控3号厕所
|
|
@@ -1018,79 +1043,168 @@ public class MyService extends Service {
|
|
|
//监控5号厕所
|
|
|
monitoring(result.get(4), 5);
|
|
|
//监控6号厕所
|
|
|
- monitoring(result.get(5), 6);*/
|
|
|
+ monitoring(result.get(5), 6);
|
|
|
+ }*/else if(name.equals("X12")){
|
|
|
+ String result = AsciiUtils.asciiByteArray2HexStr(responseFrame.getData());
|
|
|
+ List<String> strList = HexadecimalUtil.getStrList(result, 4);
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ for (int i = 0, len = strList.size(); i < len; i++) {
|
|
|
+ String str = strList.get(i);
|
|
|
+ //2进制
|
|
|
+ String s3 = HexadecimalUtil.hexStringToByte(str);
|
|
|
+ //2进制翻转
|
|
|
+ String s2 = HexadecimalUtil.flipString(s3, 8);
|
|
|
+ sb.append(s2);
|
|
|
+ }
|
|
|
+ List<String> list1 = Arrays.asList(sb.toString().split(""));
|
|
|
+ ArrayList<String> list2 = new ArrayList(list1);
|
|
|
+ list2.remove(0);
|
|
|
+
|
|
|
+ String s = Arrays.toString(list2.toArray());
|
|
|
+ Log.d(TAG, "X12event1: "+s);
|
|
|
+
|
|
|
+
|
|
|
+ //监控1号厕所
|
|
|
+ monitoring(list2.get(2), 1,list2.get(8));
|
|
|
+ //监控2号厕所
|
|
|
+ monitoring(list2.get(3), 2,list2.get(9));
|
|
|
+ //监控3号厕所
|
|
|
+ monitoring(list2.get(4), 3,list2.get(10));
|
|
|
+ //监控4号厕所
|
|
|
+ monitoring(list2.get(5), 4,"0"/*list2.get(11)*/);
|
|
|
+ //监控5号厕所
|
|
|
+ monitoring(list2.get(6), 5,"0"/*list2.get(12)*/);
|
|
|
+ //监控6号厕所
|
|
|
+ monitoring(list2.get(7), 6,"0"/*list2.get(13)*/);
|
|
|
+
|
|
|
} else if (name.equals("D2")) {
|
|
|
String data = String.valueOf(HexadecimalUtil.hex2dec(HexadecimalUtil.flipString(AsciiUtils.asciiByteArray2HexStr(responseFrame.getData())).get(0)));
|
|
|
- Log.d(TAG, "addCleanTimeD2event: " + data);
|
|
|
+ // Log.d(TAG, "addCleanTimeD2event: " + data);
|
|
|
switch (data) {
|
|
|
case "0"://复位中
|
|
|
- if (!isAwait) {
|
|
|
- isAwait = true;
|
|
|
+ synchronized (sCleaningLocationList) {
|
|
|
+ if (!isAwait) {
|
|
|
+ isAwait = true;
|
|
|
+ }
|
|
|
+ if (!isToiletClean) {
|
|
|
+ isToiletClean = true;
|
|
|
+ }
|
|
|
}
|
|
|
break;
|
|
|
- case "1": //第一次待机中
|
|
|
+ case "1": //第一次待机中,开机完毕
|
|
|
//复位了,那么就需要判断是否还需要清洗
|
|
|
//todo 这里的代码会一直执行,如果不等于0,那么这里会一直执行。
|
|
|
synchronized (sCleaningLocationList) {//多线程操作需要加上同步锁
|
|
|
if (isAwait) {
|
|
|
isAwait = false;
|
|
|
- if (sCleaningLocationList.size() != 0) {
|
|
|
- while (sCleaningLocationList.size() > 0) {
|
|
|
- Integer first = sCleaningLocationList.getFirst();
|
|
|
- Log.d(TAG, "first: "+first+",state:"+sHoleInformationList.get(first - 1).getState());
|
|
|
- Log.d(TAG, "event: first"+(sHoleInformationList.get(first - 1).getState() != 0 && sHoleInformationList.get(first - 1).getState() != 2));
|
|
|
-
|
|
|
- if (sHoleInformationList.get(first - 1).getState() != 0 && sHoleInformationList.get(first - 1).getState() != 2) {
|
|
|
- sCleaningLocationList.removeFirst();
|
|
|
- }else{
|
|
|
- cleanPositionNumX20(first);
|
|
|
- cleanCount++;
|
|
|
- return;
|
|
|
+ new Handler().postDelayed(new Runnable() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ synchronized (sCleaningLocationList) {
|
|
|
+ while (sCleaningLocationList.size() > 0) {
|
|
|
+ Integer first = sCleaningLocationList.getFirst();
|
|
|
+ HoleInformation holeInformation = sHoleInformationList.get(first - 1);
|
|
|
+ if (holeInformation.getState() != 0 && holeInformation.getState() != 2 && "1".equals(holeInformation.getBodySensor())) {
|
|
|
+ //被移除了
|
|
|
+ Log.d(TAG, "被移除了1: " + first);
|
|
|
+ sCleaningLocationList.removeFirst();
|
|
|
+ } else if (holeInformation.getState() != 0 && holeInformation.getState() != 2) {
|
|
|
+ Log.d(TAG, "被移除了3: " + first);
|
|
|
+ sCleaningLocationList.removeFirst();
|
|
|
+ }else {
|
|
|
+ cleanPositionNumX20(first);
|
|
|
+ Log.d(TAG, "isClean開始清洗add: " + first);
|
|
|
+ cleanCount++;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
+ }
|
|
|
+ },6000);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "5":
|
|
|
+ //todo 清洗中,需要各个10秒再开始
|
|
|
+ synchronized (sCleaningLocationList) {
|
|
|
+ //todo 必须sCleaningLocationList和sHoleInformationList不为空。才能执行里面的代码。
|
|
|
+ if (sCleaningLocationList.size()>0 &&sHoleInformationList.size()>0) {
|
|
|
+ if (isToiletClean) {
|
|
|
+ isCleanOK = true;
|
|
|
+ //多线程,我们需要控制只执行一次?
|
|
|
+ Integer first = sCleaningLocationList.getFirst();//sCleaningLocationList取出来的数据从1开始。
|
|
|
+ HoleInformation holeInformation = sHoleInformationList.get(first - 1);
|
|
|
+ Log.d(TAG, "isClean開始清洗add急停: " + holeInformation.getState());
|
|
|
+ if (holeInformation.getState() != 2) {
|
|
|
+ //如果在清洗中,那么就急停
|
|
|
+ isToiletClean = false;
|
|
|
+ mThreadPoolMyservice.stopSetMM10();
|
|
|
+ mThreadPoolMyservice.startSetMM10("M10");
|
|
|
+ Log.d(TAG, "sCleaningLocationList: 紧急停止");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
}
|
|
|
break;
|
|
|
- case "3"://清洗完毕----清洗過程中還是清洗完畢
|
|
|
+ case "7"://清洗完毕----清洗過程中還是清洗完畢
|
|
|
synchronized (sCleaningLocationList) {//多线程操作需要加上同步锁
|
|
|
- Log.d(TAG, "为零event: " + isCleanOK);
|
|
|
if (isCleanOK) {
|
|
|
isCleanOK = false;
|
|
|
- Log.d(TAG, "为零sCleaningLocationListevent: " + sCleaningLocationList.size());
|
|
|
- if (sCleaningLocationList.size() != 0) {
|
|
|
- Integer first = null;
|
|
|
- Integer integer = sCleaningLocationList.removeFirst();
|
|
|
- //如果集合大于0,那么我就取出第一个位置,进行判断是否正在上厕所,如果是,那么就需要移除,继续下一个,
|
|
|
- while (sCleaningLocationList.size() > 0) {
|
|
|
- first = sCleaningLocationList.getFirst();
|
|
|
+
|
|
|
+ //准备清洗下一个厕所,如果为10次,那么就需要复位。
|
|
|
+ if (cleanCount >= 10) {
|
|
|
+ cleanCount = 0;
|
|
|
+ mThreadPoolMyservice.stopWriteMM3();
|
|
|
+ mThreadPoolMyservice.startWriteMM3("M3");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ new Handler().postDelayed(new Runnable() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ synchronized (sCleaningLocationList) {//移除这里出现了问题。
|
|
|
+ if (sCleaningLocationList.size() != 0) {
|
|
|
+ Integer first = null;
|
|
|
+ //上一个清洗的厕所123
|
|
|
+ Log.d(TAG, "被移除了2: " + first);
|
|
|
+ last = sCleaningLocationList.removeFirst();
|
|
|
+ //如果集合大于0,那么我就取出第一个位置,进行判断是否正在上厕所,如果是,那么就需要移除,继续下一个,
|
|
|
+ while (sCleaningLocationList.size() > 0) {
|
|
|
+ first = sCleaningLocationList.getFirst();//现在要清洗的厕所。456
|
|
|
// if (sHoleInformationList.get(first-1).getState()==3) {
|
|
|
- StringBuilder sb = new StringBuilder();
|
|
|
- for (Integer integer1 : sCleaningLocationList) {
|
|
|
- sb.append(integer1);
|
|
|
- }
|
|
|
- Log.d(TAG, "first: "+first+",state:"+sHoleInformationList.get(first - 1).getState()+",sb:"+sb);
|
|
|
- Log.d(TAG, "event: first"+(sHoleInformationList.get(first - 1).getState() != 0 && sHoleInformationList.get(first - 1).getState() != 2));
|
|
|
-
|
|
|
- if (sHoleInformationList.get(first - 1).getState() != 0 && sHoleInformationList.get(first - 1).getState() != 2) {
|
|
|
- sCleaningLocationList.removeFirst();
|
|
|
- } else {
|
|
|
- Log.d(TAG, "integer: "+integer+",first: "+first+",sb:"+sb);
|
|
|
- if ((integer == 1 || integer == 2 || integer == 3) && (first == 4 || first == 5 || first == 6)) {
|
|
|
- mThreadPoolMyservice.stopWriteMM3();
|
|
|
- mThreadPoolMyservice.startWriteMM3("M3");
|
|
|
- return;
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ for (Integer integer1 : sCleaningLocationList) {
|
|
|
+ sb.append(integer1);
|
|
|
+ }
|
|
|
+
|
|
|
+ HoleInformation holeInformation = sHoleInformationList.get(first - 1);
|
|
|
+ if (holeInformation.getState() != 0 && holeInformation.getState() != 2 && "1".equals(holeInformation.getBodySensor())) {
|
|
|
+ Log.d(TAG, "被移除了3: " + first);
|
|
|
+ sCleaningLocationList.removeFirst();
|
|
|
+ //如果没有人在里面,但是人体传感器检测到有人,那么移除
|
|
|
+ //如果有人在里面,即使人体创奇检测到有人或者没人,都移除。
|
|
|
+ } else if (holeInformation.getState() != 0 && holeInformation.getState() != 2) {
|
|
|
+ Log.d(TAG, "被移除了3: " + first);
|
|
|
+ sCleaningLocationList.removeFirst();
|
|
|
+ } else {
|
|
|
+ if ((last == 1 || last == 2 || last == 3) && (first == 4 || first == 5 || first == 6)) {
|
|
|
+ mThreadPoolMyservice.stopWriteMM3();
|
|
|
+ mThreadPoolMyservice.startWriteMM3("M3");
|
|
|
+ Log.d(TAG, "isClean: 开始复位4");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ cleanPositionNumX20(first);
|
|
|
+ Log.d(TAG, "isClean開始清洗add: " + first);
|
|
|
+ cleanCount++;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
- cleanPositionNumX20(first);
|
|
|
- cleanCount++;
|
|
|
- return;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
+ },6000);
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
@@ -1110,31 +1224,33 @@ public class MyService extends Service {
|
|
|
}
|
|
|
|
|
|
|
|
|
- private void monitoring(String number, int position) {
|
|
|
- Log.d(TAG, "monitoring: " + number + position);
|
|
|
+ private void monitoring(String number, int position, String isSomeone1) {
|
|
|
+ // Log.d(TAG, "monitoring: " + number + position);
|
|
|
synchronized (sCleaningLocationList) {//多线程操作需要加上同步锁
|
|
|
if ("0".equals(number)) {//
|
|
|
//是否加入清洗
|
|
|
- isClean(position);
|
|
|
+ isClean(position,isSomeone1);
|
|
|
} else if ("1".equals(number)) {
|
|
|
//记录
|
|
|
- addCleanTime(position);
|
|
|
+ addCleanTime(position,isSomeone1);
|
|
|
}
|
|
|
+ Log.d(TAG, "isClean開始清洗add信号: 厕所"+position+",信号为:" + number);
|
|
|
+
|
|
|
}
|
|
|
// }
|
|
|
}
|
|
|
|
|
|
- private void addCleanTime(int number) {
|
|
|
- Log.d(TAG, "厕所有人开始上厕所了。 ");
|
|
|
+ private void addCleanTime(int number, String isSomeone) {
|
|
|
/**
|
|
|
* 1:
|
|
|
* 将标志位变为0.,如果我为0 就不执行了。避免时间一直更新。
|
|
|
* 存储当前的时间,到指定的集合中【标志位,0time】
|
|
|
*/
|
|
|
- Log.d(TAG, "addCleanTime: 为零isCleanaddCleanTime1");
|
|
|
+// Log.d(TAG, "addCleanTime: 为零isCleanaddCleanTime1");
|
|
|
HoleInformation holeInformation = sHoleInformationList.get(number - 1);
|
|
|
- Log.d(TAG, "为零isCleanaddCleanTime11: " + sHoleInformationList.size() + holeInformation.getState());
|
|
|
- Log.d(TAG, "为零isCleanaddCleanTime12: " + (number - 1));
|
|
|
+ holeInformation.setBodySensor(isSomeone);
|
|
|
+// Log.d(TAG, "为零isCleanaddCleanTime11: " + sHoleInformationList.size() + holeInformation.getState());
|
|
|
+// Log.d(TAG, "为零isCleanaddCleanTime12: " + (number - 1));
|
|
|
if (holeInformation.getState() != 1 && holeInformation.getState() != 3) {
|
|
|
holeInformation.setState(1);//上厕所
|
|
|
holeInformation.setTimeDuration(System.currentTimeMillis());//存储他上厕所的时间
|
|
@@ -1142,17 +1258,19 @@ public class MyService extends Service {
|
|
|
if (System.currentTimeMillis() - holeInformation.getTimeDuration() > 10000) {
|
|
|
//將其標誌位上過廁所。
|
|
|
holeInformation.setState(3);
|
|
|
- Log.d(TAG, "addCleanTime: 上厕所超过20秒");
|
|
|
+ // Log.d(TAG, "addCleanTime: 上厕所超过20秒");
|
|
|
} else {
|
|
|
- Log.d(TAG, "addCleanTime: 上厕所没超过20秒");
|
|
|
+ // Log.d(TAG, "addCleanTime: 上厕所没超过20秒");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//记录清洗次数
|
|
|
- private int cleanCount = 0;
|
|
|
+ private volatile int cleanCount = 0;
|
|
|
+
|
|
|
+ private void isClean(int number, String isSomeone) {
|
|
|
|
|
|
- private void isClean(int number) {
|
|
|
+ //为什么在60秒后复位会出现两次复位呢?因为复位过程中有的厕所写入清洗了。所以就会出现问题。【问题不大,就是多复位一次。不影响。】
|
|
|
/**
|
|
|
* 0:
|
|
|
* 如果标志位为0,表示上一次是被上过厕所,根据存储的时间和现在的时间进行对比:
|
|
@@ -1166,36 +1284,37 @@ public class MyService extends Service {
|
|
|
* 什么都不做。
|
|
|
*/
|
|
|
HoleInformation holeInformation = sHoleInformationList.get(number - 1);
|
|
|
- Log.d(TAG, "为零isCleanaddCleanTime23: " + sHoleInformationList.size() + holeInformation.getState());
|
|
|
- Log.d(TAG, "为零isCleanaddCleanTime24: " + (number - 1));
|
|
|
+ holeInformation.setBodySensor(isSomeone);
|
|
|
int state = holeInformation.getState();
|
|
|
if (state == 3) {
|
|
|
holeInformation.setState(4);
|
|
|
holeInformation.setOutTimeDuration(System.currentTimeMillis());//存储他上厕所的时间
|
|
|
} else if (holeInformation.getState() == 4) {
|
|
|
- if (System.currentTimeMillis() - holeInformation.getOutTimeDuration() > 5000) {
|
|
|
+ if (System.currentTimeMillis() - holeInformation.getOutTimeDuration() > 10000) {
|
|
|
//上廁所超過20秒,那麼將狀態改為上廁所狀態。
|
|
|
Log.d(TAG, "为零isClean: " + sCleaningLocationList.size());
|
|
|
if (sCleaningLocationList.size() == 0) {
|
|
|
//如果不包含,那么就走这里
|
|
|
sCleaningLocationList.addLast(number);
|
|
|
Log.d(TAG, "为零isCleannumber4: " + number);
|
|
|
- isCleanOK = true;
|
|
|
- if (cleanCount >= 10) {
|
|
|
- //如果为10,那么就需要复位,并且清零了。
|
|
|
- mThreadPoolMyservice.stopWriteMM3();
|
|
|
- mThreadPoolMyservice.startWriteMM3("M3");
|
|
|
- cleanCount = 0;
|
|
|
- Log.d(TAG, "厕所event复位1: " + cleanCount);
|
|
|
- } else {
|
|
|
- cleanCount++;//
|
|
|
+ if (last != null) {
|
|
|
+ if ((last == 1 || last == 2 || last == 3) && (number == 4 || number == 5 || number == 6)) {
|
|
|
+ Log.d(TAG, "isClean: 開始复位1");
|
|
|
+ mThreadPoolMyservice.stopWriteMM3();
|
|
|
+ mThreadPoolMyservice.startWriteMM3("M3");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ cleanCount++;//
|
|
|
+ if ("1".equals(holeInformation.getBodySensor())) {
|
|
|
+ sCleaningLocationList.removeFirst();
|
|
|
+ Log.d(TAG, "holeInformation被移除了。: ");
|
|
|
+ }else{
|
|
|
cleanPositionNumX20(number);
|
|
|
- Log.d(TAG, "isClean: " + number);
|
|
|
- Log.d(TAG, "addCleanTimeisClean: " + "開始清洗");
|
|
|
}
|
|
|
-
|
|
|
+ Log.d(TAG, "isClean開始清洗add: " + number);
|
|
|
+ Log.d(TAG, "addCleanTimeisClean: " + "開始清洗");
|
|
|
} else {
|
|
|
- //todo 这里存在一个问题,就是如果刚好,没有清洗,并且长度大于0呢?存在多线程安全问题
|
|
|
//那么我们就需要判断是否在清洗,通过一个标志位。清洗中,清洗完毕
|
|
|
int index = 100;
|
|
|
for (int i = 0; i < sCleaningLocationList.size(); i++) {
|
|
@@ -1207,19 +1326,17 @@ public class MyService extends Service {
|
|
|
}
|
|
|
}
|
|
|
if (index != 100) {
|
|
|
+ Log.d(TAG, "被移除了4: " + index);
|
|
|
sCleaningLocationList.remove(index);//如果移除后等于0,集合大小等于0,那么开始清洗。
|
|
|
sCleaningLocationList.addLast(number);
|
|
|
- isCleanOK = true;
|
|
|
} else {
|
|
|
sCleaningLocationList.addLast(number);
|
|
|
- isCleanOK = true;
|
|
|
}
|
|
|
Log.d(TAG, "addCleanTime: 清洗集合個數大於0:");
|
|
|
}
|
|
|
- holeInformation.setState(0);//改为2或者0都可以。
|
|
|
+ holeInformation.setState(2);//改为2或者0都可以。
|
|
|
} else {
|
|
|
Log.d(TAG, "addCleanTime进厕所没超过20秒 ");
|
|
|
- // holeInformation.setState(2);//为什么不是1,如果是1,那么
|
|
|
}
|
|
|
} else if (holeInformation.getState() == 1) {
|
|
|
if (holeInformation.getState() != 2) {
|
|
@@ -1232,7 +1349,6 @@ public class MyService extends Service {
|
|
|
private void cleanPositionNumX20(int data) {
|
|
|
mThreadPoolMyservice.stopWriteDD120();
|
|
|
mThreadPoolMyservice.startWriteDD120("D120", "000" + data);
|
|
|
- Log.d(TAG, "cleanPositionNumX20: "+"000" + data);
|
|
|
}
|
|
|
|
|
|
private boolean isOpenReadWarring = true;
|
|
@@ -1439,7 +1555,7 @@ public class MyService extends Service {
|
|
|
threadGetParameter1.getValues()[4] = String.valueOf(get177Data(HexadecimalUtil.hex2dec(results.get(6))));
|
|
|
threadGetParameter1.getValues()[5] = String.valueOf(get177Data(HexadecimalUtil.hex2dec(results.get(7))));
|
|
|
|
|
|
- Log.d(TAG, "D418setAdvanced: "+results.size());
|
|
|
+ Log.d(TAG, "D418setAdvanced: " + results.size());
|
|
|
}
|
|
|
} else if (name.equals("D426")) {
|
|
|
if (!threadGetParameter1.isReceive1()) {
|
|
@@ -1454,13 +1570,13 @@ public class MyService extends Service {
|
|
|
threadGetParameter1.getValues()[13] = String.valueOf(HexadecimalUtil.hex2dec(results.get(6)));
|
|
|
threadGetParameter1.getValues()[14] = String.valueOf(HexadecimalUtil.hex2dec(results.get(7)));
|
|
|
threadGetParameter1.getValues()[15] = String.valueOf(HexadecimalUtil.hex2dec(results.get(8)));
|
|
|
- Log.d(TAG, "D426setAdvanced: "+results.size());
|
|
|
+ Log.d(TAG, "D426setAdvanced: " + results.size());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private String get177Data(long l) {
|
|
|
- return String.valueOf(Math.round((l/ Global.num)*10));
|
|
|
+ return String.valueOf(Math.round((l / Global.num) * 10));
|
|
|
}
|
|
|
|
|
|
public void getDataSuccess() {
|
|
@@ -1514,10 +1630,11 @@ public class MyService extends Service {
|
|
|
//不能一直复位,因为如果一直厕所呢?所以我们复位后就需要停止继续执行这里面的内容,等到大于0的时候再进行里面的内容
|
|
|
//在集合移除最后一个的时候我们来一个标志位来解决这个问题。
|
|
|
isReset = false;
|
|
|
- //等于0 的时候我们就需要进行复位 todo 复位
|
|
|
+ resetTime = 60;
|
|
|
+ //等于0 的时候我们就需要进行复位
|
|
|
mThreadPoolMyservice.stopWriteMM3();
|
|
|
mThreadPoolMyservice.startWriteMM3("M3");
|
|
|
- Log.d(TAG, "厕所event复位2: " + cleanCount);
|
|
|
+ Log.d(TAG, "isClean: 開始清洗2");
|
|
|
return;
|
|
|
}
|
|
|
resetTime--;
|