diff --git a/app/build.gradle b/app/build.gradle index 311254a..b99440a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,9 +20,10 @@ android { defaultConfig { applicationId "kr.co.enicom.acs" minSdkVersion 26 + //noinspection ExpiredTargetSdkVersion targetSdkVersion 30 - versionCode 207 - versionName "2.0.7" + versionCode 200000011 + versionName "2.0.11" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" ndk.abiFilters 'armeabi-v7a' } diff --git a/app/src/main/java/com/hitachi/fv/android/h1client/H1Device.java b/app/src/main/java/com/hitachi/fv/android/h1client/H1Device.java index aaee92d..615d401 100644 --- a/app/src/main/java/com/hitachi/fv/android/h1client/H1Device.java +++ b/app/src/main/java/com/hitachi/fv/android/h1client/H1Device.java @@ -107,7 +107,7 @@ public class H1Device { } public int executeCommand(byte[] cmd) { - Log.d("H1Device", "executeCommand() start"); + //Log.d("H1Device", "executeCommand() start"); if (null == this.mDeviceConnection) { return ERR_H1DEVICE_ARGUMENT; } else { @@ -120,7 +120,7 @@ public class H1Device { return ERR_H1DEVICE_RESPONSE; } else { this.mDeviceConnection.releaseInterface(this.mInterface); - Log.d("H1Device", "executeCommand() end"); + //Log.d("H1Device", "executeCommand() end"); return 0; } } @@ -176,7 +176,7 @@ public class H1Device { Log.d("H1Device", "receiveResponse() receiveDataLen() failed."); return false; } else { - Log.d("H1Device", "receiveResponse() mResDataLength=" + this.mResDataLength); + //Log.d("H1Device", "receiveResponse() mResDataLength=" + this.mResDataLength); if (!this.receiveData()) { Log.d("H1Device", "receiveResponse() receiveData() 1 failed."); return false; @@ -224,13 +224,14 @@ public class H1Device { } else { this.mResData = ByteBuffer.allocate(this.mResDataLength); int maxPacketSize = this.mEndpointIn.getMaxPacketSize(); - Log.d("H1Device", "receiveData() maxPacketSize=" + maxPacketSize); + //Log.d("H1Device", "receiveData() maxPacketSize=" + maxPacketSize); if (this.mResDataLength <= maxPacketSize) { byte[] rData = new byte[this.mResDataLength]; if (!this.bulkTransfer(this.mDeviceConnection, this.mEndpointIn, rData, this.mResDataLength, BULK_TIMEOUT)) { Log.d("H1Device", "receiveData() failed 1."); return false; } else { + Log.d("H1Device", "receiveData() mResDataLength=" + mResDataLength); this.mResData.put(rData); return true; } @@ -247,6 +248,7 @@ public class H1Device { return false; } + //Log.d("H1Device", "receiveData() packetSize=" + packetSize); this.mResData.put(rData); } @@ -267,7 +269,7 @@ public class H1Device { return false; } else { this.mResCode = data[0]; - Log.d("H1Device", "receiveCode() mResCode=" + this.mResCode); + //Log.d("H1Device", "receiveCode() mResCode=" + this.mResCode); return true; } } diff --git a/app/src/main/java/kr/co/enicom/acs/BaseService.java b/app/src/main/java/kr/co/enicom/acs/BaseService.java index 7e8c883..54745a8 100644 --- a/app/src/main/java/kr/co/enicom/acs/BaseService.java +++ b/app/src/main/java/kr/co/enicom/acs/BaseService.java @@ -60,6 +60,7 @@ public class BaseService extends Service { public static GpioManager mGpioManager = null; public static boolean mIsNeedUsbReset = false; public static boolean mIsServiceStarted = false; + public static boolean mIsServiceReady = false; // public static RitoUtil mRitoUtil = null; // public static ArrayBlockingQueue mRBitmapFrameQueue = new ArrayBlockingQueue(1); @@ -100,8 +101,13 @@ public class BaseService extends Service { public void forceStatusOrder(int order) { synchronized (mLock) { - mNextOrder = order; - mCurrentOrder = order; + if(order == GlobalInfo.DOOR_CONTROL_STATUS_OPEN_LOCK || order == GlobalInfo.DOOR_CONTROL_STATUS_OPEN) { + mCurrentOrder = DOOR_CONTROL_STATUS_CLOSE; + mNextOrder = order; + } else { + mNextOrder = order; + mCurrentOrder = DOOR_CONTROL_STATUS_OPEN_LOCK; + } } } @@ -233,6 +239,21 @@ public class BaseService extends Service { @Override public void run() { mIsAlive = true; + + if (GlobalInfo.mUseDoorControlTime == 1) { + try { + sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + if (GlobalInfo.checkIsDoorControlOpenTime()) { + mDoorManager.forceStatusOrder(DOOR_CONTROL_STATUS_OPEN_LOCK); + GlobalInfo.mDoorControlSentLastTime = SystemClock.uptimeMillis(); + } else { + mDoorManager.forceStatusOrder(DOOR_CONTROL_STATUS_CLOSE); + } + } + while(mIsAlive) { try { sleep(1000); @@ -311,7 +332,7 @@ public class BaseService extends Service { long curTime = SystemClock.uptimeMillis(); if (GlobalInfo.mDoorControlTimeStatus != 1) { //mDoorManager.controlDoor(true, -1); - mDoorManager.queueControlOrder(DOOR_CONTROL_STATUS_OPEN_LOCK); + mDoorManager.forceStatusOrder(DOOR_CONTROL_STATUS_OPEN_LOCK); GlobalInfo.mDoorControlSentLastTime = curTime; if (MainActivity.INSTANCE != null) { MainActivity.INSTANCE.turnToBaseUI(); @@ -319,7 +340,7 @@ public class BaseService extends Service { } GlobalInfo.mDoorControlTimeStatus = 1; if(curTime - GlobalInfo.mDoorControlSentLastTime >= 5 * 60 * 1000) { // 5분 주기 OPENLOCK - mDoorManager.queueControlOrder(DOOR_CONTROL_STATUS_OPEN_LOCK); + mDoorManager.forceStatusOrder(DOOR_CONTROL_STATUS_OPEN_LOCK); GlobalInfo.mDoorControlSentLastTime = curTime; } } else { @@ -656,8 +677,8 @@ public class BaseService extends Service { } - INSTANCE = this; + mIsServiceReady = true; return START_NOT_STICKY; } diff --git a/app/src/main/java/kr/co/enicom/acs/GlobalInfo.java b/app/src/main/java/kr/co/enicom/acs/GlobalInfo.java index bfde7ab..32ffc21 100644 --- a/app/src/main/java/kr/co/enicom/acs/GlobalInfo.java +++ b/app/src/main/java/kr/co/enicom/acs/GlobalInfo.java @@ -126,6 +126,7 @@ public class GlobalInfo { public static int DCU_DEVICE_TYPE_NICOM = 0; public static int DCU_DEVICE_TYPE_UNION = 1; + public static int DOOR_CONTROL_STATUS_NONE = -1; public static int DOOR_CONTROL_STATUS_OPEN = 0; public static int DOOR_CONTROL_STATUS_CLOSE = 1; public static int DOOR_CONTROL_STATUS_OPEN_LOCK = 2; @@ -319,6 +320,8 @@ public class GlobalInfo { if(count > 0) return; } + + cursor.close(); // added by ritoseo - 2025-10-14 } catch (Exception e) { e.printStackTrace(); } @@ -339,6 +342,8 @@ public class GlobalInfo { GlobalInfo.mServerAddressSlave = cursor.getString(2); GlobalInfo.mServerPortSlave = cursor.getInt(3); } + + cursor.close(); // added by ritoseo - 2025-10-14 } } catch (Exception e) { e.printStackTrace(); @@ -372,6 +377,8 @@ public class GlobalInfo { cursor.moveToNext(); result = true; } + + cursor.close(); // added by ritoseo - 2025-10-14 } } catch (Exception e) { e.printStackTrace(); @@ -738,6 +745,8 @@ public class GlobalInfo { info.mResultCode = cursor.getInt(7); info.mRfidCode = cursor.getString(8); } + + cursor.close(); // added by ritoseo - 2025-10-14 } } catch (Exception e) { e.printStackTrace(); @@ -775,9 +784,12 @@ public class GlobalInfo { if (cursor != null) { int count = cursor.getCount(); if(count > 0) { + cursor.close(); // added by ritoseo - 2025-10-14 _database.close(); return false; } + + cursor.close(); // added by ritoseo - 2025-10-14 } } catch(Exception e) { } @@ -972,7 +984,7 @@ public class GlobalInfo { try { //Log.w("RITO", "ScanQuery : " + sql ); Cursor cursor = database.rawQuery(sql, null); - if(cursor != null){ + if(cursor != null) { int count = cursor.getCount(); for(int i = 0; i< count ; i++){ cursor.moveToNext(); @@ -1004,9 +1016,13 @@ public class GlobalInfo { _info.mPermitDate = cursor.getString(19); _info.mPermitTime = cursor.getString(20); _info.makeSafe(); + + cursor.close(); // added by ritoseo - 2025-10-14 database.close(); return _info; } + + cursor.close(); // added by ritoseo - 2025-10-14 } } catch (Exception e) { e.printStackTrace(); @@ -1042,7 +1058,7 @@ public class GlobalInfo { String sql = "select id, name, authority, password, rfidcode, veincode, idx, oprno, johapnum, user_reg_date, rfid_reg_date, vein_reg_date, fingercode, finger_reg_date, facecode, face_reg_date, rfidcode2, veincode2, fingercode2, permit_date, permit_time from userinfo"; try { Cursor cursor = database.rawQuery(sql, null); - if(cursor != null){ + if(cursor != null) { int count = cursor.getCount(); Log.w(TAG, "User Count : " + count); @@ -1080,6 +1096,8 @@ public class GlobalInfo { //Log.w(TAG, "User #"+i+" : " + _info.mName); mUserList.add(_info); } + + cursor.close(); // added by ritoseo - 2025-10-14 } } catch (Exception e) { e.printStackTrace(); @@ -1138,7 +1156,7 @@ public class GlobalInfo { String sql = "select address, port, address_slave, port_slave, update_addr, update_port, update_protocol from serverinfo where idx = 0"; try { Cursor cursor = database.rawQuery(sql, null); - if(cursor != null){ + if(cursor != null) { int count = cursor.getCount(); Log.w(TAG, "ServerInfo Count : " + count); @@ -1153,6 +1171,8 @@ public class GlobalInfo { GlobalInfo.mUpdateServerPort = cursor.getInt(5); GlobalInfo.mUpdateProtocol = cursor.getInt(6); } + + cursor.close(); // added by ritoseo - 2025-10-14 } } catch (Exception e) { e.printStackTrace(); @@ -1166,7 +1186,7 @@ public class GlobalInfo { " from settings where idx = 0"; try { Cursor cursor = database.rawQuery(sql, null); - if(cursor != null){ + if(cursor != null) { int count = cursor.getCount(); Log.w(TAG, "settings Count : " + count); @@ -1216,6 +1236,8 @@ public class GlobalInfo { Log.w("RITO", "mAutoForgery : " + GlobalInfo.mAutoForgery); Log.w("RITO", "mAutoMaskWear : " + GlobalInfo.mAutoMaskWear); } + + cursor.close(); // added by ritoseo - 2025-10-14 } } catch (Exception e) { e.printStackTrace(); @@ -1575,7 +1597,7 @@ public class GlobalInfo { Log.w(TAG, "Log Query : " + sql); try { Cursor cursor = _database.rawQuery(sql, null); - if(cursor != null){ + if(cursor != null) { int count = cursor.getCount(); Log.d(TAG, "Log Count : " + count); @@ -1606,6 +1628,8 @@ public class GlobalInfo { logList.add(_info); } + + cursor.close(); // added by ritoseo - 2025-10-14 } } catch (Exception e) { e.printStackTrace(); @@ -1644,7 +1668,7 @@ public class GlobalInfo { Log.w(TAG, "AdminLog Query : " + sql); try { Cursor cursor = _database.rawQuery(sql, null); - if(cursor != null){ + if(cursor != null) { int count = cursor.getCount(); Log.d(TAG, "AdminLog Count : " + count); @@ -1677,6 +1701,8 @@ public class GlobalInfo { logList.add(_info); } + + cursor.close(); // added by ritoseo - 2025-10-14 } } catch (Exception e) { e.printStackTrace(); @@ -1713,7 +1739,7 @@ public class GlobalInfo { } try { Cursor cursor = _database.rawQuery(sql, null); - if(cursor != null){ + if(cursor != null) { int count = cursor.getCount(); Log.d(TAG, "Log Count : " + count); @@ -1735,6 +1761,8 @@ public class GlobalInfo { _info.mAttendanceCode = cursor.getInt(7); logList.add(_info); } + + cursor.close(); // added by ritoseo - 2025-10-14 } } catch (Exception e) { e.printStackTrace(); @@ -1770,7 +1798,7 @@ public class GlobalInfo { } try { Cursor cursor = _database.rawQuery(sql, null); - if(cursor != null){ + if(cursor != null) { int count = cursor.getCount(); Log.d(TAG, "Log Count : " + count); @@ -1792,6 +1820,8 @@ public class GlobalInfo { _info.mAttendanceCode = cursor.getInt(7); logList.add(_info); } + + cursor.close(); // added by ritoseo - 2025-10-14 } } catch (Exception e) { e.printStackTrace(); @@ -1830,7 +1860,7 @@ public class GlobalInfo { Log.w(TAG, "User Query : " + sql); try { Cursor cursor = _database.rawQuery(sql, null); - if(cursor != null){ + if(cursor != null) { int count = cursor.getCount(); Log.d(TAG, "User Count : " + count); @@ -1867,6 +1897,8 @@ public class GlobalInfo { _info.makeSafe(); userList.add(_info); } + + cursor.close(); // added by ritoseo - 2025-10-14 } } catch (Exception e) { e.printStackTrace(); @@ -1897,7 +1929,7 @@ public class GlobalInfo { try { Cursor cursor = _database.rawQuery(sql, null); - if(cursor != null){ + if(cursor != null) { int count = cursor.getCount(); Log.d(TAG, "User Count : " + count); @@ -1934,6 +1966,8 @@ public class GlobalInfo { _info.makeSafe(); userList.add(_info); } + + cursor.close(); // added by ritoseo - 2025-10-14 } } catch (Exception e) { e.printStackTrace(); @@ -2303,6 +2337,8 @@ public class GlobalInfo { cursor.moveToNext(); tableCount = cursor.getInt(0); } + + cursor.close(); // added by ritoseo - 2025-10-14 } } catch (Exception e) { @@ -2336,6 +2372,8 @@ public class GlobalInfo { cursor.moveToNext(); tableCount = cursor.getInt(0); } + + cursor.close(); // added by ritoseo - 2025-10-14 } } catch (Exception e) { @@ -2456,7 +2494,7 @@ public class GlobalInfo { return false; int currentMinutes = getCurrentMinutesInDay(); - if(currentMinutes >= mDoorControlTimeStart && currentMinutes <= mDoorControlTimeEnd) + if(currentMinutes >= mDoorControlTimeStart && currentMinutes < mDoorControlTimeEnd) return true; return false; diff --git a/app/src/main/java/kr/co/enicom/acs/MainActivity.java b/app/src/main/java/kr/co/enicom/acs/MainActivity.java index a338430..d935130 100644 --- a/app/src/main/java/kr/co/enicom/acs/MainActivity.java +++ b/app/src/main/java/kr/co/enicom/acs/MainActivity.java @@ -1743,8 +1743,15 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul new Thread("DelayedSetter") { @Override public void run() { + while(!BaseService.mIsServiceReady) { + try { + sleep(100); + } catch (Exception e) { + e.printStackTrace(); + } + } try { - sleep(500); + sleep(200); } catch (Exception e) { e.printStackTrace(); } @@ -2077,6 +2084,11 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul GlobalInfo.mAttendanceMode = GlobalInfo.ATTENDANCE_MODE_NONE; } + if(GlobalInfo.checkIsDoorControlOpenTime()) { + mIsOnRfidVerifyingProcess = false; + return; + } + if(logResult.mId.length() > 0) { //Toast.makeText(this,"인증 성공 [" + logResult.mName + "]", Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/kr/co/enicom/acs/RfidManager.java b/app/src/main/java/kr/co/enicom/acs/RfidManager.java index 42a929b..cab4f68 100644 --- a/app/src/main/java/kr/co/enicom/acs/RfidManager.java +++ b/app/src/main/java/kr/co/enicom/acs/RfidManager.java @@ -158,6 +158,7 @@ public class RfidManager implements SerialInputOutputManager.Listener { mSerialThread = new Thread() { byte[] accData = new byte[128]; int accFilled = 0; + int failedCount = 0; int PACKET_LENGTH = GlobalInfo.BLE_RFID_CODE_LENGTH + 2; @Override public void run() { @@ -209,20 +210,30 @@ public class RfidManager implements SerialInputOutputManager.Listener { sleep(50); } catch (InterruptedException e) { } + + if(acmHandle < 0) { + acmHandle = mSerialManager.OpenSerial("/dev/ttyACM0", 115200); + if(acmHandle < 0) { + if(failedCount < 10000) { + failedCount++; + } + Log.e(RfidManager.class.getName(), "Error to open BLE Reader Module[ttyACM0]!"); + try { + sleep(500 * failedCount); + } catch (InterruptedException e) { + } + } else { + failedCount = 0; + Log.d(RfidManager.class.getName(), "Success to open BLE Reader Module[ttyACM0] :-)"); + } + } } } }; mSerialThread.start(); } - if(acmHandle < 0) { - acmHandle = mSerialManager.OpenSerial("/dev/ttyACM0", 115200); - if(acmHandle < 0) { - Log.e(RfidManager.class.getName(), "Error to open BLE Reader Module[ttyACM0]!"); - } else { - Log.d(RfidManager.class.getName(), "Success to open BLE Reader Module[ttyACM0] :-)"); - } - } + } @Override @@ -254,6 +265,8 @@ public class RfidManager implements SerialInputOutputManager.Listener { } //mNotifyTarget.onRfidResult("success", dataToHexString(data)); } + } else { + Log.w(RfidManager.class.getName(), "There is no NotifyTarget Exist for RFID Reader!"); } } diff --git a/app/src/main/res/raw/fail.mp3 b/app/src/main/res/raw/fail.mp3 new file mode 100644 index 0000000..ad95309 Binary files /dev/null and b/app/src/main/res/raw/fail.mp3 differ diff --git a/app/src/main/res/raw/fail.wav b/app/src/main/res/raw/fail.wav deleted file mode 100644 index c079c75..0000000 Binary files a/app/src/main/res/raw/fail.wav and /dev/null differ diff --git a/app/src/main/res/raw/sucess.mp3 b/app/src/main/res/raw/sucess.mp3 new file mode 100644 index 0000000..5baa8ff Binary files /dev/null and b/app/src/main/res/raw/sucess.mp3 differ diff --git a/app/src/main/res/raw/sucess.wav b/app/src/main/res/raw/sucess.wav deleted file mode 100644 index 640ca1b..0000000 Binary files a/app/src/main/res/raw/sucess.wav and /dev/null differ