Jelajahi Sumber

Merge branch 'master' of https://hub.hdc-smart.com/jglee/6410_ALT

DESKTOP-UNEGUH3\MadeinLab_SW_02 2 tahun lalu
induk
melakukan
9656769a9a
32 mengubah file dengan 220 tambahan dan 70 penghapusan
  1. TEMPAT SAMPAH
      10_Release/ManagerSetting.apk
  2. TEMPAT SAMPAH
      10_Release/WallPadCall.apk
  3. TEMPAT SAMPAH
      10_Release/WallPadDevService.apk
  4. TEMPAT SAMPAH
      10_Release/WallPadHomeCtrl.apk
  5. TEMPAT SAMPAH
      10_Release/WallPadMain.apk
  6. TEMPAT SAMPAH
      10_Release/WallPadSecurity.apk
  7. TEMPAT SAMPAH
      ManagerSetting/libs/WallPadAPI.jar
  8. 1 1
      ManagerSetting/src/main/AndroidManifest.xml
  9. 4 2
      ManagerSetting/src/main/java/com/artncore/managersetting/domain/Const.java
  10. 19 2
      ManagerSetting/src/main/java/com/artncore/managersetting/ui/fragments/AdminSettingFragment.java
  11. 18 4
      ManagerSetting/src/main/java/com/artncore/managersetting/ui/fragments/SettingControllerFragment.java
  12. 2 1
      ManagerSetting/src/main/res/values/strings.xml
  13. TEMPAT SAMPAH
      WallPadAPI/jar/WallPadAPI.jar
  14. TEMPAT SAMPAH
      WallPadAPI/jar/WallPadAPIforSVC.jar
  15. 10 6
      WallPadAPI/src/main/java/com/artncore/WallPadDataMgr/WallpadDeviceSet.java
  16. 1 1
      WallPadAPI/src/main/java/com/artncore/commons/define.java
  17. 1 1
      WallPadCall/src/main/AndroidManifest.xml
  18. 15 0
      WallPadCall/src/main/java/kr/co/icontrols/callengine/engine/CallController.java
  19. 102 2
      WallPadCall/src/main/java/kr/co/icontrols/callengine/subwallpad/SubWallPadSerialManager.java
  20. TEMPAT SAMPAH
      WallPadDevService/libs/WallPadAPIforSVC.jar
  21. 1 1
      WallPadDevService/src/main/AndroidManifest.xml
  22. 2 2
      WallPadDevService/src/main/java/com/artncore/wallpaddevservice/driver/Knx_Ventilation_Controller.java
  23. 34 41
      WallPadDevService/src/main/java/com/artncore/wallpaddevservice/driver/Ventilation_Controller.java
  24. TEMPAT SAMPAH
      WallPadHomeCtrl/libs/WallPadAPI.jar
  25. 1 1
      WallPadHomeCtrl/src/main/AndroidManifest.xml
  26. 1 1
      WallPadHomeCtrl/src/main/java/kr/co/icontrols/wallpadhomectrl/MainActivity.java
  27. TEMPAT SAMPAH
      WallPadMain/libs/WallPadAPI.jar
  28. 1 1
      WallPadMain/src/main/AndroidManifest.xml
  29. 5 2
      WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/MainActivity.java
  30. TEMPAT SAMPAH
      WallPadSecurity/libs/WallPadAPI.jar
  31. 1 1
      WallPadSecurity/src/main/AndroidManifest.xml
  32. 1 0
      WallPadSecurity/src/main/java/kr/co/icontrols/wallpadsecurity/screen/PopupSmartIOTCam.java

TEMPAT SAMPAH
10_Release/ManagerSetting.apk


TEMPAT SAMPAH
10_Release/WallPadCall.apk


TEMPAT SAMPAH
10_Release/WallPadDevService.apk


TEMPAT SAMPAH
10_Release/WallPadHomeCtrl.apk


TEMPAT SAMPAH
10_Release/WallPadMain.apk


TEMPAT SAMPAH
10_Release/WallPadSecurity.apk


TEMPAT SAMPAH
ManagerSetting/libs/WallPadAPI.jar


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

@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.artncore.managersetting"
     android:versionCode="23"
-    android:versionName="2022.09.22.01">
+    android:versionName="2022.11.11.01">
 
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

+ 4 - 2
ManagerSetting/src/main/java/com/artncore/managersetting/domain/Const.java

@@ -85,10 +85,12 @@ public class Const {
     public static final String CONTROLLER_POWERCONTROLLER_KIND_DIRECT = "직결보드";
     public static final String CONTROLLER_POWERCONTROLLER_KIND_MEASURE = "전력측정직결보드";
 
-    public static final String VENTILATION_TYPE_COMMON  = "기본";
+    //2022.10.11 이전에는 기본이 존재함 -> 기본이 "초기"
+    // 현재는 현재 사용하는 프로토콜
+    public static final String VENTILATION_TYPE_OLD_COMMON  = "기본";
     public static final String VENTILATION_TYPE_LH      = "LH향";
     public static final String VENTILATION_TYPE_HOOD    = "후드";
-
+    public static final String VENTILATION_TYPE_COMMON    = "신규";
 
     public static final String ELECTRONICALLY_CURTAIN_TYPE_MAIN_ROOM = "안방커튼";
     public static final String ELECTRONICALLY_CURTAIN_TYPE_LIVING_ROOM = "거실커튼";

+ 19 - 2
ManagerSetting/src/main/java/com/artncore/managersetting/ui/fragments/AdminSettingFragment.java

@@ -89,7 +89,7 @@ public class AdminSettingFragment extends Fragment implements AdminSubMenu.SubMe
 
         if (Version.getGatewayUsage()) {
             if (Version.getModelType() == Version.MODEL_TYPE.IHN_1010GL || Version.getModelType() == Version.MODEL_TYPE.IHN_1010GL_I
-                    || Version.getModelType() == Version.MODEL_TYPE.IHN_1010GL_I_2443 || Version.getModelType() == Version.MODEL_TYPE.IHN_1010GL_I_6410) {
+                    || Version.getModelType() == Version.MODEL_TYPE.IHN_1010GL_I_2443) {
                 inputmenuItem = new String[menuItem.length-2];
                 Log.d(TAG, "[onViewCreated] inputmenuItem.length [" + inputmenuItem.length + "]");
 
@@ -103,6 +103,22 @@ public class AdminSettingFragment extends Fragment implements AdminSubMenu.SubMe
                     }
                 }
             }
+            //jglee 2022.10.26 6410대체품 현산향은 서브폰으로 사용
+            else if (Version.getModelType() == Version.MODEL_TYPE.IHN_1010GL_I_6410) {
+                inputmenuItem = new String[menuItem.length-1];
+                Log.d(TAG, "[onViewCreated] inputmenuItem.length [" + inputmenuItem.length + "]");
+
+                for (int i = 0; i < menuItem.length-2; i++) {
+                    if ( i == (menuItem.length-3) ) {
+                        inputmenuItem[i] = menuItem[i+1];
+                        inputmenuItem[i+1] = menuItem[i+2];// IHN-1010GL 월패드인 경우에는 거실EM 설정, 서브월패드 설정 화면 안나오도록 함.
+                        break;
+                    }
+                    else {
+                        inputmenuItem[i] = menuItem[i];
+                    }
+                }
+            }
             else {
                 inputmenuItem = new String[menuItem.length-1];
                 Log.d(TAG, "[onViewCreated] inputmenuItem.length [" + inputmenuItem.length + "]");
@@ -214,8 +230,9 @@ public class AdminSettingFragment extends Fragment implements AdminSubMenu.SubMe
                     getActivity().getSupportFragmentManager().beginTransaction()
                             .replace(R.id.menu_content, fragment).commit();
                 }
+                //jglee - 6410GL 현산향일 경우 서브폰 설정이 필요함(6410 현산향에서 사용하기로 함)
                 else if (modelType == Version.MODEL_TYPE.IHN_1010 || modelType == Version.MODEL_TYPE.IHN_1010_I
-                        || modelType == Version.MODEL_TYPE.IHN_1010_I_2443 || modelType == Version.MODEL_TYPE.IHN_1010_I_6410) {
+                        || modelType == Version.MODEL_TYPE.IHN_1010_I_2443 || modelType == Version.MODEL_TYPE.IHN_1010_I_6410 || modelType == Version.MODEL_TYPE.IHN_1010GL_I_6410) {
                     SettingSubWpdSettingFragment fragment = new SettingSubWpdSettingFragment();
                     getActivity().getSupportFragmentManager().beginTransaction()
                             .replace(R.id.menu_content, fragment).commit();

+ 18 - 4
ManagerSetting/src/main/java/com/artncore/managersetting/ui/fragments/SettingControllerFragment.java

@@ -577,7 +577,7 @@ public class SettingControllerFragment extends Fragment implements ControllerLis
                     if (Const.CONTROLLER_SETTING_DO_USED.equals(InfoList.get(3))) {
                         String strType = InfoList.get(5);
 
-                        if (Const.VENTILATION_TYPE_COMMON.equals(strType)) {
+                        if (Const.VENTILATION_TYPE_OLD_COMMON.equals(strType)) {
                             ventilationCurrent = 1;
                         }
                         else if (Const.VENTILATION_TYPE_LH.equals(strType)) {
@@ -586,15 +586,27 @@ public class SettingControllerFragment extends Fragment implements ControllerLis
                         else if (Const.VENTILATION_TYPE_HOOD.equals(strType)) {
                             ventilationCurrent = 3;
                         }
+                        //2022.10.11 이전에는 기본이 존재함
+                        //현재는 현재 사용하는 프로토콜
+                        else if (Const.VENTILATION_TYPE_COMMON.equals(strType)) {
+                            ventilationCurrent = 4;
+                        }
+                        else
+                        {
+                            //2022.10.11 이전에는 기본이 존재함
+                            // 현재는 현재 사용하는 프로토콜
+                            ventilationCurrent = 1;
+                        }
                     }
                 }
 
 
                 List<String> itemList = new ArrayList<String>();
                 itemList.add(mActivity.getString(R.string.do_not_used));
-                itemList.add(mActivity.getString(R.string.contoller_ventilation_item_common));
+                itemList.add(mActivity.getString(R.string.contoller_ventilation_item_old_common));
                 itemList.add(mActivity.getString(R.string.contoller_ventilation_item_lh));
                 itemList.add(mActivity.getString(R.string.contoller_ventilation_item_hood));
+                itemList.add(mActivity.getString(R.string.contoller_ventilation_item_common));
 
                 String controllerName = mActivity.getString(R.string.contoller_ventilation);
                 controllerVO = new ControllerVO(type
@@ -1614,12 +1626,14 @@ public class SettingControllerFragment extends Fragment implements ControllerLis
                     else {
                         String typeName = null;
 
-                        if (itemName.equals(Const.VENTILATION_TYPE_COMMON))
-                            typeName = Const.VENTILATION_TYPE_COMMON;
+                        if (itemName.equals(Const.VENTILATION_TYPE_OLD_COMMON))
+                            typeName = Const.VENTILATION_TYPE_OLD_COMMON;
                         else if (itemName.equals(Const.VENTILATION_TYPE_LH))
                             typeName = Const.VENTILATION_TYPE_LH;
                         else if (itemName.equals(Const.VENTILATION_TYPE_HOOD))
                             typeName = Const.VENTILATION_TYPE_HOOD;
+                        else if (itemName.equals(Const.VENTILATION_TYPE_COMMON))
+                            typeName = Const.VENTILATION_TYPE_COMMON;
 
                         value += "("
                                 + Const.CONTROLLER_SETTING_DO_USED

+ 2 - 1
ManagerSetting/src/main/res/values/strings.xml

@@ -280,9 +280,10 @@
     <string name="contoller_door_lock_item_wired">유선</string>
     <string name="contoller_door_lock_item_fingerprint">지문인식</string>
 
-    <string name="contoller_ventilation_item_common">기본</string>
+    <string name="contoller_ventilation_item_old_common">기본</string>
     <string name="contoller_ventilation_item_lh">LH향</string>
     <string name="contoller_ventilation_item_hood">후드</string>
+    <string name="contoller_ventilation_item_common">신규</string>
 
     
     <string name="controller_electronically_curtain_item_main_room">안방커튼</string>

TEMPAT SAMPAH
WallPadAPI/jar/WallPadAPI.jar


TEMPAT SAMPAH
WallPadAPI/jar/WallPadAPIforSVC.jar


+ 10 - 6
WallPadAPI/src/main/java/com/artncore/WallPadDataMgr/WallpadDeviceSet.java

@@ -470,14 +470,17 @@ public class WallpadDeviceSet extends wallpaddbmgr {
 			return  returnData;
 		}
 	}
-	public static final int VENTIL_TYPE_NORMAL = 31;
+
+	//jglee - 환기 새로 구분
+	public static final int VENTIL_TYPE_NORMAL_OLD = 31; //(2세대 3세대 초기 모델)
 	public static final int VENTIL_TYPE_LH     = 32;
 	public static final int VENTIL_TYPE_HOOD   = 33;
+	public static final int VENTIL_TYPE_NORMAL_NEW = 34; // 기존 환기
 	public int[] Get_Ventil_Info()
 	{
 		String[] GetData = GetSettingData("환기시스템");
 
-		int returnData[] = {1,VENTIL_TYPE_NORMAL};
+		int returnData[] = {1,VENTIL_TYPE_NORMAL_OLD};
 		try
 		{
 			if (GetData == null) return returnData;
@@ -489,13 +492,14 @@ public class WallpadDeviceSet extends wallpaddbmgr {
 				return returnData;
 			}
 
-			if (GetData[1].indexOf("기본") > 0) returnData[1] = VENTIL_TYPE_NORMAL;
+			if (GetData[1].indexOf("기본") > 0) returnData[1] = VENTIL_TYPE_NORMAL_OLD;
 			else if (GetData[1].indexOf("LH향") >0) returnData[1] = VENTIL_TYPE_LH;
 			else if (GetData[1].indexOf("후드") >0) returnData[1] = VENTIL_TYPE_HOOD;
+			else if (GetData[1].indexOf("신규") >0) returnData[1] = VENTIL_TYPE_NORMAL_NEW;
 			else
 			{
 				returnData[0] = 1;
-				returnData[1] = VENTIL_TYPE_NORMAL;
+				returnData[1] = VENTIL_TYPE_NORMAL_OLD;
 				return returnData;
 			}
 			return returnData;
@@ -503,14 +507,14 @@ public class WallpadDeviceSet extends wallpaddbmgr {
 		catch (RuntimeException re) {
             LogUtil.errorLogInfo("", TAG, re);
 			returnData[0] = 0;
-			returnData[1] = VENTIL_TYPE_NORMAL;
+			returnData[1] = VENTIL_TYPE_NORMAL_OLD;
 			return  returnData;
         } catch (Exception e)
 		{
 			//e.printStackTrace();
 			LogUtil.errorLogInfo("", TAG, e);
 			returnData[0] = 0;
-			returnData[1] = VENTIL_TYPE_NORMAL;
+			returnData[1] = VENTIL_TYPE_NORMAL_OLD;
 			return  returnData;
 		}
 	}

+ 1 - 1
WallPadAPI/src/main/java/com/artncore/commons/define.java

@@ -4,7 +4,7 @@ import android.os.Environment;
 
 public class define {
 	/** WallPadAPI Version 을 정의합니다. */
-	public static final String WALLPADAPI_VERSION = "2022.08.10.01";
+	public static final String WALLPADAPI_VERSION = "2022.10.25.01";
 	///////////////////////////////////////////////////////////////////////
 	// WallPadDevService 의 각 드라이버와 통신을 위한 드라이버 이름을 정의합니다.
 	///////////////////////////////////////////////////////////////////////

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

@@ -1,7 +1,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="kr.co.icontrols.wallpadcall"
     android:versionCode="17"
-    android:versionName="2022.10.18.01">
+    android:versionName="2022.11.11.01">
 
     <!--android:sharedUserId="android.uid.system"-->
     <!--<uses-sdk-->

+ 15 - 0
WallPadCall/src/main/java/kr/co/icontrols/callengine/engine/CallController.java

@@ -2072,6 +2072,13 @@ public class CallController extends CallManager implements SIPEventListener {
                         MainActivity.mAudioManager.setMode(AUDIO_MODE_V40_SUBWALLPAD_FRONT); // IHN-1010S
                         sendHandlerMsgDelayed(HANDLERMSG.SET_V40_NOUGAT_SUBWALLPAD_TALKPATH, 0, 0, 2000);
                     }
+                    //jglee - 2022.10.26 통화 모드 패스 설정
+                    else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT) {
+                        //현관일 경우 아래 3개를 함
+                        ((MainActivity) mContext).sendHandlerMsg(IGW300CMD.AUDIO_FRONT_WALLPAD, 0, 0);
+                        sendHandlerMsg(HANDLERMSG.SETMODE_AUDIO_FRONT_WALLPAD, 0, 0);
+                        MainActivity.mIOInterface.ctrlAudioSwitch34118(true);
+                    }
                     else LOG_WARN("[setTalkPath] Not Supported SubWallPad BOARDTYPE!! BOARD_TYPE [" + ConfigValues.DEVICE_BOARDTYPE + "]");
                 }
                 else {
@@ -2086,6 +2093,14 @@ public class CallController extends CallManager implements SIPEventListener {
                         MainActivity.mAudioManager.setMode(AUDIO_MODE_V40_SUBWALLPAD_MOIP); // IHN-1010S
                         sendHandlerMsgDelayed(HANDLERMSG.SET_V40_NOUGAT_SUBWALLPAD_TALKPATH, 0, 0, 2000);
                     }
+                    //jglee - 2022.10.26 통화 모드 패스 설정
+                    else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT) {
+                        //현관일 경우 아래 3개를 함(MOIP인 경우도 결국에는 GW를 사용하기 때문에 필요)
+                        //현관일 경우 아래 3개를 함
+                        ((MainActivity) mContext).sendHandlerMsg(IGW300CMD.AUDIO_FRONT_WALLPAD, 0, 0);
+                        sendHandlerMsg(HANDLERMSG.SETMODE_AUDIO_FRONT_WALLPAD, 0, 0);
+                        MainActivity.mIOInterface.ctrlAudioSwitch34118(true);
+                    }
                     else LOG_WARN("[setTalkPath] Not Supported SubWallPad BOARDTYPE!! BOARD_TYPE [" + ConfigValues.DEVICE_BOARDTYPE + "]");
                 }
                 else {

+ 102 - 2
WallPadCall/src/main/java/kr/co/icontrols/callengine/subwallpad/SubWallPadSerialManager.java

@@ -1,5 +1,6 @@
 package kr.co.icontrols.callengine.subwallpad;
 
+import android.annotation.SuppressLint;
 import android.app.ActivityManager;
 import android.app.Service;
 import android.content.BroadcastReceiver;
@@ -19,6 +20,8 @@ import com.artncore.WallPadDataMgr.WallpadDeviceSet;
 import com.artncore.WallPadDataMgr.WallpadStatusData;
 import com.artncore.WallPadDataMgr.WallpadStatusData.WeatherTable;
 import com.artncore.commons.define;
+import com.artncore.wallpadapi.IGW200dAPI;
+import com.artncore.wallpadapi.IGW300API;
 import com.artncore.wallpadapi.WallPadAPI;
 import com.util.LogUtil;
 
@@ -74,6 +77,9 @@ public class SubWallPadSerialManager extends Service {
     private SerialDataReceiver mSerialDataReceiver;
     private SubWallPadServiceBRReceiver mSubWallPadServiceBRReceiver;
 
+    //서브 월패드 1010GL로 실행하기 위해 필요
+    private IGW300API mIGW300;
+
     @Override
     public void onCreate() {
         try {
@@ -83,6 +89,11 @@ public class SubWallPadSerialManager extends Service {
 
             mWallPadAPI = new WallPadAPI(this);
 
+            //2022.10.26 6410 현산향 사용 시, GW를 사용해야 하기 때문에 필요함
+            if (Version.getModelType() == Version.MODEL_TYPE.IHN_1010GL_I_6410) {
+                IGW300APICheckHandler.sendEmptyMessage(0);
+            }
+
             registerBRReceiver();
 
             if (startSerialPort()) {
@@ -100,6 +111,43 @@ public class SubWallPadSerialManager extends Service {
         }
     }
 
+
+    /**
+     * (임시코드) GW 초기생성시 Connect 에 시간이 걸리며, <br>
+     * WallPadAPI 초기화후 바로 Get_GasValveController 등을 사용하여  API 를 가져올수 없기에, <br>
+     * 본 딜레이 코드를 임시로 적용한다.
+     */
+    @SuppressLint("HandlerLeak")
+    protected Handler IGW300APICheckHandler = new Handler() {
+        @SuppressLint("HandlerLeak")
+        @Override
+        public void handleMessage(Message msg) {
+            if (msg.what == 0) {
+                if (mWallPadAPI != null) {
+                    if (mWallPadAPI.Check_Connect()) IGW300APICheckHandler.sendEmptyMessageDelayed(1, 10);
+                    else IGW300APICheckHandler.sendEmptyMessageDelayed(0, 10);
+                }
+            }
+            else if(msg.what == 1) {
+                setIGE300Interface();
+            }
+        }
+    };
+
+    public void setIGE300Interface() {
+        try {
+            mIGW300 = mWallPadAPI.Get_IGW300Controller();
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        }
+        catch (Exception e) {
+            Log.e(TAG, "[Exception] setIGE300Interface()");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+
     @Override
     public void onDestroy() {
         try {
@@ -272,6 +320,13 @@ public class SubWallPadSerialManager extends Service {
                 // Read serial port parameters
                 String[] aSerialInfo = strSerialInfo.split("_");
                 int nBaudrate = Integer.parseInt(getSubPhoneBaudrate());
+
+                //jglee - 통신 속도에 따라 WaitTime이 달라질 필요 있음
+                //jglee - 9600bps 인 경우는 데이터 손실이 없음(80bit - 10byte) ->0.008s=>0.8ms
+                //1200bps 인 경우는 데이터 손실 발생(80bit - 10byte) ->0.0666s => 66ms
+                if(nBaudrate == 9600) SERIAL_RECEIVE_TIMEOUT = 100;
+                else SERIAL_RECEIVE_TIMEOUT = 200;
+
                 String strPath = "/dev/" + aSerialInfo[1];
                 Log.d(TAG, "[openSerialPort] nBaudrate [" + nBaudrate + "], strPath [" + strPath + "]");
 
@@ -578,6 +633,12 @@ public class SubWallPadSerialManager extends Service {
                 // 통화어플을 실행시킨다.
                 sendLCDBacklightStatus(true);
 
+                //여기서 GW사용할 떄
+                if ( Version.getModelType() == Version.MODEL_TYPE.IHN_1010GL_I_6410) {
+                    GW300ctrlDeviceIO(IGW300API.OUTPUT.DOOR_POWER, true);
+                    GW300ctrlDeviceIO(IGW300API.OUTPUT.BELL_CONT, true);
+                }
+
                 ComponentName mComponentName = new ComponentName(strWallPadCallPackageName, "kr.co.icontrols.wallpadcall.MainActivity");
                 Intent mIntent = new Intent(Intent.ACTION_MAIN);
                 mIntent.putExtra(Declare.CALLTRIGGER.CALLOWNER, eCallOwner.toString());
@@ -601,6 +662,43 @@ public class SubWallPadSerialManager extends Service {
         }
     }
 
+
+    //jglee 6410 GL을 서브폰으로 사용하기 위해 추가
+
+    /**
+     * 서브폰(GW사용) 사용 시, 명령을 내려보내기 위해 사용
+     * @param kind
+     * @param OnOff
+     * @return
+     */
+    public int GW300ctrlDeviceIO(byte kind, boolean OnOff) {
+        try {
+            Log.d(TAG, "[ctrlDeviceIO]  kind :" + kind + " , OnOff :" + OnOff );
+            if (mIGW300 == null) {
+                Log.e(TAG, "[ctrlDeviceIO] - mIGW300API unload !!!");
+                return -1;
+            }
+
+            int ret = mIGW300.ControlOutput(kind, OnOff);
+            if (ret < 0) {
+                Log.e(TAG, "[ctrlDeviceIO] - mIGW300API.ControlOutput()  ret = " + ret + " / ErrorCode = " + mIGW300.ErrorCode.ErrStr());
+                return -2;
+            }
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+            return -102;
+        }catch(Exception e) {
+            Log.e(TAG, "[ctrlDeviceIO] - [Exception Error] mIGW300API.ControlOutput()");
+            Log.e(TAG, "[ctrlDeviceIO] - " + e.toString());
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+            return -102;
+        }
+        //DebugLogOutput("[ctrlDeviceIO] - OK");
+
+        return 0;
+    }
+
     /**
      * Edited by jeff (2020.06.22)
      * LCD 잔상 현장 복구/보호를 위해 실행되고 있는 LCD Keeper를 종료하기 위해, 통화 App이 실행되면서
@@ -1646,14 +1744,16 @@ public class SubWallPadSerialManager extends Service {
                     }
 
                     if (mInputStream.available() > 0) {
+                        //jglee - 9600bps 인 경우는 데이터 손실이 없음(80bit - 10byte) ->0.008s=>0.8ms
+                        //1200bps 인 경우는 데이터 손실 발생(80bit - 10byte) ->0.0666s => 66ms
                         lRcvTimeLimit = System.currentTimeMillis() + SERIAL_RECEIVE_TIMEOUT; // Time limit for receiving data
                         nRcvDataCnt = 0;
                         while (lRcvTimeLimit > System.currentTimeMillis()) {
                             if (mInputStream.available() > 0) {
                                 hRcvBuffer = new byte[mInputStream.available()];
                                 mInputStream.read(hRcvBuffer);
-//                                Log.d(TAG, "[SerialDataReceiver.run()] hRcvBuffer.length [" + hRcvBuffer.length + "]");
-//                                Log.d(TAG, "[SerialDataReceiver.run()] hRcvBuffer [" + Global.printHexs(hRcvBuffer) + "]");
+                                Log.d(TAG, "[SerialDataReceiver.run()] hRcvBuffer.length [" + hRcvBuffer.length + "]");
+                                Log.d(TAG, "[SerialDataReceiver.run()] hRcvBuffer [" + Global.printHexs(hRcvBuffer) + "]");
                                 for (int i = 0; i < hRcvBuffer.length; i++) {
                                     if (nRcvDataCnt == 0) {
                                         if (hRcvBuffer[i] == SubWallPadCmds.STX) {

TEMPAT SAMPAH
WallPadDevService/libs/WallPadAPIforSVC.jar


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

@@ -1,7 +1,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.artncore.deviceservice"
     android:versionCode="1"
-    android:versionName="2022.08.23.01">
+    android:versionName="2022.10.25.01">
 
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

+ 2 - 2
WallPadDevService/src/main/java/com/artncore/wallpaddevservice/driver/Knx_Ventilation_Controller.java

@@ -242,7 +242,7 @@ public class Knx_Ventilation_Controller extends DeviceManager {
     }
 
     private int mModelType = Version.MODEL_TYPE.OTHER;
-    private static int mVentilInfo = WallpadDeviceSet.VENTIL_TYPE_NORMAL;
+    private static int mVentilInfo = WallpadDeviceSet.VENTIL_TYPE_NORMAL_NEW;
     /**
      * 예약운전 지원 여부
      */
@@ -2441,7 +2441,7 @@ public class Knx_Ventilation_Controller extends DeviceManager {
      * @return (int) 환기종류
      */
     private int GetVentilInfo() {
-        int retVentilInfo = WallpadDeviceSet.VENTIL_TYPE_NORMAL;
+        int retVentilInfo = WallpadDeviceSet.VENTIL_TYPE_NORMAL_NEW;
         try {
             WallpadDeviceSet devset = new WallpadDeviceSet(ServiceMain.svcContext);
             int[] setdata = devset.Get_Ventil_Info();

+ 34 - 41
WallPadDevService/src/main/java/com/artncore/wallpaddevservice/driver/Ventilation_Controller.java

@@ -224,10 +224,13 @@ public class Ventilation_Controller extends DeviceManager {
     }
 
     private int mModelType = Version.MODEL_TYPE.OTHER;
-    private static int mVentilInfo = WallpadDeviceSet.VENTIL_TYPE_NORMAL;
+    private static int mVentilInfo = WallpadDeviceSet.VENTIL_TYPE_NORMAL_OLD;
     /** 예약운전 지원 여부 */
     private boolean mReservationSupport = false;
-    private int VersionRetryCount = 0;
+    //2022.10.11 jglee - 대체품 환기 기존것도 호환되게 하기위해
+    //설정으로 현재환기 인지 예전 환기인지 확인 하는 것 넣음(설정)
+    //private int VersionRetryCount = 0;
+    private boolean mbisOldVentilation = false;
 
     public class Driver {
         private PollingList Polling;
@@ -262,7 +265,6 @@ public class Ventilation_Controller extends DeviceManager {
             public byte Status;
             public int SearchTryCount;
             public long lHDCAutoAirCleanCheckTimeTick;
-            public long lHDCVersionInfoCheckTimeTick;
 
             private PollingList() {
                 Status = STATUS.First;
@@ -312,6 +314,9 @@ public class Ventilation_Controller extends DeviceManager {
 
         /* 환기 타입 가져오기 */
         mVentilInfo = GetVentilInfo();
+        //jglee - 2022.10.11
+        //여기서 초기버전(상태정보 곧바로 가져오는 버전인지 확인 필요
+        if(mVentilInfo == WallpadDeviceSet.VENTIL_TYPE_NORMAL_OLD) mbisOldVentilation = true;
 
         /* 환기가 후드일 경우 ID 교체 */
         if (mVentilInfo == WallpadDeviceSet.VENTIL_TYPE_HOOD) DEVICE_ADDRESS = (byte)0x68;
@@ -376,41 +381,38 @@ public class Ventilation_Controller extends DeviceManager {
             }
             Sleep(100);
 
-            VERSION Version = Send_GetVersion();
-            if (Version != null) {
-                // 지원 상태를 저장한다.
-                mDriver.Status.Support = new DataClasses.Venti.SUPPORT(Version.Support);
-                mDriver.Version = Version;
-                Log.i(TAG, mDriver.Version.ToDebugString());
-
-                // 룸콘트롤러가 없을 경우 DB에 저장된 값이 예약상태이다.
-                if (!mDriver.Status.Support.RoomController) {
-                    mDriver.Status.Reservation = DB_GetVentiReserveOnOff();
-                }
-
-                // 상태를 가져온다.
-                Sleep(150);
+            VERSION Version;
+            if(mbisOldVentilation)
+            {
                 DataClasses.Venti Status = Send_GetStatus();
                 if (Status != null) {
-                    UpdateVariables(Status);
+                    mDriver.Polling.SetStatus(Driver.PollingList.STATUS.Normal);
                 }
-                mDriver.Polling.SetStatus(Driver.PollingList.STATUS.Normal);
-                VersionRetryCount = 0;
             }
-
-            Version = null;
-            
-            // 2세대 처음 들어간 곳 중에, 버전 정보를 물어보지 않는곳이 발생하여 10번 물어본 후 응답이 없으면 환기 상태를 노멀로 확인
-            if(Version == null)
+            else
             {
-                VersionRetryCount ++;
-            }
+                Version = Send_GetVersion();
+                if (Version != null) {
+                    // 지원 상태를 저장한다.
+                    mDriver.Status.Support = new DataClasses.Venti.SUPPORT(Version.Support);
+                    mDriver.Version = Version;
+                    Log.i(TAG, mDriver.Version.ToDebugString());
+
+                    // 룸콘트롤러가 없을 경우 DB에 저장된 값이 예약상태이다.
+                    if (!mDriver.Status.Support.RoomController) {
+                        mDriver.Status.Reservation = DB_GetVentiReserveOnOff();
+                    }
 
-            if(VersionRetryCount == 5)
-            {
-                VersionRetryCount = 0;
-                mDriver.Polling.SetStatus(Driver.PollingList.STATUS.Normal);
+                    // 상태를 가져온다.
+                    Sleep(150);
+                    DataClasses.Venti Status = Send_GetStatus();
+                    if (Status != null) {
+                        UpdateVariables(Status);
+                    }
+                    mDriver.Polling.SetStatus(Driver.PollingList.STATUS.Normal);
+                }
             }
+            Version = null;
         }
         /* [[ Normal ]]
          * 평상시 */
@@ -426,15 +428,6 @@ public class Ventilation_Controller extends DeviceManager {
                 }
             }
 
-            // 2세대 처음 들어간 곳 중에, 버전 정보를 물어보지 않는곳이 발생하여, 1시간 주기로 확인
-            long currentTimeMillis = 0;
-            currentTimeMillis = System.currentTimeMillis();
-            if (Math.abs(currentTimeMillis - mDriver.Polling.lHDCVersionInfoCheckTimeTick) > lHDCVERSIONINFO_CHECK_TIME_TICK) {
-                CheckVersion();
-                mDriver.Polling.lHDCVersionInfoCheckTimeTick = currentTimeMillis;
-                Sleep(100);
-            }
-
 
             // 환기 예약 기능 관련
             ReservationAction(false);
@@ -2306,7 +2299,7 @@ public class Ventilation_Controller extends DeviceManager {
      * @return (int) 환기종류
      */
     private int GetVentilInfo() {
-        int retVentilInfo = WallpadDeviceSet.VENTIL_TYPE_NORMAL;
+        int retVentilInfo = WallpadDeviceSet.VENTIL_TYPE_NORMAL_OLD;
         try {
             WallpadDeviceSet devset = new WallpadDeviceSet(ServiceMain.svcContext);
             int[] setdata = devset.Get_Ventil_Info();

TEMPAT SAMPAH
WallPadHomeCtrl/libs/WallPadAPI.jar


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

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

+ 1 - 1
WallPadHomeCtrl/src/main/java/kr/co/icontrols/wallpadhomectrl/MainActivity.java

@@ -2360,7 +2360,7 @@ public class MainActivity extends WpadActivity {
 				}
 				else if (arrayList.get(i).equals(API_Menu.SubMenuCtrl.Name_Venti)) {
 					Log.d(TAG, "[loadDefaultMenuList] nVentilType[1] = " + nVentilType[1]);
-					if (nVentilType[1] == WallpadDeviceSet.VENTIL_TYPE_NORMAL) {
+					if (nVentilType[1] == WallpadDeviceSet.VENTIL_TYPE_NORMAL_NEW || nVentilType[1] == WallpadDeviceSet.VENTIL_TYPE_NORMAL_OLD) {
 						tempMenuListDataClass.idMappingTable[i].Id = API_Menu.SubMenuCtrl.ChangAir_Normal;
 						tempMenuListDataClass.idMappingTable[i].Name = API_Menu.SubMenuCtrl.Name_Venti;
 					}

TEMPAT SAMPAH
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="2022.09.22.01">
+    android:versionName="2022.11.11.02">
 
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

+ 5 - 2
WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/MainActivity.java

@@ -2461,7 +2461,9 @@ public class MainActivity extends WpadActivity {
                 WallpadDeviceSet mWallpadDeviceSet = new WallpadDeviceSet(this);
                 int[] naSubWallPadLight = mWallpadDeviceSet.GetSubWpdDirect_Light();
                 mWallpadDeviceSet.closeDB();
-                if(naSubWallPadLight!=null && naSubWallPadLight.length == 2 && naSubWallPadLight[1] == WallpadDeviceSet.SUBWPD_CTR_DIRECT)
+
+                //2022.10.26 jglee - 6410 GL을 사용하는 경우에만 1010GL용 서브폰이 활성홤 되도록 수정
+                if((naSubWallPadLight!=null && naSubWallPadLight.length == 2 && naSubWallPadLight[1] == WallpadDeviceSet.SUBWPD_CTR_DIRECT) || Version.getModelType() == MODEL_TYPE.IHN_1010GL_I_6410)
                 {
                     ActivityManager mActivityManager = (ActivityManager)getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
                     List<ActivityManager.RunningAppProcessInfo> RunningAppList = mActivityManager.getRunningAppProcesses();
@@ -9924,7 +9926,8 @@ public class MainActivity extends WpadActivity {
                 IMG_LCD_KEEPER.setVisibility(View.VISIBLE);
             }
             else if (nKeeperMode == LCDKEEPER_MODE_PROTECT) {
-                IMG_LCD_KEEPER.setImageBitmap(null);
+                //2022.11.9 jglee Glide 캐시 초기화(간혹 남아 있는 경우, gif가 돌아가는 경우 남음)
+                Glide.with(this).clear(IMG_LCD_KEEPER);
                 IMG_LCD_KEEPER.setBackgroundColor(Color.BLACK);
                 IMG_LCD_KEEPER.setVisibility(View.VISIBLE);
             }

TEMPAT SAMPAH
WallPadSecurity/libs/WallPadAPI.jar


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

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

+ 1 - 0
WallPadSecurity/src/main/java/kr/co/icontrols/wallpadsecurity/screen/PopupSmartIOTCam.java

@@ -1,6 +1,7 @@
 package kr.co.icontrols.wallpadsecurity.screen;
 
 import android.content.Context;
+import android.content.Intent;
 import android.graphics.Color;
 import android.os.Handler;
 import android.os.Looper;