Quellcode durchsuchen

Merge branch 'master' of https://hub.hdc-smart.com/WallPad/LuxuryWPMV2

 Conflicts:
	WallPadMain/libs/WallPadAPI.jar
jslee(madeinlab) vor 3 Jahren
Ursprung
Commit
98054db6b1
36 geänderte Dateien mit 400 neuen und 102 gelöschten Zeilen
  1. BIN
      10_Release/AutoPicture.apk
  2. BIN
      10_Release/LogOutputService.apk
  3. BIN
      10_Release/ManagerSetting.apk
  4. BIN
      10_Release/WallPadAddService.apk
  5. BIN
      10_Release/WallPadCall.apk
  6. BIN
      10_Release/WallPadConfig.apk
  7. BIN
      10_Release/WallPadDevService.apk
  8. BIN
      10_Release/WallPadEmergency.apk
  9. BIN
      10_Release/WallPadEnergyCtrl.apk
  10. BIN
      10_Release/WallPadGlobalButton.apk
  11. BIN
      10_Release/WallPadGlobalScreen.apk
  12. BIN
      10_Release/WallPadHomeCtrl.apk
  13. BIN
      10_Release/WallPadKeyBoard.apk
  14. BIN
      10_Release/WallPadMain.apk
  15. BIN
      10_Release/WallPadMultiControlService.apk
  16. BIN
      10_Release/WallPadOutModeRun.apk
  17. BIN
      10_Release/WallPadSecurity.apk
  18. BIN
      ManagerSetting/libs/WallPadAPI.jar
  19. 1 1
      ManagerSetting/src/main/AndroidManifest.xml
  20. 7 0
      ManagerSetting/src/main/java/com/artncore/managersetting/dao/MainDatabaseManager.java
  21. 27 1
      ManagerSetting/src/main/java/com/artncore/managersetting/ui/fragments/SettingDetailFunctionFragment.java
  22. 29 0
      ManagerSetting/src/main/res/layout/setting_detail_container_gle.xml
  23. 29 0
      ManagerSetting/src/main/res/layout/setting_detail_container_sa.xml
  24. 1 0
      ManagerSetting/src/main/res/values/strings.xml
  25. BIN
      WallPadAPI/jar/WallPadAPI.jar
  26. BIN
      WallPadAPI/jar/WallPadAPIforSVC.jar
  27. 23 0
      WallPadAPI/src/main/java/com/artncore/WallPadDataMgr/WallpadDeviceSet.java
  28. 2 1
      WallPadAPI/src/main/java/com/artncore/commons/define.java
  29. 115 8
      WallPadAPI/src/main/java/com/artncore/wallpadapi/KnxAPI.java
  30. BIN
      WallPadDevService/libs/WallPadAPIforSVC.jar
  31. 1 1
      WallPadDevService/src/main/AndroidManifest.xml
  32. 129 51
      WallPadDevService/src/main/java/com/artncore/wallpaddevservice/driver/KNX_Controller.java
  33. BIN
      WallPadMain/libs/WallPadAPI.jar
  34. 1 1
      WallPadMain/src/main/AndroidManifest.xml
  35. 13 17
      WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/MainActivity.java
  36. 22 21
      WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/util/IconManager.java

BIN
10_Release/AutoPicture.apk


BIN
10_Release/LogOutputService.apk


BIN
10_Release/ManagerSetting.apk


BIN
10_Release/WallPadAddService.apk


BIN
10_Release/WallPadCall.apk


BIN
10_Release/WallPadConfig.apk


BIN
10_Release/WallPadDevService.apk


BIN
10_Release/WallPadEmergency.apk


BIN
10_Release/WallPadEnergyCtrl.apk


BIN
10_Release/WallPadGlobalButton.apk


BIN
10_Release/WallPadGlobalScreen.apk


BIN
10_Release/WallPadHomeCtrl.apk


BIN
10_Release/WallPadKeyBoard.apk


BIN
10_Release/WallPadMain.apk


BIN
10_Release/WallPadMultiControlService.apk


BIN
10_Release/WallPadOutModeRun.apk


BIN
10_Release/WallPadSecurity.apk


BIN
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.04.11.03">
+    android:versionName="2022.05.04.99">
 
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

+ 7 - 0
ManagerSetting/src/main/java/com/artncore/managersetting/dao/MainDatabaseManager.java

@@ -176,6 +176,7 @@ public class MainDatabaseManager {
     public static final int SETTING_ITEM_SUB_DEVICE_ROOMNAME_EDIT_USE           = SETTING_ITEM_TYPE_BASE + 231; //방명칭수정
     public static final int SETTING_ITEM_SUB_DEVICE_SHADING                     = SETTING_ITEM_TYPE_BASE + 232; //차광제어기
     public static final int SETTING_ITEM_SUB_DEVICE_CONCENT                     = SETTING_ITEM_TYPE_BASE + 233; //콘센트
+    public static final int SETTING_ITEM_SUB_INTERWP_MULTI_CTRL                     = SETTING_ITEM_TYPE_BASE + 234;   // 월패드간 제어기기 멀티제어
 
 
     public static final String[] SUB_DEVICE_ITEM_ID = {
@@ -313,6 +314,7 @@ public class MainDatabaseManager {
             , "방명칭수정"
             , "차광제어기"
             , "콘센트"
+            , "월패드간제어기기멀티제어"
     };
 
 
@@ -1397,6 +1399,7 @@ public class MainDatabaseManager {
             case SETTING_ITEM_SUB_DEVICE_ROOMNAME_EDIT_USE:
             case SETTING_ITEM_SUB_DEVICE_SHADING:
             case SETTING_ITEM_SUB_DEVICE_CONCENT:
+            case SETTING_ITEM_SUB_INTERWP_MULTI_CTRL:
                 result = SUB_DEVICE_ITEM_ID[itemType - SETTING_ITEM_SUB_DEVICE_GAS];
                 break;
         }
@@ -2119,6 +2122,10 @@ public class MainDatabaseManager {
                         devInfo = "1(1:콘센트(사용안함))";
                         break;
 
+                    case SETTING_ITEM_SUB_INTERWP_MULTI_CTRL:
+                        devInfo = "1(1:월패드간멀티제어(사용함))";
+                        break;
+
                 }
             }
         }

+ 27 - 1
ManagerSetting/src/main/java/com/artncore/managersetting/ui/fragments/SettingDetailFunctionFragment.java

@@ -169,6 +169,7 @@ public class SettingDetailFunctionFragment extends Fragment
     public final int DETAIL_TYPE_VENTI_TIMER =                                    DETAIL_TYPE_BASE + 70;
     public final int DETAIL_TYPE_VENTI_RESERVATION =                              DETAIL_TYPE_BASE + 71;
     public final int DETAIL_TYPE_ROOMNAME_EDIT_USE =                              DETAIL_TYPE_BASE + 72;
+    public final int DETAIL_TYPE_INTERWP_MULTI_CTRL =                              DETAIL_TYPE_BASE + 73;   // 월패드간 제어기기 멀티제어 (성북동)
 
     private Activity mActivity;
     private WallPadAPI mWallPadAPI;
@@ -466,6 +467,8 @@ public class SettingDetailFunctionFragment extends Fragment
         initVentiReservationUse();
         initRoomNameEditUse();
 
+        initInterWallPadMultiCtrl();
+
         initShadingGroupEditUse();
     }
 
@@ -2468,6 +2471,24 @@ public class SettingDetailFunctionFragment extends Fragment
         switchButton.switchEnabled(initValue);
     }
 
+    private void initInterWallPadMultiCtrl() {
+        Log.d(TAG, "[initInterWallPadMultiCtrl]");
+        int type = DETAIL_TYPE_INTERWP_MULTI_CTRL;
+        String typeName = mActivity.getString(R.string.detail_function_interwallpad_multi_ctrl);
+
+        SwitchButton switchButton = (SwitchButton)mRootView.findViewById(R.id.btn_switch_interwallpad_multi_ctrl);
+        switchButton.setSwitchButtonChangedListener(this, type, typeName);
+
+        List<String> listString = new ArrayList<String>();
+        listString.add(mActivity.getString(R.string.do_used));
+        listString.add(mActivity.getString(R.string.do_not_used));
+
+        switchButton.setText(listString);
+
+        boolean initValue = mMainDatabaseManager.isUsedSettingDataSubDev(MainDatabaseManager.SETTING_ITEM_SUB_INTERWP_MULTI_CTRL);
+        switchButton.switchEnabled(initValue);
+    }
+
     private String getDefaultPentHouseHo() {
         WallpadStatusData DBMGR = null;
         DBMGR = new WallpadStatusData(mActivity.getApplicationContext());
@@ -2620,6 +2641,7 @@ public class SettingDetailFunctionFragment extends Fragment
             case DETAIL_TYPE_VENTI_TIMER:
             case DETAIL_TYPE_VENTI_RESERVATION:
             case DETAIL_TYPE_ROOMNAME_EDIT_USE:
+            case DETAIL_TYPE_INTERWP_MULTI_CTRL:
                 break;
 
             default:
@@ -4761,6 +4783,10 @@ public class SettingDetailFunctionFragment extends Fragment
                 mMainDatabaseManager.updateSetUsedToSubDeviceSwitchButtonOnOff(MainDatabaseManager.SETTING_ITEM_SUB_DEVICE_ROOMNAME_EDIT_USE, position);
                 break;
 
+            case DETAIL_TYPE_INTERWP_MULTI_CTRL:
+                mMainDatabaseManager.updateSetUsedToSubDeviceSwitchButtonOnOff(MainDatabaseManager.SETTING_ITEM_SUB_INTERWP_MULTI_CTRL, position);
+                break;
+
             case DETAIL_TYPE_REGISTRATION_WIRELESS_DOOR_LOCK:
             case DETAIL_TYPE_SEND_HEART_BEAT:
             case DETAIL_TYPE_TOUCH_CALIBRATION:
@@ -4827,8 +4853,8 @@ public class SettingDetailFunctionFragment extends Fragment
             case DETAIL_TYPE_REMOTECTRL_LIGHT:
             case DETAIL_TYPE_HS_PLATFORM_USE:
             case DETAIL_TYPE_ROOMNAME_EDIT_USE:
+            case DETAIL_TYPE_INTERWP_MULTI_CTRL:
                 updateSetUsedToSubDevice(type, position, itemName);
-
                 MainApplication.getApplication().setReboot();
                 break;
 

+ 29 - 0
ManagerSetting/src/main/res/layout/setting_detail_container_gle.xml

@@ -2336,6 +2336,35 @@ android:background="#EFEFEE"
                     />
             </RelativeLayout>
 
+            <RelativeLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:id="@+id/tv_interwallpad_multi_ctrl"
+                    android:layout_width="wrap_content"
+                    android:layout_height="100dp"
+                    android:layout_alignParentTop="true"
+                    android:layout_marginLeft="10dp"
+
+                    android:gravity="center|left"
+
+                    android:textSize="30sp"
+                    android:textColor="#000000"
+                    android:text="@string/detail_function_interwallpad_multi_ctrl"
+                    android:maxLines="1"
+                    />
+
+                <com.artncore.managersetting.ui.SwitchButton
+                    android:id="@+id/btn_switch_interwallpad_multi_ctrl"
+                    android:layout_width="wrap_content"
+                    android:layout_height="100dp"
+                    android:layout_alignParentRight="true"
+                    android:layout_marginRight="20dp"
+                    android:gravity="center"
+                    />
+            </RelativeLayout>
+
             <ImageView
                 android:layout_width="match_parent"
                 android:layout_height="1px"

+ 29 - 0
ManagerSetting/src/main/res/layout/setting_detail_container_sa.xml

@@ -2732,6 +2732,35 @@ android:background="#EFEFEE"
                     />
             </RelativeLayout>
 
+            <RelativeLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:id="@+id/tv_interwallpad_multi_ctrl"
+                    android:layout_width="wrap_content"
+                    android:layout_height="100dp"
+                    android:layout_alignParentTop="true"
+                    android:layout_marginLeft="10dp"
+
+                    android:gravity="center|left"
+
+                    android:textSize="30sp"
+                    android:textColor="#000000"
+                    android:text="@string/detail_function_interwallpad_multi_ctrl"
+                    android:maxLines="1"
+                    />
+
+                <com.artncore.managersetting.ui.SwitchButton
+                    android:id="@+id/btn_switch_interwallpad_multi_ctrl"
+                    android:layout_width="wrap_content"
+                    android:layout_height="100dp"
+                    android:layout_alignParentRight="true"
+                    android:layout_marginRight="20dp"
+                    android:gravity="center"
+                    />
+            </RelativeLayout>
+
             <ImageView
                 android:layout_width="match_parent"
                 android:layout_height="1px"

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

@@ -603,6 +603,7 @@
     <string name="detail_function_venti_timer_use">환기 타이머</string>
     <string name="detail_function_venti_reservation_use">환기 예약설정</string>
     <string name="detail_function_roomname_edit_use">방 명칭 수정</string>
+    <string name="detail_function_interwallpad_multi_ctrl">월패드간 제어기기 멀티제어</string>
 
     <string name="show_elevator_default">기본</string>
     <string name="show_elevator_stairs">층표시</string>

BIN
WallPadAPI/jar/WallPadAPI.jar


BIN
WallPadAPI/jar/WallPadAPIforSVC.jar


+ 23 - 0
WallPadAPI/src/main/java/com/artncore/WallPadDataMgr/WallpadDeviceSet.java

@@ -5210,5 +5210,28 @@ public class WallpadDeviceSet extends wallpaddbmgr {
 		}
 	}
 
+	/**
+	 * 월패드간 제어기기 멀티제어 기능 사용 유무
+	 **/
+	public boolean Get_InterWallPadMultiCtrlUsage() {
+		String[] GetData = GetSettingData(define.DEVICE_ID_INTERWP_MULTI_CTRL);
+
+		boolean returnData = true; // DB에 값 없는 경우 사용안함으로 반환(초기값: 사용함)
+		try {
+			if (GetData == null) return returnData;
+
+			if (GetData[1].indexOf("사용함") > 0) returnData = true;
+			else returnData = false;
+
+			return returnData;
+		} catch (RuntimeException re) {
+			LogUtil.errorLogInfo("", TAG, re);
+			return returnData;
+		} catch (Exception e) {
+			LogUtil.errorLogInfo("", TAG, e);
+			return returnData;
+		}
+	}
+
 
 }

+ 2 - 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.04.28.01";
+	public static final String WALLPADAPI_VERSION = "2022.05.04.99";
 	///////////////////////////////////////////////////////////////////////
 	// WallPadDevService 의 각 드라이버와 통신을 위한 드라이버 이름을 정의합니다.
 	///////////////////////////////////////////////////////////////////////
@@ -741,6 +741,7 @@ public class define {
 	public static final String DEVICE_ID_VENTI_TIMER_USE = "환기타이머";
 	public static final String DEVICE_ID_VENTI_RESERVATION_USE = "환기예약설정";
 	public static final String DEVICE_ID_ROOMNAME_EDIT_USE = "방명칭수정";
+	public static final String DEVICE_ID_INTERWP_MULTI_CTRL = "월패드간제어기기멀티제어";
 
 	public static final String DEVICE_ENABLE  = "사용함";
 	public static final String DEVICE_DISABLE = "사용안함";

+ 115 - 8
WallPadAPI/src/main/java/com/artncore/wallpadapi/KnxAPI.java

@@ -20,6 +20,8 @@ import com.artncore.commons.define;
 import com.artncore.wallpaddevservice.DevCtrCMD;
 import com.util.LogUtil;
 
+import java.util.Arrays;
+
 
 /** KNX분전반 (KnxAPI) API */
 public class KnxAPI extends WallPadDevAPI
@@ -1027,12 +1029,12 @@ public class KnxAPI extends WallPadDevAPI
             Log.w(TAG, "[SetLight] IndexRangeCheck Error (ret:" + ret + ")");
             return ret;
         }
-        if(!DimmingNColorRangeCheck(Dimming))
+        if(!checkDimNColorRange(Dimming))
         {
             Log.w(TAG, "[SetLight] Param : Dimming Out Of Range !!! (Dimming:" + Dimming + ")");
             return APIErrorCode.INVALIDPARAMETER;
         }
-        if(!DimmingNColorRangeCheck(Color))
+        if(!checkDimNColorRange(Color))
         {
             Log.w(TAG, "[SetLight] Param : Color Out Of Range !!! (Color:" + Color + ")");
             return APIErrorCode.INVALIDPARAMETER;
@@ -1131,7 +1133,7 @@ public class KnxAPI extends WallPadDevAPI
             Log.w(TAG, "[SetLightDimming] LightIndexRangeCheck Error");
             return APIErrorCode.INVALIDPARAMETER;
         }
-        if(!DimmingNColorRangeCheck(Dimming))
+        if(!checkDimNColorRange(Dimming))
         {
             Log.w(TAG, "[SetLightDimming] Param : Dimming Out Of Range !!! (Dimming:" + Dimming + ")");
             return APIErrorCode.INVALIDPARAMETER;
@@ -1141,6 +1143,99 @@ public class KnxAPI extends WallPadDevAPI
         return SendNReadCMD_int(define.APICMD_SINKCTRL, "SetLightDimming", LightIndex, Dimming, 0, 0, 0);
     }
 
+    /**
+     * 거실EM의 전체 조명을 제어한다.
+     * @param ahPower - (byte array) 조명 전원제어 상태 (배열길이는 최대 4, 거실EM의 최대 회로수는 4)
+     * @param ahDim    - (byte array) 조명 디밍제어 상태 (배열길이는 최대 4, 거실EM의 최대 회로수는 4)
+     * @param ahColor    - (byte array) 조명 색온도제어 상태 (배열길이는 최대 4, 거실EM의 최대 회로수는 4)
+     *
+     * @return (int) - >=0 : 성공, <0 : 실패
+     */
+    public int SetEntireLivlight(byte hLightCnt, byte[] ahPower, byte[] ahDim, byte[] ahColor) {
+        // 1. Parameter Check
+
+        if (hLightCnt < 0 || 4 < hLightCnt) {
+            Log.w(TAG, "[SetEntireLivlight] Param : hLightCnt Out Of Range !!! (hLightCnt:" + hLightCnt + ")");
+            return APIErrorCode.INVALIDPARAMETER;
+        }
+
+        if (ahPower != null) {
+            for (int i = 0; i < ahPower.length; i++) {
+                if (!checkLightPowerRangge(ahPower[i])) {
+                    Log.w(TAG, "[SetEntireLivlight] Param : ahPower[" + i + "] Out Of Range !!! (ahPower:" + ahPower[i] + ")");
+                    return APIErrorCode.INVALIDPARAMETER;
+                }
+            }
+
+            if (hLightCnt != ahPower.length) {
+                Log.w(TAG, "[SetEntireLivlight] Param : Data length is wrong!!! hLightCnt [" + hLightCnt + "], ahPower.length [" + ahPower.length + "]");
+                return APIErrorCode.INVALIDPARAMETER;
+            }
+        }
+        else {
+            // null인 경우에는 값을 미설정(0x00)으로 한다.
+            ahPower = new byte[hLightCnt];
+            for (int i = 0; i < hLightCnt; i++) {
+                ahPower[i] = (byte) 0x00;
+            }
+        }
+
+        if (ahDim != null) {
+            for (int i = 0; i < ahDim.length; i++) {
+                if (!checkDimNColorRange(ahDim[i])) {
+                    Log.w(TAG, "[SetEntireLivlight] Param : ahPower[" + i + "] Out Of Range !!! (ahDim:" + ahDim[i] + ")");
+                    return APIErrorCode.INVALIDPARAMETER;
+                }
+            }
+
+            if (hLightCnt != ahDim.length) {
+                Log.w(TAG, "[SetEntireLivlight] Param : Data length is wrong!!! hLightCnt [" +  hLightCnt + "], ahDim.length [" + ahDim.length + "]");
+                return APIErrorCode.INVALIDPARAMETER;
+            }
+        }
+        else {
+            // null인 경우에는 값을 미설정(0x00)으로 한다.
+            ahDim = new byte[hLightCnt];
+            for (int i = 0; i < hLightCnt; i++) {
+                ahDim[i] = (byte) 0x00;
+            }
+        }
+
+        if (ahColor != null) {
+            for (int i = 0; i < ahColor.length; i++) {
+                if (!checkDimNColorRange(ahColor[i])) {
+                    Log.w(TAG, "[SetEntireLivlight] Param : ahColor[" + i + "] Out Of Range !!! (ahColor:" + ahColor[i] + ")");
+                    return APIErrorCode.INVALIDPARAMETER;
+                }
+            }
+
+            if (hLightCnt != ahColor.length) {
+                Log.w(TAG, "[SetEntireLivlight] Param : Data length is wrong!!! hLightCnt [" +  hLightCnt + "], ahColor.length [" + ahColor.length + "]");
+                return APIErrorCode.INVALIDPARAMETER;
+            }
+        }
+        else {
+            // null인 경우에는 값을 미설정(0x00)으로 한다.
+            ahColor = new byte[hLightCnt];
+            for (int i = 0; i < hLightCnt; i++) {
+                ahColor[i] = (byte) 0x00;
+            }
+        }
+
+        int nDataLength = 1 + ahPower.length + ahDim.length + ahColor.length;
+        byte[] aCtrlData = new byte[nDataLength];
+
+        aCtrlData[0] = hLightCnt;
+        System.arraycopy(ahPower, 0, aCtrlData, 1, ahPower.length);
+        System.arraycopy(ahDim, 0, aCtrlData, (1 + ahPower.length), ahDim.length);
+        System.arraycopy(ahColor, 0, aCtrlData, (1 + ahPower.length + ahDim.length), ahColor.length);
+
+        Log.i(TAG, "[SetEntireLivlight] aCtrlData " + Arrays.toString(aCtrlData));
+
+        // 2. Send
+        return SendNReadCMD_int(define.APICMD_SINKCTRL, "SetEntireLivlight", aCtrlData);
+    }
+
     /**
      * 에너지 미터 조명을 밝기를 제어한다.
      *
@@ -1158,7 +1253,7 @@ public class KnxAPI extends WallPadDevAPI
             Log.w(TAG, "[SetLightDimming] LightIndexRangeCheck Error");
             return APIErrorCode.INVALIDPARAMETER;
         }
-        if(!DimmingNColorRangeCheck(Dimming))
+        if(!checkDimNColorRange(Dimming))
         {
             Log.w(TAG, "[SetLightDimming] Param : Dimming Out Of Range !!! (Dimming:" + Dimming + ")");
             return APIErrorCode.INVALIDPARAMETER;
@@ -1186,7 +1281,7 @@ public class KnxAPI extends WallPadDevAPI
             Log.w(TAG, "[SetLightColor] IndexRangeCheck Error (ret:" + ret + ")");
             return ret;
         }
-        if(!DimmingNColorRangeCheck(Color))
+        if(!checkDimNColorRange(Color))
         {
             Log.w(TAG, "[SetLightColor] Param : Color Out Of Range !!! (Color:" + Color + ")");
             return APIErrorCode.INVALIDPARAMETER;
@@ -1463,16 +1558,28 @@ public class KnxAPI extends WallPadDevAPI
         return  APIErrorCode.C_SUCCESS;
     }
 
+    /**
+     * 조명 전원상태의 단계 범위를 체크한다.
+     *
+     * @param hPower - (byte) 체크할 단계
+     *
+     * @return (boolean) ture:정상 , false:범위이탈
+     */
+    private boolean checkLightPowerRangge(byte hPower) {
+        if (0 <= hPower & hPower <= 2) return true;
+        else return false;
+    }
+
     /**
      * 밝기, 색상의 단계 범위를 체크한다.
      *
-     * @param DimmingNColor - (byte) 체크할 단계
+     * @param DimNColor - (byte) 체크할 단계
      *
      * @return (boolean) ture:정상 , false:범위이탈
      */
-    private boolean DimmingNColorRangeCheck(byte DimmingNColor)
+    private boolean checkDimNColorRange(byte DimNColor)
     {
-        if(DimmingNColor < 1 || DimmingNColor > 10) return false;
+        if(DimNColor < 1 || DimNColor > 10) return false;
         return true;
     }
 

BIN
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.05.04.00">
+    android:versionName="2022.05.04.99">
 
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

+ 129 - 51
WallPadDevService/src/main/java/com/artncore/wallpaddevservice/driver/KNX_Controller.java

@@ -2359,9 +2359,9 @@ public class KNX_Controller extends DeviceManager {
                 if (ByteOnOff == 1) LightControl.OnOff = 0x01;
                 else LightControl.OnOff = 0x02;
 
-            // 3. Send
-            EnergyMeterClass.DataClass Data = Send_Set_EnergyMeterBadLight(EmIndex, LightIndex, LightControl, TYPE_ONOFF);
-            if (Data == null) return SHMem.retVal = "FAIL;" + APIErrorCode.DEVICEISNORESPONSE;
+                // 3. Send
+                EnergyMeterClass.DataClass Data = Send_Set_EnergyMeterBadLight(EmIndex, LightIndex, LightControl, TYPE_ONOFF);
+                if (Data == null) return SHMem.retVal = "FAIL;" + APIErrorCode.DEVICEISNORESPONSE;
 
                 // 4. Update
                 UpdateVariables_BadData(EmIndex, Data);
@@ -2417,61 +2417,88 @@ public class KNX_Controller extends DeviceManager {
                 // 4. Update
                 UpdateVariables_LivingData(EM_FIX_INDEX_LIVING, Data);
 
-            return SHMem.retVal = "SUCCESS";
-        }
-        //////////////////////////////////////////////////////////
-        // SetEMLightDimming : 에너지미터 조명을 밝기를 제어한다.
-        // [0] 제어할 에너지미터 인덱스
-        // [1] 제어할 조명 인덱스
-        // [2] 제어할 조명 밝기 단계 (1, 2, 3 ... 10 : 10단계)
-        //////////////////////////////////////////////////////////
-        else if (ctrDevFormat.CmdStr.equals("SetEMLightDimming")) {
-            // 1. Param Get
-            byte EmIndex = ctrDevFormat.param[0];
-            byte LightIndex = ctrDevFormat.param[1];
-            byte Dimming = ctrDevFormat.param[2];
-            DeviceLog("[do_ctrEmm] : SetEMLightDimming(LightIndex:" + LightIndex + ", Dimming:" + Dimming + ")");
+                return SHMem.retVal = "SUCCESS";
+            }
+            //////////////////////////////////////////////////////////
+            // SetEntireLivlight : 거실EM 모든 조명의 전원/디밍/색온도를 제어한다.
+            // [1] 제어할 조명 인덱스
+            // [2] 제어할 조명 밝기 단계 (1, 2, 3 ... 10 : 10단계)
+            //////////////////////////////////////////////////////////
+            else if (ctrDevFormat.CmdStr.equals("SetEntireLivlight")) {
+                // 1. Param Get
+                // 2. Make Control Data
+                byte[] ahCtrlData = ctrDevFormat.param;
+                int nIndex = 0;
+                byte hLightCnt = ahCtrlData[nIndex];
 
-            // 2. Make Control Data
-            LightControlClass LightControl = new LightControlClass();
-            LightControl.Dimming = Dimming;
+                int nExpectedLength = (hLightCnt * 3) + 1;
+                if (hLightCnt != nExpectedLength) {
+                    Log.w(TAG, "[do_ctrEmm] SetEntireLivlight -> wrong param: nExpectedLength [" + nExpectedLength + "], hLightCnt [" + hLightCnt + "]");
+                    return SHMem.retVal = "FAIL;" + APIErrorCode.INVALIDPARAMETER;
+                }
 
-            // 3. Send
-            EnergyMeterClass.DataClass Data = Send_Set_EnergyMeterBadLight(EmIndex, LightIndex, LightControl, TYPE_DIMMING);
-            if (Data == null) return SHMem.retVal = "FAIL;" + APIErrorCode.DEVICEISNORESPONSE;
+                // 3. Send
+                EnergyMeterClass.DataClass Data = sendEntireLivLight(ahCtrlData);
+                if (Data == null) return SHMem.retVal = "FAIL;" + APIErrorCode.DEVICEISNORESPONSE;
 
-            // 4. Update
-            UpdateVariables_BadData(EmIndex, Data);
+                // 4. Update
+                UpdateVariables_LivingData(EM_FIX_INDEX_LIVING, Data);
 
-            return SHMem.retVal = "SUCCESS";
-        }
-        //////////////////////////////////////////////////////////
-        // SetLightColor : 조명을 색상을 제어한다.
-        // [0] 제어할 에너지미터 인덱스
-        // [1] 제어할 조명 인덱스
-        // [2] 제어할 조명 색상 단계 (1, 2, 3 ... 10 : 10단계)
-        //////////////////////////////////////////////////////////
-        /*else if(ctrDevFormat.CmdStr.equals("SetLightColor"))
-        {
-            // 1. Param Get
-            byte EmIndex    = ctrDevFormat.param[0];
-            byte LightIndex = ctrDevFormat.param[1];
-            byte Color      = ctrDevFormat.param[2];
-            DeviceLog("[do_ctrEmm] : SetLightColor(EmIndex:" + EmIndex + ", LightIndex:" + LightIndex + ", Color:" + Color + ")");
+                return SHMem.retVal = "SUCCESS";
+            }
+            //////////////////////////////////////////////////////////
+            // SetEMLightDimming : 에너지미터 조명을 밝기를 제어한다.
+            // [0] 제어할 에너지미터 인덱스
+            // [1] 제어할 조명 인덱스
+            // [2] 제어할 조명 밝기 단계 (1, 2, 3 ... 10 : 10단계)
+            //////////////////////////////////////////////////////////
+            else if (ctrDevFormat.CmdStr.equals("SetEMLightDimming")) {
+                // 1. Param Get
+                byte EmIndex = ctrDevFormat.param[0];
+                byte LightIndex = ctrDevFormat.param[1];
+                byte Dimming = ctrDevFormat.param[2];
+                DeviceLog("[do_ctrEmm] : SetEMLightDimming(LightIndex:" + LightIndex + ", Dimming:" + Dimming + ")");
 
-            // 2. Make Control Data
-            LedLightControlClass LedLightControl = new LedLightControlClass();
-            LedLightControl.Color = (byte)(Color * 10);
+                // 2. Make Control Data
+                LightControlClass LightControl = new LightControlClass();
+                LightControl.Dimming = Dimming;
 
-            // 3. Send
-            EnergyMeterClass.DataClass Data = Send_Set_EnergyMeterLight(EmIndex, LightIndex, LedLightControl, false);
-            if(Data == null) return SHMem.retVal = "FAIL;" + APIErrorCode.DEVICEISNORESPONSE;
+                // 3. Send
+                EnergyMeterClass.DataClass Data = Send_Set_EnergyMeterBadLight(EmIndex, LightIndex, LightControl, TYPE_DIMMING);
+                if (Data == null) return SHMem.retVal = "FAIL;" + APIErrorCode.DEVICEISNORESPONSE;
 
-            // 4. Update
-            UpdateVariables(EmIndex, Data);
+                // 4. Update
+                UpdateVariables_BadData(EmIndex, Data);
 
-            return SHMem.retVal = "SUCCESS";
-        }*/
+                return SHMem.retVal = "SUCCESS";
+            }
+            //////////////////////////////////////////////////////////
+            // SetLightColor : 조명을 색상을 제어한다.
+            // [0] 제어할 에너지미터 인덱스
+            // [1] 제어할 조명 인덱스
+            // [2] 제어할 조명 색상 단계 (1, 2, 3 ... 10 : 10단계)
+            //////////////////////////////////////////////////////////
+            /*else if(ctrDevFormat.CmdStr.equals("SetLightColor"))
+            {
+                // 1. Param Get
+                byte EmIndex    = ctrDevFormat.param[0];
+                byte LightIndex = ctrDevFormat.param[1];
+                byte Color      = ctrDevFormat.param[2];
+                DeviceLog("[do_ctrEmm] : SetLightColor(EmIndex:" + EmIndex + ", LightIndex:" + LightIndex + ", Color:" + Color + ")");
+
+                // 2. Make Control Data
+                LedLightControlClass LedLightControl = new LedLightControlClass();
+                LedLightControl.Color = (byte)(Color * 10);
+
+                // 3. Send
+                EnergyMeterClass.DataClass Data = Send_Set_EnergyMeterLight(EmIndex, LightIndex, LedLightControl, false);
+                if(Data == null) return SHMem.retVal = "FAIL;" + APIErrorCode.DEVICEISNORESPONSE;
+
+                // 4. Update
+                UpdateVariables(EmIndex, Data);
+
+                return SHMem.retVal = "SUCCESS";
+            }*/
             //////////////////////////////////////////////////////////
             // SetConcentOnOff : 거실콘센트 ON/OFF 제어한다.
             // [0] 제어할 에너지미터 인덱스
@@ -4413,7 +4440,7 @@ public class KNX_Controller extends DeviceManager {
     private EnergyMeterClass.DataClass Send_Set_EnergyMeterLivingLight(byte LightIndex, LightControlClass LightControl, int controlType) {
         if (mDriver.GetReset()) return null;
 
-        String FUNC_NAME = "[Send_Set_EnergyMeterLivingLightAll]";
+        String FUNC_NAME = "[Send_Set_EnergyMeterLivingLight]";
         DeviceLog(FUNC_NAME + " Start");
 
         // 1. In 파라미터 확인
@@ -4528,6 +4555,57 @@ public class KNX_Controller extends DeviceManager {
         return Data;
     }
 
+    /**
+     * [거실 에너지미터] 전체 거실조명에 대한 모든 항목 제어 (전원/디밍/색온도)
+     *
+     * @param ahCtrlData   - (byte) 조명개수 + 조명제어 상태 (전원/디밍/색온도)
+     * @return (EnergyMeterClass.DataClass) 데이터 null - Error , Not null - OK
+     */
+    private EnergyMeterClass.DataClass sendEntireLivLight(byte[] ahCtrlData) {
+        try {
+            if (mDriver.GetReset()) return null;
+
+            String FUNC_NAME = "[sendEntireLivLight]";
+            DeviceLog(FUNC_NAME + " Start");
+
+            if (ahCtrlData == null) {
+                Log.w(TAG, FUNC_NAME + " ahCtrlData is null!!!");
+                return null;
+            }
+
+            int nLightCnt = ahCtrlData[0];
+            int nReqDataLength = 4 + (nLightCnt * 3);
+            byte[] ReqData = new byte[nReqDataLength];
+
+            ReqData[0] = EM_FIX_INDEX_LIVING;   // 거실EM ID
+            ReqData[1] = (byte) 0x00;   // 미사용 필드
+            System.arraycopy(ahCtrlData, 0, ReqData, 2, ahCtrlData.length);   // 조명 상태값 배열 복사
+            ReqData[ReqData.length - 1] = (byte) 0x00;   // 콘센트 개수
+
+            // 3. 데이터 전송 및 응답
+            byte Command = CMDList.Req.Set_LivEM;
+            byte[] Reply = SendNRead_Variable(DEVICE_ADDRESS, Command, ReqData);
+
+            // 4. 수신데이터 파싱
+            EnergyMeterClass.DataClass Data = LivingEnergyMeter_ReplyParsing(Command, EM_FIX_INDEX_LIVING, Reply);
+            if (Data == null) {
+                DeviceLog(FUNC_NAME + " Reply is null");
+                AddDoCount(false);
+                return null;
+            }
+            AddDoCount(true);
+
+            return Data;
+        } catch (RuntimeException re) {
+            Log.e(TAG, "[RuntimeException] sendEntireLivLight(byte[] ahCtrlData)");
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] sendEntireLivLight(byte[] ahCtrlData)");
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+        return null;
+    }
+
     /**
      * [침실 에너지미터] 조명 제어(on/off)
      *

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="2022.05.04.00">
+    android:versionName="2022.05.04.99">
 
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

+ 13 - 17
WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/MainActivity.java

@@ -737,6 +737,15 @@ public class MainActivity extends WpadActivity {
         
         Log.i("Version", "<><><><>  WallPadAPI     Version = [" + define.WALLPADAPI_VERSION + "] " + "<><><><>");
 
+        // 분전반 정보 가져오기
+        WallpadDeviceSet mWallpadDeviceSet = new WallpadDeviceSet(this);
+        boolean bInterWPMultiCtrlUsage = mWallpadDeviceSet.Get_InterWallPadMultiCtrlUsage();   // 월패드간 제어기기 멀티제어 지원여부
+        Common.CurrentDistributionPanelType = mWallpadDeviceSet.Get_DistributionPannelType_Info();
+        boolean bEsayModeUXSupport = mWallpadDeviceSet.Get_EasyModeUX_Support();
+        mWallpadDeviceSet.closeDB();
+
+        Log.i(TAG, "[onCreate] bInterWPMultiCtrlUsage [" + bInterWPMultiCtrlUsage + "], Common.CurrentDistributionPanelType [" + Common.CurrentDistributionPanelType + "], bEsayModeUXSupport [" + bEsayModeUXSupport + ']');
+
         checkISSEnergyType();
 
         runDeviceService();
@@ -746,11 +755,7 @@ public class MainActivity extends WpadActivity {
         }
 
         //vip
-        if (Version.getModelType() == Version.MODEL_TYPE.IHN_D101 || Version.getModelType() == Version.MODEL_TYPE.IHN_D101_I || Version.getModelType() == Version.MODEL_TYPE.IHN_D101_I_LX2
-                || Version.getModelType() == Version.MODEL_TYPE.IHN_D101K || Version.getModelType() == Version.MODEL_TYPE.IHN_D101K_I
-                || Version.getModelType() == Version.MODEL_TYPE.IHN_D101_I_OCF) {
-            runMultiControlService();
-        }
+        if (bInterWPMultiCtrlUsage) runMultiControlService();
 
         WallpadStatusData dbMGR = new WallpadStatusData(this.getContext());
         wallpaddbmgr.AddressSet addrSet = dbMGR.getAddressMGR();
@@ -759,8 +764,7 @@ public class MainActivity extends WpadActivity {
 
         //Log.d("TEST1", "strHo " + strHo);
 
-        if(!strHo.contains("NONE"))
-        {
+        if (!strHo.contains("NONE")) {
             myIP = addrSet.IPAddress;
             ho = Integer.valueOf(strHo.substring(0,1));
         }
@@ -807,11 +811,6 @@ public class MainActivity extends WpadActivity {
             Log.d(TAG, "[Create] OperationMode = MODE_NOMAL");
             DEVICE_OPERATION_MODE = Common.MODE_NOMAL;
         }
-
-        // 분전반 정보 가져오기
-        WallpadDeviceSet mWallpadDeviceSet = new WallpadDeviceSet(this);
-        Common.CurrentDistributionPanelType = mWallpadDeviceSet.Get_DistributionPannelType_Info();
-        mWallpadDeviceSet.closeDB();
         
         // 4. Layout registration
         DebugLogOutput("[Create] - Step4 : Layout registration");
@@ -832,14 +831,11 @@ public class MainActivity extends WpadActivity {
             Log.i(TAG, "[Create] mIconInfoTable.getCnt() = " + mIconInfoTable.getCnt());
         }
 
-        WallpadDeviceSet deviceSet = new WallpadDeviceSet(mContext);
-        boolean bSupport = deviceSet.Get_EasyModeUX_Support();
-        deviceSet.closeDB();
         WallpadStatusData mWallpadStatusData = new WallpadStatusData(getApplicationContext());
-        if (!bSupport) {
+        if (!bEsayModeUXSupport) {
             mWallpadStatusData.SetEasyModeUxUse(false);
         }
-        bEasyModeUsage = bSupport & mWallpadStatusData.GetEasyModeUxUse();
+        bEasyModeUsage = bEsayModeUXSupport & mWallpadStatusData.GetEasyModeUxUse();
         mWallpadStatusData.closeDB();
 
         // Sound API 등록

+ 22 - 21
WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/util/IconManager.java

@@ -8,6 +8,8 @@ import com.artncore.WallPadDataMgr.WallpadStatusData;
 import com.artncore.wallpadapi.WallPadAPI;
 import com.util.LogUtil;
 
+import java.util.Arrays;
+
 import kr.co.icontrols.wallpadmain.MainActivity;
 import kr.co.icontrols.wallpadmain.R;
 import kr.co.icontrols.wallpadmain.declare.Common;
@@ -74,6 +76,8 @@ public class IconManager {
     String strElevEnable = null;   // 엘리베이터
     boolean bNonInternetSupportEnable = false;   // 인터넷 미지원 현장 (true : 인터넷 미지원, false : 인터넷 지원) -> 외부인터넷 필요한 기능 사용여부 설정 (날씨, 일정표, 전자액자)
 
+    boolean bInterWPMultiCtrlUsage = false;   // 월패드간 제어기기 멀티제어
+
 
     public IconManager(Context context, WallPadAPI wallpadapi) {
         try {
@@ -214,6 +218,8 @@ public class IconManager {
             naKeyType = mWallpadDeviceSet.Get_BLESmartKey_Info();   // 출입키 종류
             bNonInternetSupportEnable = mWallpadDeviceSet.Get_NonInternetSupportUse();   // 인터넷 미지원
 
+            bInterWPMultiCtrlUsage = mWallpadDeviceSet.Get_InterWallPadMultiCtrlUsage();   // 월패드간 제어기기 멀티제어 지원여부
+
             if (mWallpadDeviceSet != null) mWallpadDeviceSet.closeDB();
 
             mWallpadStatusData = new WallpadStatusData(mContext);
@@ -227,44 +233,39 @@ public class IconManager {
             Log.i(TAG, "[getSettingInfofromDB] nInterFloorNoiseSensorEnable [" + nInterFloorNoiseSensorEnable + "], bRemoteMeterEnable [" + bRemoteMeterEnable + "], nDistributionPanelType [" + nDistributionPanelType + "], nParkingLocationEnable [" + nParkingLocationEnable + "], nCCTVMonitoringEnable [" + nCCTVMonitoringEnable + "]");
             Log.i(TAG, "[getSettingInfofromDB] nElecVehicleChargingEnable [" + nElecVehicleChargingEnable + "], naKeyType [" + naKeyType + "], strElevEnable [" + strElevEnable + "]");
             Log.i(TAG, "[getSettingInfofromDB] bMultiSWOutlet [" + bMultiSWOutlet + "], bNonInternetSupportEnable [" + bNonInternetSupportEnable + "], bCookTopOutletEnable [" + bCookTopOutletEnable + "], nSystemAirconEnable [" + nSystemAirconEnable + "], bVisitedVehicleEnable [" + bVisitedVehicleEnable + "]");
-            Log.i(TAG, "[getSettingInfofromDB] bBandLocationEnable [" + bBandLocationEnable + "], bGuardingStreetLamp [" + bGuardingStreetLamp + "]");
+            Log.i(TAG, "[getSettingInfofromDB] bBandLocationEnable [" + bBandLocationEnable + "], bGuardingStreetLamp [" + bGuardingStreetLamp + "], nMobileDeviceRegEnable [" + nMobileDeviceRegEnable + "], nOccupancySensorEnable [" + nOccupancySensorEnable + "], bHSPlatformDeviceEnable [" + bHSPlatformDeviceEnable + "]");
+            Log.i(TAG, "[getSettingInfofromDB] bStrangerRecordingEnable [" + bStrangerRecordingEnable + "], bInterWPMultiCtrlUsage [" + bInterWPMultiCtrlUsage + "]");
 
             if (naAllLightOffEnable != null) {
-                for (int i = 0; i < naAllLightOffEnable.length; i++) {
-                    Log.i(TAG, "[getSettingInfofromDB] naAllLightOffEnable[" + i + "] = " + naAllLightOffEnable[i]);
-                }
+                Log.i(TAG, "[getSettingInfofromDB] naAllLightOffEnable " + Arrays.toString(naAllLightOffEnable));
             }
 
             if (naLightEnable != null) {
-                for (int i = 0; i < naLightEnable.length; i++) {
-                    Log.i(TAG, "[getSettingInfofromDB] naLightEnable[" + i + "] = " + naLightEnable[i]);
-                }
+                Log.i(TAG, "[getSettingInfofromDB] naLightEnable " + Arrays.toString(naLightEnable));
             }
 
             if (naDoorlockEnable != null) {
-                for (int i = 0; i < naDoorlockEnable.length; i++) {
-                    Log.i(TAG, "[getSettingInfofromDB] naDoorlockEnable[" + i + "] = " + naDoorlockEnable[i]);
-                }
+                Log.i(TAG, "[getSettingInfofromDB] naDoorlockEnable " + Arrays.toString(naDoorlockEnable));
             }
 
             if (naVentilEnable != null) {
-                for (int i = 0; i < naVentilEnable.length; i++) {
-                    Log.i(TAG, "[getSettingInfofromDB] naVentilEnable[" + i + "] = " + naVentilEnable[i]);
-                }
+                Log.i(TAG, "[getSettingInfofromDB] naVentilEnable " + Arrays.toString(naVentilEnable));
             }
 
             if (naFrontCamInfoEnable != null) {
-                for (int i = 0; i < naFrontCamInfoEnable.length; i++) {
-                    Log.i(TAG, "[getSettingInfofromDB] naFrontCamInfoEnable[" + i + "] = " + naFrontCamInfoEnable[i]);
-                }
+                Log.i(TAG, "[getSettingInfofromDB] naFrontCamInfoEnable " + Arrays.toString(naFrontCamInfoEnable));
             }
 
             if (naRealtimeEnergyMeterEnable != null) {
-                for (int i = 0; i < naRealtimeEnergyMeterEnable.length; i++) {
-                    Log.i(TAG, "[getSettingInfofromDB] naRealtimeEnergyMeterEnable[" + i + "] = " + naRealtimeEnergyMeterEnable[i]);
-                }
+                Log.i(TAG, "[getSettingInfofromDB] naRealtimeEnergyMeterEnable " + Arrays.toString(naRealtimeEnergyMeterEnable));
+            }
+
+            if (naKeyType != null) {
+                Log.i(TAG, "[getSettingInfofromDB] naKeyType " + Arrays.toString(naKeyType));
             }
 
+
+
         } catch (RuntimeException re) {
             LogUtil.errorLogInfo("", TAG, re);
             if (mWallpadDeviceSet != null) mWallpadDeviceSet.closeDB();
@@ -403,8 +404,8 @@ public class IconManager {
                         R.drawable.icon_ctrl_heating_normal, R.drawable.icon_ctrl_heating_pressed, R.drawable.icon_ctrl_heating_pressed, R.drawable.icon_ctrl_heating_pressed);
             }
 
-            // 가스
-            if (nGasValveEnable == WallpadDeviceSet.DO_USE) {
+            // 가스 (가스가  사용안함으로  되어  있더라도, 월패드간  멀티제어를  지원하는  경우에는 가스 아이콘을  표기한다.)
+            if (nGasValveEnable == WallpadDeviceSet.DO_USE || bInterWPMultiCtrlUsage) {
                 mIconInfoTable.addIconInfo(ID.ICONS.MENUS.CTRL_GAS.getID(), ID.ICONS.MENUS.CTRL_GAS.getNameKR(), ID.LINKEDSCREEN.SubMenuCtrl.Gas,
                         R.drawable.icon_ctrl_gas_normal, R.drawable.icon_ctrl_gas_pressed, R.drawable.icon_ctrl_gas_pressed, R.drawable.icon_ctrl_gas_pressed);
             }