Sfoglia il codice sorgente

[WallPadDevService]
1. App Ver. 갱신
- 2022.05.04.99
2. KNX 드라이버 기능 추가
- 거실EM의 전체 조명에 대한 제어 지원 메소드 추가 (씬모드 제어용)
3. 최신 WallPadAPI 적용
- API Ver.: 2022.05.04.99
- 월패드간 제어기기 멀티제어 사용 여부 확인 메소드 추가
- 거실EM 전제조명에 대한 제어 지원 메소드 추가 (씬모드 제어용)

[WallPadAPI]
1. API Ver. 갱신
- 2022.05.04.99
2. 관리자설정메뉴에 설정기능 추가
- 월패드간 제어기기 멀티제어 사용 여부 설정 확인
> public boolean Get_InterWallPadMultiCtrlUsage()
> 기본값: 사용함
> result: true(사용함), false(사용안함)
3. KNX API 기능 추가
- 거실EM의 전체 조명에 대한 제어 지원 메소드 추가 (씬모드 제어용)
> public int SetEntireLivlight(byte hLightCnt, byte[] ahPower, byte[] ahDim, byte[] ahColor)

Changwoo Nam 3 anni fa
parent
commit
3e41281a97

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)
      *