Explorar o código

[WallPadMain]
1. 원격 디버깅 추가
2. 거동수상자 관련 카메라 LED , Status 과련 추가
- 무조건 LED AutoOff 와 Status_Auto_off 적용해야 함
3. 최신 Jar 업데이트
4. 버전업
- 현장에서 사용하고 있는 버전임(5월에 수정하고 모니터링 하다가 이슈 없어서 지금 커밋함)
5. 디버깅용 so 파일 추가

jglee hai 2 semanas
pai
achega
858c8e2b63

BIN=BIN
WallPadMain/libs/WallPadAPI.jar


+ 1 - 1
WallPadMain/src/main/AndroidManifest.xml

@@ -1,7 +1,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="kr.co.icontrols.wallpadmain"
     android:versionCode="17"
-    android:versionName="2024.11.07.01">
+    android:versionName="2025.05.01.01">
 
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

+ 10 - 0
WallPadMain/src/main/java/kr/co/icontrols/v40ioctl/V40IOInterface2.java

@@ -53,6 +53,16 @@ public class V40IOInterface2 {
         LcdWakeUp();
     }
 
+    /**
+     * ADB 원격 디버깅
+     */
+    public native void ADBenable(String port);
+
+    public native void ADBdisable();
+
+    public native int ADBstate();
+
+
     public void setDns(String dns1, String dns2) {
         NetDns1(dns1);
         NetDns2(dns2);

+ 69 - 0
WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/IOInterface.java

@@ -1998,4 +1998,73 @@ public class IOInterface {
         }
     }
 
+
+    /*=======================================================*
+     * ADB 원격 디버깅
+     *=======================================================*/
+
+    /**
+     * Remote ADB Connection enable
+     * IP: WallPad IP
+     * @param port 15000
+     */
+    public void enableADBRemoteConnect(String port) {
+        try {
+            if (Version.getPlatformType() != Version.PLATFORM_TYPE.A40i) {
+                Log.w(TAG, "[enableADBRemoteConnect] Not supported device -> This device is not the A40i device!!");
+                return;
+            }
+
+            Log.d(TAG, "[enableADBRemoteConnect] ===== START =====");
+            ctrlWallpadJNI(true);
+            mV40IOIF_NOUGAT.ADBenable(port);
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] enableADBRemoteConnect(String port)");
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Remote ADB Connection disable
+     */
+    public void disableADBRemoteConnect() {
+        try {
+            if (Version.getPlatformType() != Version.PLATFORM_TYPE.A40i) {
+                Log.w(TAG, "[disableADBRemoteConnect] Not supported device -> This device is not the A40i device!!");
+                return;
+            }
+
+            Log.d(TAG, "[disableADBRemoteConnect] ===== START =====");
+            ctrlWallpadJNI(true);
+            mV40IOIF_NOUGAT.ADBdisable();
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] disableADBRemoteConnect()");
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Remote ADB Connection state check
+     * @return result
+     */
+    public int checkADBRemoteConnect() {
+        int nResult = -1;
+        try {
+            if (Version.getPlatformType() != Version.PLATFORM_TYPE.A40i) {
+                Log.w(TAG, "[checkADBRemoteConnect] Not supported device -> This device is not the A40i device!!");
+                return nResult;
+            }
+
+            Log.d(TAG, "[checkADBRemoteConnect] ===== START =====");
+            ctrlWallpadJNI(true);
+            nResult = mV40IOIF_NOUGAT.ADBstate();
+            ctrlWallpadJNI(false);
+            Log.i(TAG, "[checkADBRemoteConnect] nResult [" + nResult + "]");
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] checkADBRemoteConnect()");
+            e.printStackTrace();
+        }
+        return nResult;
+    }
+
 }

+ 127 - 20
WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/MainActivity.java

@@ -1,3 +1,4 @@
+
 package kr.co.icontrols.wallpadmain;
 
 import android.annotation.SuppressLint;
@@ -1694,6 +1695,25 @@ public class MainActivity extends WpadActivity {
     					}
     				}
             	}
+
+                // 스마트현관카메라
+                //jglee - 2025.02.24 HD 통신 카메라
+                if (getDoorCamType() == WallpadDeviceSet.DOORTYPE_IOT_SMART || getDoorCamType() == WallpadDeviceSet.DOORTYPE_HYOSUNG_SMART
+                        || getDoorCamType() == WallpadDeviceSet.DOORTYPE_DAEWOO_SMART) {
+                    mSmartKeyRfDoorAPI = mWallPadAPI.Get_SmartKeyRfDoorController();
+
+                    // mSmartKeyRfDoorAPI null인 경우 발생 해당 API가 null인지 확인 후, 설정하도록 수정
+                    if (mSmartKeyRfDoorAPI == null) Log.d(TAG , "[mWallPadApiCheckHandler] Get_SmartKeyRfDoorController Fail %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
+                    else Log.d(TAG , "[mWallPadApiCheckHandler] Get_SmartKeyRfDoorController Success !");
+
+                    // 초기화를 위해 스마트 IoT 현관카메라의 상태를 정리한다. (상태 Off, LED Off)
+                    ctrlSmartIOTCamStatusMode(Common.SmartRFCamStatusMode.STATUS_AUTO_OFF);
+                    ctrlSmartIOTCamLEDMode(Common.SmartRFCamLEDMode.LED_AUTO_OFF);
+
+                    ctrlSmartIOTCamStatusMode(Common.SmartRFCamStatusMode.STATUS_OFF);
+                    ctrlSmartIOTCamLEDMode(Common.SmartRFCamLEDMode.LED_OFF);
+                }
+                
             }
             else if (msg.what == 10) {
             	// 부트업 실패시 5초 간격으로 보내도록 수정
@@ -1705,8 +1725,32 @@ public class MainActivity extends WpadActivity {
             }
         }
     };
-    
-    
+
+
+    // 현관카메라 종류
+    private int getDoorCamType() {
+        int doorCamType = WallpadDeviceSet.DOORTYPE_NONE;
+        try {
+            WallpadDeviceSet deviceSet = new WallpadDeviceSet(getContext());
+            int[] anFrontCameraType = deviceSet.getFrontCameraSettingInfo(); // 현관카메라 종류
+            deviceSet.closeDB();
+
+            if (anFrontCameraType != null) {
+                doorCamType = anFrontCameraType[1];
+                Log.d(TAG, "[getDoorCamType] doorCamType [" + doorCamType + "]");
+            }
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        }
+        catch (Exception e) {
+            Log.e(TAG, "[Exception] getDoorCamType()");
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+        return doorCamType;
+    }
+
+
+
     private void ChangeLEDButtonLevel()
     {
     	if( Version.getModelType() == Version.MODEL_TYPE.IHN_1020GL )
@@ -1942,9 +1986,61 @@ public class MainActivity extends WpadActivity {
         {
 
         }
+
+        //jglee - 2023.03.22 거동수상자 감지 테스트 모드 해제
+        if(mSmartKeyRfDoorAPI!=null)
+        {
+            Intent StrangeDetecTestMode_Intent = new Intent();
+            StrangeDetecTestMode_Intent.setAction(Common.BR_STRANGEDETECT_TESTMODE);
+            StrangeDetecTestMode_Intent.putExtra("Value", false);
+            getApplicationContext().sendBroadcast(StrangeDetecTestMode_Intent);
+
+            //jglee - 2023.04.06 LED Auto On 관리자 모드에서만 사용, 실제 사용시에는 LED Auto OFF로 설정
+            ctrlSmartIOTCamLEDMode(Common.SmartRFCamLEDMode.LED_AUTO_OFF);
+        }
         
         DebugLogOutput("@@@@@@@@ [onResume] @@@@@@@@");
     }
+
+    // 스마트현관카메라 LED 상태 제어
+    private void ctrlSmartIOTCamLEDMode(byte mode) {
+        try {
+            Log.d(TAG, "[ctrlSmartIOTCamLEDMode] mode [" + mode + "]");
+            if (mSmartKeyRfDoorAPI != null) {
+                int nResult = mSmartKeyRfDoorAPI.SetLEDmode(mode);
+                Log.d(TAG, "[ctrlSmartIOTCamLEDMode] nResult -> " + nResult);
+            }
+            else Log.w(TAG, "[ctrlSmartIOTCCamLEDMode] mSmartKeyRfDoorAPI is null!!");
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        }
+        catch (Exception e) {
+            Log.e(TAG, "[Exception] ctrlSmartIOTCamLEDMode(byte mode)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    // 스마트현관카메라 MODE 제어
+    private void ctrlSmartIOTCamStatusMode(byte mode) {
+        try {
+            Log.d(TAG, "[ctrlSmartIOTCamStatusMode] mode [" + mode + "]");
+            if (mSmartKeyRfDoorAPI != null) {
+                int nResult = mSmartKeyRfDoorAPI.SetCAMERAmode(mode);
+                Log.d(TAG, "[ctrlSmartIOTCamStatusMode] nResult -> " + nResult);
+            }
+            else Log.w(TAG, "[ctrlSmartIOTCamStatusMode] mSmartKeyRfDoorAPI is null!!");
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        }
+        catch (Exception e) {
+            Log.e(TAG, "[Exception] ctrlSmartIOTCamStatusMode(byte mode)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    
   	
 	protected String getForegroundAPK() {
 		try {
@@ -10292,25 +10388,25 @@ public class MainActivity extends WpadActivity {
 
                     if(isUse)
                     {
-                        if (mSmartKeyRfDoorAPI != null) mSmartKeyRfDoorAPI.SetLEDmode(Common.SmartRFCamLEDMode.LED_AUTO_ON);
+                        //if (mSmartKeyRfDoorAPI != null) mSmartKeyRfDoorAPI.SetLEDmode(Common.SmartRFCamLEDMode.LED_AUTO_ON);
 
-                        if (mSmartKeyRfDoorAPI != null) mSmartKeyRfDoorAPI.SetCAMERAmode(Common.SmartRFCamStatusMode.STATUS_AUTO_ON);
+                        if (mSmartKeyRfDoorAPI != null) mSmartKeyRfDoorAPI.SetCAMERAmode(Common.SmartRFCamStatusMode.STATUS_AUTO_OFF);
 
                         //여기서 감지시간을 강제로 늘림
-                        if(mSmartKeyRfDoorAPI!=null)
+                        if(mSmartKeyRfDoorAPI!=null )
                         {
+                            //jglee - 2023.04.06 거동수상자 시나리오 변경으로 인하여 LED Auto On 제거
+                            //mSmartKeyRfDoorAPI.SetLEDmode(Common.SmartRFCamLEDMode.LED_AUTO_ON);
+                            mSmartKeyRfDoorAPI.SetCAMERAmode(Common.SmartRFCamStatusMode.STATUS_AUTO_OFF);
                             String ret = mSmartKeyRfDoorAPI.SetSensorConfig((byte) 0x05, (byte)0x01);
                         }
                     }
                     else
                     {
-                        if (mSmartKeyRfDoorAPI != null) mSmartKeyRfDoorAPI.SetLEDmode(Common.SmartRFCamLEDMode.LED_AUTO_OFF);
-
-                        if (mSmartKeyRfDoorAPI != null) mSmartKeyRfDoorAPI.SetCAMERAmode(Common.SmartRFCamStatusMode.STATUS_AUTO_OFF);
-
-                        //여기서 감지시간을 강제로 늘림
-                        if(mSmartKeyRfDoorAPI!=null)
+                        if(mSmartKeyRfDoorAPI!=null )
                         {
+                            mSmartKeyRfDoorAPI.SetLEDmode(Common.SmartRFCamLEDMode.LED_AUTO_OFF);
+                            mSmartKeyRfDoorAPI.SetCAMERAmode(Common.SmartRFCamStatusMode.STATUS_AUTO_OFF);
                             String ret = mSmartKeyRfDoorAPI.SetSensorConfig((byte) 0x05, (byte)0x240);
                         }
                     }
@@ -10361,21 +10457,27 @@ public class MainActivity extends WpadActivity {
                     //톨화중 딜레이 타임이 끝나는 것을 방지하기 위해서 한번더 확인
                     if(!Common.bWallPadCallingLive)
                     {
-                        if (mSmartKeyRfDoorAPI != null) mSmartKeyRfDoorAPI.SetLEDmode(Common.SmartRFCamLEDMode.LED_AUTO_ON);
-                        else Log.w(TAG, "[recordDelayHandler] Status LED ON smartKeyRfDoorAPI is null!!");
+                        //jglee - 2022.09.05 SMARTIOT 일 경우, Auto On/Off 설정을 내리는 경우 간헐적으로 카메라 상태가 풀리는 경우 발생
+                        if(mSmartKeyRfDoorAPI!=null && getDoorCamType() != WallpadDeviceSet.DOORTYPE_IOT_SMART)
+                        {
+                            //jglee - 2023.04.06 거동수상자 시나리오 변경으로 인하여 LED Auto On 제거
+//                            if (mSmartKeyRfDoorAPI != null) mSmartKeyRfDoorAPI.SetLEDmode(Common.SmartRFCamLEDMode.LED_AUTO_ON);
+//                            else Log.w(TAG, "[recordDelayHandler] Status LED ON smartKeyRfDoorAPI is null!!");
 
-                        if (mSmartKeyRfDoorAPI != null) mSmartKeyRfDoorAPI.SetCAMERAmode(Common.SmartRFCamStatusMode.STATUS_AUTO_ON);
-                        else Log.w(TAG, "[recordDelayHandler] Status Auto ON smartKeyRfDoorAPI is null!!");
+                            if (mSmartKeyRfDoorAPI != null) mSmartKeyRfDoorAPI.SetCAMERAmode(Common.SmartRFCamStatusMode.STATUS_AUTO_OFF);
+                            else Log.w(TAG, "[recordDelayHandler] Status Auto ON smartKeyRfDoorAPI is null!!");
 
-                        //여기서 감지시간을 원래대로 복구
-                        if(mSmartKeyRfDoorAPI!=null)
-                        {
                             String ret = mSmartKeyRfDoorAPI.SetSensorConfig((byte) 0x05, (byte)0x01);
                             Log.i(TAG, "[recordDelayHandler SenSorConfig] - Test Setting result = " + ret);
                         }
+                        else if(getDoorCamType() == WallpadDeviceSet.DOORTYPE_IOT_SMART)
+                        {
+                            //ISC-300 인 경우 서비스에서 BR을 전송여부 설정
+                            Intent ServiceIntent = new Intent();
+                            ServiceIntent.setAction(Common.BR_RECORD_USE_BR);
+                            sendBroadcast(ServiceIntent);
+                        }
                     }
-
-
                 }
             }
         }
@@ -10461,6 +10563,11 @@ public class MainActivity extends WpadActivity {
                     cv_bStrangerUserVideoRecordUsage = false;
                 }
 
+                //jglee - 20230329 거동수상자 시나리오 변경에따른 세팅값 전달(감지 대기 시간, 감지 카운트)
+                Intent ServiceIntent = new Intent();
+                ServiceIntent.setAction(Common.BR_STRANGEDETECT_SETTING);
+                sendBroadcast(ServiceIntent);
+
                 if(!Common.bRecordDelay)
                     RecordNotUse(true);
 

+ 3 - 0
WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/declare/Common.java

@@ -275,6 +275,9 @@ public final class Common {
     public static final String BR_RECORD_EXCEPTION          = "StrangeRecordStopException"; // jglee. 20220706 거동수상자 Exception
     public static final String BR_RECORD_NOT_USE            = "StrangeRecordNotUse";        // jglee. 20220728 거동 수상자 사용안함
     public static final String BR_RECORD_DELAY_INIT         = "StrangeRecordDelayInit";        // jglee. 20220803 거동 수상자 사용 설정 시, 전송 BR
+    public static final String BR_RECORD_USE_BR             = "StrangeRecordUseService";        // jglee 20220905 거동 수상자 사용 설정(서비스BR), ISC-300 때문에 새로 추가
+    public static final String BR_STRANGEDETECT_TESTMODE             = "Strange_TestMode";        // jglee 20230322 거동 수상자 테스트 모드 때문에 추가(관리자 설정 센서에서는 1회 감지만으로도 알람이 울려야 하기 추가)
+    public static final String BR_STRANGEDETECT_SETTING             = "StrangeRecordSetting";   //jglee 20230322 거동 수상자 시나리오 수정에 따른 세팅값 전달
 
     // 거실에너지미터 연동
     public static byte LIVINGEM_CTRL_NORMAL = (byte) 0x00;

+ 5 - 0
WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/popup/AdminPWInput.java

@@ -294,6 +294,11 @@ public class AdminPWInput extends WpadScreen {
             else if (nTargetID == ID.POPUPS.ADMINPWINPUT.ELEMENTS.BTNS.CONFIRM) {
                 Sound().Play(SND.effect.TOUCH_LATCHED);
                 if (strInputPassWord.equalsIgnoreCase(SamplePassWord)) {
+                    //jglee - 2023.03.28 여기서 90초 동안 거동수상자 녹화가 안되게 Intent 전송
+                    Intent DelayIntent = new Intent();
+                    DelayIntent.setAction(Common.BR_RECORD_DELAY);
+                    this.getContext().sendBroadcast(DelayIntent);
+
                     // 패스워드가 같다면 관리자 화면호출
                     Intent mIntent = new Intent(Intent.ACTION_MAIN);
                     mIntent.setComponent(new ComponentName("com.artncore.managersetting", "com.artncore.managersetting.ui.activities.MainActivity"));

+ 165 - 4
WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/util/iMapServer.java

@@ -103,6 +103,8 @@ import java.util.GregorianCalendar;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Queue;
+import java.util.Timer;
+import java.util.TimerTask;
 
 import javax.net.ssl.SSLServerSocket;
 import javax.xml.parsers.DocumentBuilder;
@@ -3766,6 +3768,10 @@ public class iMapServer extends Service {
                                     || Version.getModelType() == MODEL_TYPE.IHN_D101_I_OCF) {
                                 retXML = iCMDProcEntireLightControl(doc); // 전체 조명 제어
                             }
+                        }
+                        //jglee - 2024.11.13 원격 adb 로깅
+                        else if( cmd.equalsIgnoreCase("remote_debug_connect")) {
+                            retXML = imapRemoteDebugConnect(doc);
                         }
 						break;
 					}
@@ -3833,6 +3839,161 @@ public class iMapServer extends Service {
 	}
 
 
+    /** ADB 원격 디버깅 */
+    public String imapRemoteDebugConnect(Document doc) {
+        Log.d(TAG, "[imapRemoteDebugConnect] START -----------");
+        String resultstr = XMLHeader + "<service type=\"reply\" name=\"" + "remote_debug_connect" + "\" result=";
+        String action = "", id = "", pw = "", duration = "", port = "", message = "";
+        try {
+            // action
+            NodeList items = doc.getElementsByTagName("action");
+            Node item = items.item(0);
+            if (item == null) return resultstr += "\"fail\"/> \r\n </imap>";
+
+            Element element = (Element) items.item(0);
+            action = element.getTextContent().replace("\"", "").trim();
+
+            items = doc.getElementsByTagName("account");
+            element = (Element) items.item(0);
+            NamedNodeMap mAttrs = element.getAttributes();
+            int nAttrCnt = mAttrs.getLength();
+            Log.d(TAG, "[imapRemoteDebugConnect] nAttrCnt [" + nAttrCnt + "]");
+            for (int i = 0; i < nAttrCnt; i++) {
+                Node mAttr = mAttrs.item(i);
+                if (i == 0) {
+                    if (!mAttr.getNodeName().equalsIgnoreCase("id"))
+                        return resultstr += "\"fail\"/> \r\n </imap>";
+                    id = mAttr.getNodeValue();
+                }
+                else if (i == 1) {
+                    if (!mAttr.getNodeName().equalsIgnoreCase("pw"))
+                        return resultstr += "\"fail\"/> \r\n </imap>";
+                    pw = mAttr.getNodeValue();
+                }
+                else {
+                    return resultstr += "\"fail\"/> \r\n </imap>";
+                }
+            }
+
+            items = doc.getElementsByTagName("option");
+            element = (Element) items.item(0);
+            mAttrs = element.getAttributes();
+            nAttrCnt = mAttrs.getLength();
+            Log.d(TAG, "[imapRemoteDebugConnect] nAttrCnt [" + nAttrCnt + "]");
+            for (int i = 0; i < nAttrCnt; i++) {
+                Node mAttr = mAttrs.item(i);
+                if (i == 0) {
+                    if (!mAttr.getNodeName().equalsIgnoreCase("duration"))
+                        return resultstr += "\"fail\"/> \r\n </imap>";
+                    duration = mAttr.getNodeValue();
+                }
+                else if (i == 1) {
+                    if (!mAttr.getNodeName().equalsIgnoreCase("port"))
+                        return resultstr += "\"fail\"/> \r\n </imap>";
+                    port = mAttr.getNodeValue();
+                }
+                else {
+                    return resultstr += "\"fail\"/> \r\n </imap>";
+                }
+            }
+
+            items = doc.getElementsByTagName("message");
+            element = (Element) items.item(0);
+            message = element.getTextContent().replace("\"", "").trim();
+
+            Log.d(TAG, "[imapRemoteDebugConnect] action [" + action + "]");
+            Log.d(TAG, "[imapRemoteDebugConnect] id [" + id + "], pw [" + pw + "], duration [" + duration + "], port [" + port + "]");
+            Log.d(TAG, "[imapRemoteDebugConnect] message [" + message + "]");
+
+            if (!checkRemoteDebugAccount(id, pw)) return resultstr += "\"fail\"/> \r\n </imap>";
+
+            if (action.equalsIgnoreCase("enable")) {
+                ctrlRemoteDebugConnect(true, port, Integer.parseInt(duration));
+            }
+            else if (action.equalsIgnoreCase("disable")) {
+                ctrlRemoteDebugConnect(false, port, Integer.parseInt(duration));
+            }
+            else {
+                return resultstr += "\"fail\"/> \r\n </imap>";
+            }
+            return resultstr += "\"ok\"/> \r\n </imap>";
+        } catch (RuntimeException re) {
+            Log.e(TAG, "[imapRemoteDebugConnect] RuntimeException");
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, "[imapRemoteDebugConnect] Exception");
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+        return resultstr += "\"fail\"/> \r\n </imap>";
+    }
+
+
+    public void ctrlRemoteDebugConnect(boolean enable, String port, int mins) {
+        try {
+            Log.d(TAG, "[ctrlRemoteDebugConnect] enable [" + enable + "], port [" + port + "], mins [" + mins + "]");
+            if (enable) {
+                if (0 >= nRemoteDebugCntDN) {
+                    RemoteDebugTimer = new Timer();
+                    RemoteDebugTimer.schedule(new RemoteDebugCntDN(), 1000, 60000);
+                    if (mIOInterface.checkADBRemoteConnect() == -1) {
+                        // 미사용중
+                        mIOInterface.enableADBRemoteConnect(port);
+                    }
+                    nRemoteDebugCntDN = mins;
+                }
+            } else {
+                mIOInterface.disableADBRemoteConnect();
+            }
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] ctrlRemoteDebugConnect()");
+            e.printStackTrace();
+        }
+    }
+
+    public int nRemoteDebugCntDN = 0;
+    Timer RemoteDebugTimer = null;
+    public class RemoteDebugCntDN extends TimerTask {
+        @Override
+        public void run() {
+            try {
+                nRemoteDebugCntDN--;
+                Log.d(TAG, "[RemoteDebugCntDN] nRemoteDebugCntDN [" + nRemoteDebugCntDN + "]");
+                if (0 >= nRemoteDebugCntDN) {
+                    RemoteDebugTimer.cancel();
+                    RemoteDebugTimer = null;
+                }
+            } catch (Exception e) {
+                Log.e(TAG, "[Exception] RemoteDebugCntDN().run() : " + e);
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /** ADB 원격 디버깅 계정 정보 확인 */
+    public boolean checkRemoteDebugAccount(String id, String pw) {
+        try {
+            if (id.equals("icontrols")) {
+                if (pw.equals("hdc1208193646#$")) {
+                    Log.i(TAG, "[checkRemoteDebugAccount] Account correct!!");
+                    return true;
+                }
+                else {
+                    Log.w(TAG, "[checkRemoteDebugAccount] PW incorrect!!");
+                    return false;
+                }
+            }
+            else {
+                Log.w(TAG, "[checkRemoteDebugAccount] ID incorrect!!");
+                return false;
+            }
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] checkRemoteDebugAccount(String id, String pw)");
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+
     public class iMapSverSocketThread_Mix extends Thread {
         private final Socket iMAPSock;
         String               strRcvMSG;
@@ -5032,8 +5193,8 @@ public class iMapServer extends Service {
 
                                         if (devname.equalsIgnoreCase(DetailInfo[2])) {
                                             if (DetailInfo[3].equalsIgnoreCase(define.DEVICE_ENABLE)) {
-                                                ctrlSmartIOTCamStatusMode(Common.SmartRFCamStatusMode.STATUS_AUTO_ON);
-                                                ctrlSmartIOTCamLEDMode(Common.SmartRFCamLEDMode.LED_AUTO_ON);
+                                                ctrlSmartIOTCamStatusMode(Common.SmartRFCamStatusMode.STATUS_AUTO_OFF);
+                                                ctrlSmartIOTCamLEDMode(Common.SmartRFCamLEDMode.LED_AUTO_OFF);
                                             }
                                             else {
                                                 ctrlSmartIOTCamStatusMode(Common.SmartRFCamStatusMode.STATUS_AUTO_OFF);
@@ -15290,8 +15451,8 @@ public class iMapServer extends Service {
 
                 if (getStrangerRecordingManagerSetting() && getStrangerRecordingUserSetting()) {
                     // 설정값을 확인하여 스마트 IoT 현관카메라의 상태를 전송한다. (거동수상자 녹화를 위한 자동 On 기능 활성화)
-                    ctrlSmartIOTCamStatusMode(Common.SmartRFCamStatusMode.STATUS_AUTO_ON);
-                    ctrlSmartIOTCamLEDMode(Common.SmartRFCamLEDMode.LED_AUTO_ON);
+                    ctrlSmartIOTCamStatusMode(Common.SmartRFCamStatusMode.STATUS_AUTO_OFF);
+                    ctrlSmartIOTCamLEDMode(Common.SmartRFCamLEDMode.LED_AUTO_OFF);
                 }
                 else {
                     // 설정값을 확인하여 스마트 IoT 현관카메라의 상태를 전송한다. (거동수상자 녹화를 위한 자동 On 기능 비활성화)

BIN=BIN
WallPadMain/src/main/jniLibs/armeabi-v7a/libwpd_v40interface2-jni.so


BIN=BIN
WallPadMain/src/main/jniLibs/armeabi/libwpd_v40interface2-jni.so