Kaynağa Gözat

[전체 소스]
1. 소스 커밋
-2021.04.08일 버전 WallPadSource 적용
- Main Intent 주소 변경됨(kr.co.icontrols.callengine.sip.SIPStun.StartService -> kr.co.icontrols.callengine.sip.CeresSIPService.StartService )
2. HomeCtrl
- Menu로드 이슈(GL 버전일떄 처리가 안되어 있어서 수정)

DESKTOP-FBA840V\icontrols 4 yıl önce
işleme
7ac2f82a7d
100 değiştirilmiş dosya ile 7009 ekleme ve 0 silme
  1. 80 0
      AutoPicture/build.gradle
  2. BIN
      AutoPicture/libs/WallPadAPI.jar
  3. BIN
      AutoPicture/libs/WallPadSupport.jar
  4. BIN
      AutoPicture/src/debug/ic_launcher-web.png
  5. BIN
      AutoPicture/src/debug/res/mipmap-hdpi/ic_launcher.png
  6. BIN
      AutoPicture/src/debug/res/mipmap-mdpi/ic_launcher.png
  7. BIN
      AutoPicture/src/debug/res/mipmap-xhdpi/ic_launcher.png
  8. BIN
      AutoPicture/src/debug/res/mipmap-xxhdpi/ic_launcher.png
  9. BIN
      AutoPicture/src/debug/res/mipmap-xxxhdpi/ic_launcher.png
  10. 28 0
      AutoPicture/src/main/AndroidManifest.xml
  11. BIN
      AutoPicture/src/main/ic_launcher-web.png
  12. 915 0
      AutoPicture/src/main/java/kr/co/icontrols/autopicture/MainActivity.java
  13. 397 0
      AutoPicture/src/main/java/kr/co/icontrols/v40ioctl/V40IF.java
  14. 29 0
      AutoPicture/src/main/java/kr/co/icontrols/v40ioctl/V40IOInterface.java
  15. 201 0
      AutoPicture/src/main/java/kr/co/icontrols/v40ioctl/V40IOInterface2.java
  16. BIN
      AutoPicture/src/main/jniLibs/armeabi-v7a/libgle.so
  17. BIN
      AutoPicture/src/main/jniLibs/armeabi-v7a/libserial_port.so
  18. BIN
      AutoPicture/src/main/jniLibs/armeabi-v7a/libwpd_a20interface-jni.so
  19. BIN
      AutoPicture/src/main/jniLibs/armeabi-v7a/libwpd_v40interface-jni.so
  20. BIN
      AutoPicture/src/main/jniLibs/armeabi-v7a/libwpd_v40interface2-jni.so
  21. BIN
      AutoPicture/src/main/jniLibs/armeabi-v7a/libwpddevctr.so
  22. BIN
      AutoPicture/src/main/jniLibs/armeabi/libgle.so
  23. BIN
      AutoPicture/src/main/jniLibs/armeabi/libserial_port.so
  24. BIN
      AutoPicture/src/main/jniLibs/armeabi/libwpd_a20interface-jni.so
  25. BIN
      AutoPicture/src/main/jniLibs/armeabi/libwpd_v40interface-jni.so
  26. BIN
      AutoPicture/src/main/jniLibs/armeabi/libwpd_v40interface2-jni.so
  27. BIN
      AutoPicture/src/main/jniLibs/armeabi/libwpddevctr.so
  28. 8 0
      AutoPicture/src/main/res/anim/anim_in.xml
  29. 8 0
      AutoPicture/src/main/res/anim/anim_in_downup.xml
  30. 8 0
      AutoPicture/src/main/res/anim/anim_in_updown.xml
  31. 8 0
      AutoPicture/src/main/res/anim/anim_out.xml
  32. 8 0
      AutoPicture/src/main/res/anim/anim_out_downup.xml
  33. 8 0
      AutoPicture/src/main/res/anim/anim_out_updown.xml
  34. BIN
      AutoPicture/src/main/res/drawable-hdpi/ic_launcher.png
  35. BIN
      AutoPicture/src/main/res/drawable-mdpi/bg_popupalarm.png
  36. BIN
      AutoPicture/src/main/res/drawable-mdpi/but_ok.png
  37. BIN
      AutoPicture/src/main/res/drawable-mdpi/but_ok_p.png
  38. BIN
      AutoPicture/src/main/res/drawable-mdpi/but_popup_cancel.png
  39. BIN
      AutoPicture/src/main/res/drawable-mdpi/but_popup_cancel_p.png
  40. BIN
      AutoPicture/src/main/res/drawable-mdpi/ic_launcher.png
  41. BIN
      AutoPicture/src/main/res/drawable-mdpi/icon_recording.png
  42. BIN
      AutoPicture/src/main/res/drawable-xhdpi/ic_launcher.png
  43. BIN
      AutoPicture/src/main/res/drawable-xxhdpi/ic_launcher.png
  44. 17 0
      AutoPicture/src/main/res/layout/activity_main.xml
  45. 9 0
      AutoPicture/src/main/res/menu/main.xml
  46. BIN
      AutoPicture/src/main/res/mipmap-hdpi/ic_launcher.png
  47. BIN
      AutoPicture/src/main/res/mipmap-mdpi/ic_launcher.png
  48. BIN
      AutoPicture/src/main/res/mipmap-xhdpi/ic_launcher.png
  49. BIN
      AutoPicture/src/main/res/mipmap-xxhdpi/ic_launcher.png
  50. BIN
      AutoPicture/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  51. 8 0
      AutoPicture/src/main/res/values-sw600dp/dimens.xml
  52. 9 0
      AutoPicture/src/main/res/values-sw720dp-land/dimens.xml
  53. 11 0
      AutoPicture/src/main/res/values-v11/styles.xml
  54. 12 0
      AutoPicture/src/main/res/values-v14/styles.xml
  55. 7 0
      AutoPicture/src/main/res/values/dimens.xml
  56. 8 0
      AutoPicture/src/main/res/values/strings.xml
  57. 26 0
      AutoPicture/src/main/res/values/styles.xml
  58. BIN
      AutoPicture/src/release/hdc_icon-web.png
  59. BIN
      AutoPicture/src/release/ic_launcher-web.png
  60. BIN
      AutoPicture/src/release/res/mipmap-hdpi/hdc_icon.png
  61. BIN
      AutoPicture/src/release/res/mipmap-hdpi/ic_launcher.png
  62. BIN
      AutoPicture/src/release/res/mipmap-mdpi/hdc_icon.png
  63. BIN
      AutoPicture/src/release/res/mipmap-mdpi/ic_launcher.png
  64. BIN
      AutoPicture/src/release/res/mipmap-xhdpi/hdc_icon.png
  65. BIN
      AutoPicture/src/release/res/mipmap-xhdpi/ic_launcher.png
  66. BIN
      AutoPicture/src/release/res/mipmap-xxhdpi/hdc_icon.png
  67. BIN
      AutoPicture/src/release/res/mipmap-xxhdpi/ic_launcher.png
  68. BIN
      AutoPicture/src/release/res/mipmap-xxxhdpi/hdc_icon.png
  69. BIN
      AutoPicture/src/release/res/mipmap-xxxhdpi/ic_launcher.png
  70. BIN
      HDC_HN_RELEASE_KEY.jks
  71. 88 0
      LogOutputService/build.gradle
  72. BIN
      LogOutputService/libs/WallPadAPI.jar
  73. BIN
      LogOutputService/libs/WallPadAPIforSVC.jar
  74. BIN
      LogOutputService/libs/WallPadSupport.jar
  75. 28 0
      LogOutputService/src/main/AndroidManifest.xml
  76. BIN
      LogOutputService/src/main/ic_launcher-web.png
  77. 70 0
      LogOutputService/src/main/java/com/artncore/apps/ic_wallpad/service/log/LogOutputService.java
  78. BIN
      LogOutputService/src/main/res/drawable-hdpi/ic_launcher.png
  79. BIN
      LogOutputService/src/main/res/drawable-mdpi/ic_launcher.png
  80. BIN
      LogOutputService/src/main/res/drawable-xhdpi/ic_launcher.png
  81. BIN
      LogOutputService/src/main/res/mipmap-hdpi/ic_launcher.png
  82. BIN
      LogOutputService/src/main/res/mipmap-mdpi/ic_launcher.png
  83. BIN
      LogOutputService/src/main/res/mipmap-xhdpi/ic_launcher.png
  84. BIN
      LogOutputService/src/main/res/mipmap-xxhdpi/ic_launcher.png
  85. BIN
      LogOutputService/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  86. 11 0
      LogOutputService/src/main/res/values-v11/styles.xml
  87. 12 0
      LogOutputService/src/main/res/values-v14/styles.xml
  88. 5 0
      LogOutputService/src/main/res/values/strings.xml
  89. 20 0
      LogOutputService/src/main/res/values/styles.xml
  90. 87 0
      ManagerSetting/build.gradle
  91. BIN
      ManagerSetting/libs/WallPadAPI.jar
  92. BIN
      ManagerSetting/libs/WallPadSupport.jar
  93. 61 0
      ManagerSetting/src/main/AndroidManifest.xml
  94. BIN
      ManagerSetting/src/main/ic_launcher-web.png
  95. 86 0
      ManagerSetting/src/main/java/android/media/DecoderCapabilities.java
  96. 400 0
      ManagerSetting/src/main/java/android/media/MediaFile.java
  97. 1344 0
      ManagerSetting/src/main/java/com/artncore/deviceinterface/WallPadInterface.java
  98. 189 0
      ManagerSetting/src/main/java/com/artncore/managersetting/MainApplication.java
  99. 2344 0
      ManagerSetting/src/main/java/com/artncore/managersetting/dao/MainDatabaseManager.java
  100. 459 0
      ManagerSetting/src/main/java/com/artncore/managersetting/domain/Const.java

+ 80 - 0
AutoPicture/build.gradle

@@ -0,0 +1,80 @@
+// This buildscript{} block configures the code driving the build
+buildscript {
+    /**
+     * The nested repositories{} block declares that this build uses the
+     * jcenter repository.
+     */
+    repositories {
+        jcenter()
+        google()
+    }
+
+    /**
+     * This block declares a dependency on the 2.3.3 version
+     * of the Gradle plugin for the buildscript.
+     */
+    dependencies {
+        classpath 'com.android.tools.build:gradle:4.1.1'
+    }
+}
+
+allprojects {
+    repositories {
+        jcenter()
+        google()
+    }
+}
+
+apply plugin: 'com.android.application'
+
+android {
+    lintOptions {
+        disable "ResourceType"
+        checkReleaseBuilds false
+    }
+
+    compileSdkVersion 28
+
+    signingConfigs {
+        config {
+            keyAlias 'HDC_HN_RELEASE_KEY'
+            keyPassword 'hdchnsys1776'
+            storeFile file('../HDC_HN_RELEASE_KEY.jks')
+            storePassword 'hdchnsys1776'
+        }
+    }
+
+    defaultConfig {
+        applicationId "kr.co.icontrols.autopicture"
+        minSdkVersion 17
+        targetSdkVersion 17
+    }
+
+    applicationVariants.all { variant ->
+        variant.outputs.all { output ->
+            outputFileName = new File("../", "AutoPicture.apk");
+        }
+    }
+
+    buildTypes {
+        release {
+            signingConfig signingConfigs.config
+//            minifyEnabled true
+//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+        release_secured {
+            signingConfig signingConfigs.config
+            minifyEnabled true
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+        debug {
+            signingConfig signingConfigs.config
+        }
+    }
+}
+
+dependencies {
+    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
+    implementation files('libs/WallPadAPI.jar')
+    implementation files('libs/WallPadSupport.jar')
+}

BIN
AutoPicture/libs/WallPadAPI.jar


BIN
AutoPicture/libs/WallPadSupport.jar


BIN
AutoPicture/src/debug/ic_launcher-web.png


BIN
AutoPicture/src/debug/res/mipmap-hdpi/ic_launcher.png


BIN
AutoPicture/src/debug/res/mipmap-mdpi/ic_launcher.png


BIN
AutoPicture/src/debug/res/mipmap-xhdpi/ic_launcher.png


BIN
AutoPicture/src/debug/res/mipmap-xxhdpi/ic_launcher.png


BIN
AutoPicture/src/debug/res/mipmap-xxxhdpi/ic_launcher.png


+ 28 - 0
AutoPicture/src/main/AndroidManifest.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="kr.co.icontrols.autopicture"
+    android:versionCode="17"
+    android:versionName="2021.03.26.01">
+
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+
+    <application
+        android:allowBackup="true"
+        android:icon="@mipmap/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/AppTheme" >
+        <activity
+            android:name="kr.co.icontrols.autopicture.MainActivity"
+            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
+            android:label="@string/app_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+
+    </application>
+
+</manifest>

BIN
AutoPicture/src/main/ic_launcher-web.png


+ 915 - 0
AutoPicture/src/main/java/kr/co/icontrols/autopicture/MainActivity.java

@@ -0,0 +1,915 @@
+package kr.co.icontrols.autopicture;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+
+import com.artncore.WallPadDataMgr.WallpadStatusData;
+import com.artncore.commons.define;
+import com.util.LogUtil;
+//import com.util.LogUtil;
+
+import android.Manifest;
+import android.content.pm.PackageManager;
+import android.graphics.Matrix;
+import android.graphics.drawable.BitmapDrawable;
+import android.media.ExifInterface;
+import android.os.Bundle;
+import android.os.CountDownTimer;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.os.PowerManager;
+import android.app.Activity;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Color;
+import android.graphics.Point;
+import android.util.Log;
+import android.view.Display;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnTouchListener;
+import android.view.WindowManager;
+import android.view.animation.AnimationUtils;
+import android.widget.ImageView;
+import android.widget.ViewFlipper;
+
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.ContextCompat;
+
+import kr.co.icontrols.v40ioctl.V40IF;
+import kr.co.icontrols.wallpadsupport.Version;
+
+/**
+ * @description App 시작 방법<br>
+ * Intent intent = new Intent(Intent.ACTION_MAIN);<br>
+ * intent.setComponent(new ComponentName("kr.co.icontrols.autopicture",
+ * "kr.co.icontrols.autopicture.MainActivity"));<br>
+ * intent.putExtra("IMAGE_NEXTSHOW_TIME_UNIT_SEC", AUTOPIC_SETTING_VALUE_SEC);<br>
+ * intent.putExtra("IMAGE_NEXTSHOW_ANIMATION", AUTOPIC_SETTING_VALUE_TYPE);     <br>
+ * startActivity(intent);<br><br>
+ * $AUTOPIC_SETTING_VALUE_SEC 은 이미지 전환 기준 초수<br>
+ * $AUTOPIC_SETTING_VALUE_TYPE 은 이미지 전환 에니메이션 효과<br>
+ * &nbsp&nbsp$$1. 그 자리에서 서서히 사라지기<br>
+ * &nbsp&nbsp$$2. 왼쪽에서 오른쪽으로<br>
+ * &nbsp&nbsp$$3. 아래에서 위로 <br>
+ * &nbsp&nbsp$$4. 위에서 아래로<br><br>
+ * App 종료 방법<br>
+ * Intent intent = new Intent();<br>
+ * intent.setAction("kr.co.icontrols.autopicture.BR_APP_FINISH");<br>
+ * sendBroadcast(intent);<br>
+ */
+public class MainActivity extends Activity implements OnTouchListener {
+
+    private final static String TAG = "AutoPictureApp";
+
+    private final boolean DEBUG_LOG_ON = true;
+
+    private void DebugLogOutput(String s) {
+        if (DEBUG_LOG_ON) Log.d(TAG, s);
+    }
+
+    //[DB]
+    WallpadStatusData DBMGR;
+
+    //[Time]
+    Calendar mCal;
+
+    // [Show Picture]
+    ViewFlipper mFlipper;
+
+    ImageView View0;
+    ImageView View1;
+
+    Bitmap mPhotoBitmapNext;
+    Bitmap mPhotoBitmapCenter;
+
+    int mIntCenter;
+    int mIndexOfFillpper = 0;
+
+    List<String> filesList = new ArrayList<String>();
+
+    CounterDown timerAutoPicture = null;
+    TimerAutoPictureChanger mTimerAutoPictureChanger = null;
+
+    int AnimationSec;
+    int AnimationType;
+    boolean isTestShow = false;
+
+    int displayWidth;
+    int displayHeight;
+
+    Boolean PictureMorethanZero = false;
+    private BroadcastReceiver mWpadNotifyBR = null;
+    private final String BR_APP_FINISH = "kr.co.icontrols.wallpad.BR_APP_FINISH";
+
+    V40IF mV40IF;
+
+    // PopupActivityRun
+    private static boolean PopupActivityRun = false;
+
+    public static boolean getPopupActivityRun() {
+        return PopupActivityRun;
+    }
+
+    public static void setPopupActivityRun(boolean run) {
+        PopupActivityRun = run;
+    }
+
+    private static final int REQUEST_EXTERNAL_STORAGE = 100;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        PopupActivityRun = false;
+
+        Log.d(TAG, "[START - AutoPictureApp] --------------------------------------------");
+        if (Version.getPlatformType() == Version.PLATFORM_TYPE.A40i) mV40IF = new V40IF();
+        else Log.w(TAG, "[onCreate] Not Supported PLATFORM_TYPE [" + Version.getPlatformType() + "]");
+
+        // 9. Check Permission
+        DebugLogOutput("[Create] - Step1 : Permission Check");
+        boolean hasPermission = (ContextCompat.checkSelfPermission(this,
+                Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
+        Log.d(TAG, "[onCreate] hasPermission: " + hasPermission);
+        if (!hasPermission) {
+            LogUtil.SetConsole();
+        }
+
+        Intent intent = getIntent();
+        if (intent != null) {
+            AnimationSec = intent.getIntExtra("IMAGE_NEXTSHOW_TIME_UNIT_SEC", -1);
+            if (AnimationSec < 0) {
+                AnimationSec = 5;
+            }
+            AnimationType = intent.getIntExtra("IMAGE_NEXTSHOW_ANIMATION", -1);
+            if (AnimationType < 0) {
+                AnimationType = 1;
+            }
+            isTestShow = intent.getBooleanExtra("TEST_SHOW", false);
+            Log.d(TAG, "isTestShow : " + isTestShow);
+            if (isTestShow == true) {
+                ctrlLCDOnOff(true);
+            }
+        }
+
+        ctrlLCDOnOff(true);
+
+        DBMGR = new WallpadStatusData(getApplicationContext());
+        mCal = Calendar.getInstance();
+
+        mWpadNotifyBR = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                Log.d(TAG, "Receive BR " + intent.getAction());
+                String ActionName = intent.getAction();
+                if (ActionName.equals(BR_APP_FINISH)) {
+                    Log.i(TAG, "AutoPicture finish - BR_APP_FINISH");
+                    finish();
+                } else BrReceive(intent);
+            }
+        };
+
+        IntentFilter filter = new IntentFilter(BR_APP_FINISH);
+        registerReceiver(mWpadNotifyBR, filter);
+
+        Display display = getWindowManager().getDefaultDisplay();
+        Point size = new Point();
+        display.getSize(size);
+
+        displayWidth = size.x;
+        displayHeight = size.y;
+
+        //사진 표시
+        mFlipper = new ViewFlipper(this);
+        mFlipper.setBackgroundColor(Color.BLACK);
+
+        View0 = new ImageView(this);
+        View1 = new ImageView(this);
+
+        File dirUsb = new File("/storage/usb0");
+        File dirInternal = new File(define.ALBUM_PICTURE_LOCATION);
+        if (!dirInternal.isDirectory()) dirInternal.mkdir();
+
+        try {
+            if (dirInternal.isDirectory()) {
+                Log.d(TAG, dirInternal + " is Directory!!");
+                printfiles(dirInternal);
+            }
+            printfiles(dirUsb);
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, e.toString());
+        }
+        if (filesList.size() != 0) {
+            PictureMorethanZero = true;
+            mIntCenter = 0;
+            File FileCenter = new File(filesList.get(mIntCenter));
+            mPhotoBitmapCenter = decodeFile(FileCenter, displayWidth, displayHeight);
+
+            if (mPhotoBitmapCenter == null) {
+                Log.w(TAG, "[onCreate] mPhotoBitmapCenter is null");
+                PictureMorethanZero = false;
+                setAutoPictureAnimation(AnimationType);
+                startAutoPictureTimeThread();
+//                SetInfoFromMainUI(1, 1);
+//                timerAutoPicture.start();
+
+                setContentView(mFlipper);
+            }
+
+            View0.setImageBitmap(mPhotoBitmapCenter);
+            View0.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
+            mFlipper.addView(View0);
+            mPhotoBitmapCenter = null;
+
+            Log.i(TAG, "[onCreate] AnimationSec [" + AnimationSec + "], AnimationType [" + AnimationType + "]");
+            setAutoPictureAnimation(AnimationType);
+            startAutoPictureTimeThread();
+
+//            SetInfoFromMainUI(AnimationSec, AnimationType);
+//            timerAutoPicture.start();
+
+            setContentView(mFlipper);
+            mFlipper.setOnTouchListener((OnTouchListener) this);
+        }
+        else {
+            Log.d(TAG, "[Finish!! (There is no Picture) - AutoPictureApp] --------------------------------------------");
+            PictureMorethanZero = false;
+            setAutoPictureAnimation(AnimationType);
+            startAutoPictureTimeThread();
+//            SetInfoFromMainUI(1, 1);
+//            timerAutoPicture.start();
+
+            setContentView(mFlipper);
+        }
+    }
+
+
+    /**
+     * 실제 Permission에 대한 체크가 필요
+     * @param requestCode
+     * @param permissions
+     * @param grantResults
+     */
+    @Override
+    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
+        Log.d(TAG, "[onRequestPermissionsResult] requestCode: " + requestCode);
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+        switch (requestCode) {
+            case REQUEST_EXTERNAL_STORAGE: {
+                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                    Log.d(TAG, "[onRequestPermissionsResult] PERMISSION_GRANTED");
+                } else {
+                    Log.d(TAG, "[onRequestPermissionsResult] PERMISSION_NOT_GRANTED");
+                }
+                return;
+            }
+        }
+    }
+
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        Log.d(TAG, "[onDestroy] ========== AutoPictureApp ==========");
+        stopAutoPictureTimeThread();
+//        timerAutoPicture.cancel();
+
+        if (DBMGR != null) DBMGR.closeDB();
+
+        // 1. 등록된 ActionFilter 일괄 해제
+        unregisterReceiver(mWpadNotifyBR);
+
+        ctrlLCDOnOff(false);
+
+        if (mPhotoBitmapNext != null) {
+            mPhotoBitmapNext.recycle();
+            mPhotoBitmapNext = null;
+        }
+        if (mPhotoBitmapCenter != null) {
+            mPhotoBitmapCenter.recycle();
+            mPhotoBitmapCenter = null;
+        }
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        Log.d(TAG, "[onResume] ========== AutoPictureApp ==========");
+//        ctrlLCDOnOff(true);
+    }
+
+    /**
+     * onPause<br>
+     */
+    @Override
+    protected void onPause() {
+        super.onPause();
+        Log.d(TAG, "[onPause] ========== AutoPictureApp ==========");
+//        stopAutoPictureTimeThread();
+//        timerAutoPicture.cancel();
+        overridePendingTransition(0, 0);        // 종료시 에니메이션 효과 삭제
+        ctrlLCDOnOff(false);
+    }
+
+    @Override
+    public void finish() {
+        super.finish();
+        Log.d(TAG, "[finish] ========== AutoPictureApp ==========");
+        stopAutoPictureTimeThread();
+//        timerAutoPicture.cancel();
+        ctrlLCDOnOff(false);
+        Intent intent = new Intent();
+        intent.putExtra("Finish_Kind", "HomeButton");
+        setResult(RESULT_OK, intent);
+
+        sendFinishBR();
+    }
+
+    @Override
+    public boolean onTouch(View v, MotionEvent event) {
+
+        if (v != mFlipper)
+            return false;
+
+        if (event.getAction() == MotionEvent.ACTION_DOWN) {
+
+        } else if (event.getAction() == MotionEvent.ACTION_UP) {
+            ctrlLCDOnOff(true);
+            finish();
+        }
+        return true;
+    }
+
+    // =================================================================================================
+    // [[ BroadcastReceiver ]] region
+    // =================================================================================================
+    protected void onBrReceive(Intent intent) {
+    }
+
+    /**
+     * BrReceive
+     *
+     * @param intent - onReceive 시 수신받은 intent
+     */
+    private void BrReceive(Intent intent) {
+        try {
+            onBrReceive(intent);
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, "[ExceptionError] - onBrReceive : " + e);
+        }
+    }
+
+    private void sendFinishBR() {
+        try {
+            // 상태가 변경되었다면 상태 변경 BR을 송신한다.
+            Intent notiIntent = new Intent();
+            notiIntent.setAction(define.NOTIFY_ACNAME);
+            notiIntent.putExtra(define.NOTIBR_KIND, define.NOTIFY_AUTOPICTURE_FINISH);
+            getApplicationContext().sendBroadcast(notiIntent);
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] sendFinishBR()");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    private void setAutoPictureAnimation(int nAniType) {
+        try {
+            Log.d(TAG, "[setAutoPictureAnimation] nAniType [" + nAniType + "]");
+            switch (AnimationType) {
+                case 1:  //그 자리에서 서서히 사라지기
+                default:
+                    mFlipper.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
+                    mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));
+                    break;
+
+                case 2:  //왼쪽에서 오른쪽으로
+                    mFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.anim_in));
+                    mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.anim_out));
+                    break;
+
+                case 3:  //아래에서 위로
+                    mFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.anim_in_downup));
+                    mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.anim_out_downup));
+                    break;
+
+                case 4:  //위에서 아래로
+                    mFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.anim_in_updown));
+                    mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.anim_out_updown));
+                    break;
+            }
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] setAutoPictureAnimation(int nAniType)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    boolean bAutoPictureTimerRun = false;
+    class TimerAutoPictureChanger extends Thread {
+        int nSec = 5;
+
+        public TimerAutoPictureChanger(int nChangeSec) {
+            nSec = nChangeSec;
+        }
+
+        @Override
+        public void run() {
+            super.run();
+            try {
+                int sec = nSec;
+                Log.d(TAG, "[TimerAutoPictureChanger.run()] bAutoPictureTimerRun [" + bAutoPictureTimerRun + "], PictureMorethanZero [" + PictureMorethanZero + "], sec [" + sec + "]");
+                while (bAutoPictureTimerRun && PictureMorethanZero) {
+                    if (sec > 0) {
+//                        Log.d(TAG, "[TimerAutoPictureChanger.run()] sec [" + sec +"]");
+                        sec--;
+                    }
+                    else {
+                        if (isTestShow == false) {
+                            mCal = Calendar.getInstance();
+                            if (DBMGR.DecideAutoPictureAppEndOrNot(mCal) == true) {
+                                Log.d(TAG, "[TimerAutoPictureChanger.run()] DecideAutoPictureAppEndOrNot(mCal) == true");
+                                Log.d(TAG, "[TimerAutoPictureChanger.run()] LCD will be Off!!!");
+                                bAutoPictureTimerRun = false;
+                                ctrlLCDOnOff(false);
+                            }
+                        }
+
+                        Log.d(TAG, "[TimerAutoPictureChanger.run()] Show the next picture!!");
+                        sec = nSec;
+                        sendHandlerMsg(HANDLERMSG.SHOW_NEXT_PICTURE, 0, 0);
+                    }
+//                    Log.d(TAG, "[TimerAutoPictureChanger.run()] 1 bAutoPictureTimerRun [" + bAutoPictureTimerRun + "], PictureMorethanZero [" + PictureMorethanZero + "], sec [" + sec + "]");
+                    Thread.sleep(1000);
+                }
+//                Log.d(TAG, "[TimerAutoPictureChanger.run()] 2 bAutoPictureTimerRun [" + bAutoPictureTimerRun + "], PictureMorethanZero [" + PictureMorethanZero + "], sec [" + sec + "]");
+                Log.d(TAG, "[TimerAutoPictureChanger.run()] TimerAutoPictureChanger is end!!!");
+            } catch (RuntimeException re) {
+                LogUtil.errorLogInfo("", TAG, re);
+            } catch (Exception e) {
+                Log.e(TAG, "[Exception] TimerAutoPictureChanger.run()");
+                //e.printStackTrace();
+                LogUtil.errorLogInfo("", TAG, e);
+            }
+            finish();
+        }
+    }
+
+    private void startAutoPictureTimeThread() {
+        try {
+            bAutoPictureTimerRun = true;
+            mTimerAutoPictureChanger = new TimerAutoPictureChanger(AnimationSec);
+            mTimerAutoPictureChanger.start();
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] startAutoPictureTimeThread()");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    private void stopAutoPictureTimeThread() {
+        try {
+            Log.w(TAG, "[stopAutoPictureTimeThread] ===== START =====");
+            if (mTimerAutoPictureChanger != null) {
+                Log.w(TAG, "[stopAutoPictureTimeThread] Stop mTimerAutoPictureChanger!!");
+                bAutoPictureTimerRun = false;
+                mTimerAutoPictureChanger = null;
+            }
+            else {
+                Log.w(TAG, "[stopAutoPictureTimeThread] mTimerAutoPictureChanger is null!!");
+            }
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] stopAutoPictureTimeThread()");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+
+
+
+    private void SetInfoFromMainUI(int Sec, int AnimationType) {
+        Log.d(TAG, "[SetInfoFromMainUI] Sec [" + Sec + "], AnimationType [" + AnimationType + "]");
+        timerAutoPicture = new CounterDown((long) (Sec * 1000), 1000); // 1초 = 1000, 1분 = 60000
+
+        switch (AnimationType) {
+            case 1:  //그 자리에서 서서히 사라지기
+                mFlipper.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
+                mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));
+                break;
+
+            case 2:  //왼쪽에서 오른쪽으로
+                mFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.anim_in));
+                mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.anim_out));
+                break;
+
+            case 3:  //아래에서 위로
+                mFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.anim_in_downup));
+                mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.anim_out_downup));
+                break;
+
+            case 4:  //위에서 아래로
+                mFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.anim_in_updown));
+                mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.anim_out_updown));
+                break;
+
+            default:
+                mFlipper.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
+                mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));
+                break;
+        }
+    }
+
+    public class CounterDown extends CountDownTimer {
+
+        public CounterDown(long millisInFuture, long countDownInterval) {
+            super(millisInFuture, countDownInterval);
+            Log.d(TAG, "[timerAutoPicture] millisInFuture [" + millisInFuture + "], countDownInterval [" + countDownInterval + "]");
+        }
+
+        @Override
+        public void onFinish() {
+            if (PictureMorethanZero == false) {
+                finish();
+            }
+            else {
+                Log.d(TAG, "[timerAutoPicture.onFinish()] The timer expired!! Show the next picture!!");
+                mCal = Calendar.getInstance();
+
+                if (isTestShow == false) {
+                    if (DBMGR.DecideAutoPictureAppEndOrNot(mCal) == true) {
+                        Log.d(TAG, "[timerAutoPicture.onFinish()] DecideAutoPictureAppEndOrNot(mCal) == true");
+                        Log.d(TAG, "[timerAutoPicture.onFinish()] LCD will be Off!!!");
+                        ctrlLCDOnOff(false);
+                    }
+                }
+                ShowNextImage();
+                timerAutoPicture.start();
+            }
+        }
+
+        @Override
+        public void onTick(long millisUntilFinished) {
+            Log.d(TAG, "[timerAutoPicture.onTick(...)] Remain time(sec) [" + (millisUntilFinished/1000) + "]");
+        }
+    }
+
+    /**
+     * @description USB에 있는 이미지 파일의 목록을 생성하는 함수<br>
+     * 재귀함수로써 모든 폴더를 탐색한다.<br>
+     * USB와 Storage/Bestin/DownloadPicture 내에 있는 파일의 확장자를 검사<br>
+     * 파일 포맷 : jpg, JPG, jpeg, JPEG, png, PNG, bmp, BMP 지원
+     */
+    public void printfiles(File file) {
+        File[] list = file.listFiles();
+//        Log.d(TAG, "[printfiles] list.length: " + list.length);
+
+        if (list == null) {
+            Log.d(TAG, "No File in " + file.getPath());
+            return;
+        }
+        for (int i = 0; i < list.length; i++) {
+            File temp_file = new File(file.getAbsolutePath(), list[i].getName());
+            if (!temp_file.isDirectory()) temp_file.mkdir();
+            if (temp_file.isDirectory() && temp_file.listFiles() != null) {
+                Log.d(TAG, "PATH folder" + temp_file.getAbsolutePath());
+                //I am inside The Directory... Searching:) So i am calling printfiles(File file) function to print the files in the directory
+                printfiles(temp_file);
+            } else {
+                String filename = temp_file.getName();
+                boolean isAccept = false;
+
+                if (filename.toLowerCase().endsWith(".jpg") == true) {
+                    isAccept = true;
+                } else if (filename.toLowerCase().endsWith(".jpeg") == true) {
+                    isAccept = true;
+                } else if (filename.toLowerCase().endsWith(".png") == true) {
+                    isAccept = true;
+                } else if (filename.toLowerCase().endsWith(".bmp") == true) {
+                    isAccept = true;
+                } else {
+                    isAccept = false;
+                }
+
+                if (isAccept == true) {
+                    filesList.add(temp_file.getAbsolutePath());
+                    DebugLogOutput("PATH file" + temp_file.getAbsolutePath());
+                }
+            }
+        }
+    }
+
+    /**
+     * @description 다음 이미지 보여주기 <br>
+     */
+    public void ShowNextImage() {
+        if (mFlipper.getCurrentView() == View0) {
+            LoadNextImage(View1);
+            mFlipper.showNext();
+            mFlipper.removeView(View0);
+        } else if (mFlipper.getCurrentView() == View1) {
+            LoadNextImage(View0);
+            mFlipper.showNext();
+            mFlipper.removeView(View1);
+        }
+    }
+
+    /**
+     * @description Next 이미지 로드<br>
+     */
+    public void LoadNextImage(View v) {
+        mIntCenter++;
+        if (mIntCenter == filesList.size()) {
+            mIntCenter = 0;
+        }
+
+        Log.w(TAG, "[LoadNextImage] filesList.get(mIntCenter) = " + filesList.get(mIntCenter));
+        File TempFileNext = new File(filesList.get(mIntCenter));
+        mPhotoBitmapNext = decodeFile(TempFileNext, displayWidth, displayHeight);
+        if (mPhotoBitmapNext == null) {
+            Log.w(TAG, "[LoadNextImage] mPhotoBitmapNext is null");
+            ctrlLCDOnOff(true);
+            finish();
+        }
+        ((ImageView) v).setImageBitmap(mPhotoBitmapNext);
+        ((ImageView) v).setScaleType(ImageView.ScaleType.CENTER_INSIDE);
+        mFlipper.addView(v);
+        mPhotoBitmapNext = null;
+    }
+
+    /**
+     * @description 사진 미리보기 화면에 표시될 이미지 크기 기반으로 이미지 스케일 및 샘플 사이즈를 조정
+     */
+    public static Bitmap decodeFile(File f, int reqWidth, int reqHeight) {
+        FileInputStream is = null;
+        FileInputStream is_ = null;
+        try {
+            // First decode with inJustDecodeBounds=true to check dimensions
+            final BitmapFactory.Options options = new BitmapFactory.Options();
+            options.inJustDecodeBounds = true;
+            is_ = new FileInputStream(f);
+            BitmapFactory.decodeStream(is_, null, options);
+
+            if (options.outMimeType == null) {
+                Log.e("[AutoPicture]", "[decodeStream] options.outMimeType is null");
+                int pos = f.getAbsoluteFile().toString().lastIndexOf(".");
+                String ext = f.getAbsoluteFile().toString().substring(pos + 1);
+                Log.d("[AutoPicture]", "[decodeStream] ext [" + ext + "]");
+                if (!ext.equalsIgnoreCase("bmp")) return null; // bmp파일은 options.outMimeType == null이므로
+            } else {
+                Log.d("[AutoPicture]", "[decodeStream] options.outMimeType [" + options.outMimeType + "]");
+            }
+
+            // Calculate inSampleSize
+            options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
+//            Log.d("[AutoPicture]", "[decodeStream] options.inSampleSize [" + options.inSampleSize + "]");
+
+            // Decode bitmap with inSampleSize set
+            options.inJustDecodeBounds = false;
+//            Log.d("[AutoPicture]", "[decodeStream] options.inJustDecodeBounds [" + options.inJustDecodeBounds + "]");
+
+            is = new FileInputStream(f);
+            Bitmap bitmap = BitmapFactory.decodeStream(is , null, options);
+            int degree = GetExifOrientation(f.getAbsolutePath());
+            Bitmap temp_bitmap = GetRotatedBitmap(bitmap, degree);
+            return temp_bitmap;
+        } catch (FileNotFoundException e) {
+            // TODO Auto-generated catch block
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+            return null;
+        }
+        finally {
+            if(is !=null) {
+                try {
+                    is.close();
+                } catch (IOException e) {
+                    LogUtil.errorLogInfo("", TAG, e);
+                }
+            }
+            is = null;
+
+            if(is_!=null) {
+                try {
+                    is_.close();
+                } catch (IOException e) {
+                    LogUtil.errorLogInfo("", TAG, e);
+                }
+            }
+            is_ = null;
+        }
+    }
+
+    public synchronized static int GetExifOrientation(String filepath) {
+        int degree = 0;
+        ExifInterface exif = null;
+
+        try {
+            exif = new ExifInterface(filepath);
+        } catch (IOException e) {
+            Log.e(TAG, "[Exception] GetExifOrientation()");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+
+        if (exif != null) {
+            int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
+
+            if (orientation != -1) {
+                // We only recognize a subset of orientation tag values.
+                switch (orientation) {
+                    case ExifInterface.ORIENTATION_ROTATE_90:
+                        degree = 90;
+                        break;
+                    case ExifInterface.ORIENTATION_ROTATE_180:
+                        degree = 180;
+                        break;
+
+                    case ExifInterface.ORIENTATION_ROTATE_270:
+                        degree = 270;
+                        break;
+                }
+
+            }
+        }
+        Log.d(TAG, "[GetExifOrientation] degree [" + degree + "]");
+        return degree;
+    }
+
+    public synchronized static Bitmap GetRotatedBitmap(Bitmap bitmap, int degrees) {
+        if (degrees != 0 && bitmap != null) {
+            Matrix m = new Matrix();
+            m.setRotate(degrees, (float) bitmap.getWidth() / 2, (float) bitmap.getHeight() / 2);
+            try {
+                Bitmap b2 = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), m, true);
+                if (bitmap != b2) {
+                    bitmap.recycle();
+                    bitmap = b2;
+                }
+                else if(b2!=null)
+                {
+                    b2.recycle();;
+                    b2 = null;
+                }
+            } catch (OutOfMemoryError ex) {
+                Log.e(TAG, "[Exception] GetRotatedBitmap()");
+            }
+        }
+        return bitmap;
+    }
+
+    /**
+     * @description 이미지 Sampling size 확인
+     */
+    public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
+        // Raw height and width of image
+        final int height = options.outHeight;
+        final int width = options.outWidth;
+        int inSampleSize = 1;
+
+        if ((reqWidth > 1024) || (reqHeight > 600)) {
+            inSampleSize = 2; // 1280x800 예외처리 추가
+        }
+
+        long tempFreeMemory = Runtime.getRuntime().freeMemory();
+
+        Log.d("AutoPictureApp", "freeMemory : " + tempFreeMemory);
+        if (tempFreeMemory < 100000) {
+            Log.w("AutoPictureApp", "freeMemory is low than 100000");
+            Log.w("AutoPictureApp", "inSampleSize will be * 2");
+            inSampleSize *= 2;
+        }
+        if (tempFreeMemory < 50000) {
+            Log.w("AutoPictureApp", "freeMemory is low than 50000");
+            Log.w("AutoPictureApp", "inSampleSize will be * 2");
+            inSampleSize *= 2;
+        }
+
+        if (height > reqHeight || width > reqWidth) {
+            final int halfHeight = height / 2;
+            final int halfWidth = width / 2;
+
+            // Calculate the largest inSampleSize value that is a power of 2 and
+            // keeps both
+            // height and width larger than the requested height and width.
+            while ((halfHeight / inSampleSize) >= reqHeight && (halfWidth / inSampleSize) >= reqWidth) {
+                inSampleSize *= 2;
+            }
+        }
+
+        Log.i("AutoPictureApp", "inSampleSize : " + inSampleSize);
+        return inSampleSize;
+    }
+
+    public boolean ctrlLCDOnOff(boolean bOn) {
+        try {
+            // 절전모드 사용시 호출수신등의 이벤트로 LCD 화면을 ON한다.
+            // 모든 이벤트가 끝나고, 메인화면으로 전환시 절전모드를 다시 동작시킨다.
+            Log.d(TAG, "[ctrlLCDOnOff] bOn [" + bOn + "]");
+            if (bOn) {
+                PowerManager mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
+                Log.d(TAG, "[ctrlLCDOnOff] Screen On: " + mPowerManager.isScreenOn());
+                mV40IF.WpdInterfaceOpen();
+                mV40IF.LcdWakeUp(); // 절전상태일 경우, jni LcdWakeUp 먼저 호출
+                mV40IF.WpdInterfaceClose();
+
+                sendHandlerMsg(HANDLERMSG.FLAG_KEEP_SCREEN_ON, 0, 0);
+            }
+            else {
+                sendHandlerMsg(HANDLERMSG.FLAG_KEEP_SCREEN_ON, 0, 0);
+            }
+            return true;
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+            return false;
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] ctrlLCDOnOff(bOn)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+            return false;
+        }
+    }
+
+    // MainActivity Handler
+    public final class HANDLERMSG {
+        public final static int FLAG_KEEP_SCREEN_ON = 100;
+        public final static int SHOW_NEXT_PICTURE = 200;
+    }
+
+    public Handler MainHandler = new Handler(Looper.getMainLooper()) {
+        public void handleMessage(Message msg) {
+            Log.d(TAG, "[MainHandler] MainHandler : what [" + msg.what + "], arg1 [" + msg.arg1 + "], arg2 [" + msg.arg2 + "]");
+            switch (msg.what) {
+                case HANDLERMSG.FLAG_KEEP_SCREEN_ON:
+                    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+                    break;
+
+                case HANDLERMSG.SHOW_NEXT_PICTURE:
+                    ShowNextImage();
+                    break;
+
+                default:
+                    Log.d(TAG, "MainHandler : " + msg.what);
+                    break;
+            }
+        }
+    };
+
+    public void sendHandlerMsg(int what, int arg1, int arg2) {
+        try {
+//            Log.i(TAG, "[sendHandlerMsg] what [" + what + "], arg1 [" + arg1 + "], arg2 [" + arg2 + "]");
+            Message HandleMsg = MainHandler.obtainMessage();
+            HandleMsg.what = what;
+            HandleMsg.arg1 = arg1;
+            HandleMsg.arg2 = arg2;
+            MainHandler.sendMessage(HandleMsg);
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] sendHandlerMsg(msg)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void sendHandlerMsgDelayed(int what, int arg1, int arg2, long delay) {
+        try {
+//            Log.i(TAG, "[sendHandlerMsgDelayed] what [" + what + "], arg1 [" + arg1 + "], arg2 [" + arg2 + "], delay [" + delay + "]");
+            Message HandleMsg = MainHandler.obtainMessage();
+            HandleMsg.what = what;
+            HandleMsg.arg1 = arg1;
+            HandleMsg.arg2 = arg2;
+            MainHandler.sendMessageDelayed(HandleMsg, delay);
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] sendHandlerMsgDelayed(msg)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+}

+ 397 - 0
AutoPicture/src/main/java/kr/co/icontrols/v40ioctl/V40IF.java

@@ -0,0 +1,397 @@
+package kr.co.icontrols.v40ioctl;
+
+import android.os.Build;
+import android.util.Log;
+
+import com.util.LogUtil;
+
+public class V40IF {
+
+    String TAG = "V40IF";
+
+    boolean bLOG = true;
+
+    private void LOG(String log) {
+        if (bLOG) Log.v(TAG, log);
+    }
+
+    boolean bLOG_DEBUG = false;
+
+    private void LOG_DEBUG(String log) {
+        if (bLOG_DEBUG) Log.d(TAG, log);
+    }
+
+    boolean bLOG_INFO = true;
+
+    private void LOG_INFO(String log) {
+        if (bLOG_INFO) Log.i(TAG, log);
+    }
+
+    private V40IOInterface mV40IOIF = null;
+    private V40IOInterface2 mV40IOIF_NOUGAT = null;
+
+    public V40IF() {
+        try {
+            if (Build.VERSION.SDK_INT > 23) mV40IOIF_NOUGAT = new V40IOInterface2();
+            else mV40IOIF = new V40IOInterface();
+        } catch (RuntimeException re) {
+            Log.e(TAG, re.toString());
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] V40IF()");
+            ////e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public int WpdInterfaceOpen() {
+        try {
+            if (Build.VERSION.SDK_INT > 23) {
+                if(mV40IOIF_NOUGAT!=null)
+                    return mV40IOIF_NOUGAT.WpdInterfaceOpen();
+                else return -99;
+            }
+            else {
+                if(mV40IOIF!=null)
+                    return mV40IOIF.WpdInterfaceOpen();
+                else return -99;
+            }
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+            return -99;
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] WpdInterfaceOpen()");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+            return -99;
+        }
+    }
+
+    public int WpdInterfaceClose() {
+        try {
+            if (Build.VERSION.SDK_INT > 23) {
+                if(mV40IOIF_NOUGAT!=null)
+                    return mV40IOIF_NOUGAT.WpdInterfaceClose();
+                else return -99;
+            }
+            else {
+                if(mV40IOIF!=null)
+                    return mV40IOIF.WpdInterfaceClose();
+                return -99;
+            }
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+            return -99;
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] WpdInterfaceClose()");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+            return -99;
+        }
+    }
+
+    public int WpdInterfaceControl(int cmd, int arg) {
+        try {
+            if (Build.VERSION.SDK_INT > 23) return mV40IOIF_NOUGAT.WpdInterfaceControl(cmd, arg);
+            else return mV40IOIF.WpdInterfaceControl(cmd, arg);
+        }catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+            return -99;
+        }  catch (Exception e) {
+            Log.e(TAG, "[Exception] WpdInterfaceControl(int cmd, int arg)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+            return -99;
+        }
+    }
+
+    public void SetMacAddr(String mac) {
+        try {
+            if (Build.VERSION.SDK_INT > 23) mV40IOIF_NOUGAT.SetMacAddr(mac);
+            else mV40IOIF.SetMacAddr(mac);
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] SetMacAddr(String mac)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void IpAddr(String ip) {
+        try {
+            if (Build.VERSION.SDK_INT > 23) mV40IOIF_NOUGAT.IpAddr(ip);
+            else mV40IOIF.IpAddr(ip);
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] IpAddr(String ip)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void GatewayIp(String gw) {
+        try {
+            if (Build.VERSION.SDK_INT > 23) mV40IOIF_NOUGAT.GatewayIp(gw);
+            else mV40IOIF.GatewayIp(gw);
+        }catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        }  catch (Exception e) {
+            Log.e(TAG, "[Exception] GatewayIp(String gw)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void NetMask(String mask) {
+        try {
+            if (Build.VERSION.SDK_INT > 23) mV40IOIF_NOUGAT.NetMask(mask);
+            else mV40IOIF.NetMask(mask);
+        }catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        }  catch (Exception e) {
+            Log.e(TAG, "[Exception] NetMask(String mask)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void NetAll(String ip, String mask, String gw, String mac) {
+        try {
+            if (Build.VERSION.SDK_INT > 23) mV40IOIF_NOUGAT.NetAll(ip, mask, gw, mac);
+            else mV40IOIF.NetAll(ip, mask, gw, mac);
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] NetAll(String ip, String mask, String gw, String mac)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void LiveUpdate() {
+        try {
+            if (Build.VERSION.SDK_INT > 23) mV40IOIF_NOUGAT.LiveUpdate();
+            else mV40IOIF.LiveUpdate();
+        }catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] LiveUpdate()");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void UsbUpdate() {
+        try {
+            if (Build.VERSION.SDK_INT > 23) mV40IOIF_NOUGAT.UsbUpdate();
+            else mV40IOIF.UsbUpdate();
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] UsbUpdate()");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public int LcdWakeUp() {
+        try {
+            if (Build.VERSION.SDK_INT > 23) return mV40IOIF_NOUGAT.LcdWakeUp();
+            else return mV40IOIF.LcdWakeUp();
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+            return -99;
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] LcdWakeUp()");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+            return -99;
+        }
+    }
+
+    public void Reboot(int sec) {
+        try {
+            if (Build.VERSION.SDK_INT > 23) mV40IOIF_NOUGAT.Reboot(sec);
+            else mV40IOIF.Reboot(sec);
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] Reboot(int sec)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void NetDns1(String dns) {
+        try {
+            if (Build.VERSION.SDK_INT > 23) mV40IOIF_NOUGAT.NetDns1(dns);
+            else mV40IOIF.NetDns1(dns);
+        }catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        }  catch (Exception e) {
+            Log.e(TAG, "[Exception] NetDns1(String dns)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void NetDns2(String dns) {
+        try {
+            if (Build.VERSION.SDK_INT > 23) mV40IOIF_NOUGAT.NetDns2(dns);
+            else mV40IOIF.NetDns2(dns);
+        }catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        }  catch (Exception e) {
+            Log.e(TAG, "[Exception] NetDns2(String dns)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public int sensorread() {
+        try {
+            if (Build.VERSION.SDK_INT > 23) return mV40IOIF_NOUGAT.sensorread();
+            else return mV40IOIF.sensorread();
+        }catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+            return -99;
+        }  catch (Exception e) {
+            Log.e(TAG, "[Exception] sensorread()");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+            return -99;
+        }
+    }
+
+    public int setLcdWakeUp() {
+        try {
+            if (Build.VERSION.SDK_INT > 23) return mV40IOIF_NOUGAT.LcdWakeUp();
+            else return mV40IOIF.LcdWakeUp();
+        }catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+            return -99;
+        }  catch (Exception e) {
+            Log.e(TAG, "[Exception] setLcdWakeUp()");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+            return -99;
+        }
+    }
+
+    public void setDns(String dns1, String dns2) {
+        try {
+            Log.i(TAG, "[setDns] DNS1 : " + dns1 + " / DNS2 : " + dns2);
+            NetDns1(dns1);
+            NetDns2(dns2);
+        }catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        }  catch (Exception e) {
+            Log.e(TAG, "[Exception] setDns(String dns1, String dns2)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void setV40Reboot(int sec) {
+        try {
+            Log.i(TAG, "[setV40Reboot] V40 Device will reboot : " +sec + " second !!!");
+            Reboot(sec);
+        }catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        }  catch (Exception e) {
+            Log.e(TAG, "[Exception] setV40Reboot(int sec)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void setMACAddress(String strMAC) {
+        try {
+            Log.i(TAG, "[setMACAddress] strMAC [" + strMAC+ "]");
+            SetMacAddr(strMAC);
+        }catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        }  catch (Exception e) {
+            Log.e(TAG, "[Exception] setMACAddress(String strMAC)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void setIPAddress(String strIP) {
+        try {
+            Log.i(TAG, "[setIPAddress] strIP [" + strIP + "]");
+            IpAddr(strIP);
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] setIPAddress(String strIP)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void setNetmaskAddress(String strNetmask) {
+        try {
+            Log.i(TAG, "[setNetmaskAddress] strNetmask [" + strNetmask + "]");
+            NetMask(strNetmask);
+        }catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        }  catch (Exception e) {
+            Log.e(TAG, "[Exception] setNetmaskAddress(String strNetmask)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void setGatewayAddress(String strGateway) {
+        try {
+            Log.i(TAG, "[setGatewayAddress] strGateway [" + strGateway+ "]");
+            GatewayIp(strGateway);
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] setGatewayAddress(String strGateway)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void setNetworkInterface(String strIP, String strNetmask, String strGateway, String strMAC) {
+        try {
+            Log.i(TAG, "[setNetworkInterface] strIP [" + strIP+ "], strNetmask [" + strNetmask+ "], strGateway [" + strGateway+ "], strMAC [" + strMAC+ "]");
+
+            NetAll(strIP, strNetmask, strGateway, strMAC);
+        }catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        }  catch (Exception e) {
+            Log.e(TAG, "[Exception] setNetworkInterface(String strIP, String strNetmask, String strGateway, String strDNS, String strMAC)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void setNetworkInterface(String strIP, String strNetmask, String strGateway, String strDNS, String strMAC) {
+        try {
+            Log.i(TAG, "[setNetworkInterface] strIP [" + strIP+ "], strNetmask [" + strNetmask+ "], strGateway [" + strGateway+ "], strDNS [" + strDNS+ "], strMAC [" + strMAC+ "]");
+
+            IpAddr(strIP);
+            NetMask(strNetmask);
+            GatewayIp(strGateway);
+            // DNS 설정 JNI method는 아직 없음(2018.02.26)
+            SetMacAddr(strMAC);
+        } catch (RuntimeException re) {
+            LogUtil.errorLogInfo("", TAG, re);
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] setNetworkInterface(String strIP, String strNetmask, String strGateway, String strDNS, String strMAC)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+
+
+
+}

+ 29 - 0
AutoPicture/src/main/java/kr/co/icontrols/v40ioctl/V40IOInterface.java

@@ -0,0 +1,29 @@
+package kr.co.icontrols.v40ioctl;
+
+public class V40IOInterface {
+
+    String TAG = "V40IOInterface";
+
+    static {
+        System.loadLibrary("wpd_v40interface-jni");
+    }
+
+    public native int WpdInterfaceOpen();
+
+    public native int WpdInterfaceClose();
+
+    public native int WpdInterfaceControl(int cmd, int arg);
+
+    public native void SetMacAddr(String mac);
+    public native void IpAddr(String ip);
+    public native void GatewayIp(String gw);
+    public native void NetMask(String mask);
+    public native void NetAll(String ip, String mask, String gw, String mac);
+    public native void LiveUpdate();
+    public native void UsbUpdate();
+    public native int LcdWakeUp();
+    public native void Reboot(int sec);
+    public native void NetDns1(String dns);
+    public native void NetDns2(String dns);
+    public native int sensorread();
+}

+ 201 - 0
AutoPicture/src/main/java/kr/co/icontrols/v40ioctl/V40IOInterface2.java

@@ -0,0 +1,201 @@
+package kr.co.icontrols.v40ioctl;
+
+import android.util.Log;
+
+import com.util.LogUtil;
+
+public class V40IOInterface2 {
+
+    private static final String TAG = "V40IOInterface2";
+
+    static{
+		System.loadLibrary("wpd_v40interface2-jni");
+    }
+
+	public native int WpdInterfaceOpen();
+
+	public native int WpdInterfaceClose();
+
+	public native int WpdInterfaceControl(int cmd, int arg);
+
+    public native void SetMacAddr(String mac);
+    public native void IpAddr(String ip);
+    public native void GatewayIp(String gw);
+    public native void NetMask(String mask);
+    public native void NetAll(String ip, String mask, String gw, String mac);
+    public native void LiveUpdate();
+    public native void UsbUpdate();
+    public native int LcdWakeUp();
+    public native void Reboot(int sec);
+	public native void NetDns1(String dns);
+	public native void NetDns2(String dns);
+	public native int sensorread();
+
+    public void setLcdWakeUp() {
+		LcdWakeUp();
+	}
+
+	public void setDns(String dns1, String dns2)
+	{
+		NetDns1(dns1);
+		NetDns2(dns2);
+		Log.i(TAG, "V40 SET DNS IP#1 : " + dns1 + " / DNS IP#2 : " + dns2);
+	}
+
+	public void setV40Reboot(int sec)
+	{
+		Log.i(TAG, "V40 Device will reboot : " +sec + " second !!!");
+		Reboot(sec);
+	}
+
+    public void setMACAddress(String strMAC) {
+        try
+		{
+            Log.i(TAG, "[setMACAddress] strMAC [" + strMAC+ "]");
+            SetMacAddr(strMAC);
+
+        }
+		catch (RuntimeException re) {
+			Log.e(TAG, re.toString());
+		}
+		catch (Exception e)
+		{
+            Log.e(TAG, "[Exception] setMACAddress(String strMAC)");
+            //e.printStackTrace();            
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void setIPAddress(String strIP) {
+        try
+		{
+			Log.i(TAG, "[setIPAddress] strIP [" + strIP + "]");
+			IpAddr(strIP);
+		}
+		catch (RuntimeException re) {
+			Log.e(TAG, re.toString());
+		}
+		catch (Exception e)
+		{
+            Log.e(TAG, "[Exception] setIPAddress(String strIP)");
+            //e.printStackTrace();            
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void setNetmaskAddress(String strNetmask) {
+        try
+		{
+			Log.i(TAG, "[setNetmaskAddress] strNetmask [" + strNetmask + "]");
+			NetMask(strNetmask);
+		}
+		catch (RuntimeException re) {
+			Log.e(TAG, re.toString());
+		}
+		catch (Exception e)
+		{
+            Log.e(TAG, "[Exception] setNetmaskAddress(String strNetmask)");
+            //e.printStackTrace();            
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    public void setGatewayAddress(String strGateway) {
+        try
+		{
+            Log.i(TAG, "[setGatewayAddress] strGateway [" + strGateway+ "]");
+			GatewayIp(strGateway);
+        }
+		catch (RuntimeException re) {
+			Log.e(TAG, re.toString());
+		}
+		catch (Exception e)
+		{
+            Log.e(TAG, "[Exception] setGatewayAddress(String strGateway)");
+            //e.printStackTrace();            
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    /*public void setNetworkInterface(String strIP, String strNetmask, String strGateway, String strDNS) {
+        try
+		{
+            Log.i(TAG, "[setNetworkInterface] strIP [" + strIP+ "], strNetmask [" + strNetmask+ "], strGateway [" + strGateway+ "], strDNS [" + strDNS+ "]");
+
+            IpAddr(strIP);
+            NetMask(strNetmask);
+            GatewayIp(strGateway);
+			Reboot(5);
+        }
+        catch (Exception e)
+		{
+            Log.e(TAG, "[Exception] setNetworkInterface(String strIP, String strNetmask, String strGateway, String strDNS)");
+            //e.printStackTrace();            
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }*/
+
+	/**
+	 * V40 JNI를 이용한 IP 설정<br>
+	 * NetAll(strIP, strNetmask, strGateway, strMAC) 사용<br>
+	 * Reboot(5 sec) 설정<br>
+	 *
+	 * @param strIP 설정하고자 하는 IP
+	 * @param strNetmask 설정하고자 하는 Netmask
+	 * @param strGateway 설정하고자 하는 Gateway
+	 * @param strMAC 설정하고자 하는 Mac address
+	 */
+	public void setNetworkInterface(String strIP, String strNetmask, String strGateway, String strMAC) {
+		try
+		{
+			Log.i(TAG, "[setNetworkInterface] strIP [" + strIP+ "], strNetmask [" + strNetmask+ "], strGateway [" + strGateway+ "], strMAC [" + strMAC+ "]");
+
+			NetAll(strIP, strNetmask, strGateway, strMAC);
+		}
+		catch (RuntimeException re) {
+			Log.e(TAG, re.toString());
+		}
+		catch (Exception e)
+		{
+			Log.e(TAG, "[Exception] setNetworkInterface(String strIP, String strNetmask, String strGateway, String strDNS, String strMAC)");
+			//e.printStackTrace();            
+            LogUtil.errorLogInfo("", TAG, e);
+		}
+	}
+
+	/**
+	 * V40 JNI를 이용한 IP 설정<br>
+	 * DNS 설정 JNI method 미구현 버전<br>
+	 * Reboot(5 sec) 설정<br>
+	 *
+	 * @param strIP 설정하고자 하는 IP
+	 * @param strNetmask 설정하고자 하는 Netmask
+	 * @param strGateway 설정하고자 하는 Gateway
+	 * @param strDNS (사용안함)
+	 * @param strMAC 설정하고자 하는 Mac address
+	 */
+    public void setNetworkInterface(String strIP, String strNetmask, String strGateway, String strDNS, String strMAC) {
+        try
+		{
+            Log.i(TAG, "[setNetworkInterface] strIP [" + strIP+ "], strNetmask [" + strNetmask+ "], strGateway [" + strGateway+ "], strDNS [" + strDNS+ "], strMAC [" + strMAC+ "]");
+
+            IpAddr(strIP);
+            NetMask(strNetmask);
+            GatewayIp(strGateway);
+            // DNS 설정 JNI method는 아직 없음(2018.02.26)
+            SetMacAddr(strMAC);
+        }
+		catch (RuntimeException re) {
+			Log.e(TAG, re.toString());
+		}
+		catch (Exception e)
+		{
+            Log.e(TAG, "[Exception] setNetworkInterface(String strIP, String strNetmask, String strGateway, String strDNS, String strMAC)");
+            //e.printStackTrace();            
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+
+
+}

BIN
AutoPicture/src/main/jniLibs/armeabi-v7a/libgle.so


BIN
AutoPicture/src/main/jniLibs/armeabi-v7a/libserial_port.so


BIN
AutoPicture/src/main/jniLibs/armeabi-v7a/libwpd_a20interface-jni.so


BIN
AutoPicture/src/main/jniLibs/armeabi-v7a/libwpd_v40interface-jni.so


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


BIN
AutoPicture/src/main/jniLibs/armeabi-v7a/libwpddevctr.so


BIN
AutoPicture/src/main/jniLibs/armeabi/libgle.so


BIN
AutoPicture/src/main/jniLibs/armeabi/libserial_port.so


BIN
AutoPicture/src/main/jniLibs/armeabi/libwpd_a20interface-jni.so


BIN
AutoPicture/src/main/jniLibs/armeabi/libwpd_v40interface-jni.so


BIN
AutoPicture/src/main/jniLibs/armeabi/libwpd_v40interface2-jni.so


BIN
AutoPicture/src/main/jniLibs/armeabi/libwpddevctr.so


+ 8 - 0
AutoPicture/src/main/res/anim/anim_in.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:interpolator="@android:anim/accelerate_interpolator"
+        android:fromXDelta="-100%"
+        android:toXDelta="0"
+        android:duration="1300"/>
+</set>

+ 8 - 0
AutoPicture/src/main/res/anim/anim_in_downup.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:interpolator="@android:anim/accelerate_interpolator"
+        android:fromYDelta="100%"
+        android:toYDelta="0"
+        android:duration="1300"/>
+</set>

+ 8 - 0
AutoPicture/src/main/res/anim/anim_in_updown.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:interpolator="@android:anim/accelerate_interpolator"
+        android:fromYDelta="-100%"
+        android:toYDelta="0"
+        android:duration="1300"/>
+</set>

+ 8 - 0
AutoPicture/src/main/res/anim/anim_out.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:interpolator="@android:anim/accelerate_interpolator"
+        android:fromXDelta="0"
+        android:toXDelta="100%"
+        android:duration="1300"/>
+</set>

+ 8 - 0
AutoPicture/src/main/res/anim/anim_out_downup.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:interpolator="@android:anim/accelerate_interpolator"
+        android:fromYDelta="0"
+        android:toYDelta="-100%"
+        android:duration="1300"/>
+</set>

+ 8 - 0
AutoPicture/src/main/res/anim/anim_out_updown.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:interpolator="@android:anim/accelerate_interpolator"
+        android:fromYDelta="0"
+        android:toYDelta="100%"
+        android:duration="1300"/>
+</set>

BIN
AutoPicture/src/main/res/drawable-hdpi/ic_launcher.png


BIN
AutoPicture/src/main/res/drawable-mdpi/bg_popupalarm.png


BIN
AutoPicture/src/main/res/drawable-mdpi/but_ok.png


BIN
AutoPicture/src/main/res/drawable-mdpi/but_ok_p.png


BIN
AutoPicture/src/main/res/drawable-mdpi/but_popup_cancel.png


BIN
AutoPicture/src/main/res/drawable-mdpi/but_popup_cancel_p.png


BIN
AutoPicture/src/main/res/drawable-mdpi/ic_launcher.png


BIN
AutoPicture/src/main/res/drawable-mdpi/icon_recording.png


BIN
AutoPicture/src/main/res/drawable-xhdpi/ic_launcher.png


BIN
AutoPicture/src/main/res/drawable-xxhdpi/ic_launcher.png


+ 17 - 0
AutoPicture/src/main/res/layout/activity_main.xml

@@ -0,0 +1,17 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:paddingBottom="@dimen/activity_vertical_margin"
+    android:paddingLeft="@dimen/activity_horizontal_margin"
+    android:paddingRight="@dimen/activity_horizontal_margin"
+    android:paddingTop="@dimen/activity_vertical_margin"
+    tools:context=".MainActivity" >
+
+    <RelativeLayout
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent" >
+
+    </RelativeLayout>
+
+</RelativeLayout>

+ 9 - 0
AutoPicture/src/main/res/menu/main.xml

@@ -0,0 +1,9 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <item
+        android:id="@+id/action_settings"
+        android:orderInCategory="100"
+        android:showAsAction="never"
+        android:title="@string/action_settings"/>
+
+</menu>

BIN
AutoPicture/src/main/res/mipmap-hdpi/ic_launcher.png


BIN
AutoPicture/src/main/res/mipmap-mdpi/ic_launcher.png


BIN
AutoPicture/src/main/res/mipmap-xhdpi/ic_launcher.png


BIN
AutoPicture/src/main/res/mipmap-xxhdpi/ic_launcher.png


BIN
AutoPicture/src/main/res/mipmap-xxxhdpi/ic_launcher.png


+ 8 - 0
AutoPicture/src/main/res/values-sw600dp/dimens.xml

@@ -0,0 +1,8 @@
+<resources>
+
+    <!--
+         Customize dimensions originally defined in res/values/dimens.xml (such as
+         screen margins) for sw600dp devices (e.g. 7" tablets) here.
+    -->
+
+</resources>

+ 9 - 0
AutoPicture/src/main/res/values-sw720dp-land/dimens.xml

@@ -0,0 +1,9 @@
+<resources>
+
+    <!--
+         Customize dimensions originally defined in res/values/dimens.xml (such as
+         screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+    -->
+    <dimen name="activity_horizontal_margin">128dp</dimen>
+
+</resources>

+ 11 - 0
AutoPicture/src/main/res/values-v11/styles.xml

@@ -0,0 +1,11 @@
+<resources>
+
+    <!--
+        Base application theme for API 11+. This theme completely replaces
+        AppBaseTheme from res/values/styles.xml on API 11+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
+        <!-- API 11 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 12 - 0
AutoPicture/src/main/res/values-v14/styles.xml

@@ -0,0 +1,12 @@
+<resources>
+
+    <!--
+        Base application theme for API 14+. This theme completely replaces
+        AppBaseTheme from BOTH res/values/styles.xml and
+        res/values-v11/styles.xml on API 14+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
+        <!-- API 14 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 7 - 0
AutoPicture/src/main/res/values/dimens.xml

@@ -0,0 +1,7 @@
+<resources>
+
+    <!-- Default screen margins, per the Android Design guidelines. -->
+    <dimen name="activity_horizontal_margin">16dp</dimen>
+    <dimen name="activity_vertical_margin">16dp</dimen>
+
+</resources>

+ 8 - 0
AutoPicture/src/main/res/values/strings.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">AutoPicture</string>
+    <string name="action_settings">Settings</string>
+    <string name="hello_world">Hello world!</string>
+
+</resources>

+ 26 - 0
AutoPicture/src/main/res/values/styles.xml

@@ -0,0 +1,26 @@
+<resources>
+
+    <!--
+        Base application theme, dependent on API level. This theme is replaced
+        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Light">
+        <!--
+            Theme customizations available in newer API levels can go in
+            res/values-vXX/styles.xml, while customizations related to
+            backward-compatibility can go here.
+        -->
+    </style>
+
+    <!-- Application theme. -->
+    <style name="AppTheme" parent="AppBaseTheme">
+        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+    </style>
+
+    <style name="Theme.PopupActivity" parent="android:style/Theme.Dialog">
+        <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowIsFloating">true</item>
+    </style>
+
+</resources>

BIN
AutoPicture/src/release/hdc_icon-web.png


BIN
AutoPicture/src/release/ic_launcher-web.png


BIN
AutoPicture/src/release/res/mipmap-hdpi/hdc_icon.png


BIN
AutoPicture/src/release/res/mipmap-hdpi/ic_launcher.png


BIN
AutoPicture/src/release/res/mipmap-mdpi/hdc_icon.png


BIN
AutoPicture/src/release/res/mipmap-mdpi/ic_launcher.png


BIN
AutoPicture/src/release/res/mipmap-xhdpi/hdc_icon.png


BIN
AutoPicture/src/release/res/mipmap-xhdpi/ic_launcher.png


BIN
AutoPicture/src/release/res/mipmap-xxhdpi/hdc_icon.png


BIN
AutoPicture/src/release/res/mipmap-xxhdpi/ic_launcher.png


BIN
AutoPicture/src/release/res/mipmap-xxxhdpi/hdc_icon.png


BIN
AutoPicture/src/release/res/mipmap-xxxhdpi/ic_launcher.png


BIN
HDC_HN_RELEASE_KEY.jks


+ 88 - 0
LogOutputService/build.gradle

@@ -0,0 +1,88 @@
+apply plugin: 'com.android.application'
+
+// This buildscript{} block configures the code driving the build
+buildscript {
+    /**
+     * The nested repositories{} block declares that this build uses the
+     * jcenter repository.
+     */
+    repositories {
+        jcenter()
+        google()
+    }
+
+    /**
+     * This block declares a dependency on the 2.3.3 version
+     * of the Gradle plugin for the buildscript.
+     */
+    dependencies {
+        classpath 'com.android.tools.build:gradle:4.1.1'
+    }
+}
+
+allprojects {
+    repositories {
+        jcenter()
+        google()
+    }
+}
+
+apply plugin: 'com.android.application'
+
+android {
+    signingConfigs {
+        config {
+            keyAlias 'HDC_HN_RELEASE_KEY'
+            keyPassword 'hdchnsys1776'
+            storeFile file('../HDC_HN_RELEASE_KEY.jks')
+            storePassword 'hdchnsys1776'
+        }
+    }
+
+
+    compileSdkVersion 28
+
+    defaultConfig {
+        applicationId "com.artncore.apps.ic_wallpad.service.log"
+        minSdkVersion 17
+        targetSdkVersion 17
+    }
+
+    applicationVariants.all { variant ->
+        variant.outputs.all { output ->
+            outputFileName = new File("../", "LogOutputService.apk");
+        }
+    }
+
+    buildTypes {
+        release {
+            lintOptions {
+                disable 'MissingTranslation'
+                checkReleaseBuilds false
+                abortOnError false
+            }
+            signingConfig signingConfigs.config
+//            minifyEnabled true
+//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+        release_secured {
+            lintOptions {
+                disable 'MissingTranslation'
+                checkReleaseBuilds false
+                abortOnError false
+            }
+            signingConfig signingConfigs.config
+            minifyEnabled true
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+        debug {
+            signingConfig signingConfigs.config
+        }
+    }
+}
+
+dependencies {
+    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
+    implementation files('libs/WallPadAPI.jar')
+    implementation files('libs/WallPadSupport.jar')
+}

BIN
LogOutputService/libs/WallPadAPI.jar


BIN
LogOutputService/libs/WallPadAPIforSVC.jar


BIN
LogOutputService/libs/WallPadSupport.jar


+ 28 - 0
LogOutputService/src/main/AndroidManifest.xml

@@ -0,0 +1,28 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.artncore.apps.ic_wallpad.service.log"
+    android:versionCode="24"
+    android:versionName="2021.03.26.01">
+
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+
+    <application
+        android:allowBackup="true"
+        android:icon="@mipmap/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/AppTheme" >
+
+        <service
+            android:name=".LogOutputService"
+            android:enabled="true" 
+            android:exported="true"
+            android:process=":remote"
+            >
+            <intent-filter>
+                <action android:name="com.artncore.apps.ic_wallpad.service.log.remotestub.RemoteInterface" />
+            </intent-filter>
+        </service>
+
+    </application>
+
+</manifest>

BIN
LogOutputService/src/main/ic_launcher-web.png


+ 70 - 0
LogOutputService/src/main/java/com/artncore/apps/ic_wallpad/service/log/LogOutputService.java

@@ -0,0 +1,70 @@
+package com.artncore.apps.ic_wallpad.service.log;
+
+
+import android.app.Service;
+import android.content.Intent;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.os.IBinder;
+import android.util.Log;
+
+import com.artncore.commons.define;
+
+import kr.co.icontrols.wallpadsupport.Version;
+
+
+public class LogOutputService extends Service
+{
+    private static final String TAG = "LogOutputService";
+
+    /**
+     * 생성자
+     */
+    @Override
+    public void onCreate()
+    {
+        super.onCreate();
+
+        // 1. 로그메시지 출력
+        Log.i("Version", "START - WallPadDevService");
+        String version = null;
+        try {
+            PackageInfo i =  this.getPackageManager().getPackageInfo(this.getPackageName(), 0);
+            version = i.versionName;
+        } catch(NameNotFoundException e) {
+            Log.i("Version", "NameNotFoundException");
+        }
+        Log.i("Version", "<><><><>  Applications   Version = [" + version + "] " + "<><><><>");
+        Version.LogOut();
+        Log.i("Version", "<><><><>  WallPadAPI     Version = [" + define.WALLPADAPI_VERSION + "] " + "<><><><>");
+    }
+
+    /**
+     * onStartCommand
+     */
+    @Override
+    public int onStartCommand(Intent intent, int flags, int startId)
+    {
+        return START_STICKY; // run until explicitly stopped.
+    }
+
+    /**
+     * onDestroy
+     */
+    @Override
+    public void onDestroy()
+    {
+        super.onDestroy();
+
+        Log.i(TAG, "onDestroy()");
+    }
+
+    /**
+     * onBind
+     */
+    @Override
+    public IBinder onBind(Intent intent)
+    {
+        return null;
+    }
+}

BIN
LogOutputService/src/main/res/drawable-hdpi/ic_launcher.png


BIN
LogOutputService/src/main/res/drawable-mdpi/ic_launcher.png


BIN
LogOutputService/src/main/res/drawable-xhdpi/ic_launcher.png


BIN
LogOutputService/src/main/res/mipmap-hdpi/ic_launcher.png


BIN
LogOutputService/src/main/res/mipmap-mdpi/ic_launcher.png


BIN
LogOutputService/src/main/res/mipmap-xhdpi/ic_launcher.png


BIN
LogOutputService/src/main/res/mipmap-xxhdpi/ic_launcher.png


BIN
LogOutputService/src/main/res/mipmap-xxxhdpi/ic_launcher.png


+ 11 - 0
LogOutputService/src/main/res/values-v11/styles.xml

@@ -0,0 +1,11 @@
+<resources>
+
+    <!--
+        Base application theme for API 11+. This theme completely replaces
+        AppBaseTheme from res/values/styles.xml on API 11+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
+        <!-- API 11 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 12 - 0
LogOutputService/src/main/res/values-v14/styles.xml

@@ -0,0 +1,12 @@
+<resources>
+
+    <!--
+        Base application theme for API 14+. This theme completely replaces
+        AppBaseTheme from BOTH res/values/styles.xml and
+        res/values-v11/styles.xml on API 14+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
+        <!-- API 14 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 5 - 0
LogOutputService/src/main/res/values/strings.xml

@@ -0,0 +1,5 @@
+<resources>
+
+    <string name="app_name">LogOutputService</string>
+
+</resources>

+ 20 - 0
LogOutputService/src/main/res/values/styles.xml

@@ -0,0 +1,20 @@
+<resources>
+
+    <!--
+        Base application theme, dependent on API level. This theme is replaced
+        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Light">
+        <!--
+            Theme customizations available in newer API levels can go in
+            res/values-vXX/styles.xml, while customizations related to
+            backward-compatibility can go here.
+        -->
+    </style>
+
+    <!-- Application theme. -->
+    <style name="AppTheme" parent="AppBaseTheme">
+        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+    </style>
+
+</resources>

+ 87 - 0
ManagerSetting/build.gradle

@@ -0,0 +1,87 @@
+// This buildscript{} block configures the code driving the build
+buildscript {
+    /**
+     * The nested repositories{} block declares that this build uses the
+     * jcenter repository.
+     */
+    repositories {
+        jcenter()
+        google()
+    }
+
+    /**
+     * This block declares a dependency on the 2.3.3 version
+     * of the Gradle plugin for the buildscript.
+     */
+    dependencies {
+        classpath 'com.android.tools.build:gradle:4.1.1'
+    }
+}
+
+allprojects {
+    repositories {
+        google()
+        jcenter()
+    }
+}
+
+apply plugin: 'com.android.application'
+
+android {
+    signingConfigs {
+        config {
+            keyAlias 'HDC_HN_RELEASE_KEY'
+            keyPassword 'hdchnsys1776'
+            storeFile file('../HDC_HN_RELEASE_KEY.jks')
+            storePassword 'hdchnsys1776'
+        }
+    }
+
+    compileSdkVersion 28
+
+    defaultConfig {
+        applicationId "com.artncore.managersetting"
+        minSdkVersion 19 // 방문객원격통화 API 적용으로 upgrade
+        targetSdkVersion 19
+    }
+
+    applicationVariants.all { variant ->
+        variant.outputs.all { output ->
+            outputFileName = new File("../", "ManagerSetting.apk")
+        }
+    }
+    buildTypes {
+        release {
+            lintOptions {
+                disable 'MissingTranslation'
+                checkReleaseBuilds false
+                abortOnError false
+            }
+            signingConfig signingConfigs.config
+//            minifyEnabled true
+//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+        release_secured {
+            lintOptions {
+                disable 'MissingTranslation'
+                checkReleaseBuilds false
+                abortOnError false
+            }
+            signingConfig signingConfigs.config
+            minifyEnabled true
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+        debug {
+            signingConfig signingConfigs.config
+        }
+    }
+
+}
+
+dependencies {
+    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
+    implementation files('libs/WallPadAPI.jar')
+    implementation files('libs/WallPadSupport.jar')
+    implementation files('libs\\WallPadAPI.jar')
+    implementation files('libs\\WallPadAPI.jar')
+}

BIN
ManagerSetting/libs/WallPadAPI.jar


BIN
ManagerSetting/libs/WallPadSupport.jar


+ 61 - 0
ManagerSetting/src/main/AndroidManifest.xml

@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.artncore.managersetting"
+    android:versionCode="23"
+    android:versionName="2021.04.01.01">
+
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.CALL_PHONE" />
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
+    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
+    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
+    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
+    <uses-permission android:name="android.permission.CAMERA"/>
+    <uses-permission android:name="android.permission.INTERNET"/>
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
+
+
+    <application
+        android:name="MainApplication"
+        android:allowBackup="true"
+        android:icon="@mipmap/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/AppTheme" >
+        <activity
+            android:name="com.artncore.managersetting.ui.activities.MainActivity"
+            android:label="@string/app_name" 
+            android:launchMode="singleTop"
+            android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"
+            android:screenOrientation="landscape"
+            >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="com.artncore.managersetting.ui.activities.SetAddress"
+            android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"
+            android:screenOrientation="landscape"
+            >
+
+             <intent-filter>
+                <action android:name="android.intent.action.ADDRESS" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+
+        <activity
+            android:name=".ui.logfileviewer.LogFileViewer"
+            android:label="@string/title_item_detail"
+            android:excludeFromRecents="true"
+            android:theme="@android:style/Theme.Holo.Panel"
+            android:configChanges="orientation|screenSize"
+            android:screenOrientation="landscape" 
+            >
+        </activity>
+
+    </application>
+
+</manifest>

BIN
ManagerSetting/src/main/ic_launcher-web.png


+ 86 - 0
ManagerSetting/src/main/java/android/media/DecoderCapabilities.java

@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.media;
+
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * {@hide}
+ *
+ * The DecoderCapabilities class is used to retrieve the types of the
+ * video and audio decoder(s) supported on a specific Android platform.
+ */
+public class DecoderCapabilities
+{
+    /**
+     * The VideoDecoder class represents the type of a video decoder
+     *
+     */
+    public enum VideoDecoder {
+        VIDEO_DECODER_WMV,
+        VIDEO_DECODER_RV, // TELECHIPS
+    };
+
+    /**
+     * The AudioDecoder class represents the type of an audio decoder
+     */
+    public enum AudioDecoder {
+        AUDIO_DECODER_WMA,
+        AUDIO_DECODER_RA, // TELECHIPS
+    };
+
+    static {
+        System.loadLibrary("media_jni");
+        native_init();
+    }
+
+    /**
+     * Returns the list of video decoder types
+     * @see android.media.DecoderCapabilities.VideoDecoder
+     */
+    public static List<VideoDecoder> getVideoDecoders() {
+        List<VideoDecoder> decoderList = new ArrayList<VideoDecoder>();
+        int nDecoders = native_get_num_video_decoders();
+        for (int i = 0; i < nDecoders; ++i) {
+            decoderList.add(VideoDecoder.values()[native_get_video_decoder_type(i)]);
+        }
+        return decoderList;
+    }
+
+    /**
+     * Returns the list of audio decoder types
+     * @see android.media.DecoderCapabilities.AudioDecoder
+     */
+    public static List<AudioDecoder> getAudioDecoders() {
+        List<AudioDecoder> decoderList = new ArrayList<AudioDecoder>();
+        int nDecoders = native_get_num_audio_decoders();
+        for (int i = 0; i < nDecoders; ++i) {
+            decoderList.add(AudioDecoder.values()[native_get_audio_decoder_type(i)]);
+        }
+        return decoderList;
+    }
+
+    private DecoderCapabilities() {}  // Don't call me
+
+    // Implemented by JNI
+    private static native final void native_init();
+    private static native final int native_get_num_video_decoders();
+    private static native final int native_get_video_decoder_type(int index);
+    private static native final int native_get_num_audio_decoders();
+    private static native final int native_get_audio_decoder_type(int index);
+}

+ 400 - 0
ManagerSetting/src/main/java/android/media/MediaFile.java

@@ -0,0 +1,400 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.media;
+
+import android.content.ContentValues;
+import android.provider.MediaStore.Audio;
+import android.provider.MediaStore.Images;
+import android.provider.MediaStore.Video;
+import android.media.DecoderCapabilities;
+import android.media.DecoderCapabilities.VideoDecoder;
+import android.media.DecoderCapabilities.AudioDecoder;
+import android.mtp.MtpConstants;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * MediaScanner helper class.
+ *
+ * {@hide}
+ */
+public class MediaFile {
+
+    // Audio file types
+    public static final int FILE_TYPE_MP3     = 1;
+    public static final int FILE_TYPE_M4A     = 2;
+    public static final int FILE_TYPE_WAV     = 3;
+    public static final int FILE_TYPE_AMR     = 4;
+    public static final int FILE_TYPE_AWB     = 5;
+    public static final int FILE_TYPE_WMA     = 6;
+    public static final int FILE_TYPE_OGG     = 7;
+    public static final int FILE_TYPE_AAC     = 8;
+    public static final int FILE_TYPE_MKA     = 9;
+    public static final int FILE_TYPE_FLAC    = 10;
+    // TELECHIPS
+    public static final int FILE_TYPE_APE     = 11;
+    public static final int FILE_TYPE_RA      = 12;
+    public static final int FILE_TYPE_MP2     = 13;
+    private static final int FIRST_AUDIO_FILE_TYPE = FILE_TYPE_MP3;
+    private static final int LAST_AUDIO_FILE_TYPE = FILE_TYPE_MP2;
+
+    // MIDI file types
+    public static final int FILE_TYPE_MID     = 21;
+    public static final int FILE_TYPE_SMF     = 22;
+    public static final int FILE_TYPE_IMY     = 23;
+    private static final int FIRST_MIDI_FILE_TYPE = FILE_TYPE_MID;
+    private static final int LAST_MIDI_FILE_TYPE = FILE_TYPE_IMY;
+   
+    // Video file types
+    public static final int FILE_TYPE_MP4     = 31;
+    public static final int FILE_TYPE_M4V     = 32;
+    public static final int FILE_TYPE_3GPP    = 33;
+    public static final int FILE_TYPE_3GPP2   = 34;
+    public static final int FILE_TYPE_WMV     = 35;
+    public static final int FILE_TYPE_ASF     = 36;
+    public static final int FILE_TYPE_MKV     = 37;
+    public static final int FILE_TYPE_MP2TS   = 38;
+    public static final int FILE_TYPE_AVI     = 39;
+    public static final int FILE_TYPE_WEBM    = 40;
+    public static final int FILE_TYPE_RMVB    = 41;
+    public static final int FILE_TYPE_RM      = 42;
+    public static final int FILE_TYPE_MPG     = 43;
+    public static final int FILE_TYPE_VOB     = 44;
+    public static final int FILE_TYPE_MOV     = 45;
+    public static final int FILE_TYPE_TP      = 46;
+    public static final int FILE_TYPE_TRP     = 47;
+    public static final int FILE_TYPE_M2TS    = 48;
+    public static final int FILE_TYPE_FLV     = 49;
+    public static final int FILE_TYPE_DIVX    = 50;
+    public static final int FILE_TYPE_DAT     = 51;
+    public static final int FILE_TYPE_SVI     = 52;
+    public static final int FILE_TYPE_TS      = 53;
+    public static final int FILE_TYPE_OGM     = 54;
+    public static final int FILE_TYPE_SSIF    = 55;
+    private static final int FIRST_VIDEO_FILE_TYPE = FILE_TYPE_MP4;
+    private static final int LAST_VIDEO_FILE_TYPE = FILE_TYPE_SSIF;
+    
+    // More video file types
+    public static final int FILE_TYPE_MP2PS   = 200;
+    private static final int FIRST_VIDEO_FILE_TYPE2 = FILE_TYPE_MP2PS;
+    private static final int LAST_VIDEO_FILE_TYPE2 = FILE_TYPE_MP2PS;
+
+    // Image file types
+    public static final int FILE_TYPE_JPEG    = 61;
+    public static final int FILE_TYPE_GIF     = 62;
+    public static final int FILE_TYPE_PNG     = 63;
+    public static final int FILE_TYPE_BMP     = 64;
+    public static final int FILE_TYPE_WBMP    = 65;
+    public static final int FILE_TYPE_WEBP    = 66;
+    private static final int FIRST_IMAGE_FILE_TYPE = FILE_TYPE_JPEG;
+    private static final int LAST_IMAGE_FILE_TYPE = FILE_TYPE_WEBP;
+   
+    // Playlist file types
+    public static final int FILE_TYPE_M3U      = 71;
+    public static final int FILE_TYPE_PLS      = 72;
+    public static final int FILE_TYPE_WPL      = 73;
+    public static final int FILE_TYPE_HTTPLIVE = 74;
+
+    private static final int FIRST_PLAYLIST_FILE_TYPE = FILE_TYPE_M3U;
+    private static final int LAST_PLAYLIST_FILE_TYPE = FILE_TYPE_HTTPLIVE;
+
+    // Drm file types
+    public static final int FILE_TYPE_FL      = 81;
+    private static final int FIRST_DRM_FILE_TYPE = FILE_TYPE_FL;
+    private static final int LAST_DRM_FILE_TYPE = FILE_TYPE_FL;
+
+    // Other popular file types
+    public static final int FILE_TYPE_TEXT          = 100;
+    public static final int FILE_TYPE_HTML          = 101;
+    public static final int FILE_TYPE_PDF           = 102;
+    public static final int FILE_TYPE_XML           = 103;
+    public static final int FILE_TYPE_MS_WORD       = 104;
+    public static final int FILE_TYPE_MS_EXCEL      = 105;
+    public static final int FILE_TYPE_MS_POWERPOINT = 106;
+    public static final int FILE_TYPE_ZIP           = 107;
+    
+    public static class MediaFileType {
+        public final int fileType;
+        public final String mimeType;
+        
+        MediaFileType(int fileType, String mimeType) {
+            this.fileType = fileType;
+            this.mimeType = mimeType;
+        }
+    }
+    
+    private static final HashMap<String, MediaFileType> sFileTypeMap
+            = new HashMap<String, MediaFileType>();
+    private static final HashMap<String, Integer> sMimeTypeMap
+            = new HashMap<String, Integer>();
+    // maps file extension to MTP format code
+    private static final HashMap<String, Integer> sFileTypeToFormatMap
+            = new HashMap<String, Integer>();
+    // maps mime type to MTP format code
+    private static final HashMap<String, Integer> sMimeTypeToFormatMap
+            = new HashMap<String, Integer>();
+    // maps MTP format code to mime type
+    private static final HashMap<Integer, String> sFormatToMimeTypeMap
+            = new HashMap<Integer, String>();
+
+    static void addFileType(String extension, int fileType, String mimeType) {
+        sFileTypeMap.put(extension, new MediaFileType(fileType, mimeType));
+        sMimeTypeMap.put(mimeType, Integer.valueOf(fileType));
+    }
+
+    static void addFileType(String extension, int fileType, String mimeType, int mtpFormatCode) {
+        addFileType(extension, fileType, mimeType);
+        sFileTypeToFormatMap.put(extension, Integer.valueOf(mtpFormatCode));
+        sMimeTypeToFormatMap.put(mimeType, Integer.valueOf(mtpFormatCode));
+        sFormatToMimeTypeMap.put(mtpFormatCode, mimeType);
+    }
+
+    private static boolean isWMAEnabled() {
+        List<AudioDecoder> decoders = DecoderCapabilities.getAudioDecoders();
+        int count = decoders.size();
+        for (int i = 0; i < count; i++) {
+            AudioDecoder decoder = decoders.get(i);
+            if (decoder == AudioDecoder.AUDIO_DECODER_WMA) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private static boolean isWMVEnabled() {
+        List<VideoDecoder> decoders = DecoderCapabilities.getVideoDecoders();
+        int count = decoders.size();
+        for (int i = 0; i < count; i++) {
+            VideoDecoder decoder = decoders.get(i);
+            if (decoder == VideoDecoder.VIDEO_DECODER_WMV) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private static boolean isRAEnabled() {
+        List<AudioDecoder> decoders = DecoderCapabilities.getAudioDecoders();
+        for (AudioDecoder decoder: decoders) {
+            if (decoder == AudioDecoder.AUDIO_DECODER_RA) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private static boolean isRVEnabled() {
+        List<VideoDecoder> decoders = DecoderCapabilities.getVideoDecoders();
+        for (VideoDecoder decoder: decoders) {
+            if (decoder == VideoDecoder.VIDEO_DECODER_RV) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    static {
+        addFileType("MP3", FILE_TYPE_MP3, "audio/mpeg", MtpConstants.FORMAT_MP3);
+        addFileType("MPGA", FILE_TYPE_MP3, "audio/mpeg", MtpConstants.FORMAT_MP3);
+        addFileType("M4A", FILE_TYPE_M4A, "audio/mp4", MtpConstants.FORMAT_MPEG);
+        addFileType("WAV", FILE_TYPE_WAV, "audio/x-wav", MtpConstants.FORMAT_WAV);
+        addFileType("AMR", FILE_TYPE_AMR, "audio/amr");
+        addFileType("AWB", FILE_TYPE_AWB, "audio/amr-wb");
+        if (isWMAEnabled()) {
+            addFileType("WMA", FILE_TYPE_WMA, "audio/x-ms-wma", MtpConstants.FORMAT_WMA);
+        }
+        addFileType("OGG", FILE_TYPE_OGG, "audio/ogg", MtpConstants.FORMAT_OGG);
+        addFileType("OGG", FILE_TYPE_OGG, "application/ogg", MtpConstants.FORMAT_OGG);
+        addFileType("OGA", FILE_TYPE_OGG, "application/ogg", MtpConstants.FORMAT_OGG);
+        addFileType("AAC", FILE_TYPE_AAC, "audio/aac", MtpConstants.FORMAT_AAC);
+        addFileType("AAC", FILE_TYPE_AAC, "audio/aac-adts", MtpConstants.FORMAT_AAC);
+        addFileType("MKA", FILE_TYPE_MKA, "audio/x-matroska");
+        addFileType("MP2", FILE_TYPE_MP2, "audio/mpeg2");
+        addFileType("APE", FILE_TYPE_APE, "audio/x-ape");
+        if (isRAEnabled()) {
+            addFileType("RA", FILE_TYPE_RA, "audio/vnd.rn-realaudio");
+        }
+ 
+        addFileType("MID", FILE_TYPE_MID, "audio/midi");
+        addFileType("MIDI", FILE_TYPE_MID, "audio/midi");
+        addFileType("XMF", FILE_TYPE_MID, "audio/midi");
+        addFileType("RTTTL", FILE_TYPE_MID, "audio/midi");
+        addFileType("SMF", FILE_TYPE_SMF, "audio/sp-midi");
+        addFileType("IMY", FILE_TYPE_IMY, "audio/imelody");
+        addFileType("RTX", FILE_TYPE_MID, "audio/midi");
+        addFileType("OTA", FILE_TYPE_MID, "audio/midi");
+        addFileType("MXMF", FILE_TYPE_MID, "audio/midi");
+        
+        addFileType("MPEG", FILE_TYPE_MP4, "video/mpeg", MtpConstants.FORMAT_MPEG);
+        addFileType("MPG", FILE_TYPE_MP4, "video/mpeg", MtpConstants.FORMAT_MPEG);
+        addFileType("MP4", FILE_TYPE_MP4, "video/mp4", MtpConstants.FORMAT_MPEG);
+        addFileType("M4V", FILE_TYPE_M4V, "video/mp4", MtpConstants.FORMAT_MPEG);
+        addFileType("3GP", FILE_TYPE_3GPP, "video/3gpp",  MtpConstants.FORMAT_3GP_CONTAINER);
+        addFileType("3GPP", FILE_TYPE_3GPP, "video/3gpp", MtpConstants.FORMAT_3GP_CONTAINER);
+        addFileType("3G2", FILE_TYPE_3GPP2, "video/3gpp2", MtpConstants.FORMAT_3GP_CONTAINER);
+        addFileType("3GPP2", FILE_TYPE_3GPP2, "video/3gpp2", MtpConstants.FORMAT_3GP_CONTAINER);
+        addFileType("MKV", FILE_TYPE_MKV, "video/x-matroska");
+        addFileType("WEBM", FILE_TYPE_WEBM, "video/webm");
+        addFileType("TS", FILE_TYPE_MP2TS, "video/mp2ts");
+        addFileType("AVI", FILE_TYPE_AVI, "video/avi");
+        addFileType("OGM", FILE_TYPE_OGM, "video/ogg");
+
+        if (isWMVEnabled()) {
+            addFileType("WMV", FILE_TYPE_WMV, "video/x-ms-wmv", MtpConstants.FORMAT_WMV);
+            addFileType("ASF", FILE_TYPE_ASF, "video/x-ms-asf");
+        }
+    addFileType("M2V", FILE_TYPE_MPG, "video/mpeg", MtpConstants.FORMAT_MPEG);
+        addFileType("VOB", FILE_TYPE_VOB, "video/mpeg", MtpConstants.FORMAT_MPEG);
+        addFileType("MOV", FILE_TYPE_MOV, "video/quicktime");
+    addFileType("TP", FILE_TYPE_TP, "video/mpeg");
+    addFileType("TRP", FILE_TYPE_TRP, "video/mpeg");
+    addFileType("M2TS", FILE_TYPE_M2TS, "video/mp2t");
+        addFileType("SSIF", FILE_TYPE_SSIF, "video/ssif");
+        addFileType("FLV", FILE_TYPE_FLV, "video/x-flv");
+    addFileType("DIVX", FILE_TYPE_DIVX, "video/divx");
+    addFileType("DAT", FILE_TYPE_DAT, "video/mpeg");
+        addFileType("SVI", FILE_TYPE_SVI, "video/x-svi");
+        if (isRVEnabled()) {
+        addFileType("RMVB", FILE_TYPE_RMVB, "video/vnd.rn-realvideo");
+            addFileType("RM", FILE_TYPE_RM, "video/vnd.rn-realvideo");
+        }
+
+        addFileType("JPG", FILE_TYPE_JPEG, "image/jpeg", MtpConstants.FORMAT_EXIF_JPEG);
+        addFileType("JPEG", FILE_TYPE_JPEG, "image/jpeg", MtpConstants.FORMAT_EXIF_JPEG);
+        addFileType("GIF", FILE_TYPE_GIF, "image/gif", MtpConstants.FORMAT_GIF);
+        addFileType("PNG", FILE_TYPE_PNG, "image/png", MtpConstants.FORMAT_PNG);
+        addFileType("BMP", FILE_TYPE_BMP, "image/x-ms-bmp", MtpConstants.FORMAT_BMP);
+        addFileType("WBMP", FILE_TYPE_WBMP, "image/vnd.wap.wbmp");
+        addFileType("WEBP", FILE_TYPE_WEBP, "image/webp");
+ 
+        addFileType("M3U", FILE_TYPE_M3U, "audio/x-mpegurl", MtpConstants.FORMAT_M3U_PLAYLIST);
+        addFileType("M3U", FILE_TYPE_M3U, "application/x-mpegurl", MtpConstants.FORMAT_M3U_PLAYLIST);
+        addFileType("PLS", FILE_TYPE_PLS, "audio/x-scpls", MtpConstants.FORMAT_PLS_PLAYLIST);
+        addFileType("WPL", FILE_TYPE_WPL, "application/vnd.ms-wpl", MtpConstants.FORMAT_WPL_PLAYLIST);
+        addFileType("M3U8", FILE_TYPE_HTTPLIVE, "application/vnd.apple.mpegurl");
+        addFileType("M3U8", FILE_TYPE_HTTPLIVE, "audio/mpegurl");
+        addFileType("M3U8", FILE_TYPE_HTTPLIVE, "audio/x-mpegurl");
+
+        addFileType("FL", FILE_TYPE_FL, "application/x-android-drm-fl");
+
+        addFileType("TXT", FILE_TYPE_TEXT, "text/plain", MtpConstants.FORMAT_TEXT);
+        addFileType("HTM", FILE_TYPE_HTML, "text/html", MtpConstants.FORMAT_HTML);
+        addFileType("HTML", FILE_TYPE_HTML, "text/html", MtpConstants.FORMAT_HTML);
+        addFileType("PDF", FILE_TYPE_PDF, "application/pdf");
+        addFileType("DOC", FILE_TYPE_MS_WORD, "application/msword", MtpConstants.FORMAT_MS_WORD_DOCUMENT);
+        addFileType("XLS", FILE_TYPE_MS_EXCEL, "application/vnd.ms-excel", MtpConstants.FORMAT_MS_EXCEL_SPREADSHEET);
+        addFileType("PPT", FILE_TYPE_MS_POWERPOINT, "application/mspowerpoint", MtpConstants.FORMAT_MS_POWERPOINT_PRESENTATION);
+        addFileType("FLAC", FILE_TYPE_FLAC, "audio/flac", MtpConstants.FORMAT_FLAC);
+        addFileType("ZIP", FILE_TYPE_ZIP, "application/zip");
+        addFileType("MPG", FILE_TYPE_MP2PS, "video/mp2p");
+        addFileType("MPEG", FILE_TYPE_MP2PS, "video/mp2p");
+    }
+
+    public static boolean isAudioFileType(int fileType) {
+        return ((fileType >= FIRST_AUDIO_FILE_TYPE &&
+                fileType <= LAST_AUDIO_FILE_TYPE) ||
+                (fileType >= FIRST_MIDI_FILE_TYPE &&
+                fileType <= LAST_MIDI_FILE_TYPE));
+    }
+
+    public static boolean isVideoFileType(int fileType) {
+        return (fileType >= FIRST_VIDEO_FILE_TYPE &&
+                fileType <= LAST_VIDEO_FILE_TYPE)
+            || (fileType >= FIRST_VIDEO_FILE_TYPE2 &&
+                fileType <= LAST_VIDEO_FILE_TYPE2);
+    }
+
+    public static boolean isImageFileType(int fileType) {
+        return (fileType >= FIRST_IMAGE_FILE_TYPE &&
+                fileType <= LAST_IMAGE_FILE_TYPE);
+    }
+
+    public static boolean isPlayListFileType(int fileType) {
+        return (fileType >= FIRST_PLAYLIST_FILE_TYPE &&
+                fileType <= LAST_PLAYLIST_FILE_TYPE);
+    }
+
+    public static boolean isDrmFileType(int fileType) {
+        return (fileType >= FIRST_DRM_FILE_TYPE &&
+                fileType <= LAST_DRM_FILE_TYPE);
+    }
+
+    public static MediaFileType getFileType(String path) {
+        int lastDot = path.lastIndexOf(".");
+        if (lastDot < 0)
+            return null;
+        return sFileTypeMap.get(path.substring(lastDot + 1).toUpperCase());
+    }
+
+    public static boolean isMimeTypeMedia(String mimeType) {
+        int fileType = getFileTypeForMimeType(mimeType);
+        return isAudioFileType(fileType) || isVideoFileType(fileType)
+                || isImageFileType(fileType) || isPlayListFileType(fileType);
+    }
+
+    // generates a title based on file name
+    public static String getFileTitle(String path) {
+        // extract file name after last slash
+        int lastSlash = path.lastIndexOf('/');
+        if (lastSlash >= 0) {
+            lastSlash++;
+            if (lastSlash < path.length()) {
+                path = path.substring(lastSlash);
+            }
+        }
+        // truncate the file extension (if any)
+        int lastDot = path.lastIndexOf('.');
+        if (lastDot > 0) {
+            path = path.substring(0, lastDot);
+        }
+        return path;
+    }
+
+    public static int getFileTypeForMimeType(String mimeType) {
+        Integer value = sMimeTypeMap.get(mimeType);
+        return (value == null ? 0 : value.intValue());
+    }
+
+    public static String getMimeTypeForFile(String path) {
+        MediaFileType mediaFileType = getFileType(path);
+        return (mediaFileType == null ? null : mediaFileType.mimeType);
+    }
+
+    public static int getFormatCode(String fileName, String mimeType) {
+        if (mimeType != null) {
+            Integer value = sMimeTypeToFormatMap.get(mimeType);
+            if (value != null) {
+                return value.intValue();
+            }
+        }
+        int lastDot = fileName.lastIndexOf('.');
+        if (lastDot > 0) {
+            String extension = fileName.substring(lastDot + 1).toUpperCase();
+            Integer value = sFileTypeToFormatMap.get(extension);
+            if (value != null) {
+                return value.intValue();
+            }
+        }
+        return MtpConstants.FORMAT_UNDEFINED;
+    }
+
+    public static String getMimeTypeForFormatCode(int formatCode) {
+        return sFormatToMimeTypeMap.get(formatCode);
+    }
+}

+ 1344 - 0
ManagerSetting/src/main/java/com/artncore/deviceinterface/WallPadInterface.java

@@ -0,0 +1,1344 @@
+package com.artncore.deviceinterface;
+
+import android.annotation.SuppressLint;
+import android.os.Build;
+import android.os.Handler;
+import android.os.Message;
+import android.util.Log;
+
+import com.artncore.WallPadDataMgr.WallpadDeviceSet;
+import com.artncore.managersetting.domain.Const;
+import com.artncore.managersetting.ui.activities.MainActivity;
+import com.artncore.managersetting.ui.fragments.CheckEtcFragment;
+import com.artncore.wallpadapi.IGW300API;
+import com.artncore.wallpadapi.SmartKeyRfDoorAPI;
+import com.artncore.wallpadapi.WallPadAPI;
+import com.util.LogUtil;
+
+import kr.co.icontrols.v40ioctl.V40IF;
+import kr.co.icontrols.wallpadsupport.Version;
+
+public class WallPadInterface {
+    private static final String TAG = "WallPadInterface";
+
+    private static final boolean DEBUG = true;//false;
+
+
+    // I/O Control Interface start
+    public static final int IOCTL_DOOR_DINGDONG = 0xFF01;           // 현관폰 벨 제어
+    public static final int IOCTL_BTNEMR_LEDONOFF = 0xFF02;         // 비상 버튼 LED 제어
+    public static final int IOCTL_BTNCALL_LEDONOFF = 0xFF03;        // 통화 버튼 LED 제어
+    public static final int IOCTL_BTNOPEN_LEDONOFF = 0xFF04;        // 문열림 버튼 LED 제어
+    public static final int IOCTL_SUBTOUCH_POWERONOFF = 0xFF05;     // 터치 버튼 on/off 제어
+    public static final int IOCTL_VIDEOOUT_DOORONOFF = 0xFF06;      // 서브폰에 대한 영상 선택 제어
+    // 현관폰 통화시:
+    // 현관폰 영상을 서브폰으로 전송
+    // 세대간 MoIP 통화시:
+    // 월패드 카메라 영상을 서브폰으로 전송
+    public static final int IOCTL_CAMERA_POWERONOFF = 0xFF07;       // 카메라 power on/off 제어
+    public static final int IOCTL_SUBPHONE_MUTEONOFF = 0xFF08;      // 현관폰 or 서브폰 통화시 audio mute on/off 제어
+    public static final int IOCTL_DOOR_LOCK_OPEN_REGIS = 0xFF09;    // Door Lock 오픈/등록 제어
+    //  0: 도어락 등록
+    //  1: 도어락 오픈
+    public static final int IOCTL_RFREMOCON_RESET = 0xFF0A;         // RF 리모콘 on/off 제어
+    public static final int IOCTL_DOOR_POWERONOFF = 0xFF0B;         // 현관폰 power on/off 제어
+    public static final int IOCTL_FRONTHOME_LEDONOFF = 0xFF0C;      // Front led on/off 제어
+    public static final int IOCTL_FRONTEMR_LEDONOFF = 0xFF0D;       // Front led on/off 제어
+    public static final int IOCTL_BTNEMR_LED_TRIGGER    = 0xFF0E;   // 비상 버튼 LED 트리거 제어
+    public static final int IOCTL_DOOR_POWER_STATE      = 0xFF0F;   // DoorPhone Power State 읽기
+
+    public static final int IOCTL_VIDEOINPUT_DOORCAMERA = 0xFE01;   // 월패드 영상 입력 선택 제어
+    public static final int IOCTL_MIC_GAIN_SET = 0xFD01;            // mic gain 설정 제어
+    public static final int IOCTL_MIC_GAIN_GET = 0xFD02;            // (0 ~ 79) mic gain 상태 읽기
+
+
+    public static final int IOCTL_MIC_RECORD_GAIN_SET = 0xFD03;     // mic record gain 설정 제어
+    public static final int IOCTL_MIC_RECORD_GAIN_GET = 0xFD04;     // mic record gain 상태 읽기
+    public static final int IOCTL_MIC_BOOST_GAIN_SET = 0xFD05;      // mic boost gain 설정 제어(6dB steps)
+    public static final int IOCTL_MIC_BOOST_GAIN_GET = 0xFD06;      // mic boost gain 상태 읽기
+    public static final int IOCTL_MIC_LINE1_GAIN_SET = 0xFD07;      // mic line1 gain 설정 제어(1.5dB steps)
+    public static final int IOCTL_MIC_LINE1_GAIN_GET = 0xFD08;      // mic line1 gain 상태 읽기
+    public static final int IOCTL_SPK_EQ_GAIN_SET  = 0xFD09;        // (0 ~ 32767) speaker EQ gain 설정 제어
+    public static final int IOCTL_SPK_EQ_GAIN_GET = 0xFD0A;         // (0 ~ 32767) Speaker EQ gain 상태 읽기
+
+    public static final int IOCTL_MONOOUT_SUB_GAIN_SET = 0xFD0D;    // (0 ~ 79) mono out subphone gain 설정 제어
+    public static final int IOCTL_MONOOUT_SUB_GAIN_GET = 0xFD0E;    // (0 ~ 79) mono out subphone gain 상태 읽기
+
+
+    public static final int IOCTL_MOOD_BACKLIGHT_SET = 0xFC01;      // (0 ~ 255) mood등 backlight 제어
+
+    public static final int IOCTL_ETHERNET_MAC_SET = 0xFB01;        // Ethernet mac address 설정
+
+    public static final int IOCTL_CAMERA_SET_BRIGHTNESS = 0xF901;   // Camera Brightness 설정(0 ~ 20 단계)
+    public static final int IOCTL_CAMERA_CONTRAST_SET = 0xF902;     // Camera Contrast 설정 (0 ~ 20)
+    // Default 설정시 10 단계
+
+
+    public static final int IOCTL_DOOR_DETECTIME_SET           = 0xFA01;   //DoorPhone Detection Time
+    public static final int IOCTL_SENSOR_MAG0_DETECTIME_SET    = 0xFA02;   //Sensor Magnetic0 Detection Time
+    public static final int IOCTL_SENSOR_MAG1_DETECTIME_SET    = 0xFA03;   //Sensor Magnetic1 Detection Time
+    public static final int IOCTL_SENSOR_EXIT_DETECTIME_SET    = 0xFA04;   //Sensor Exit Detection Time
+    public static final int IOCTL_SENSOR_MOTIN_DETECTIME_SET   = 0xFA05;   //Sensor Motion In Detection Time
+    public static final int IOCTL_SENSOR_MOTOUT_DETECTIME_SET  = 0xFA06;   //Sensor Motion Out Detection Time
+    public static final int IOCTL_SENSOR_EMR_DETECTIME_SET     = 0xFA07;   //Sensor Emergency Detection Time
+
+
+
+    public static final int IOCTL_SENSOR_MAG0_STATE     = 0xF801;           // Sensor Magnetic0 상태
+    // 0 : State Disable
+    // 1 : State Enable
+
+    public static final int IOCTL_SENSOR_MAG1_STATE     = 0xF802;           // Sensor Magnetic1 상태
+    // 0 : State Disable
+    // 1 : State Enable
+
+    public static final int IOCTL_SENSOR_EXIT_STATE     = 0xF803;           // Sensor Exit 상태
+    // 0 : State Disable
+    // 1 : State Enable
+
+    public static final int IOCTL_SENSOR_MOTIN_STATE    = 0xF804;           // Sensor Motion In 상태
+    // 0 : State Disable
+    // 1 : State Enable
+
+    public static final int IOCTL_SENSOR_MOTOUT_STATE   = 0xF805;           // Sensor Motion Out 상태
+    // 0 : State Disable
+    // 1 : State Enable
+
+    public static final int IOCTL_SENSOR_EMR_STATE      = 0xF806;           // Sensor Emergency 상태
+    // 0 : State Disable
+    // 1 : State Enable
+
+
+    public static final int IOCTL_KEY_ONOFF_SET                = 0xF701;   //SideKey On/Off Control
+    public static final int IOCTL_KEY_ONOFF_GET                = 0xF702;   //SideKey On/Off 상태 읽기
+
+    // I/O Control Interface end
+
+
+    public static final int VIDEO_OUTPUT_TYPE_DOOR_ON = 0;
+    public static final int VIDEO_OUTPUT_TYPE_DOOR_OFF = 1;
+
+    public static final int DOOR_LOCK_TYPE_REG = 0;
+    public static final int DOOR_LOCK_TYPE_OPEN = 1;
+
+    public static final int VIDEO_INPUT_TYPE_DOOR = 0;
+    public static final int VIDEO_INPUT_TYPE_CAMERA = 1;
+
+    public static final int MIC_GAIN_MIN = 0;
+    public static final int MIC_GAIN_MAX = 79;
+
+
+    static
+    {
+        System.loadLibrary("wpd_interface-jni");
+    }
+
+
+    public native int WpdInterfaceOpen();
+    public native int WpdInterfaceClose();
+    public native int WpdInterfaceControl(int cmd, int arg);
+    public native int SetMacAddr(int cmd, String macAddr);
+
+
+    private boolean bOpen = false;
+
+    // open WpdInterface
+    public int open() {
+        int ret = 0;
+
+        if (!bOpen) {
+            if (DEBUG)  Log.d(TAG, "WpdInterfaceOpen() bOpen : " + bOpen);
+
+            ret = WpdInterfaceOpen();
+            if (ret != -1)
+                bOpen = true;
+
+            if (DEBUG)  Log.d(TAG, "WpdInterfaceOpen() finish bOpen : " + bOpen);
+        }
+
+        return ret;
+    }
+
+    // close WpdInterface
+    public int close() {
+        if (mAPICheckHandler != null) {
+            mAPICheckHandler.removeMessages(0);
+            mAPICheckHandler.removeMessages(1);
+        }
+
+        int ret = 0;
+
+        if (bOpen) {
+            bOpen = false;
+
+            if (DEBUG)  Log.d(TAG, "WpdInterfaceClose() bOpen : " + bOpen);
+
+            ret = WpdInterfaceClose();
+        }
+
+        return ret;
+    }
+
+    // WpdInterface ioctl
+    private int ioctl(int cmd, int arg) {
+        int ret = -1;
+        if (bOpen) {
+            //bOpen = false;
+
+            ret = WpdInterfaceControl(cmd, arg);
+        }
+
+        return ret;
+    }
+
+
+    // controll doorBell
+    public int doorBellControll() {
+        int ret = -1;
+
+        if( Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C ||  Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D )
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_DOOR_DINGDONG, 0);
+                //a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+                ret = ioctl(IOCTL_DOOR_DINGDONG, 0);
+
+                //close();
+            }
+        }
+
+        return ret;
+    }
+
+
+    // controll emergencyLED
+    // 0: led on, 1: led off
+    public int emergencyLEDControll(boolean onOff) {
+        int bOnOff = 0;
+
+        if (onOff == false) {
+            bOnOff = 1;
+        }
+        else {
+            bOnOff = 0;
+        }
+
+        int ret = -1;
+        if( Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C ||  Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D )
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_BTNEMR_LEDONOFF, bOnOff);
+                //a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+                ret = ioctl(IOCTL_BTNEMR_LEDONOFF, bOnOff);
+
+                //close();
+            }
+        }
+
+
+        return ret;
+    }
+
+
+    // controll callLED
+    // 0: led on, 1: led off
+    public int callLEDControll(boolean onOff) {
+        int bOnOff = 0;
+
+        if (onOff == false) {
+            bOnOff = 1;
+        }
+        else {
+            bOnOff = 0;
+        }
+
+
+        int ret = -1;
+
+        if( Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C ||  Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D )
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_BTNCALL_LEDONOFF, bOnOff);
+                //a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+                ret = ioctl(IOCTL_BTNCALL_LEDONOFF, bOnOff);
+
+                //close();
+            }
+        }
+
+        return ret;
+    }
+
+
+    // controll openLED
+    // 0: led on, 1: led off
+    public int openLEDControll(boolean onOff) {
+        int bOnOff = 0;
+
+        if (onOff == false) {
+            bOnOff = 1;
+        }
+        else {
+            bOnOff = 0;
+        }
+
+
+        int ret = -1;
+
+        if( Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C ||  Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D )
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_BTNOPEN_LEDONOFF, bOnOff);
+                //a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+                ret = ioctl(IOCTL_BTNOPEN_LEDONOFF, bOnOff);
+
+                //close();
+            }
+        }
+
+
+        return ret;
+    }
+
+
+    // controll touch button
+    // 0: power off, 1: power on
+    public int touchPowerControll(boolean onOff) {
+        int bOnOff = 0;
+
+        if (onOff == true) {
+            bOnOff = 1;
+        }
+        else {
+            bOnOff = 0;
+        }
+
+
+        int ret = -1;
+
+        if( Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C ||  Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D )
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_SUBTOUCH_POWERONOFF, bOnOff);
+                //a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+
+        }
+        if (open() != -1) {
+            ret = ioctl(IOCTL_SUBTOUCH_POWERONOFF, bOnOff);
+
+            //close();
+        }
+
+        return ret;
+    }
+
+
+
+
+    // controll videoOutput
+    // 0: door on, 1: door off
+    public int videoOutputControll(int type) {
+        int ret = -1;
+
+        if ((Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C) || (Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D))
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                switch (type)
+                {
+                    case VIDEO_OUTPUT_TYPE_DOOR_ON:
+                    case VIDEO_OUTPUT_TYPE_DOOR_OFF:
+                        ret = a20If.WpdInterfaceControl(IOCTL_VIDEOOUT_DOORONOFF, type);
+                        break;
+
+                    default:
+                        break;
+                }
+            }
+
+        }
+        else
+        {
+            if (open() != -1)
+            {
+                switch (type)
+                {
+                    case VIDEO_OUTPUT_TYPE_DOOR_ON:
+                    case VIDEO_OUTPUT_TYPE_DOOR_OFF:
+                        ret = ioctl(IOCTL_VIDEOOUT_DOORONOFF, type);
+                        break;
+
+                    default:
+                        break;
+                }
+
+                // close();
+            }
+        }
+
+        return ret;
+    }
+
+
+    // controll cameraPower
+    // 0: power off, 1: power on
+    public int cameraPowerControll(boolean onOff) {
+        int bOnOff = 0;
+
+        if (onOff == true) {
+            bOnOff = 1;
+        }
+        else {
+            bOnOff = 0;
+        }
+
+        int ret = -1;
+
+        if( Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C ||  Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D )
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_CAMERA_POWERONOFF, bOnOff);
+                //a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+                ret = ioctl(IOCTL_CAMERA_POWERONOFF, bOnOff);
+
+                //close();
+            }
+        }
+
+        return ret;
+    }
+
+
+    // controll subPhoneMute
+    // 0: mute off, 1: mute on
+    public int subPhoneMuteControll(boolean onOff) {
+        int bOnOff = 0;
+
+        if (onOff == true) {
+            bOnOff = 1;
+        }
+        else {
+            bOnOff = 0;
+        }
+
+        int ret = -1;
+
+        if( Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C ||  Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D )
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_SUBPHONE_MUTEONOFF, bOnOff);
+                //a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+                ret = ioctl(IOCTL_SUBPHONE_MUTEONOFF, bOnOff);
+
+                //close();
+            }
+        }
+
+
+        return ret;
+    }
+
+
+    // controll doorLock
+    // 0: 도어락 등록, 1: 도어락 오픈
+    public int doorLockControll(int type) {
+        int ret = -1;
+
+        if ((Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C) || (Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D))
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                switch (type)
+                {
+                    case DOOR_LOCK_TYPE_REG:
+                    case DOOR_LOCK_TYPE_OPEN:
+                        ret = a20If.WpdInterfaceControl(IOCTL_DOOR_LOCK_OPEN_REGIS, type);
+                        break;
+
+                    default:
+                        break;
+                }
+            }
+        }
+        else
+        {
+            if (open() != -1)
+            {
+                switch (type)
+                {
+                    case DOOR_LOCK_TYPE_REG:
+                    case DOOR_LOCK_TYPE_OPEN:
+                        ret = ioctl(IOCTL_DOOR_LOCK_OPEN_REGIS, type);
+                        break;
+
+                    default:
+                        break;
+                }
+
+                // close();
+            }
+        }
+
+
+        return ret;
+    }
+
+
+    // reset RFRemocon
+    public int RFRemoconReset() {
+
+        int ret = -1;
+
+        if ((Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C) || (Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D))
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_RFREMOCON_RESET, 0);
+                //a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+                ret = ioctl(IOCTL_RFREMOCON_RESET, 0);
+
+                //close();
+            }
+        }
+
+
+        return ret;
+    }
+
+
+    // controll doorPower
+    // 0: power off, 1: power on
+    public int doorPowerControll(boolean onOff) {
+        return doorPowerControll(onOff, false);
+    }
+
+    // controll doorPower + doorBell
+    public int doorPowerControll(boolean onOff, boolean bSound) {
+        if (DEBUG)  Log.d(TAG, "[doorPowerControll] onOff [" + onOff + "], bSound [" + bSound + "]");
+
+        int bOnOff = 0;
+        int powerState = -1;
+
+        if (onOff == true) {
+            bOnOff = 1;
+        }
+        else {
+            bOnOff = 0;
+        }
+
+        int ret = -1;
+
+        if (Version.getPlatformType() == Version.PLATFORM_TYPE.A20) {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1) {
+                if (DEBUG) Log.d(TAG, "[doorPowerControll] A20IOInterface open!!");
+
+                ret = a20If.WpdInterfaceControl(IOCTL_DOOR_POWER_STATE, 0);
+                if ((ret != -1) && (bOnOff != ret)) {
+                    powerState = bOnOff;
+                    ret = a20If.WpdInterfaceControl(IOCTL_CAMERA_POWERONOFF, bOnOff);   //전원
+                    ret = a20If.WpdInterfaceControl(IOCTL_DOOR_POWERONOFF, bOnOff);
+                }
+                close();
+            }
+        }
+        else if (Version.getPlatformType() == Version.PLATFORM_TYPE.A40i) {
+            // 스마트현관카메라
+            if (CheckEtcFragment.doorCamType == WallpadDeviceSet.DOORTYPE_IOT_SMART
+                    || CheckEtcFragment.doorCamType == WallpadDeviceSet.DOORTYPE_HYOSUNG_SMART
+                    || CheckEtcFragment.doorCamType == WallpadDeviceSet.DOORTYPE_DAEWOO_SMART) {
+                mWallPadAPI = MainActivity.getWallPadAPI();
+                if (onOff) {
+                    mAPICheckHandler.sendEmptyMessage(0);
+                }
+                else {
+                    if (mIGW300API != null) {
+                        mIGW300API.ControlOutput((byte) 0x18, false);
+                        mIGW300API.ControlOutput((byte) 0x1B, false);
+                    }
+                    ctrlSmartIOTCamStatusMode(false);
+                    ctrlSmartIOTCamLEDMode(false);
+                }
+            }
+            else {
+                V40IF mV40IF = new V40IF();
+                if (mV40IF.WpdInterfaceOpen() != -1) {
+                    if (DEBUG) Log.d(TAG, "doorPowerControll open success: ");
+                    powerState = bOnOff;
+                    ret = mV40IF.WpdInterfaceControl(IOCTL_CAMERA_POWERONOFF, bOnOff);   //전원
+                    ret = mV40IF.WpdInterfaceControl(IOCTL_DOOR_POWERONOFF, bOnOff);
+                    close();
+                }
+            }
+        }
+        else {
+            if (open() != -1) {
+                if (DEBUG) Log.d(TAG, "doorPowerControll open success: ");
+
+                ret = ioctl(IOCTL_DOOR_POWER_STATE, 0);
+                if ((ret != -1) && (bOnOff != ret)) {
+                    powerState = bOnOff;
+                    ret = ioctl(IOCTL_DOOR_POWERONOFF, bOnOff);
+                }
+                close();
+            }
+        }
+
+        if (Const.ENABLED_DOOR_PHONE_POWER_CONTROLL_BY_CALL_APP) {
+            if (bSound && (powerState == 1) && (ret != -1)) doorBellControll();
+        }
+
+        return ret;
+    }
+
+
+    // return DoorPowerState
+    // 0 : Power Off, 1 : Power On
+    public int getDoorPowerState() {
+        if (DEBUG)  Log.d(TAG, "getDoorPowerState()");
+
+        int ret = -1;
+        if ((Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C) || (Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D))
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_DOOR_POWER_STATE, 0);
+                //a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+
+                if (DEBUG)  Log.d(TAG, "getDoorPowerState open success: ");
+
+                ret = ioctl(IOCTL_DOOR_POWER_STATE, 0);
+
+                close();
+            }
+        }
+
+        return ret;
+    }
+
+
+    // controll frontHomeLED
+    // 0: led off, 1: led on
+    public int frontHomeLEDControll(boolean onOff) {
+        int bOnOff = 0;
+
+        if (onOff == true) {
+            bOnOff = 1;
+        }
+        else {
+            bOnOff = 0;
+        }
+
+        int ret = -1;
+
+        if ((Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C) || (Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D))
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_FRONTHOME_LEDONOFF, bOnOff);
+                //a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+                ret = ioctl(IOCTL_FRONTHOME_LEDONOFF, bOnOff);
+
+                //close();
+            }
+        }
+
+        return ret;
+    }
+
+
+    // controll frontEMRLED
+    // 0: led off, 1: led on
+    public int frontEMRLEDControll(boolean onOff) {
+        int bOnOff = 0;
+
+        if (onOff == true) {
+            bOnOff = 1;
+        }
+        else {
+            bOnOff = 0;
+        }
+
+        int ret = -1;
+
+        if ((Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C) || (Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D))
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_FRONTEMR_LEDONOFF, bOnOff);
+                // a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1)
+            {
+                ret = ioctl(IOCTL_FRONTEMR_LEDONOFF, bOnOff);
+
+                // close();
+            }
+        }
+
+
+        return ret;
+    }
+
+    /////////////////// 스마트현관카메라
+    WallPadAPI mWallPadAPI;
+    SmartKeyRfDoorAPI mSmartKeyRfDoorAPI;
+    IGW300API mIGW300API;
+
+    protected Handler mAPICheckHandler = new Handler() {
+        @SuppressLint("HandlerLeak")
+        @Override
+        public void handleMessage(Message msg) {
+//            Log.d(TAG, "[mAPICheckHandler]  msg.what [" + msg.what + "]");
+            if (msg.what == 0) {
+                if (mWallPadAPI.Check_Connect()) mAPICheckHandler.sendEmptyMessageDelayed(1, 10);
+                else mAPICheckHandler.sendEmptyMessageDelayed(0, 10);
+            } else if (msg.what == 1) {
+                Log.d(TAG, "[mAPICheckHandler] handler finish [1]");
+                mSmartKeyRfDoorAPI = mWallPadAPI.Get_SmartKeyRfDoorController();
+                mIGW300API = mWallPadAPI.Get_IGW300Controller();
+                if (mIGW300API != null) {
+                    int nResult1 = mIGW300API.ControlOutput((byte) 0x18, true); // onoff
+                    int nResult2 = mIGW300API.ControlOutput((byte) 0x1B, true); // camera select
+                    Log.d(TAG, "[mAPICheckHandler] nResult1 [" + nResult1 + "], nResult2 [" + nResult2 + "]");
+                    ctrlSmartIOTCamStatusMode(true);
+                    ctrlSmartIOTCamLEDMode(true);
+                } else {
+                    Log.w(TAG, "[mAPICheckHandler] mIGW300API is null!! [1]");
+                }
+            }
+        }
+    };
+
+    // 스마트현관카메라 MODE 제어
+    private void ctrlSmartIOTCamStatusMode(boolean bOnOff) {
+        try {
+            byte hMode;
+            if (bOnOff) hMode = (byte) 0x01;
+            else hMode = 0x00;
+            Log.d(TAG, "[ctrlSmartIOTCamStatusMode] hMode [" + hMode + "]");
+            if (mSmartKeyRfDoorAPI != null) mSmartKeyRfDoorAPI.SetCAMERAmode(hMode);
+            else Log.w(TAG, "[ctrlSmartIOTCamStatusMode] mSmartKeyRfDoorAPI is null!");
+        } catch (RuntimeException re) {
+            Log.e(TAG, re.toString());
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] ctrlSmartIOTCamStatusMode(byte mode)");
+            //e.printStackTrace();            
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    // 스마트현관카메라 LED 상태 제어
+    private void ctrlSmartIOTCamLEDMode(boolean bOnOff) {
+        try {
+            byte hMode;
+            if (bOnOff) hMode = (byte) 0x01;
+            else hMode = 0x00;
+            if (mSmartKeyRfDoorAPI != null) mSmartKeyRfDoorAPI.SetLEDmode(hMode);
+            else Log.w(TAG, "[ctrlSmartIOTCamLEDMode] mSmartKeyRfDoorAPI is null!");
+        } catch (RuntimeException re) {
+            Log.e(TAG, re.toString());
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] ctrlSmartIOTCamLEDMode(byte mode)");
+            //e.printStackTrace();            
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+    // controll videoInput
+    // 0: door, 1: camera
+    public int videoInputControll(int type) {
+        if (DEBUG)  Log.d(TAG, "[videoInputControll] type [" + type + "]");
+
+        int ret = -1;
+
+        if (Version.getPlatformType() == Version.PLATFORM_TYPE.A20) {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1) {
+                if (DEBUG) Log.d(TAG, "videoInputControll open success: ");
+
+                switch (type) {
+                    case VIDEO_INPUT_TYPE_DOOR:
+                        ret = a20If.WpdInterfaceControl(IOCTL_VIDEOINPUT_DOORCAMERA, type);
+                        break;
+                    case VIDEO_INPUT_TYPE_CAMERA:
+                        ret = a20If.WpdInterfaceControl(IOCTL_CAMERA_POWERONOFF, type);   //전원
+                        ret = a20If.WpdInterfaceControl(IOCTL_VIDEOINPUT_DOORCAMERA, type);
+                        break;
+
+                    default:
+                        break;
+                }
+                a20If.WpdInterfaceClose();
+            }
+        }
+        else if (Version.getPlatformType() == Version.PLATFORM_TYPE.A40i) {
+            V40IF mV40IF = new V40IF();
+            if (mV40IF.WpdInterfaceOpen() != -1) {
+                if (DEBUG) Log.d(TAG, "videoInputControll open success: ");
+
+                switch (type) {
+                    case VIDEO_INPUT_TYPE_DOOR:
+                        ret = mV40IF.WpdInterfaceControl(IOCTL_VIDEOINPUT_DOORCAMERA, type);
+                        break;
+                    case VIDEO_INPUT_TYPE_CAMERA:
+                        ret = mV40IF.WpdInterfaceControl(IOCTL_CAMERA_POWERONOFF, type);   //전원
+                        ret = mV40IF.WpdInterfaceControl(IOCTL_VIDEOINPUT_DOORCAMERA, type);
+                        break;
+
+                    default:
+                        break;
+                }
+                mV40IF.WpdInterfaceClose();
+            }
+        }
+        else {
+            if (open() != -1) {
+
+                if (DEBUG) Log.d(TAG, "videoInputControll open success: ");
+
+                switch (type) {
+                    case VIDEO_INPUT_TYPE_DOOR:
+                    case VIDEO_INPUT_TYPE_CAMERA:
+                        ret = ioctl(IOCTL_VIDEOINPUT_DOORCAMERA, type);
+                        break;
+
+                    default:
+                        break;
+                }
+                 close();
+            }
+        }
+
+        return ret;
+    }
+
+
+    // controll MicGain
+    // 0 ~ 79
+    public int setMicGain(int value) {
+
+        if (value < MIC_GAIN_MIN)
+            value = MIC_GAIN_MIN;
+        else if (value > MIC_GAIN_MAX)
+            value = MIC_GAIN_MAX;
+
+        int ret = -1;
+
+        if ((Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C) || (Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D))
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_MIC_GAIN_SET, value);
+                // a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+                ret = ioctl(IOCTL_MIC_GAIN_SET, value);
+
+                //close();
+            }
+        }
+
+
+
+        return ret;
+    }
+
+
+    // return MicGain
+    public int getMicGain() {
+
+        int ret = -1;
+
+        if ((Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C) || (Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D))
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_MIC_GAIN_GET, 0);
+                // a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+                ret = ioctl(IOCTL_MIC_GAIN_GET, 0);
+
+                //close();
+            }
+        }
+
+        return ret;
+    }
+
+
+    // set MacAddr
+    public int setMacAddr(String macAddr) {
+        if (DEBUG)  Log.d(TAG, "setMacAddr() : " + macAddr);
+
+        int ret = -1;
+
+        if ((Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C) || (Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D))
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.SetMacAddr(IOCTL_ETHERNET_MAC_SET, macAddr);
+                // a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+                ret = SetMacAddr(IOCTL_ETHERNET_MAC_SET, macAddr);
+
+                //close();
+            }
+        }
+
+
+        return ret;
+    }
+
+
+
+
+
+    // 0 ~ 20
+    public static final int CAMERA_BRIGHTNESS_MIN = 0;
+    public static final int CAMERA_BRIGHTNESS_MAX = 20;
+    // set CameraBrightness
+    public int setCameraBrightness(int value) {
+        if (DEBUG)  Log.d(TAG, "setCameraBrightness() : " + value);
+
+        if (value < CAMERA_BRIGHTNESS_MIN)
+            value = CAMERA_BRIGHTNESS_MIN;
+        else if (value > CAMERA_BRIGHTNESS_MAX)
+            value = CAMERA_BRIGHTNESS_MAX;
+
+        int ret = -1;
+
+        if ((Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C) || (Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D))
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_CAMERA_SET_BRIGHTNESS, value);
+                // a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+                ret = ioctl(IOCTL_CAMERA_SET_BRIGHTNESS, value);
+
+                //close();
+            }
+        }
+
+
+        return ret;
+    }
+
+
+
+
+
+    // 0 ~ 20
+    public static final int SPEAKER_GAIN_MIN = 0;
+    public static final int SPEAKER_GAIN_MAX = 32767;
+    // set SpeakerGain
+    public int setSpeakerGain(int value) {
+        if (DEBUG)  Log.d(TAG, "setSpeakerGain() : " + value);
+
+        if (value < SPEAKER_GAIN_MIN)
+            value = SPEAKER_GAIN_MIN;
+        else if (value > SPEAKER_GAIN_MAX)
+            value = SPEAKER_GAIN_MAX;
+
+        int ret = -1;
+
+        if ((Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C) || (Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D))
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_SPK_EQ_GAIN_SET, value);
+                // a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+                ret = ioctl(IOCTL_SPK_EQ_GAIN_SET, value);
+
+                //close();
+            }
+        }
+
+        return ret;
+    }
+
+
+    // return SpeakerGain
+    public int getSpeakerGain() {
+        int ret = -1;
+
+        if ((Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C) || (Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D))
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_SPK_EQ_GAIN_GET, 0);
+                // a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+                ret = ioctl(IOCTL_SPK_EQ_GAIN_GET, 0);
+
+                //close();
+            }
+        }
+
+
+
+        if (DEBUG)  Log.d(TAG, "getSpeakerGain() ret : " + ret);
+
+        return ret;
+    }
+
+
+
+
+
+    // 0 ~ 79
+    public static final int MONOOUT_SUBPHONE_GAIN_MIN = 0;
+    public static final int MONOOUT_SUBPHONE_GAIN_MAX = 79;
+    // set MonoOutSubPhoneGain
+    public int setMonoOutSubPhoneGain(int value) {
+        if (DEBUG)  Log.d(TAG, "setMonoOutSubPhoneGain() : " + value);
+
+        if (value < MONOOUT_SUBPHONE_GAIN_MIN)
+            value = MONOOUT_SUBPHONE_GAIN_MIN;
+        else if (value > MONOOUT_SUBPHONE_GAIN_MAX)
+            value = MONOOUT_SUBPHONE_GAIN_MAX;
+
+        int ret = -1;
+
+        if ((Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C) || (Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D))
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_MONOOUT_SUB_GAIN_SET, value);
+                // a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+                ret = ioctl(IOCTL_MONOOUT_SUB_GAIN_SET, value);
+
+                //close();
+            }
+
+        }
+
+        return ret;
+    }
+
+
+    // return MonoOutSubPhoneGain
+    public int getMonoOutSubPhoneGain() {
+        if (DEBUG)  Log.d(TAG, "getMonoOutSubPhoneGain() ");
+
+        int ret = -1;
+
+        if ((Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C) || (Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D))
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_MONOOUT_SUB_GAIN_GET, 0);
+                // a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+                ret = ioctl(IOCTL_MONOOUT_SUB_GAIN_GET, 0);
+
+                //close();
+            }
+        }
+
+
+        return ret;
+    }
+
+
+
+
+
+
+    // 1 ~ 10
+    public static final int MONOOUT_SUBPHONE_GAIN_LEVEL_MIN = 1;
+    public static final int MONOOUT_SUBPHONE_GAIN_LEVEL_MAX = 10;
+    public static final int MONOOUT_SUBPHONE_GAIN_LEVEL[] = {
+            /*1 -*/ 0x13
+            , /*2 -*/ 0x1A
+            , /*3 -*/ 0x1F
+            , /*4 -*/ 0x23
+            , /*5 -*/ 0x28
+            , /*6 -*/ 0x2B
+            , /*7 -*/ 0x2E
+            , /*8 -*/ 0x30
+            , /*9 -*/ 0x34
+            , /*10 -*/ 0x38
+    };
+
+    // set MonoOutSubPhoneLevelGain
+    public int setMonoOutSubPhoneLevelGain(int level) {
+        if (level < MONOOUT_SUBPHONE_GAIN_LEVEL_MIN)
+            level = MONOOUT_SUBPHONE_GAIN_LEVEL_MIN;
+        else if (level > MONOOUT_SUBPHONE_GAIN_LEVEL_MAX)
+            level = MONOOUT_SUBPHONE_GAIN_LEVEL_MAX;
+
+        int ret = -1;
+        try {
+            //int value = (level * MONOOUT_SUBPHONE_GAIN_MAX) / MONOOUT_SUBPHONE_GAIN_LEVEL_MAX;
+            int value = MONOOUT_SUBPHONE_GAIN_LEVEL[level-1];
+
+            ret = setMonoOutSubPhoneGain(value);
+        } catch (IndexOutOfBoundsException e) {
+            //e.printStackTrace();            
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+
+        if (DEBUG)  Log.d(TAG, "setMonoOutSubPhoneLevelGain() level : " + level
+                + ", ret : " + ret
+        );
+
+        return ret;
+    }
+
+
+    // return MonoOutSubPhoneLevelGain
+    public int getMonoOutSubPhoneLevelGain() {
+        int value = getMonoOutSubPhoneGain();
+
+        int level = (value * MONOOUT_SUBPHONE_GAIN_LEVEL_MAX + MONOOUT_SUBPHONE_GAIN_MAX - 1) / MONOOUT_SUBPHONE_GAIN_MAX;
+
+        if (DEBUG)  Log.d(TAG, "getMonoOutSubPhoneLevelGain() ret : " + level);
+
+        return level;
+    }
+
+
+
+
+
+
+
+    public static final int SENSOR_STATE_DISABLE = 0;
+    public static final int SENSOR_STATE_ENABLE = 1;
+    // return SensorState
+    public int getSensorState(int sensorCommand) {
+
+        int ret = -1;
+
+        if ((sensorCommand >= IOCTL_SENSOR_MAG0_STATE) && (sensorCommand <= IOCTL_SENSOR_EMR_STATE)) {
+            if (Version.getPlatformType() == Version.PLATFORM_TYPE.A20) {
+                kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+                if (a20If.WpdInterfaceOpen() != -1) {
+                    ret = a20If.WpdInterfaceControl(sensorCommand, 0);
+//                    a20If.WpdInterfaceClose();
+                }
+            }
+            else if (Version.getPlatformType() == Version.PLATFORM_TYPE.A40i && !Version.getGatewayUsage()) {
+                V40IF mV40IF = new V40IF();
+                if (mV40IF.WpdInterfaceOpen() != -1) {
+                    ret = mV40IF.WpdInterfaceControl(sensorCommand, 0);
+                    Log.i(TAG, "[getSensorState] V40 ret = " + ret);
+                    //v40IOInterface.WpdInterfaceClose();
+                }
+            }
+            else {
+                if (open() != -1) {
+                    ret = ioctl(sensorCommand, 0);
+                    //close();
+                }
+            }
+        }
+        return ret;
+    }
+
+
+
+
+    // set HWKeyControll
+    public int setHWKeyControll(boolean enabled) {
+        if (DEBUG)  Log.d(TAG, "setHWKeyControll : " + enabled);
+
+        int bEnabled = 0;
+        int powerState = -1;
+
+        if (enabled == true) {
+            bEnabled = 1;
+        }
+        else {
+            bEnabled = 0;
+        }
+
+        int ret = -1;
+
+        if ((Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C) || (Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D))
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                if (DEBUG)  Log.d(TAG, "setHWKeyControll open success: ");
+
+                ret = a20If.WpdInterfaceControl(IOCTL_KEY_ONOFF_GET, 0);
+                if ((ret != -1) && (bEnabled != ret)) {
+                    powerState = bEnabled;
+
+                    ret = ioctl(IOCTL_KEY_ONOFF_SET, bEnabled);
+                }
+
+                close();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+
+                if (DEBUG)  Log.d(TAG, "setHWKeyControll open success: ");
+
+                ret = ioctl(IOCTL_KEY_ONOFF_GET, 0);
+                if ((ret != -1) && (bEnabled != ret)) {
+                    powerState = bEnabled;
+
+                    ret = ioctl(IOCTL_KEY_ONOFF_SET, bEnabled);
+                }
+
+                close();
+            }
+        }
+
+
+        return ret;
+    }
+
+
+    // return HWKeyControll
+    // 0 : disabled, 1 : enabled
+    public int getHWKeyState() {
+        if (DEBUG)  Log.d(TAG, "getHWKeyState()");
+
+        int ret = -1;
+        if ((Version.getModelType() == Version.MODEL_TYPE.IHN_1020B_C) || (Version.getModelType() == Version.MODEL_TYPE.IHN_1030_D))
+        {
+            kr.co.icontrols.a20ioctl.A20IOInterface a20If = new kr.co.icontrols.a20ioctl.A20IOInterface();
+            if (a20If.WpdInterfaceOpen() != -1)
+            {
+                ret = a20If.WpdInterfaceControl(IOCTL_KEY_ONOFF_GET, 0);
+                // a20If.WpdInterfaceClose();
+            }
+        }
+        else
+        {
+            if (open() != -1) {
+
+                if (DEBUG)  Log.d(TAG, "getHWKeyState open success: ");
+
+                ret = ioctl(IOCTL_KEY_ONOFF_GET, 0);
+
+                close();
+            }
+        }
+
+
+        return ret;
+    }
+
+}
+

+ 189 - 0
ManagerSetting/src/main/java/com/artncore/managersetting/MainApplication.java

@@ -0,0 +1,189 @@
+package com.artncore.managersetting;
+
+import android.app.Application;
+import android.util.Log;
+
+import com.util.LogUtil;
+
+import java.net.Inet4Address;
+import java.net.InetAddress;
+import java.net.InterfaceAddress;
+import java.net.NetworkInterface;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+
+public class MainApplication extends Application {
+
+    private static final String TAG = "MainApplication";
+
+    private final boolean DEBUG = true;
+
+    private static MainApplication sMainApp = null;
+
+    @Override
+    public void onCreate() {
+        if (DEBUG)  Log.d(TAG, "onCreate() ");
+
+        super.onCreate();
+
+        sMainApp = this;
+
+        Log.i(TAG, "local IP = " + getLocalIpAddress());
+        Log.i(TAG, "mac add = " + getMacAddr());
+
+        printNetworks();
+    }
+
+
+    @Override
+    public void onTerminate() {
+        if (DEBUG)  Log.d(TAG, "onTerminate() ");
+
+        super.onTerminate();
+    }
+
+
+    // return MainApplication
+    synchronized public static MainApplication getApplication() {
+        return sMainApp;
+    }
+
+
+    private boolean bSetReboot = false;
+
+    // set reboot
+    public void setReboot() {
+        bSetReboot = true;
+    }
+
+    // reboot 설정여부 return
+    public boolean isSetReboot() {
+        return bSetReboot;
+    }
+
+    public static String getLocalIpAddress()
+    {
+        try {
+            for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();)
+            {
+                NetworkInterface intf = en.nextElement();
+
+                for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();)
+                {
+                    InetAddress inetAddress = enumIpAddr.nextElement();
+                    if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address)
+                    {
+                        String ip = inetAddress.getHostAddress();
+                        return inetAddress.getHostAddress();
+                    }
+                }
+            }
+        } catch (RuntimeException re) {
+            Log.e(TAG, re.toString());
+        } catch (Exception ex) {
+            //ex.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, ex);
+        }
+        return null;
+    }
+
+    public static String getMacAddr() {
+        try {
+            List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
+
+            for (NetworkInterface nif : all) {
+                if (!nif.getName().equalsIgnoreCase("eth0")) continue;
+
+                byte[] macBytes = nif.getHardwareAddress();
+                if (macBytes == null) {
+                    return "";
+                }
+
+                StringBuilder res1 = new StringBuilder();
+                for (byte b : macBytes) {
+                    res1.append(String.format("%02X:",b));
+                }
+
+                if (res1.length() > 0) {
+                    res1.deleteCharAt(res1.length() - 1);
+                }
+                return res1.toString();
+            }
+        } catch (RuntimeException re) {
+            Log.e(TAG, re.toString());
+        } catch (Exception ex) {
+            LogUtil.errorLogInfo("", TAG, ex);
+        }
+        return "02:00:00:00:00:00";
+    }
+
+    public void printNetworks()
+    {
+        // This works both in tethering and when connected to an Access Point
+        try
+        {
+            Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
+
+            while (interfaces.hasMoreElements())
+            {
+                NetworkInterface networkInterface = interfaces.nextElement();
+
+                try
+                {
+                    if (networkInterface.isLoopback())
+                        continue; // Don't want to broadcast to the loopback interface
+
+                    for (InterfaceAddress interfaceAddress : networkInterface.getInterfaceAddresses())
+                    {
+                        InetAddress ip = interfaceAddress.getAddress();
+                        Log.i(TAG, "ip = " + ip);
+                        Log.i(TAG, "subnet = " + interfaceAddress.getNetworkPrefixLength() );
+                        Log.i(TAG, "broadcast = " + interfaceAddress.getBroadcast());
+                        // interfaceAddress.getNetworkPrefixLength() is another way to express subnet mask
+
+                        String ips = interfaceAddress.getAddress().toString();
+                        Log.i(TAG,"ips 123 = " + ips.substring(1,4));
+
+                        if(ips.substring(1,4).equals("10."))
+                        {
+                            String subnetmask = "";
+                            int len = interfaceAddress.getNetworkPrefixLength();
+                            int netmaskLen = len / 8;
+
+                            for (int i = 0; i < 4; i++) {
+                                if (i < netmaskLen) {
+                                    subnetmask += "255";
+                                } else {
+                                    subnetmask += "0";
+                                }
+                                if (i != 3) {
+                                    subnetmask += ".";
+                                }
+                            }
+                            Log.i(TAG, "subnetmask = " + subnetmask);
+                        }
+
+                    }
+                }
+                catch (RuntimeException re) {
+                    LogUtil.errorLogInfo("", TAG, re);
+                }
+                catch(Exception e)
+                {
+                    //e.printStackTrace();
+                    LogUtil.errorLogInfo("", TAG, e);
+                }
+
+            }
+
+        }catch (RuntimeException re) {
+            Log.e(TAG, re.toString());
+        } catch (Exception e)
+        {
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+
+    }
+}

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

@@ -0,0 +1,2344 @@
+package com.artncore.managersetting.dao;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import kr.co.icontrols.v40ioctl.V40IF;
+import kr.co.icontrols.wallpadsupport.Version;
+import android.content.Context;
+import android.os.Handler;
+import android.util.Log;
+
+import com.artncore.WallPadDataMgr.WallpadDeviceSet;
+import com.artncore.WallPadDataMgr.WallpadSalesSampleData;
+import com.artncore.WallPadDataMgr.WallpadStatusData;
+import com.artncore.WallPadDataMgr.wallpaddbmgr;
+import com.artncore.WallPadDataMgr.wallpaddbmgr.AddressSet;
+import com.artncore.managersetting.domain.Const;
+import com.artncore.managersetting.util.NetworkUtil;
+import com.artncore.managersetting.util.StringUtil;
+import com.artncore.managersetting.R;
+import com.util.LogUtil;
+
+public class MainDatabaseManager {
+
+    private static final String TAG = "MainDatabaseManager";
+
+    private final boolean DEBUG = true;
+
+
+    public static final int SETTING_ITEM_TYPE_BASE = 101;
+    public static final int SETTING_ITEM_GUARD_LIST         = SETTING_ITEM_TYPE_BASE + 0;
+    public static final int SETTING_ITEM_VER_SETTING        = SETTING_ITEM_TYPE_BASE + 1;
+    public static final int SETTING_ITEM_LOG_ENABLE         = SETTING_ITEM_TYPE_BASE + 2;
+    public static final int SETTING_ITEM_BEAT_TIME          = SETTING_ITEM_TYPE_BASE + 3;
+    public static final int SETTING_ITEM_DATETIME           = SETTING_ITEM_TYPE_BASE + 4;
+
+
+    public static final int SETTING_ITEM_IP_TABLE_LIST      = SETTING_ITEM_TYPE_BASE + 5;
+    //    public static final int SETTING_ITEM_SECURITY_STATE  = SETTING_ITEM_TYPE_BASE + 6;
+    public static final int SETTING_ITEM_SENSOR_STATE_LIST  = SETTING_ITEM_TYPE_BASE + 7;
+    public static final int SETTING_ITEM_SITE_CODE          = SETTING_ITEM_TYPE_BASE + 8;
+    public static final int SETTING_ITEM_SUB_DEVICE_LIST    = SETTING_ITEM_TYPE_BASE + 9;
+
+
+    public static final int SETTING_ITEM_SUB_DEVICE_GAS                         = SETTING_ITEM_TYPE_BASE + 100;
+    public static final int SETTING_ITEM_SUB_DEVICE_DOOR_LOCK                   = SETTING_ITEM_TYPE_BASE + 101;
+    public static final int SETTING_ITEM_SUB_DEVICE_HEATER                      = SETTING_ITEM_TYPE_BASE + 102;
+    public static final int SETTING_ITEM_SUB_DEVICE_LIGHT                       = SETTING_ITEM_TYPE_BASE + 103;
+    public static final int SETTING_ITEM_SUB_DEVICE_VENTILATION                 = SETTING_ITEM_TYPE_BASE + 104;
+    public static final int SETTING_ITEM_SUB_DEVICE_SYSTEM_AIRCON               = SETTING_ITEM_TYPE_BASE + 105;
+    public static final int SETTING_ITEM_SUB_DEVICE_ELECTRONICALLY_CURTAIN      = SETTING_ITEM_TYPE_BASE + 106;
+    public static final int SETTING_ITEM_SUB_DEVICE_REALTIME_MEASURING_METER    = SETTING_ITEM_TYPE_BASE + 107;
+    public static final int SETTING_ITEM_SUB_DEVICE_SMART_SWITCH_LIGHT_AND_BATCH_CONTROL                = SETTING_ITEM_TYPE_BASE + 108;
+    public static final int SETTING_ITEM_SUB_DEVICE_WIRELESS_REMOCON            = SETTING_ITEM_TYPE_BASE + 109;
+    public static final int SETTING_ITEM_SUB_DEVICE_DOOR_CAMERA                 = SETTING_ITEM_TYPE_BASE + 110;
+    public static final int SETTING_ITEM_SUB_DEVICE_NOTICE                      = SETTING_ITEM_TYPE_BASE + 111;
+    public static final int SETTING_ITEM_SUB_DEVICE_WEATHER                     = SETTING_ITEM_TYPE_BASE + 112;
+    public static final int SETTING_ITEM_SUB_DEVICE_MENO                        = SETTING_ITEM_TYPE_BASE + 113;
+    public static final int SETTING_ITEM_SUB_DEVICE_ELECTRONIC_PICTURE_FRAMES   = SETTING_ITEM_TYPE_BASE + 114;
+    public static final int SETTING_ITEM_SUB_DEVICE_SCHEDULE                    = SETTING_ITEM_TYPE_BASE + 115;
+    public static final int SETTING_ITEM_SUB_DEVICE_PARKING                     = SETTING_ITEM_TYPE_BASE + 116;
+    public static final int SETTING_ITEM_SUB_DEVICE_TIME_SETTING                = SETTING_ITEM_TYPE_BASE + 117;
+    public static final int SETTING_ITEM_SUB_DEVICE_REMOTE_MESURING_METER       = SETTING_ITEM_TYPE_BASE + 118;
+    public static final int SETTING_ITEM_SUB_DEVICE_MUSIC                       = SETTING_ITEM_TYPE_BASE + 119;
+    public static final int SETTING_ITEM_SUB_DEVICE_VIDEO_PLAY                  = SETTING_ITEM_TYPE_BASE + 120;
+    public static final int SETTING_ITEM_SUB_DEVICE_CCTV                        = SETTING_ITEM_TYPE_BASE + 121;
+    public static final int SETTING_ITEM_SUB_DEVICE_SET_NAMING                  = SETTING_ITEM_TYPE_BASE + 122;
+    public static final int SETTING_ITEM_SUB_DEVICE_CUSTOMER_SERVICE_GUARD      = SETTING_ITEM_TYPE_BASE + 123;
+    public static final int SETTING_ITEM_SUB_DEVICE_GUARD_VIDEO_CALL            = SETTING_ITEM_TYPE_BASE + 124;
+    public static final int SETTING_ITEM_SUB_DEVICE_ELEVATOR                    = SETTING_ITEM_TYPE_BASE + 125;
+    public static final int SETTING_ITEM_SUB_DEVICE_FIELD_TYPE                  = SETTING_ITEM_TYPE_BASE + 126;
+    public static final int SETTING_ITEM_SUB_DEVICE_WALLPAD_CAMERA              = SETTING_ITEM_TYPE_BASE + 127;
+    public static final int SETTING_ITEM_SUB_DEVICE_MOOD_LIGHT                  = SETTING_ITEM_TYPE_BASE + 128;
+    public static final int SETTING_ITEM_SUB_DEVICE_ESCAPE_LADDER               = SETTING_ITEM_TYPE_BASE + 129;
+    public static final int SETTING_ITEM_SUB_DEVICE_MOTION_SETTING              = SETTING_ITEM_TYPE_BASE + 130;
+    public static final int SETTING_ITEM_SUB_DEVICE_ALART_ALARM                 = SETTING_ITEM_TYPE_BASE + 131;
+
+    public static final int SETTING_ITEM_SUB_DEVICE_PSTN_CALL                   = SETTING_ITEM_TYPE_BASE + 132;
+
+    public static final int SETTING_ITEM_SUB_DEVICE_DOOR_PHONE_OUTPUT_VOLUME    = SETTING_ITEM_TYPE_BASE + 133;
+
+    public static final int SETTING_ITEM_SUB_DEVICE_IPARK_ENERGY                = SETTING_ITEM_TYPE_BASE + 134;
+    public static final int SETTING_ITEM_SUB_DEVICE_IDLE_POWER_SAVING_SWITCH    = SETTING_ITEM_TYPE_BASE + 135;
+    public static final int SETTING_ITEM_SUB_DEVICE_ENERGY_MODULE               = SETTING_ITEM_TYPE_BASE + 136;
+
+    public static final int SETTING_ITEM_SUB_DEVICE_ENERGY_DEVICES              = SETTING_ITEM_TYPE_BASE + 137;
+    public static final int SETTING_ITEM_SUB_DEVICE_SMART_KEY                   = SETTING_ITEM_TYPE_BASE + 138;
+    public static final int SETTING_ITEM_SUB_DEVICE_MULTI_SWITCH                = SETTING_ITEM_TYPE_BASE + 139;
+    public static final int SETTING_ITEM_SUB_DEVICE_ELECTRIC_CAR                = SETTING_ITEM_TYPE_BASE + 140;
+
+    public static final int SETTING_ITEM_SUB_DEVICE_LH_ADD_FUNCTION             = SETTING_ITEM_TYPE_BASE + 141;
+    public static final int SETTING_ITEM_SUB_DEVICE_LH_U_CITY                   = SETTING_ITEM_TYPE_BASE + 142;
+    public static final int SETTING_ITEM_SUB_DEVICE_ENERGY_SERVER_CONNECT       = SETTING_ITEM_TYPE_BASE + 143;
+    public static final int SETTING_ITEM_SUB_DEVICE_ZERO_ENERGY_HOUSE           = SETTING_ITEM_TYPE_BASE + 144;
+    public static final int SETTING_ITEM_SUB_DEVICE_SECURITY_INDOORMODE_SENSOR_USE = SETTING_ITEM_TYPE_BASE + 145; //재택모드 시 동체센서 사용
+    public static final int SETTING_ITEM_SUB_DEVICE_HANDICAPPED                 = SETTING_ITEM_TYPE_BASE + 146; //부가기능 - 장애인모드
+    public static final int SETTING_ITEM_SUB_DEVICE_ELEVATOR_MAINSCREEN_USE     = SETTING_ITEM_TYPE_BASE + 147;
+    public static final int SETTING_ITEM_SUB_DEVICE_BOOKMARK_TYPE               = SETTING_ITEM_TYPE_BASE + 148;
+    public static final int SETTING_ITEM_SUB_DEVICE_CALL_TIMEOUT                = SETTING_ITEM_TYPE_BASE + 149; //통화 타임아웃
+    public static final int SETTING_ITEM_SUB_DEVICE_DANJI_CONFIG                = SETTING_ITEM_TYPE_BASE + 150; //단지설정
+    public static final int SETTING_ITEM_SUB_DEVICE_WIRELESS_DOORLOCK_OPENDELAY = SETTING_ITEM_TYPE_BASE + 151; //무선 도어락 문열림 대기모드 사용
+    public static final int SETTING_ITEM_SUB_DEVICE_RENT_HOME                   = SETTING_ITEM_TYPE_BASE + 152; //임대세대(분리세대)
+    public static final int SETTING_ITEM_SUB_DEVICE_DANJI_RENT_HOME_USE         = SETTING_ITEM_TYPE_BASE + 153; //단지내 임대세대 사용
+    public static final int SETTING_ITEM_SUB_DEVICE_BLE_SMARTKEY                = SETTING_ITEM_TYPE_BASE + 154; //BLE스마트키
+    public static final int SETTING_ITEM_SUB_DEVICE_GATEWAY                     = SETTING_ITEM_TYPE_BASE + 155; //게이트웨이
+    public static final int SETTING_ITEM_SUB_DEVICE_DIMMING_KCC                 = SETTING_ITEM_TYPE_BASE + 156; //KCC디밍제어기
+
+    public static final int SETTING_ITEM_SUB_DEVICE_MANUAL		                = SETTING_ITEM_TYPE_BASE + 157; //매뉴얼
+    public static final int SETTING_ITEM_SUB_DEVICE_NEWSERVER		            = SETTING_ITEM_TYPE_BASE + 158; //신형단지서버 사용 유무
+    public static final int SETTING_ITEM_SUB_DEVICE_ESCAPE_LADDER_NOTI		    = SETTING_ITEM_TYPE_BASE + 159; //피난사다리 방송정보 알림(DB에는 피난사다리방송알림)
+    public static final int SETTING_ITEM_SUB_DEVICE_BAND_LOCATION               = SETTING_ITEM_TYPE_BASE + 160; // 밴드위치확인
+    public static final int SETTING_ITEM_SUB_DEVICE_CTR_SEQUENCE_LIMIT		    = SETTING_ITEM_TYPE_BASE + 161; //제어 시퀀스 제한(0~127)
+    public static final int SETTING_ITEM_SUB_DEVICE_HEAT_ONEDEVICE      		= SETTING_ITEM_TYPE_BASE + 162; //난방일체형
+    public static final int SETTING_ITEM_SUB_DEVICE_GAS_DETECT_5TIME			= SETTING_ITEM_TYPE_BASE + 163; //가스감지5회알람
+    public static final int SETTING_ITEM_SUB_DEVICE_SUBPHONE_BAUDRATE			= SETTING_ITEM_TYPE_BASE + 164; //서브폰통신속도
+    public static final int SETTING_ITEM_SUB_DEVICE_MAIN_GUI_SELECT 			= SETTING_ITEM_TYPE_BASE + 165; //메인 GUI 선택
+    public static final int SETTING_ITEM_SUB_DEVICE_DISTRIBUTION 			    = SETTING_ITEM_TYPE_BASE + 166; //분전반
+    public static final int SETTING_ITEM_SUB_DEVICE_SENSOR_AP        			= SETTING_ITEM_TYPE_BASE + 167; //센서 AP (미세먼지, CO2 센서)
+    public static final int SETTING_ITEM_SUB_DEVICE_INTERLAYER_NOISE 			= SETTING_ITEM_TYPE_BASE + 168; //층간소음 센서
+    public static final int SETTING_ITEM_SUB_DEVICE_RELIEF_CALL                 = SETTING_ITEM_TYPE_BASE + 169; //안심통화
+    public static final int SETTING_ITEM_SUB_DEVICE_REMOTE_CALL                 = SETTING_ITEM_TYPE_BASE + 170; //방문객원격통화
+    public static final int SETTING_ITEM_SUB_DEVICE_INNERROOM_DETECT_SENSOR     = SETTING_ITEM_TYPE_BASE + 171; //재실센서
+    public static final int SETTING_ITEM_SUB_DEVICE_GATEWAY_MODEL_KIND			= SETTING_ITEM_TYPE_BASE + 172; //게이트웨이모델 종류 선택
+    public static final int SETTING_ITEM_SUB_DEVICE_CARGUEST        			= SETTING_ITEM_TYPE_BASE + 173; //방문객차량등록
+    public static final int SETTING_ITEM_SUB_DEVICE_MOBILE_APP_USER_AUTH        = SETTING_ITEM_TYPE_BASE + 174; //모바일 앱 사용자 인증기능
+    public static final int SETTING_ITEM_SUB_DEVICE_INTEGRATED_SWITCH           = SETTING_ITEM_TYPE_BASE + 175; //통합스위치
+    public static final int SETTING_ITEM_SUB_DEVICE_ELECTRIC_RANGE              = SETTING_ITEM_TYPE_BASE + 176; //전기레인지
+    public static final int SETTING_ITEM_SUB_DEVICE_NON_INTERNET_SUPPORT        = SETTING_ITEM_TYPE_BASE + 177; //인터넷미지원
+    public static final int SETTING_ITEM_SUB_DEVICE_COOKTOP_CONCENT             = SETTING_ITEM_TYPE_BASE + 178; //쿡탑콘센트
+    public static final int SETTING_ITEM_SUB_DEVICE_SMARTPOST_USE               = SETTING_ITEM_TYPE_BASE + 179; //스마트우편함
+    public static final int SETTING_ITEM_SUB_DEVICE_SMARTKITCHEN_USE            = SETTING_ITEM_TYPE_BASE + 180; //스마트키친
+    public static final int SETTING_ITEM_SUB_DEVICE_EASYMODEUX_USE              = SETTING_ITEM_TYPE_BASE + 181; //간편모드UX지원
+    public static final int SETTING_ITEM_SUB_DEVICE_ESCAPELADDER_DOWN_SEND		= SETTING_ITEM_TYPE_BASE + 182; //피난사다리전송
+    public static final int SETTING_ITEM_SUB_DEVICE_LIVINGEM_KITCHEN_LIGHT		= SETTING_ITEM_TYPE_BASE + 183; //거실EM주방등
+    public static final int SETTING_ITEM_SUB_DEVICE_FACIAL_RECOG_MODULE 		= SETTING_ITEM_TYPE_BASE + 184; //안면인식 모듈
+    public static final int SETTING_ITEM_SUB_DEVICE_REMOTECALL_DOOROPEN_USE     = SETTING_ITEM_TYPE_BASE + 185; //방문객원격통화 - 현관문열림
+    public static final int SETTING_ITEM_SUB_DEVICE_REMOTECALL_HOMEVIEWER_USE   = SETTING_ITEM_TYPE_BASE + 186; //방문객원격통화 - 홈뷰어
+
+    public static final int SETTING_ITEM_SUB_DEVICE_SUBWALLPAD					= SETTING_ITEM_TYPE_BASE + 187; //서브월패드 설정
+    public static final int SETTING_ITEM_SUB_DEVICE_SUBWALLPAD_PSTN				= SETTING_ITEM_TYPE_BASE + 188; //서브월패드국선전화연동
+    public static final int SETTING_ITEM_SUB_DEVICE_SUBWALLPAD_LIGHT  			= SETTING_ITEM_TYPE_BASE + 189; //서브월패드조명연동
+    public static final int SETTING_ITEM_SUB_DEVICE_SUBWALLPAD_HEATER  			= SETTING_ITEM_TYPE_BASE + 190; //서브월패드난방연동
+    public static final int SETTING_ITEM_SUB_DEVICE_SUBWALLPAD_GAS  			= SETTING_ITEM_TYPE_BASE + 191; //서브월패드가스연동
+    public static final int SETTING_ITEM_SUB_DEVICE_SUBWALLPAD_DOORLOCK  		= SETTING_ITEM_TYPE_BASE + 192; //서브월패드도어락연동
+    public static final int SETTING_ITEM_SUB_DEVICE_SUBWALLPAD_VENTI  			= SETTING_ITEM_TYPE_BASE + 193; //서브월패드환기연동
+
+    public static final int SETTING_ITEM_SUB_DEVICE_STRANGER_RECORDING_USE      = SETTING_ITEM_TYPE_BASE + 194; //거동수상자녹화
+    public static final int SETTING_ITEM_SUB_DEVICE_EMERGENCY_CONTACT_SWITCH_USE = SETTING_ITEM_TYPE_BASE + 195; //비상접점스위치
+    public static final int SETTING_ITEM_SUB_DEVICE_SENDWEATHER_REVERSRE        = SETTING_ITEM_TYPE_BASE + 196; //서브폰날씨정보역순전송
+    public static final int SETTING_ITEM_SUB_DEVICE_SAFESTREETLIGHT_USE         = SETTING_ITEM_TYPE_BASE + 197; //안전가로등
+    public static final int SETTING_ITEM_SUB_DEVICE_BATHSENSOR_USE              = SETTING_ITEM_TYPE_BASE + 198; //욕실센서등
+    public static final int SETTING_ITEM_SUB_DEVICE_FRONT                       = SETTING_ITEM_TYPE_BASE + 199; //현관통화
+    public static final int SETTING_ITEM_SUB_DEVICE_LOBBY                       = SETTING_ITEM_TYPE_BASE + 200; //로비통화
+    public static final int SETTING_ITEM_SUB_DEVICE_GUARD                       = SETTING_ITEM_TYPE_BASE + 201; //경비통화
+    public static final int SETTING_ITEM_SUB_DEVICE_RESIDENCE                   = SETTING_ITEM_TYPE_BASE + 202; //이웃통화
+    public static final int SETTING_ITEM_SUB_DEVICE_PSTN                        = SETTING_ITEM_TYPE_BASE + 203; //국선통화
+    public static final int SETTING_ITEM_SUB_DEVICE_CALLHISTORY                 = SETTING_ITEM_TYPE_BASE + 204; //통화내역
+    public static final int SETTING_ITEM_SUB_DEVICE_VISITORPIC                  = SETTING_ITEM_TYPE_BASE + 205; //방문자사진
+    public static final int SETTING_ITEM_SUB_DEVICE_REMOTECALLSVR_WEBPORT       = SETTING_ITEM_TYPE_BASE + 206; //방문객원격통화WEB포트
+    public static final int SETTING_ITEM_SUB_DEVICE_LCDKEEPER_USE               = SETTING_ITEM_TYPE_BASE + 207; //LCD Keeper
+    public static final int SETTING_ITEM_SUB_DEVICE_VENTI_SERVICE_QR            = SETTING_ITEM_TYPE_BASE + 208; //환기케어서비스QR
+    public static final int SETTING_ITEM_SUB_DEVICE_THEDISABLED_HOME            = SETTING_ITEM_TYPE_BASE + 209; //장애인세대
+    public static final int SETTING_ITEM_SUB_DEVICE_CO2_REDUCTION               = SETTING_ITEM_TYPE_BASE + 210; // 이산화탄소절감률
+    public static final int SETTING_ITEM_SUB_DEVICE_HEATLIGHTROOM_NAMESET       = SETTING_ITEM_TYPE_BASE + 211; //난방조명방명칭설정
+    public static final int SETTING_ITEM_SUB_DEVICE_SMARTSWITCH_ENERGY          = SETTING_ITEM_TYPE_BASE + 212; //스마트스위치에너지종류
+    public static final int SETTING_ITEM_SUB_DEVICE_PURITY                      = SETTING_ITEM_TYPE_BASE + 213; //청정환기
+    public static final int SETTING_ITEM_SUB_DEVICE_LOUVER                      = SETTING_ITEM_TYPE_BASE + 214; //전동루버
+    public static final int SETTING_ITEM_SUB_DEVICE_BIOMETICS                   = SETTING_ITEM_TYPE_BASE + 215; //생체인식
+    public static final int SETTING_ITEM_SUB_DEVICE_POWERCONTROLLER             = SETTING_ITEM_TYPE_BASE + 216; //통합전력제어기
+    public static final int SETTING_ITEM_SUB_DEVICE_LH_GATEWAY                  = SETTING_ITEM_TYPE_BASE + 217; //LH게이트웨이
+    public static final int SETTING_ITEM_SUB_DEVICE_KAKAO_HOME                  = SETTING_ITEM_TYPE_BASE + 218; //카카오홈설정
+    public static final int SETTING_ITEM_SUB_DEVICE_SMARTIOTCAM_FLIP            = SETTING_ITEM_TYPE_BASE + 219; //스마트현관카메라좌우반전
+    public static final int SETTING_ITEM_SUB_DEVICE_CONSTRUCTION_SPECIAL_FUNC   = SETTING_ITEM_TYPE_BASE + 220; //건설사특화기능
+    public static final int SETTING_ITEM_SUB_DEVICE_MAIN_GUI_CTRL_USE           = SETTING_ITEM_TYPE_BASE + 221; //제어기능
+
+    public static final String[] SUB_DEVICE_ITEM_ID = {
+            "가스밸브"
+            , "디지털도어락"
+            , "온도조절기"
+            , "조명제어기"
+            , "환기시스템"
+            , "시스템에어컨"
+            , "전동커튼"
+            , "실시간검침기"
+            , "스마트스위치&일괄소등"
+            , "무선리모컨"
+            , "현관카메라"
+            , "공지사항"
+            , "날씨"
+            , "메모"
+            , "전자액자"
+            , "일정표"
+            , "주차확인"
+            , "시간설정"
+            , "원격검침"
+            , "뮤직"
+            , "영상재생"
+            , "CCTV"
+            , "명칭설정"
+            , "출동경비"
+            , "경비실영상통화"
+            , "엘리베이터"
+            , "현장특화기능"
+            , "월패드카메라"
+            , "무드등"
+            , "피난사다리"
+            , "동체설정"
+            , "알람발생"
+            , "서브폰국선연동"
+            , "현관폰사운드출력음량"
+            , "아이파크에너지"
+            , "대기전력차단스위치"
+            , "에너지모듈"
+            , "에너지제품군"
+            , "스마트키"
+            , "멀티스위치"
+            , "전기차충전"
+            , "LH특화기능"
+            , "U-City"
+            , "에너지관리서버"
+            , "제로에너지하우스"
+            , "재택모드시동체센서사용"
+            , "장애인모드"
+            , "엘리베이터핫키"
+            , "즐겨찾기아이콘종류"
+            , "통화타임아웃"
+            , "IP대역확장"
+            , "무선도어락문열림대기모드"
+            , "임대세대"
+            , "단지내임대세대"
+            , "BLE스마트키"
+            , "게이트웨이"
+            , "KCC디밍제어기"
+            , "매뉴얼"
+            , "신형단지서버"
+            , "피난사다리방송알림"
+            , "밴드위치확인"
+            , "제어시퀀스제한"
+            , "난방일체형"
+            , "가스감지5회알람"
+            , "서브폰통신속도"
+            , "메인GUI선택"
+            , "분전반"
+            , "센서AP"
+            , "층간소음센서"
+            , "안심통화"
+            , "방문객원격통화"
+            , "재실센서"
+            , "게이트웨이모델"
+            , "방문객차량등록"
+            , "모바일앱사용자인증"
+            , "통합스위치"
+            , "전기레인지"
+            , "인터넷미지원"
+            , "쿡탑콘센트"
+            , "스마트우편함"
+            , "스마트키친"
+            , "간편모드UX지원"
+            , "피난사다리전송"
+            , "거실EM주방등"
+            , "안면인식모듈"
+            , "방문객원격통화-현관문열림"
+            , "방문객원격통화-홈뷰어"
+            , "서브월패드"
+            , "서브월패드국선전화연동"
+            , "서브월패드조명연동"
+            , "서브월패드난방연동"
+            , "서브월패드가스연동"
+            , "서브월패드도어락연동"
+            , "서브월패드환기연동"
+            , "거동수상자녹화"
+            , "비상접점스위치"
+            , "서브폰날씨정보역순전송"
+            , "안전가로등"
+            , "욕실센서등"
+            , "현관"
+            , "로비"
+            , "경비"
+            , "이웃"
+            , "국선"
+            , "통화내역"
+            , "방문자사진"
+            , "방문객원격통화WEB포트"
+            , "LCDKEEPER"
+            , "환기케어서비스QR"
+            , "장애인세대"
+            , "이산화탄소절감률"
+            , "난방조명방명칭설정"
+            , "스마트스위치에너지종류"
+            , "청정환기"
+            , "전동루버"
+            , "생체인식"
+            , "통합전력제어기"
+            , "LH게이트웨이"
+            , "카카오홈"
+            , "스마트현관카메라좌우반전"
+            , "건설사특화기능"
+            , "제어기능"
+    };
+
+
+
+    public static final int SETTING_ITEM_APP_BASE = 201;
+    public static final int SETTING_ITEM_APP_WALLPADCONFIG      = SETTING_ITEM_APP_BASE + 0;
+    public static final int SETTING_ITEM_APP_DEVICESERVICE      = SETTING_ITEM_APP_BASE + 1;
+    public static final int SETTING_ITEM_APP_WALLPADEMERGENCY   = SETTING_ITEM_APP_BASE + 2;
+    public static final int SETTING_ITEM_APP_WALLPADENERGYCTRL  = SETTING_ITEM_APP_BASE + 3;
+    public static final int SETTING_ITEM_APP_WALLPADHOMECTRL    = SETTING_ITEM_APP_BASE + 4;
+    public static final int SETTING_ITEM_APP_WALLPADMAIN        = SETTING_ITEM_APP_BASE + 5;
+    public static final int SETTING_ITEM_APP_WALLPADOUTMODERUN  = SETTING_ITEM_APP_BASE + 6;
+    public static final int SETTING_ITEM_APP_WALLPADSECURITY    = SETTING_ITEM_APP_BASE + 7;
+    public static final int SETTING_ITEM_APP_IC_WALLPAD         = SETTING_ITEM_APP_BASE + 8;
+    public static final int SETTING_ITEM_APP_MANAGERSETTING     = SETTING_ITEM_APP_BASE + 9;
+    public static final int SETTING_ITEM_APP_WALLPADADDSERVICE  = SETTING_ITEM_APP_BASE + 10;
+
+    public static final int SETTING_ITEM_APP_WALLPADAUTOPICTURE = SETTING_ITEM_APP_BASE + 11;
+    public static final int SETTING_ITEM_APP_WALLPADLOGOUTPUT   = SETTING_ITEM_APP_BASE + 12;
+    public static final int SETTING_ITEM_APP_WALLPADUPDATER     = SETTING_ITEM_APP_BASE + 13;
+    public static final int SETTING_ITEM_APP_WALLPADAPPUPDATER  = SETTING_ITEM_APP_BASE + 14;
+
+
+
+    private Context mContext;
+    private Handler mHandler;
+    private int ModelType = Version.getModelType();
+
+    // constructor
+    public MainDatabaseManager(Context context, Handler handler, Object obj) {
+        mContext = context;
+        mHandler = handler;
+
+
+        if (mContext == null)
+            if (DEBUG)  Log.d(TAG, "MainDatabaseManager() (mContext == null)");
+            else
+            if (DEBUG)  Log.d(TAG, "MainDatabaseManager() (mContext != null)");
+
+        loadGuardList();
+    }
+
+
+    // return Context
+    public Context getContext() {
+        return mContext;
+    }
+
+
+    // return 동 BaseNumber
+    public int getDongBaseNumber() {
+        int ret = -1;
+
+        wallpaddbmgr dbmgr = new wallpaddbmgr(mContext);
+        AddressSet addc =  dbmgr.getAddressMGR();
+        dbmgr.closeDB();
+
+        int nDong = StringUtil.getInt(addc.Dong, false);
+        if (nDong > -1)
+            ret = (nDong/100) * 100;
+
+        return ret;
+    }
+
+
+    // return 동
+    public String getDongString() {
+        String result = "";
+
+        wallpaddbmgr dbmgr = new wallpaddbmgr(mContext);
+        AddressSet addc =  dbmgr.getAddressMGR();
+        dbmgr.closeDB();
+
+        result = addc.Dong;
+
+        if (DEBUG)  Log.d(TAG, "Dong : " + addc.Dong);
+        return result;
+    }
+
+
+    // return 호
+    public String getHoString() {
+        String result = "";
+
+        wallpaddbmgr dbmgr = new wallpaddbmgr(mContext);
+        AddressSet addc =  dbmgr.getAddressMGR();
+        dbmgr.closeDB();
+
+        result = addc.Ho;
+
+        if (DEBUG)  Log.d(TAG, "Ho : " + addc.Ho);
+        return result;
+    }
+
+
+
+
+
+
+
+
+
+    private List<GuardInfo> mGuardList = new ArrayList<GuardInfo>();
+
+    public class GuardInfo {
+        public static final int GUARD_TYPE_JURISDICTION         = 1;    //GuardAction.ACTION_JURISDICTION_GUARD;
+        public static final int GUARD_TYPE_FRONT_GATE           = 2;    //GuardAction.ACTION_FRONT_GATE_GUARD;
+        public static final int GUARD_TYPE_BACK_GATE            = 3;    //GuardAction.ACTION_BACK_GATE_GUARD;
+        public static final int GUARD_TYPE_MANAGEMENT_OFFICE    = 4;    //GuardAction.ACTION_MANAGEMENT_OFFICE;
+        public static final int GUARD_TYPE_ETC                  = 9;
+
+        private String mName;
+        private String mDong;
+        private String mHo;
+        private String mIP;
+        private int mType = GUARD_TYPE_ETC;
+        private String mSipID;
+
+        // constructor
+        public GuardInfo(String name, String dong, String ho, String ip, int type, String sipID) {
+            mName = name;
+            mDong = dong;
+            mHo = ho;
+            mIP = ip;
+            mType = type;
+            mSipID = sipID;
+        }
+
+        // set IP
+        public void setIP(String ip) {
+            mIP = ip;
+        }
+
+        // set Type
+        public void setType(int type) {
+            mType= type;
+        }
+
+        // set SipID
+        public void setSipID(String sipID) {
+            mSipID = sipID;
+        }
+
+
+        // get Name
+        public String getName() {
+            return mName;
+        }
+
+        // get IP
+        public String getIP() {
+            return mIP;
+        }
+
+        // get Type
+        public int getType() {
+            return mType;
+        }
+
+        // get SipID
+        public String getSipID() {
+            return mSipID;
+        }
+
+        // get 동
+        public String getDong() {
+            return mDong;
+        }
+
+        // get 호
+        public String getHo() {
+            return mHo;
+        }
+    }
+
+
+    // Forward Call을 수행할 GuardInfo를 return
+    public GuardInfo getForwardGuard() {
+        if (DEBUG)  Log.d(TAG, " getForwardGuard()");
+
+        if (mGuardList.size() > 0) {
+            for (int i=0; i<mGuardList.size(); i++) {
+                if (mGuardList.get(i).getType() == GuardInfo.GUARD_TYPE_JURISDICTION)
+                    return mGuardList.get(i);
+            }
+
+            return mGuardList.get(0);
+        }
+
+        return null;
+    }
+
+
+    // return GuardList
+    public List<GuardInfo>  getGuardList() {
+        return mGuardList;
+    }
+
+
+    // load GuardList
+    public void  loadGuardList() {
+        mGuardList.clear();
+
+        List<String[]> guardList = getSettingDataList(SETTING_ITEM_GUARD_LIST);
+        if (guardList != null) {
+            for (int i=0; i<guardList.size(); i++) {
+                GuardInfo guardInfo = createGuardInfo(guardList.get(i)[0], guardList.get(i)[1]);
+                if (guardInfo != null)
+                    mGuardList.add(guardInfo);
+            }
+        }
+        else {
+            GuardInfo guardInfo = getDefaultGuardInfo();
+            if (guardInfo != null)
+                mGuardList.add(guardInfo);
+        }
+
+        if (DEBUG)  {
+            Log.d(TAG, " mGuardList.size() : " + mGuardList.size());
+
+            for (int i=0; i<mGuardList.size(); i++) {
+                Log.d(TAG, " mGuardList.get(" + i + ") name : " + mGuardList.get(i).getName()
+                        + ", ip : " + mGuardList.get(i).getIP()
+                        + ", type : " + mGuardList.get(i).getType()
+                        + ", sipID : " + mGuardList.get(i).getSipID()
+                );
+            }
+        }
+    }
+
+
+    // get GuardName By Type
+    public String getGuardNameByType(int guardType) {
+        String strName = null;
+
+        switch (guardType) {
+            case GuardInfo.GUARD_TYPE_JURISDICTION:
+                strName = mContext.getString(R.string.guard_jurisdiction_name);
+                break;
+
+            case GuardInfo.GUARD_TYPE_FRONT_GATE:
+                strName = mContext.getString(R.string.guard_front_gate_name);
+                break;
+
+            case GuardInfo.GUARD_TYPE_BACK_GATE:
+                strName = mContext.getString(R.string.guard_back_gate_name);
+                break;
+
+            case GuardInfo.GUARD_TYPE_MANAGEMENT_OFFICE:
+                strName = mContext.getString(R.string.guard_management_office_name);
+                break;
+
+            case GuardInfo.GUARD_TYPE_ETC:
+                strName = mContext.getString(R.string.guard_etc_name);
+                break;
+        }
+
+        return strName;
+    }
+
+
+    // get GuardType By Name
+    public int getGuardTypeByName(String strName) {
+        int guardType = GuardInfo.GUARD_TYPE_ETC;
+
+        if (mContext.getString(R.string.guard_jurisdiction_name).equals(strName)) {
+            guardType = GuardInfo.GUARD_TYPE_JURISDICTION;
+        }
+        else if (mContext.getString(R.string.guard_front_gate_name).equals(strName)) {
+            guardType = GuardInfo.GUARD_TYPE_FRONT_GATE;
+        }
+        else if (mContext.getString(R.string.guard_back_gate_name).equals(strName)) {
+            guardType = GuardInfo.GUARD_TYPE_BACK_GATE;
+        }
+        else if (mContext.getString(R.string.guard_management_office_name).equals(strName)) {
+            guardType = GuardInfo.GUARD_TYPE_MANAGEMENT_OFFICE;
+        }
+
+        return guardType;
+    }
+
+
+    // get GuardType By SipID
+    public int getGuardTypeByID(String strSipID) {
+        int guardType = GuardInfo.GUARD_TYPE_ETC;
+
+
+        if (mGuardList != null) {
+            for (int i=0; i < mGuardList.size(); i++) {
+                if (mGuardList.get(i).getSipID().equals(strSipID)) {
+                    guardType = mGuardList.get(i).getType();
+                    break;
+                }
+            }
+        }
+
+        return guardType;
+    }
+
+
+    // get GuardInfo By SipID
+    public GuardInfo getGuardByID(String strSipID) {
+        GuardInfo guardInfo = null;
+
+        if (mGuardList != null) {
+            for (int i=0; i < mGuardList.size(); i++) {
+                if (mGuardList.get(i).getSipID().equals(strSipID)) {
+                    guardInfo = mGuardList.get(i);
+                    break;
+                }
+            }
+        }
+
+        return guardInfo;
+    }
+
+
+
+
+    // get default GuardInfo
+    private GuardInfo getDefaultGuardInfo() {
+        if (DEBUG)  Log.d(TAG, " getDefaultGuardInfo()");
+
+        GuardInfo guardInfo = null;
+
+        if (mContext == null)
+            if (DEBUG)  Log.d(TAG, " (mContext == null)");
+            else
+            if (DEBUG)  Log.d(TAG, " (mContext != null)");
+
+
+        String strName = "";
+        if(mContext!=null)
+            strName = mContext.getString(R.string.guard_jurisdiction_name);
+        int baseDongIP = -1;
+        if(mContext!=null)
+            baseDongIP = NetworkUtil.getDongBaseNumber(mContext);
+
+        if (baseDongIP > -1) {
+            String myIP =  NetworkUtil.getMyIP(mContext);
+            String[] arrString = StringUtil.split(myIP, ".");
+            if (arrString!=null && arrString.length > 3) {
+
+                if (DEBUG)  Log.d(TAG, " arrString.length : " + arrString.length);
+
+                if (DEBUG)  Log.d(TAG, " arrString[0] : " + arrString[0]);
+                if (DEBUG)  Log.d(TAG, " arrString[1] : " + arrString[1]);
+                if (DEBUG)  Log.d(TAG, " arrString[2] : " + arrString[2]);
+                if (DEBUG)  Log.d(TAG, " arrString[3] : " + arrString[3]);
+
+                int nDongIP = Const.DEFAULT_GUARD_IP_SECOND; //StringUtil.getInt(arrString[1], false);
+                if (nDongIP > -1) {
+                    String strDong = String.valueOf(nDongIP + baseDongIP);
+
+                    String strIP = arrString[0] + "."
+                            + nDongIP + "."
+                            + Const.DEFAULT_GUARD_IP_THIRD+ "."
+                            + Const.DEFAULT_GUARD_IP_FORTH;
+
+                    if (DEBUG)  Log.d(TAG, " strIP : " + strIP);
+
+                    String strSipID = makeSipID(Const.CALL_TYPE_GUARD, strDong, String.valueOf(Const.DEFAULT_GUARD_IP_FORTH));
+
+                    guardInfo = new GuardInfo(strName
+                            , strDong
+                            , "" + Const.DEFAULT_GUARD_IP_FORTH
+                            , strIP
+                            , GuardInfo.GUARD_TYPE_JURISDICTION
+                            , strSipID
+                    );
+                }
+            }
+        }
+
+        return guardInfo;
+    }
+
+
+
+    // create GuardInfo
+    private GuardInfo createGuardInfo(String strName, String strID) {
+        if (DEBUG)  Log.d(TAG, " createGuardInfo() strName : " + strName
+                + ", strID : " + strID
+        );
+
+        GuardInfo guardInfo = null;
+        boolean UseIP_Expantion = isUsedSettingDataSubDev(MainDatabaseManager.SETTING_ITEM_SUB_DEVICE_DANJI_CONFIG);
+
+        if(UseIP_Expantion == false) //IP대역 확장 사용하지 않는 경우
+        {
+            if ((strID.length() <= 2) || (strID.length() > 4)) {
+                return null;
+            }
+
+            int baseDongIP = NetworkUtil.getDongBaseNumber(mContext);
+            int guardType = getGuardTypeByName(strName);
+
+            int splitIdx = 2;
+            if (strID.length() == 3)
+                splitIdx = 1;
+
+            String strDongIP = strID.substring(0, splitIdx);
+            String strHo = strID.substring(splitIdx, strID.length());
+
+            int nDongIP = StringUtil.getInt(strDongIP, false);
+
+            if ((baseDongIP > -1) && (nDongIP > -1)) {
+                String myIP =  NetworkUtil.getMyIP(mContext);
+                String[] arrString = StringUtil.split(myIP, ".");
+                if (arrString!=null && arrString.length > 3) {
+
+                    if (DEBUG)  Log.d(TAG, " arrString.length : " + arrString.length);
+
+                    if (DEBUG)  Log.d(TAG, " arrString[0] : " + arrString[0]);
+                    if (DEBUG)  Log.d(TAG, " arrString[1] : " + arrString[1]);
+                    if (DEBUG)  Log.d(TAG, " arrString[2] : " + arrString[2]);
+                    if (DEBUG)  Log.d(TAG, " arrString[3] : " + arrString[3]);
+
+                    String strDong = String.valueOf(nDongIP + baseDongIP);
+                    String strIP = arrString[0] + "."
+                            + nDongIP + "."
+                            + Const.DEFAULT_GUARD_IP_THIRD+ "."
+                            + strHo;
+
+                    if (DEBUG)  Log.d(TAG, strName + " : " + strIP);
+
+                    String strSipID = makeSipID(Const.CALL_TYPE_GUARD, strDong, strHo);
+
+                    guardInfo = new GuardInfo(strName
+                            , strDong
+                            , strHo
+                            , strIP
+                            , guardType
+                            , strSipID);
+                }
+            }
+
+            return guardInfo;
+        }
+        else // IP확장 사용 하는 경우
+        {
+            int guardType = getGuardTypeByName(strName);
+
+            String[] arrString = StringUtil.split(strID, ".");
+            String strDong = null;
+            String strHo = null;
+
+            if (arrString.length > 3)
+            {
+                int[] tempInt = new int[4];
+                tempInt[0] = Integer.parseInt(arrString[0]);
+                tempInt[1] = Integer.parseInt(arrString[1]);
+                tempInt[2] = Integer.parseInt(arrString[2]);
+                tempInt[3] = Integer.parseInt(arrString[3]);
+
+                int IntDong = (tempInt[0] * 100) + tempInt[1];
+                strDong = String.valueOf(IntDong);
+                strHo = arrString[3];
+
+                String strSipID = makeSipID(Const.CALL_TYPE_GUARD, strDong, strHo);
+                String strIP = strID;
+
+                guardInfo = new GuardInfo(strName, strDong, strHo, strIP, guardType, strSipID);
+            }
+        }
+
+        return guardInfo;
+
+    }
+
+
+
+    // make GuardInfo
+    public GuardInfo makeGuardInfo(int guardType, String strSipID) {
+        if (DEBUG)  Log.d(TAG, " makeGuardInfo() guardType : " + guardType
+                + ", strSipID : " + strSipID
+        );
+
+        if ((strSipID == null) || (strSipID.length() < 20)) {
+            return null;
+        }
+
+        GuardInfo guardInfo = null;
+
+
+        String[] arrDongHo = StringUtil.getDongHo(mContext, strSipID);
+        if ((arrDongHo != null) && (arrDongHo.length > 4)) {
+            String strDong = "" + StringUtil.getInt(arrDongHo[2], false);
+            String strHo = "" + StringUtil.getInt(arrDongHo[3], false);
+
+            int baseDongIP = NetworkUtil.getDongBaseNumber(mContext);
+            String strName = getGuardNameByType(guardType);
+
+            if (DEBUG)  Log.d(TAG, " strName : " + strName);
+
+            int splitIdx = 2;
+
+            int nDongIP = StringUtil.getInt(strDong, false);
+
+            if ((baseDongIP > -1) && (nDongIP > -1)) {
+                String myIP =  NetworkUtil.getMyIP(mContext);
+                String[] arrString = StringUtil.split(myIP, ".");
+                if (arrString!=null && arrString.length > 3) {
+
+                    if (DEBUG)  Log.d(TAG, " arrString.length : " + arrString.length);
+
+                    if (DEBUG)  Log.d(TAG, " arrString[0] : " + arrString[0]);
+                    if (DEBUG)  Log.d(TAG, " arrString[1] : " + arrString[1]);
+                    if (DEBUG)  Log.d(TAG, " arrString[2] : " + arrString[2]);
+                    if (DEBUG)  Log.d(TAG, " arrString[3] : " + arrString[3]);
+
+                    nDongIP = nDongIP - baseDongIP;
+                    String strIP = arrString[0] + "."
+                            + nDongIP + "."
+                            + Const.DEFAULT_GUARD_IP_THIRD+ "."
+                            + strHo;
+
+                    if (DEBUG)  Log.d(TAG, strName + " : " + strIP);
+
+                    guardInfo = new GuardInfo(strName
+                            , strDong
+                            , strHo
+                            , strIP
+                            , guardType
+                            , strSipID);
+                }
+            }
+        }
+
+        return guardInfo;
+    }
+
+
+/*
+    public String getSipIPByID(String strSipID) {
+        String strIP = null;
+
+        int sipCallType = SipCallController.getSipCallTypeByID(strSipID);
+        switch (sipCallType) {
+            case Const.CALL_TYPE_LOBBY:
+                strIP = getLobbyIPByID(strSipID);
+                break;
+
+            case Const.CALL_TYPE_GUARD:
+                strIP = getGuardIPByID(strSipID);
+                break;
+
+            case Const.CALL_TYPE_NEIB:
+                strIP = getNeiIPByID(strSipID);
+                break;
+        }
+
+        return strIP;
+    }
+*/
+
+
+    // get LobbyIP By SipID
+    public String getLobbyIPByID(String strSipID) {
+        if (DEBUG)  Log.d(TAG, " getLobbyIPByID() strSipID : " + strSipID);
+
+        if ((strSipID == null) || (strSipID.length() < 20)) {
+            return null;
+        }
+
+        String strIP = null;
+
+        String[] arrDongHo = StringUtil.getDongHo(mContext, strSipID);
+        if ((arrDongHo != null) && (arrDongHo.length > 4)) {
+            int nDongIP = StringUtil.getInt(arrDongHo[2], false);
+            int nHo = StringUtil.getInt(arrDongHo[3], false);
+
+            int nIP_Third = -1;
+            int nIP_Forth = -1;
+            if (nHo > -1) {
+                nIP_Third = (nHo/100);
+                nIP_Forth = (nHo - (nIP_Third *100));
+            }
+
+            int baseDongIP = getDongBaseNumber();
+
+            if ((baseDongIP > -1) && (nDongIP > -1) && (nIP_Third > -1) && (nIP_Forth > -1)) {
+                String myIP =  NetworkUtil.getMyIP(mContext);
+                String[] arrString = StringUtil.split(myIP, ".");
+                if (arrString!=null && arrString.length > 3) {
+
+                    if (DEBUG)  Log.d(TAG, " arrString.length : " + arrString.length);
+
+                    if (DEBUG)  Log.d(TAG, " arrString[0] : " + arrString[0]);
+                    if (DEBUG)  Log.d(TAG, " arrString[1] : " + arrString[1]);
+                    if (DEBUG)  Log.d(TAG, " arrString[2] : " + arrString[2]);
+                    if (DEBUG)  Log.d(TAG, " arrString[3] : " + arrString[3]);
+
+                    nDongIP = nDongIP - baseDongIP;
+                    strIP = arrString[0] + "."
+                            + nDongIP + "."
+                            + Const.DEFAULT_LOBBY_IP_THIRD+ "."
+                            + nIP_Forth;
+
+                }
+            }
+        }
+
+        return strIP;
+    }
+
+
+    // get NeiIP By SipID
+    public String getNeiIPByID(String strSipID) {
+        if (DEBUG)  Log.d(TAG, " getNeiIPByID() strSipID : " + strSipID);
+
+        if ((strSipID == null) || (strSipID.length() < 20)) {
+            return null;
+        }
+
+        String strIP = null;
+
+        String[] arrDongHo = StringUtil.getDongHo(mContext, strSipID);
+        if ((arrDongHo != null) && (arrDongHo.length > 4)) {
+            int nDongIP = StringUtil.getInt(arrDongHo[2], false);
+            int nHo = StringUtil.getInt(arrDongHo[3], false);
+
+            int nIP_Third = -1;
+            int nIP_Forth = -1;
+            if (nHo > -1) {
+                nIP_Third = (nHo/100);
+                nIP_Forth = (nHo - (nIP_Third *100));
+            }
+
+            int baseDongIP = getDongBaseNumber();
+
+            if ((baseDongIP > -1) && (nDongIP > -1) && (nIP_Third > -1) && (nIP_Forth > -1)) {
+                String myIP =  NetworkUtil.getMyIP(mContext);
+                String[] arrString = StringUtil.split(myIP, ".");
+                if (arrString!=null && arrString.length > 3) {
+
+                    if (DEBUG)  Log.d(TAG, " arrString.length : " + arrString.length);
+
+                    if (DEBUG)  Log.d(TAG, " arrString[0] : " + arrString[0]);
+                    if (DEBUG)  Log.d(TAG, " arrString[1] : " + arrString[1]);
+                    if (DEBUG)  Log.d(TAG, " arrString[2] : " + arrString[2]);
+                    if (DEBUG)  Log.d(TAG, " arrString[3] : " + arrString[3]);
+
+                    nDongIP = nDongIP - baseDongIP;
+                    strIP = arrString[0] + "."
+                            + nDongIP + "."
+                            + nIP_Third + "."
+                            + nIP_Forth;
+
+                }
+            }
+        }
+
+        return strIP;
+    }
+
+
+    // get GuardIP By SipID
+    public String getGuardIPByID(String strSipID) {
+        if (DEBUG)  Log.d(TAG, " getGuardIPByID() strSipID : " + strSipID);
+
+        if ((strSipID == null) || (strSipID.length() < 20)) {
+            return null;
+        }
+
+        String strIP = null;
+
+        GuardInfo GuardInfo = getGuardByID(strSipID);
+        if (GuardInfo != null)
+            strIP = GuardInfo.getIP();
+
+        return strIP;
+    }
+
+
+    // make SipID
+    public String makeSipID(int sipCallType, String strDong, String strHo) {
+        if (DEBUG)  Log.d(TAG, " makeSipID() sipCallType : " + sipCallType
+                + ", strDong : " + strDong
+                + ", strHo : " + strHo
+        );
+
+        String ret = "";
+
+        String strSiteCode = getSettingData(SETTING_ITEM_SITE_CODE);
+        if ((strSiteCode == null) || (strSiteCode.length() == 0))
+            strSiteCode = Const.SITE_CODE_DEFAULT_VALUE;
+
+        String strType = "";
+        switch(sipCallType) {
+            case Const.CALL_TYPE_LOBBY:
+                strType = Const.SIP_LOBBY_DEVICE_TYPE;
+                break;
+
+            case Const.CALL_TYPE_GUARD:
+                strType = Const.SIP_GUARD_DEVICE_TYPE;
+                break;
+
+            default:
+            case Const.CALL_TYPE_NEIB:
+                strType = Const.SIP_NEI_DEVICE_TYPE;
+                break;
+        }
+
+        for (int i = 4 - strDong.length(); i > 0; i--) {
+            strDong = "0" + strDong;
+        }
+
+        for (int i = 4 - strHo.length(); i > 0; i--) {
+            strHo = "0" + strHo;
+        }
+
+        String strPostNumber = "01";
+
+        ret = strSiteCode + "_"
+                + strType + "_"
+                + strDong + "_"
+                + strHo + "_"
+                + strPostNumber
+        ;
+
+        if (DEBUG)  Log.d(TAG, " makeSipID() ret : " + ret);
+
+        return ret;
+    }
+
+
+
+
+
+
+
+
+
+    // 외출모드 여부
+    public boolean isGoOutMode() {
+        boolean ret = false;
+
+        WallpadStatusData wallpadStatusData = new WallpadStatusData(mContext);
+
+        try {
+            if (wallpadStatusData.GetAlarmStatus() == WallpadStatusData.GUARD_OUT)
+                ret = true;
+        } catch (RuntimeException re) {
+            Log.e(TAG, re.toString());
+        }
+        catch (Exception e) {
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+
+        wallpadStatusData.closeDB();
+
+        if (DEBUG)  Log.d(TAG, " isGoOutMode() " + ret);
+
+        return ret;
+    }
+
+
+
+/*
+        public String[] GetSettingData(String Name)
+        {
+               String query = "select name, value from "+SettingTBL+" where name = \""+Name+"\";";
+               Cursor cursor = wdb.rawQuery(query, null);
+               while (cursor.moveToNext())
+               {
+                       String[] getdata = new String[]{cursor.getString(0),cursor.getString(1)};
+                       return getdata;
+               }
+               return null;
+        }
+*/
+
+
+    // get SettingData
+    public String getSettingData(int itemType) {
+        if (DEBUG)  Log.d(TAG, " getSettingData() itemType : " + itemType);
+
+        int Data_or_Version = 0; //1이면 APP버전정보, 0이면 기타.
+        String ret = null;
+        String[] getData = null;
+        String getVersion = null;
+        wallpaddbmgr WallpadDBMGR = new wallpaddbmgr(mContext);
+        WallpadDeviceSet devset = new WallpadDeviceSet(mContext);
+
+        if (devset != null) {
+            switch (itemType) {
+                case SETTING_ITEM_VER_SETTING:
+                    getData = devset.GetSettingData("ver_setting");
+                    break;
+
+                case SETTING_ITEM_LOG_ENABLE:
+                    getData = devset.GetSettingData("log_enable");
+                    break;
+
+                case SETTING_ITEM_BEAT_TIME:
+                    getData = devset.GetSettingData("beat_time");
+                    break;
+
+                case SETTING_ITEM_DATETIME:
+                    getData = devset.GetSettingData("datetime");
+                    break;
+
+//                case SETTING_ITEM_SECURITY_STATE:
+//                    getData = devset.GetSettingData("security_state");
+//                    break;
+
+                case SETTING_ITEM_SITE_CODE:
+                    getData = devset.GetSettingData("site_code");
+                    break;
+
+
+                case SETTING_ITEM_APP_WALLPADCONFIG:
+                    getVersion = WallpadDBMGR.GetVersionData(Const.AppName_WallPadConfig);
+                    Data_or_Version = 1;
+                    break;
+
+                case SETTING_ITEM_APP_DEVICESERVICE:
+                    getVersion = WallpadDBMGR.GetVersionData(Const.AppName_WallPadDeviceService);
+                    Data_or_Version = 1;
+                    break;
+
+                case SETTING_ITEM_APP_WALLPADEMERGENCY:
+                    getVersion = WallpadDBMGR.GetVersionData(Const.AppName_WallPadEmergency);
+                    Data_or_Version = 1;
+                    break;
+
+                case SETTING_ITEM_APP_WALLPADENERGYCTRL:
+                    getVersion = WallpadDBMGR.GetVersionData(Const.AppName_WallPadEnergyCtrl);
+                    Data_or_Version = 1;
+                    break;
+
+                case SETTING_ITEM_APP_WALLPADHOMECTRL:
+                    getVersion = WallpadDBMGR.GetVersionData(Const.AppName_WallPadHomeCtrl);
+                    Data_or_Version = 1;
+                    break;
+
+                case SETTING_ITEM_APP_WALLPADMAIN:
+                    getVersion = WallpadDBMGR.GetVersionData(Const.AppName_WallPadMain);
+                    Data_or_Version = 1;
+                    break;
+
+                case SETTING_ITEM_APP_WALLPADOUTMODERUN:
+                    getVersion = WallpadDBMGR.GetVersionData(Const.AppName_WallPadOutModerun);
+                    Data_or_Version = 1;
+                    break;
+
+                case SETTING_ITEM_APP_WALLPADSECURITY:
+                    getVersion = WallpadDBMGR.GetVersionData(Const.AppName_WallPadSecurity);
+                    Data_or_Version = 1;
+                    break;
+
+                case SETTING_ITEM_APP_IC_WALLPAD:
+                    getVersion = WallpadDBMGR.GetVersionData(Const.AppName_WallPadCall_hdc);
+                    Data_or_Version = 1;
+                    break;
+
+                case SETTING_ITEM_APP_MANAGERSETTING:
+                    getVersion = WallpadDBMGR.GetVersionData(Const.AppName_WallPadManagerSetting);
+                    Data_or_Version = 1;
+                    break;
+
+                case SETTING_ITEM_APP_WALLPADADDSERVICE:
+                    getVersion = WallpadDBMGR.GetVersionData(Const.AppName_WallPadAddservice);
+                    Data_or_Version = 1;
+                    break;
+
+                case SETTING_ITEM_APP_WALLPADAUTOPICTURE:
+                    getVersion = WallpadDBMGR.GetVersionData(Const.AppName_WallPadAutopicture);
+                    Data_or_Version = 1;
+                    break;
+
+                case SETTING_ITEM_APP_WALLPADLOGOUTPUT:
+                    getVersion = WallpadDBMGR.GetVersionData(Const.AppName_WallPadLogOutput);
+                    Data_or_Version = 1;
+                    break;
+
+                case SETTING_ITEM_APP_WALLPADUPDATER:
+                    getVersion = WallpadDBMGR.GetVersionData(Const.AppName_WallPadUpdater);
+                    Data_or_Version = 1;
+                    break;
+
+                case SETTING_ITEM_APP_WALLPADAPPUPDATER:
+                    getVersion = WallpadDBMGR.GetVersionData(Const.AppName_WallPadAppUpdater);
+                    Data_or_Version = 1;
+                    break;
+
+            }
+
+            devset.closeDB();
+            WallpadDBMGR.closeDB();
+        }
+
+        if(Data_or_Version == 0)
+        {
+            if ((getData != null) && getData.length > 1) {
+                ret = getData[1];
+            }
+        }
+        else if (Data_or_Version == 1)
+        {
+            ret = getVersion;
+        }
+
+        return ret;
+    }
+
+
+    // get SettingDataList
+    public List<String[]> getSettingDataList(int itemType) {
+        if (DEBUG)  Log.d(TAG, " getSettingDataList() itemType : " + itemType);
+
+        List<String[]> ret = null;
+
+        WallpadDeviceSet devset = new WallpadDeviceSet(mContext);
+        if (devset != null) {
+            switch (itemType) {
+                case SETTING_ITEM_GUARD_LIST:
+                    ret = devset.GetSettingGroupData("guard_list");
+                    break;
+
+                case SETTING_ITEM_IP_TABLE_LIST:
+                    ret = devset.GetSettingGroupData("ip_table");
+                    break;
+
+                case SETTING_ITEM_SENSOR_STATE_LIST:
+                    ret = devset.GetSettingGroupData("sensor_state");
+                    break;
+
+                case SETTING_ITEM_SUB_DEVICE_LIST:
+                    ret = devset.GetSettingGroupData("subdev_list");
+                    break;
+            }
+
+            devset.closeDB();
+        }
+
+        if ((ret == null) || (ret.size() <= 0))
+            return null;
+
+        return ret;
+    }
+
+
+    // get SubDevID
+    public String getSubDevID(int itemType) {
+        String result = null;
+
+        switch (itemType) {
+            case SETTING_ITEM_SUB_DEVICE_GAS:
+            case SETTING_ITEM_SUB_DEVICE_DOOR_LOCK:
+            case SETTING_ITEM_SUB_DEVICE_HEATER:
+            case SETTING_ITEM_SUB_DEVICE_LIGHT:
+            case SETTING_ITEM_SUB_DEVICE_VENTILATION:
+            case SETTING_ITEM_SUB_DEVICE_SYSTEM_AIRCON:
+            case SETTING_ITEM_SUB_DEVICE_ELECTRONICALLY_CURTAIN:
+            case SETTING_ITEM_SUB_DEVICE_REALTIME_MEASURING_METER:
+            case SETTING_ITEM_SUB_DEVICE_SMART_SWITCH_LIGHT_AND_BATCH_CONTROL:
+            case SETTING_ITEM_SUB_DEVICE_WIRELESS_REMOCON:
+            case SETTING_ITEM_SUB_DEVICE_DOOR_CAMERA:
+            case SETTING_ITEM_SUB_DEVICE_NOTICE:
+            case SETTING_ITEM_SUB_DEVICE_WEATHER:
+            case SETTING_ITEM_SUB_DEVICE_MENO:
+            case SETTING_ITEM_SUB_DEVICE_ELECTRONIC_PICTURE_FRAMES:
+            case SETTING_ITEM_SUB_DEVICE_SCHEDULE:
+            case SETTING_ITEM_SUB_DEVICE_PARKING:
+            case SETTING_ITEM_SUB_DEVICE_TIME_SETTING:
+            case SETTING_ITEM_SUB_DEVICE_REMOTE_MESURING_METER:
+            case SETTING_ITEM_SUB_DEVICE_MUSIC:
+            case SETTING_ITEM_SUB_DEVICE_VIDEO_PLAY:
+            case SETTING_ITEM_SUB_DEVICE_CCTV:
+            case SETTING_ITEM_SUB_DEVICE_SET_NAMING:
+            case SETTING_ITEM_SUB_DEVICE_CUSTOMER_SERVICE_GUARD:
+            case SETTING_ITEM_SUB_DEVICE_GUARD_VIDEO_CALL:
+            case SETTING_ITEM_SUB_DEVICE_ELEVATOR:
+            case SETTING_ITEM_SUB_DEVICE_FIELD_TYPE:
+            case SETTING_ITEM_SUB_DEVICE_WALLPAD_CAMERA:
+            case SETTING_ITEM_SUB_DEVICE_MOOD_LIGHT:
+            case SETTING_ITEM_SUB_DEVICE_ESCAPE_LADDER:
+            case SETTING_ITEM_SUB_DEVICE_MOTION_SETTING:
+            case SETTING_ITEM_SUB_DEVICE_ALART_ALARM:
+            case SETTING_ITEM_SUB_DEVICE_PSTN_CALL:
+            case SETTING_ITEM_SUB_DEVICE_DOOR_PHONE_OUTPUT_VOLUME:
+            case SETTING_ITEM_SUB_DEVICE_IPARK_ENERGY:
+            case SETTING_ITEM_SUB_DEVICE_IDLE_POWER_SAVING_SWITCH:
+            case SETTING_ITEM_SUB_DEVICE_ENERGY_MODULE:
+            case SETTING_ITEM_SUB_DEVICE_ENERGY_DEVICES:
+            case SETTING_ITEM_SUB_DEVICE_SMART_KEY:
+            case SETTING_ITEM_SUB_DEVICE_MULTI_SWITCH:
+            case SETTING_ITEM_SUB_DEVICE_ELECTRIC_CAR:
+            case SETTING_ITEM_SUB_DEVICE_LH_ADD_FUNCTION:
+            case SETTING_ITEM_SUB_DEVICE_LH_U_CITY:
+            case SETTING_ITEM_SUB_DEVICE_ENERGY_SERVER_CONNECT:
+            case SETTING_ITEM_SUB_DEVICE_ZERO_ENERGY_HOUSE:
+            case SETTING_ITEM_SUB_DEVICE_SECURITY_INDOORMODE_SENSOR_USE:
+            case SETTING_ITEM_SUB_DEVICE_HANDICAPPED:
+            case SETTING_ITEM_SUB_DEVICE_ELEVATOR_MAINSCREEN_USE:
+            case SETTING_ITEM_SUB_DEVICE_BOOKMARK_TYPE:
+            case SETTING_ITEM_SUB_DEVICE_SUBPHONE_BAUDRATE:
+            case SETTING_ITEM_SUB_DEVICE_CALL_TIMEOUT:
+            case SETTING_ITEM_SUB_DEVICE_DANJI_CONFIG:
+            case SETTING_ITEM_SUB_DEVICE_WIRELESS_DOORLOCK_OPENDELAY:
+            case SETTING_ITEM_SUB_DEVICE_RENT_HOME:
+            case SETTING_ITEM_SUB_DEVICE_DANJI_RENT_HOME_USE:
+            case SETTING_ITEM_SUB_DEVICE_BLE_SMARTKEY:
+            case SETTING_ITEM_SUB_DEVICE_GATEWAY:
+            case SETTING_ITEM_SUB_DEVICE_DIMMING_KCC:
+            case SETTING_ITEM_SUB_DEVICE_MANUAL:
+            case SETTING_ITEM_SUB_DEVICE_NEWSERVER:
+            case SETTING_ITEM_SUB_DEVICE_ESCAPE_LADDER_NOTI:
+            case SETTING_ITEM_SUB_DEVICE_CTR_SEQUENCE_LIMIT:
+            case SETTING_ITEM_SUB_DEVICE_HEAT_ONEDEVICE:
+            case SETTING_ITEM_SUB_DEVICE_GAS_DETECT_5TIME:
+            case SETTING_ITEM_SUB_DEVICE_MAIN_GUI_SELECT:
+            case SETTING_ITEM_SUB_DEVICE_DISTRIBUTION:
+            case SETTING_ITEM_SUB_DEVICE_SENSOR_AP:
+            case SETTING_ITEM_SUB_DEVICE_INTERLAYER_NOISE:
+            case SETTING_ITEM_SUB_DEVICE_RELIEF_CALL:
+            case SETTING_ITEM_SUB_DEVICE_REMOTE_CALL:
+            case SETTING_ITEM_SUB_DEVICE_INNERROOM_DETECT_SENSOR:
+            case SETTING_ITEM_SUB_DEVICE_GATEWAY_MODEL_KIND:
+            case SETTING_ITEM_SUB_DEVICE_CARGUEST:
+            case SETTING_ITEM_SUB_DEVICE_MOBILE_APP_USER_AUTH:
+            case SETTING_ITEM_SUB_DEVICE_INTEGRATED_SWITCH:
+            case SETTING_ITEM_SUB_DEVICE_ELECTRIC_RANGE:
+            case SETTING_ITEM_SUB_DEVICE_BAND_LOCATION:
+            case SETTING_ITEM_SUB_DEVICE_NON_INTERNET_SUPPORT:
+            case SETTING_ITEM_SUB_DEVICE_COOKTOP_CONCENT:
+            case SETTING_ITEM_SUB_DEVICE_SMARTPOST_USE:
+            case SETTING_ITEM_SUB_DEVICE_SMARTKITCHEN_USE:
+            case SETTING_ITEM_SUB_DEVICE_EASYMODEUX_USE:
+            case SETTING_ITEM_SUB_DEVICE_ESCAPELADDER_DOWN_SEND:
+            case SETTING_ITEM_SUB_DEVICE_LIVINGEM_KITCHEN_LIGHT:
+            case SETTING_ITEM_SUB_DEVICE_FACIAL_RECOG_MODULE:
+            case SETTING_ITEM_SUB_DEVICE_REMOTECALL_DOOROPEN_USE:
+            case SETTING_ITEM_SUB_DEVICE_REMOTECALL_HOMEVIEWER_USE:
+            case SETTING_ITEM_SUB_DEVICE_SUBWALLPAD:
+            case SETTING_ITEM_SUB_DEVICE_SUBWALLPAD_PSTN:
+            case SETTING_ITEM_SUB_DEVICE_SUBWALLPAD_LIGHT:
+            case SETTING_ITEM_SUB_DEVICE_SUBWALLPAD_HEATER:
+            case SETTING_ITEM_SUB_DEVICE_SUBWALLPAD_GAS:
+            case SETTING_ITEM_SUB_DEVICE_SUBWALLPAD_DOORLOCK:
+            case SETTING_ITEM_SUB_DEVICE_SUBWALLPAD_VENTI:
+            case SETTING_ITEM_SUB_DEVICE_STRANGER_RECORDING_USE:
+            case SETTING_ITEM_SUB_DEVICE_EMERGENCY_CONTACT_SWITCH_USE:
+            case SETTING_ITEM_SUB_DEVICE_SENDWEATHER_REVERSRE:
+            case SETTING_ITEM_SUB_DEVICE_SAFESTREETLIGHT_USE:
+            case SETTING_ITEM_SUB_DEVICE_BATHSENSOR_USE:
+            case SETTING_ITEM_SUB_DEVICE_FRONT:
+            case SETTING_ITEM_SUB_DEVICE_LOBBY:
+            case SETTING_ITEM_SUB_DEVICE_GUARD:
+            case SETTING_ITEM_SUB_DEVICE_RESIDENCE:
+            case SETTING_ITEM_SUB_DEVICE_PSTN:
+            case SETTING_ITEM_SUB_DEVICE_CALLHISTORY:
+            case SETTING_ITEM_SUB_DEVICE_VISITORPIC:
+            case SETTING_ITEM_SUB_DEVICE_REMOTECALLSVR_WEBPORT:
+            case SETTING_ITEM_SUB_DEVICE_LCDKEEPER_USE:
+            case SETTING_ITEM_SUB_DEVICE_VENTI_SERVICE_QR:
+            case SETTING_ITEM_SUB_DEVICE_THEDISABLED_HOME:
+            case SETTING_ITEM_SUB_DEVICE_CO2_REDUCTION:
+            case SETTING_ITEM_SUB_DEVICE_HEATLIGHTROOM_NAMESET:
+            case SETTING_ITEM_SUB_DEVICE_SMARTSWITCH_ENERGY:
+            case SETTING_ITEM_SUB_DEVICE_PURITY:
+            case SETTING_ITEM_SUB_DEVICE_LOUVER:
+            case SETTING_ITEM_SUB_DEVICE_BIOMETICS:
+            case SETTING_ITEM_SUB_DEVICE_POWERCONTROLLER:
+            case SETTING_ITEM_SUB_DEVICE_LH_GATEWAY:
+            case SETTING_ITEM_SUB_DEVICE_KAKAO_HOME:
+            case SETTING_ITEM_SUB_DEVICE_SMARTIOTCAM_FLIP:
+            case SETTING_ITEM_SUB_DEVICE_CONSTRUCTION_SPECIAL_FUNC:
+            case SETTING_ITEM_SUB_DEVICE_MAIN_GUI_CTRL_USE:
+                result = SUB_DEVICE_ITEM_ID[itemType - SETTING_ITEM_SUB_DEVICE_GAS];
+                break;
+        }
+
+        return result;
+    }
+
+
+    // parse DevInfo
+    public List<String> parseDevInfo(String devInfo) {
+        List<String> result = null;
+
+        Log.d(TAG, "parseDevInfo() devInfo : " + devInfo);
+
+        if (devInfo == null)
+            return null;
+
+
+        try {
+            int idx = devInfo.indexOf("(");
+            if (idx > 0) {
+                result = new ArrayList();
+
+                String devNo = devInfo.substring(0, idx);
+                result.add(devNo.trim());
+
+                int startIdx = devInfo.indexOf(":", idx + 1);
+                if (startIdx > 0) {
+                    String circuitCount = devInfo.substring(idx + 1, startIdx);
+                    result.add(circuitCount.trim());
+                }
+                idx = startIdx;
+
+
+                int endIdx = devInfo.lastIndexOf(")");
+
+                Log.d(TAG, "startIdx : " + startIdx
+                        + ", endIdx : " + endIdx
+                );
+
+                if ((startIdx > 0) && (endIdx > 0)) {
+
+                    int midIdx = devInfo.indexOf("(", startIdx + 1);
+
+                    Log.d(TAG, "midIdx : " + midIdx);
+
+                    while (midIdx > startIdx) {
+                        String title = devInfo.substring(startIdx + 1, midIdx);
+                        result.add(title.trim());
+
+                        idx = devInfo.indexOf(")", midIdx + 1);
+                        if (idx > 0) {
+                            String detail = devInfo.substring(midIdx + 1, idx);
+                            result.add(detail.trim());
+                        }
+
+                        startIdx = idx;
+
+                        midIdx = devInfo.indexOf("(", idx + 1);
+
+                        Log.d(TAG, "midIdx : " + midIdx
+                                + ", startIdx : " + startIdx
+                        );
+                    }
+                }
+            }
+        } catch (RuntimeException re) {
+            Log.e(TAG, re.toString());
+        }
+        catch (Exception e) {
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+
+
+        if (DEBUG) {
+            if (result != null) {
+                Log.d(TAG, "parseDevInfo() result.size() : " + result.size());
+
+                for (int i=0; i<result.size(); i++) {
+                    Log.d(TAG, "result(" + i + ") : " + result.get(i));
+                }
+            }
+        }
+
+
+        return result;
+    }
+
+
+    // get SettingDataSubDev
+    public List<String> getSettingDataSubDev(int itemType) {
+        //여기서 가지고온 수많은 데이터 중 하나의 정보를 확인하는것
+        List<String[]> subDevList = getSettingDataList(SETTING_ITEM_SUB_DEVICE_LIST);
+        List<String> result = null;
+        String devInfo = null;
+        String deviceID = null;
+
+        if ((subDevList != null) && (subDevList.size() > 0)) {
+            deviceID = getSubDevID(itemType);
+
+            if (deviceID != null) {
+                for(int i=0; i<subDevList.size(); i++) {
+
+                    Log.d(TAG, "subDevList() .get(" + i + ")[0] : " + subDevList.get(i)[0]
+                            + ", .get(" + i + ")[1] : " + subDevList.get(i)[1]
+                    );
+
+
+                    if (deviceID.equals(subDevList.get(i)[0])) {
+                        devInfo = subDevList.get(i)[1];
+                        break;
+                    }
+                }
+            }
+        }
+
+        Log.d(TAG, "getSettingDataSubDev() itemType : " + itemType
+                + " " + deviceID
+                + ", devInfo : " + devInfo);
+
+        if (Const.ENABLED_SUB_DEVICE_DEFAULT_VALUE == true) {
+            if (devInfo == null) {
+                switch (itemType) {
+                    case SETTING_ITEM_SUB_DEVICE_GAS:
+                        devInfo = "1(1:가스밸브(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_DOOR_LOCK:
+                        if(ModelType == Version.MODEL_TYPE.IHN_1020GL)
+                        {
+                            devInfo = "1(1:디지털도어락(사용함)종류( 유선 ))";
+                        }
+                        else
+                        {
+                            devInfo = "1(1:디지털도어락(사용함)종류( 무선 ))";
+                        }
+
+
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_HEATER:
+                        devInfo = "1(4:온도조절기(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_LIGHT:
+
+                        if(ModelType == Version.MODEL_TYPE.IHN_1020GL)
+                        {
+                            devInfo = "1(5:조명제어기(사용함)종류( 현산향일체형조명일괄소등병합형 ))";
+                        }
+                        else if (ModelType == Version.MODEL_TYPE.IHN_1010GL || ModelType == Version.MODEL_TYPE.IHN_1010GL)
+                        {
+                            devInfo = "1(5:조명제어기(사용함)종류(현산향일체형조명일괄소등병합형_멀티스위치))";
+                        }
+                        else
+                        {
+                            devInfo = "1(6:조명제어기(사용함)종류( 대외기본형 ))";
+                        }
+
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_VENTILATION:
+                        devInfo = "1(1:환기시스템(사용함)종류( 기본 ))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SYSTEM_AIRCON:
+                        devInfo = "1(1:시스템에어컨(사용안함)종류(삼성))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_ELECTRONICALLY_CURTAIN:
+                        devInfo = "1(1:전동커튼(사용안함)종류( 안방커튼 ))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_REALTIME_MEASURING_METER:
+                        if(ModelType == Version.MODEL_TYPE.IHN_1020GL)
+                        {
+                            devInfo = "1(5:실시간검침기(사용함))";
+                        }
+                        else
+                        {
+                            devInfo = "1(5:실시간검침기(사용안함))";
+                        }
+
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SMART_SWITCH_LIGHT_AND_BATCH_CONTROL:
+                        if (Version.getGatewayUsage()) {
+                            devInfo = "1(1:스마트스위치&일괄소등(사용함)종류(현산향LCD스마트스위치)L1설정(2)L2설정(3))";
+                        }
+                        else {
+                            devInfo = "1(1:스마트스위치&일괄소등(사용함)종류(대외향스마트스위치)L1설정(2)L2설정(3))";
+                        }
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_WIRELESS_REMOCON:
+                        devInfo = "1(1:무선리모컨(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_DOOR_CAMERA:
+                        if (ModelType == Version.MODEL_TYPE.IHN_D101 || ModelType == Version.MODEL_TYPE.IHN_D101_I
+                                || ModelType == Version.MODEL_TYPE.IHN_D101K || ModelType == Version.MODEL_TYPE.IHN_D101K_I)
+                        {
+                            devInfo = "1(1:현관카메라(사용함)종류(RF현관카메라))";
+                        }
+                        else
+                        {
+                            devInfo = "1(1:현관카메라(사용함)종류(기본))";
+                        }
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_NOTICE:
+                        devInfo = "1(1:공지사항(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_WEATHER:
+                        devInfo = "1(1:날씨(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_MENO:
+                        devInfo = "1(1:메모(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_ELECTRONIC_PICTURE_FRAMES:
+                        devInfo = "1(1:전자액자(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SCHEDULE:
+                        devInfo = "1(1:일정표(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_PARKING:
+                        devInfo = "1(1:주차확인(사용함)종류(아이콘트롤스)IP(10.2.0.80:6666))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_TIME_SETTING:
+                        devInfo = "1(1:시간설정(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_REMOTE_MESURING_METER:
+                        devInfo = "1(5:원격검침(사용함)EMS(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_MUSIC:
+                        devInfo = "1(1:뮤직(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_VIDEO_PLAY:
+                        devInfo = "1(1:영상재생(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_CCTV:
+                        devInfo = "1(1:CCTV(사용함)종류( 삼성테크윈 )버튼(IP:10.0.1.80*Camera:1*Pass:333*vPort:6801*cPort:6800*Site:admin*Where:놀이터1)버튼(IP:10.0.1.80*Camera:2*Pass:333*vPort:6801*cPort:6800*Site:admin*Where:놀이터2)버튼(IP:10.0.1.80*Camera:3*Pass:333*vPort:6801*cPort:6800*Site:admin*Where:놀이터3)버튼(IP:10.0.1.40*Camera:4*Pass:333*vPort:6801*cPort:6800*Site:admin*Where:놀이터4)버튼(IP:10.0.1.80*Camera:5*Pass:333*vPort:6801*cPort:6800*Site:admin*Where:놀이터5))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_CARGUEST:
+                        devInfo = "1(1:방문객차량등록(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_BAND_LOCATION:
+                        devInfo = "1(1:밴드위치확인(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SET_NAMING:
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_CUSTOMER_SERVICE_GUARD:
+                        devInfo = "1(1:출동경비(사용안함)종류(KTT)IP(10.2.0.80:6666))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_GUARD_VIDEO_CALL:
+                        devInfo = "1(1:경비실영상통화(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_ELEVATOR:
+                        devInfo = "1(1:엘리베이터(사용함)종류( 층표시 ))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_FIELD_TYPE:
+                        devInfo = "1(1:현장특화기능(사용안함)종류( KCC))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_WALLPAD_CAMERA:
+                        devInfo = "1(1:월패드카메라(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_MOOD_LIGHT:
+                        devInfo = "1(1:무드등(사용안함)종류( 하단등 ))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_ESCAPE_LADDER:
+                        devInfo = "1(1:피난사다리(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_MOTION_SETTING:
+                        devInfo = "1(1:동체설정(사용함)외부동체사용(사용함)내부동체사용(사용안함)외부동체를내부동체로사용( 사용안함 ))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_ALART_ALARM:
+                        devInfo = "1(1:알람발생( 사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_PSTN_CALL:
+                        devInfo = "1(1:서브폰국선연동(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_DOOR_PHONE_OUTPUT_VOLUME:
+                        devInfo = "1(1:현관폰사운드출력음량(사용안함)볼륨(4))";
+                        break;
+
+
+                    case SETTING_ITEM_SUB_DEVICE_IPARK_ENERGY:
+                        if (Version.getGatewayUsage()) {
+                            devInfo = "1(1:아이파크에너지(사용함))";
+                        }
+                        else {
+                            devInfo = "1(1:아이파크에너지(사용안함))";
+                        }
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_IDLE_POWER_SAVING_SWITCH:
+                        if(ModelType == Version.MODEL_TYPE.IHN_1020GL)
+                        {
+                            devInfo = "1(1:대기전력스위치(사용함))";
+                        }
+                        else
+                        {
+                            devInfo = "1(1:대기전력스위치(사용안함))";
+                        }
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_ENERGY_MODULE:
+                        if(ModelType == Version.MODEL_TYPE.IHN_1020GL)
+                        {
+                            devInfo = "1(1:에너지모듈(사용함))";
+                        }
+                        else
+                        {
+                            devInfo = "1(1:에너지모듈(사용안함))";
+                        }
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_ENERGY_DEVICES:
+                        if((ModelType == Version.MODEL_TYPE.IHN_1020GL) || (ModelType == Version.MODEL_TYPE.IHN_D101)
+                            || (ModelType == Version.MODEL_TYPE.IHN_D101K))
+                        {
+                            devInfo = "1(1:에너지제품군(사용함))";
+                        }
+                        else
+                        {
+                            devInfo = "1(1:에너지제품군(사용안함))";
+                        }
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SMART_KEY:
+                        if(ModelType == Version.MODEL_TYPE.IHN_1020GL)
+                        {
+                            devInfo = "1(1:스마트키(사용안함))";
+                        }
+                        else
+                        {
+                            devInfo = "1(1:스마트키(사용안함))";
+                        }
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_ELECTRIC_CAR:
+                        devInfo = "1(1:전기차충전(사용안함)IP(10.0.1.1:10000))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_LH_ADD_FUNCTION:
+                        devInfo = "1(1:LH특화기능(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_LH_U_CITY:
+                        devInfo = "1(1:U-City(사용안함)IP(10.0.1.1:8888))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_ENERGY_SERVER_CONNECT:
+                        devInfo = "1(1:에너지관리서버(사용안함)IP(10.0.1.1:10000))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_ZERO_ENERGY_HOUSE:
+                        devInfo = "1(1:제로에너지하우스(사용안함)IP(10.0.2.88:10000))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SECURITY_INDOORMODE_SENSOR_USE:
+                        devInfo = "1(1:재택모드시동체센서사용(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_HANDICAPPED:
+                        devInfo = "1(1:장애인모드(사용안함)모드(일반모드))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_ELEVATOR_MAINSCREEN_USE:
+                        devInfo = "1(1:엘리베이터핫키(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_BOOKMARK_TYPE:
+                        devInfo = "1(1:즐겨찾기아이콘종류(사용함)종류(흑백))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SUBPHONE_BAUDRATE:
+                        devInfo = "1(1:서브폰통신속도(사용함)종류(9600))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_CALL_TIMEOUT:
+                        devInfo = "1(1:통화타임아웃(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_DANJI_CONFIG:
+                        devInfo = "1(1:IP대역확장(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_WIRELESS_DOORLOCK_OPENDELAY:
+                        devInfo = "1(1:무선도어락문열림대기모드(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_RENT_HOME:
+                        devInfo = "1(1:임대세대(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_DANJI_RENT_HOME_USE:
+                        devInfo = "1(1:단지내임대세대(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_BLE_SMARTKEY:
+                        devInfo = "1(1:BLE스마트키(사용안함)종류(스마트키))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_GATEWAY:
+                        devInfo = "1(1:게이트웨이(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_DIMMING_KCC:
+                        devInfo = "1(1:KCC디밍제어기(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_MANUAL:
+                        devInfo = "1(1:매뉴얼(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_NEWSERVER:
+                        devInfo = "1(1:신형단지서버(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_ESCAPE_LADDER_NOTI:
+                        devInfo = "1(1:피난사다리방송알림(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_CTR_SEQUENCE_LIMIT:
+                        devInfo = "1(1:제어시퀀스제한(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_HEAT_ONEDEVICE:
+                        devInfo = "1(1:난방일체형(사용안함)종류(난방환기))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_GAS_DETECT_5TIME:
+                        devInfo = "1(1:가스감지5회알람(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_MAIN_GUI_SELECT:
+                        devInfo = "1(1:메인GUI선택(사용함)종류(기본))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_DISTRIBUTION:
+                        devInfo = "1(1:분전반(사용안함)종류(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SENSOR_AP:
+                        devInfo = "1(1:센서AP(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_INTERLAYER_NOISE:
+                        devInfo = "1(1:층간소음센서(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_RELIEF_CALL:
+                        devInfo = "1(1:안심통화(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_REMOTE_CALL:
+                        devInfo = "1(1:방문객원격통화(사용안함)IP(10.2.110.110:8000))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_INNERROOM_DETECT_SENSOR:
+                        devInfo = "1(1:재실센서(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_GATEWAY_MODEL_KIND:
+                        devInfo = "1(1:게이트웨이모델(사용함)종류(IGW300))"; // Android studio 에서는 IGW300이 기본
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_MOBILE_APP_USER_AUTH:
+                        devInfo = "1(1:모바일앱사용자인증(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_INTEGRATED_SWITCH:
+                        devInfo = "1(1:통합스위치(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_ELECTRIC_RANGE:
+                        devInfo = "1(1:전기레인지(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_FACIAL_RECOG_MODULE:
+                        devInfo = "1(1:안면인식모듈(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_NON_INTERNET_SUPPORT:
+                        devInfo = "1(1:인터넷미지원(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_COOKTOP_CONCENT:
+                        devInfo = "1(1:쿡탑콘센트(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SMARTPOST_USE:
+                        devInfo = "1(1:스마트우편함(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SMARTKITCHEN_USE:
+                        devInfo = "1(1:스마트키친(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_EASYMODEUX_USE:
+                        devInfo = "1(1:간편모드UX지원(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_ESCAPELADDER_DOWN_SEND:
+                        devInfo = "1(1:피난사다리전송(사용함)종류(윗집))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_LIVINGEM_KITCHEN_LIGHT:
+                        devInfo = "1(1:거실EM주방등(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_REMOTECALL_DOOROPEN_USE:
+                        devInfo = "1(1:방문객원격통화-현관문열림(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_REMOTECALL_HOMEVIEWER_USE:
+                        devInfo = "1(1:방문객원격통화-홈뷰어(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_REMOTECALLSVR_WEBPORT:
+                        devInfo = "1(1:방문객원격통화WEB포트(사용함)종류(8089))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SUBWALLPAD:
+                        devInfo = "1(1:서브월패드(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SUBWALLPAD_PSTN:
+                        devInfo = "1(1:서브월패드국선전화연동(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SUBWALLPAD_LIGHT:
+                        devInfo = "1(1:서브월패드조명연동(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SUBWALLPAD_HEATER:
+                        devInfo = "1(1:서브월패드난방연동(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SUBWALLPAD_GAS:
+                        devInfo = "1(1:서브월패드가스연동(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SUBWALLPAD_DOORLOCK:
+                        devInfo = "1(1:서브월패드도어락연동(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SUBWALLPAD_VENTI:
+                        devInfo = "1(1:서브월패드환기연동(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_STRANGER_RECORDING_USE:
+                        devInfo = "1(1:거동수상자녹화(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_EMERGENCY_CONTACT_SWITCH_USE:
+                        devInfo = "1(1:비상접점스위치(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SENDWEATHER_REVERSRE:
+                        devInfo = "1(1:서브폰날씨정보역순전송(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SAFESTREETLIGHT_USE:
+                        devInfo = "1(1:안전가로등(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_BATHSENSOR_USE:
+                        devInfo = "1(1:욕실센서등(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_FRONT:
+                        devInfo = "1(1:현관(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_LOBBY:
+                        devInfo = "1(1:로비(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_GUARD:
+                        devInfo = "1(1:경비(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_RESIDENCE:
+                        devInfo = "1(1:이웃(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_PSTN:
+                        devInfo = "1(1:국선(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_CALLHISTORY:
+                        devInfo = "1(1:통화내역(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_VISITORPIC:
+                        devInfo = "1(1:방문자사진(사용함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_LCDKEEPER_USE:
+                        devInfo = "1(1:LCDKEEPER(사용안함)종류(사용안함))";
+                        break;
+                    case SETTING_ITEM_SUB_DEVICE_VENTI_SERVICE_QR:
+                        devInfo = "1(1:환기케어서비스QR(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_THEDISABLED_HOME:
+                        devInfo = "1(1:장애인세대(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_CO2_REDUCTION:
+                        devInfo = "1(1:이산화탄소절감률(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_HEATLIGHTROOM_NAMESET:
+                        devInfo = "1(1:난방조명방명칭설정(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SMARTSWITCH_ENERGY:
+                        devInfo = "1(1:스마트스위치에너지종류(사용함)종류(실시간검침기))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_PURITY:
+                        devInfo = "1(1:청정환기(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_LOUVER:
+                        devInfo = "1(1:전동루버(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_BIOMETICS:
+                        devInfo = "1(1:생체인식(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_POWERCONTROLLER:
+                        devInfo = "1(1:통합전력제어기(사용함)종류(기본))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_LH_GATEWAY:
+                        devInfo = "1(1:LH게이트웨이(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_KAKAO_HOME:
+                        devInfo = "1(1:카카오홈(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_SMARTIOTCAM_FLIP:
+                        devInfo = "1(1:스마트현관카메라좌우반전(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_CONSTRUCTION_SPECIAL_FUNC:
+                        devInfo = "1(1:건설사특화기능(사용안함)종류(사용안함))";
+                        break;
+
+                    case SETTING_ITEM_SUB_DEVICE_MAIN_GUI_CTRL_USE:
+                        devInfo = "1(1:제어기능(사용함))";
+                        break;
+                }
+            }
+        }
+
+        result = parseDevInfo(devInfo);
+
+        return result;
+    }
+
+
+    // itemType에 해당하는 SubDev의 사용설정 여부 return
+    public boolean isUsedSettingDataSubDev(int itemType) {
+        boolean bUsed = false;
+        if (DEBUG) Log.i(TAG, "[isUsedSettingDataSubDev] itemType = " + itemType);
+        List<String> InfoList = getSettingDataSubDev(itemType);
+        if(InfoList!=null)
+        {
+            for (int i = 0; i < InfoList.size(); i++) {
+                if(InfoList.get(i)!=null)
+                    Log.i(TAG, "[isUsedSettingDataSubDev] InfoList.get(" + i + ") = " + InfoList.get(i));
+            }
+        }
+
+
+        if ((InfoList != null) && (InfoList.size() > 3)) {
+            if (Const.CONTROLLER_SETTING_DO_USED.equals(InfoList.get(3))) {
+                bUsed = true;
+            }
+        }
+
+        return bUsed;
+    }
+
+
+
+
+    // return SensorList
+    public List<String[]> getSensorList() {
+        return getSettingDataList(SETTING_ITEM_SENSOR_STATE_LIST);
+    }
+
+
+
+    // set SettingDataSubDev
+    public boolean setSettingDataSubDev(int itemType, int cnt, String value) {
+        if (DEBUG)  Log.d(TAG, "setSettingDataSubDev() itemType : " + itemType
+                + ", value : " + value
+        );
+
+        boolean ret = false;
+
+        String deviceName = getSubDevID(itemType);
+        if (deviceName != null) {
+            if (DEBUG)  Log.d(TAG, "setSettingDataSubDev() deviceName : " + deviceName);
+
+            WallpadDeviceSet devset = new WallpadDeviceSet(mContext);
+            if (devset != null) {
+                devset.UpdateSettingData("subdev_list"
+                        , deviceName
+                        , 0
+                        , value
+                );
+
+                // 스마트현관카메라좌우반전 설정정보일 경우 카메라 설정 필요
+                if (getUseSmartDoorCam()) {
+                    if (itemType == SETTING_ITEM_SUB_DEVICE_SMARTIOTCAM_FLIP) {
+                        Log.d(TAG, "setSettingDataSubDev() itemType: " + itemType + ", value: " + value);
+                        V40IF mV40IF = new V40IF();
+                        if (value.contains(Const.CONTROLLER_SETTING_DO_USED)) {
+                            Log.d(TAG, "setSettingDataSubDev() === WALLPAD_CAM_AHD_FRONT_FLIP ===");
+                            mV40IF.setCameraConfigure(Const.WALLPAD_CAM_AHD_FRONT_FLIP);
+                        } else if (value.contains(Const.CONTROLLER_SETTING_DO_NOT_USED)) {
+                            Log.d(TAG, "setSettingDataSubDev() === WALLPAD_CAM_AHD_FRONT ===");
+                            mV40IF.setCameraConfigure(Const.WALLPAD_CAM_AHD_FRONT);
+                        } else Log.w(TAG, "setSettingDataSubDev() value " + value + "]");
+                    }
+                }
+
+                devset.closeDB();
+            }
+        }
+
+        return ret;
+    }
+
+
+    // SubDev의 사용설정을 update
+    public void updateSetUsedToSubDeviceOnOff(int controller, final int position) {
+        String controllerName = null;
+
+        switch (controller) {
+            case SETTING_ITEM_SUB_DEVICE_IPARK_ENERGY:
+                controllerName = Const.IPARK_ENERGY;
+                break;
+
+            case SETTING_ITEM_SUB_DEVICE_IDLE_POWER_SAVING_SWITCH:
+                controllerName = Const.IDLE_POWER_SAVING_SWITCH;
+                break;
+
+            case SETTING_ITEM_SUB_DEVICE_ENERGY_MODULE:
+                controllerName = Const.ENERGY_MODULE;
+                break;
+
+            case SETTING_ITEM_SUB_DEVICE_ENERGY_SERVER_CONNECT:
+                controllerName = Const.ENERGY_SERVER_CONNECT;
+                break;
+
+            default:
+                controllerName = getSubDevID(controller);
+                break;
+        }
+
+        if (controllerName != null) {
+            String value = controllerName;
+            if (position == 0) {
+                value += "("
+                        + Const.CONTROLLER_SETTING_DO_NOT_USED
+                        + ")"
+                ;
+            }
+            else {
+                value += "("
+                        + Const.CONTROLLER_SETTING_DO_USED
+                        + ")"
+                ;
+            }
+
+            List<String> InfoList = getSettingDataSubDev(controller);
+            if ((InfoList != null) && (InfoList.size() > 1)) {
+                String deviceNo = InfoList.get(0);
+                String circuitNo = InfoList.get(1);
+
+                value = deviceNo
+                        + "("
+
+                        + circuitNo
+                        + ":"
+
+                        + value
+                ;
+
+                for (int i=4; i + 1 <InfoList.size(); i=i+2) {
+                    value += InfoList.get(i)
+                            + "("
+                            + InfoList.get(i+1)
+                            + ")"
+                    ;
+                }
+
+                value += ")"
+                ;
+
+                setSettingDataSubDev(controller, 0, value);
+            }
+        }
+    }
+
+
+    // SwitchButton에 의한 SubDev의 사용설정을 update
+    public void updateSetUsedToSubDeviceSwitchButtonOnOff(int controller, final int position) {
+        try {
+            String controllerName = getSubDevID(controller);
+            Log.i(TAG, "[updateSetUsedToSubDeviceSwitchButtonOnOff] controllerName = " + controllerName);
+
+            if (controllerName != null) {
+                String value = controllerName;
+                if (position == 1) {
+                    value += "(" + Const.CONTROLLER_SETTING_DO_NOT_USED + ")";
+                }
+                else {
+                    value += "(" + Const.CONTROLLER_SETTING_DO_USED + ")";
+                }
+
+                List<String> InfoList = getSettingDataSubDev(controller);
+                if ((InfoList != null) && (InfoList.size() > 1)) {
+                    String deviceNo = InfoList.get(0);
+                    String circuitNo = InfoList.get(1);
+
+                    value = deviceNo  + "(" + circuitNo + ":" + value;
+
+                    for (int i=4; i + 1 <InfoList.size(); i=i+2) {
+                        value += InfoList.get(i) + "(" + InfoList.get(i + 1) + ")";
+                    }
+
+                    value += ")";
+
+                    Log.i(TAG, "[updateSetUsedToSubDeviceSwitchButtonOnOff] value = " + value);
+
+                    setSettingDataSubDev(controller, 0, value);
+                }
+                else Log.w(TAG, "[updateSetUsedToSubDeviceSwitchButtonOnOff] InfoList is null or InfoList.size() > 1!!!");
+            }
+            else Log.w(TAG, "[updateSetUsedToSubDeviceSwitchButtonOnOff] controllerName is null!!!");
+        } catch (RuntimeException re) {
+            Log.e(TAG, re.toString());
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] updateSetUsedToSubDeviceSwitchButtonOnOff(int controller, final int position)");
+            //e.printStackTrace();
+            LogUtil.errorLogInfo("", TAG, e);
+        }
+    }
+
+
+
+
+
+
+/*
+    public void UpdateSettingData(String Type, String Name, int cnt, String value)
+    {
+        WallpadDeviceSet devset = new WallpadDeviceSet(mContext);
+        if (devset != null) {
+            devset.UpdateSettingData(Type
+                                        , Name
+                                        , 0
+                                        , value
+                                        );
+
+            devset.closeDB();
+        }
+    }
+*/
+
+    // H/W Button 사용 설정여부 return
+    public boolean isUsedHWButton() {
+        boolean ret = false;
+
+        WallpadSalesSampleData wallpadSalesSampleData = new WallpadSalesSampleData(mContext);
+        int getData = wallpadSalesSampleData.getSalesSampleData(WallpadSalesSampleData.SALES_SAMPLE_MODE_HW_BUTTON_OPERATION);
+        wallpadSalesSampleData.closeDB();
+
+        if (getData == WallpadSalesSampleData.SALES_SAMPLE_MODE_DO_USED)
+            ret = true;
+
+        return ret;
+    }
+
+
+    //  현관 카메라 샘플 설정여부 return
+    public boolean isUsedSampleDoorCamera() {
+        boolean ret = false;
+
+        WallpadSalesSampleData wallpadSalesSampleData = new WallpadSalesSampleData(mContext);
+        int getData = wallpadSalesSampleData.getSalesSampleData(WallpadSalesSampleData.SALES_SAMPLE_MODE_DOOR_CAMERA);
+        wallpadSalesSampleData.closeDB();
+
+        if (getData == WallpadSalesSampleData.SALES_SAMPLE_MODE_ENABLED)
+            ret = true;
+
+        return ret;
+    }
+
+
+    //  Application upgrade 진행중인지 여부 return
+    public static boolean isUpgradingApp(Context context) {
+        boolean ret = false;
+
+        WallpadStatusData sdb = new WallpadStatusData(context);
+        ret = sdb.GetUpgradeState();
+        sdb.closeDB();
+
+        return ret;
+    }
+
+    private boolean getUseSmartDoorCam() {
+        try {
+            WallpadDeviceSet mWallpadDeviceSet = new WallpadDeviceSet(getContext());
+            if(mWallpadDeviceSet!=null)
+            {
+                int[] nFrontCam = mWallpadDeviceSet.Get_RFDoorCAM_Info();
+                mWallpadDeviceSet.closeDB();
+                if(nFrontCam!=null)
+                {
+                    if (nFrontCam[0] == Const.CONTROLLER_SETTING_DO_USED_INDEX) {
+                        if (nFrontCam[1] == WallpadDeviceSet.DOORTYPE_IOT_SMART) {
+                            Log.d(TAG, "[getUseSmartDoorCam] Use SMART_IOT_DOORCAM");
+                            return true;
+                        }
+                    }
+                }
+
+            }
+
+        } catch (Exception e) {
+            Log.e(TAG, "[Exception] getUseSmartDoorCam()");
+            e.printStackTrace();
+        }
+        return false;
+    }
+
+}

+ 459 - 0
ManagerSetting/src/main/java/com/artncore/managersetting/domain/Const.java

@@ -0,0 +1,459 @@
+package com.artncore.managersetting.domain;
+
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+
+public class Const {
+
+    public static final String ARG_ITEM_ID = "item_id";
+
+    public static final String ARG_LOG_FILE_PATH = "log_file_path";
+
+
+    public static final String DNS_IP =               "10.0.1.1";
+    public static final String SUBNET_MASK =          "255.255.0.0";
+//    public static final String SUBNET_MASK =          "255.0.0.0"; // 방문객원격통화 임시 TODO 추후 삭제
+//    public static final String DNS_IP2 =              "10.0.1.10";
+    public static final String DNS_IP2 =              "8.8.8.8"; // 방문객원격통화 임시 TODO 추후 삭제
+    public static final String DEFAULT_SERVER_IP =       "10.0.1.1";
+    public static final int DEFAULT_SERVER_PORT =     10000;
+    public static final String DEFAULT_MANAGER_PC_IP =   "10.0.1.10";
+    public static final int DEFAULT_MANAGER_PC_PORT = DEFAULT_SERVER_PORT;
+
+    // 방문객 원격통화
+    public static final String INTERNAL_SERVER_IP ="10.2.110.110";
+    public static final int INTERNAL_SERVER_PORT = 8000;
+
+    public static final int DEFAULT_GATEWAY_IP_THIRD = 0;
+    public static final int DEFAULT_GATEWAY_IP_FORTH = 254;
+
+    public static final int DEFAULT_LOBBY_IP_THIRD = 0;
+    public static final int DEFAULT_LOBBY_IP_FORTH = 10;
+
+    public static final int DEFAULT_GUARD_IP_SECOND = 0;
+    public static final int DEFAULT_GUARD_IP_THIRD = 128;
+    public static final int DEFAULT_GUARD_IP_FORTH = 10;
+
+    public static final int IP_MIN_LENGTH = 7;
+
+    public final static int PSTN_RING_V40 = 264;
+
+
+    public static final String CONTROLLER_SETTING_DO_USED = "사용함";
+    public static final String CONTROLLER_SETTING_DO_NOT_USED = "사용안함";
+
+    public static final int CONTROLLER_SETTING_DO_NOT_USED_INDEX = 0;
+    public static final int CONTROLLER_SETTING_DO_USED_INDEX = 1;
+
+    public static final String SUBWPD_CTR_DIRECT  = "직접연동";
+    public static final String SUBWPD_CTR_MAINREQ = "메인요청";
+
+    public static final String CONTROLLER_SETTING_WIRE = "유선";
+    public static final String CONTROLLER_SETTING_WIRELESS = "무선";
+    public static final String CONTROLLER_SETTING_FINGERPRINT = "지문인식";
+
+
+    public static final String CONTROLLER_SETTING_TYPE = "종류";
+
+    public static final String CONTROLLER_GATEWAY_KIND_200 = "IGW200";
+    public static final String CONTROLLER_GATEWAY_KIND_300 = "IGW300";
+
+    public static final String CONTROLLER_HEATONEDEVICE_KIND_VENTI = "난방환기";
+    public static final String CONTROLLER_HEATONEDEVICE_KIND_LIGHT = "난방조명";
+    public static final String CONTROLLER_HEATONEDEVICE_KIND_VENTILIGHT = "난방환기조명";
+
+    public static final String CONTROLLER_SMARTSWITCH_KIND_REALTIME = "실시간검침기";
+    public static final String CONTROLLER_SMARTSWITCH_KIND_REMOTE = "원격검침기";
+
+    public static final String LIGHT_CONTROLLER_TYPE_LIVING_ROOM = "대외기본형";
+    public static final String LIGHT_CONTROLLER_TYPE_ROOMS = "대외각실형";
+    public static final String LIGHT_CONTROLLER_TYPE_HDC_INTLIGHT_NORMAL = "현산향일체형조명기본형";
+    public static final String LIGHT_CONTROLLER_TYPE_HDC_INTLIGHT_ADD_BATCHLIGHT = "현산향일체형조명일괄소등병합형";
+    public static final String LIGHT_CONTROLLER_TYPE_HDC_INTLIGHT_ADD_BATCHLIGHT_MULTISWITCH = "현산향일체형조명일괄소등병합형_멀티스위치";
+    public static final String LIGHT_CONTROLLER_TYPE_SMART_DISTRIBUTION = "스마트분전반조명";
+
+    public static final String CONTROLLER_DISTRIBUTION_KIND_SMART = "스마트분전반";
+    public static final String CONTROLLER_DISTRIBUTION_KIND_KNX = "KNX분전반";
+
+    public static final String CONTROLLER_POWERCONTROLLER_KIND_BASIC = "기본";
+    public static final String CONTROLLER_POWERCONTROLLER_KIND_DIRECT = "직결보드";
+    public static final String CONTROLLER_POWERCONTROLLER_KIND_MEASURE = "전력측정직결보드";
+
+    public static final String VENTILATION_TYPE_COMMON  = "기본";
+    public static final String VENTILATION_TYPE_LH      = "LH향";
+    public static final String VENTILATION_TYPE_HOOD    = "후드";
+
+
+    public static final String ELECTRONICALLY_CURTAIN_TYPE_MAIN_ROOM = "안방커튼";
+    public static final String ELECTRONICALLY_CURTAIN_TYPE_LIVING_ROOM = "거실커튼";
+    public static final String ELECTRONICALLY_CURTAIN_TYPE_MAIN_AND_LIVING_ROOM = "안방거실커튼";
+
+
+    public static final String LIGHT_BATCH_CONTROL_TYPE_COMMON_SMART_SWITCH         = "대외향스마트스위치";
+    public static final String LIGHT_BATCH_CONTROL_TYPE_COMMON_BATCH_CONTROLLER     = "대외향일괄소등제어기";
+    public static final String LIGHT_BATCH_CONTROL_TYPE_HDC_SMART_SWITCH            = "현산향스마트스위치";
+    public static final String LIGHT_BATCH_CONTROL_TYPE_HDC_LCD_SMART_SWITCH        = "현산향LCD스마트스위치";
+
+
+    public static final String LIGHT_BATCH_CONTROL_TYPE_L1 = "L1설정";
+    public static final String LIGHT_BATCH_CONTROL_TYPE_L2 = "L2설정";
+
+    public static final String REALTIME_MEASURING_METER_TYPE_2 = "2종";
+    public static final String REALTIME_MEASURING_METER_TYPE_3 = "3종";
+    public static final String REALTIME_MEASURING_METER_TYPE_5 = "5종";
+    public static final String REALTIME_MEASURING_METER_TYPE_6 = "6종";
+
+    public static final String REMOTE_METERING_EMS = "EMS";
+
+    public static final String REMOTE_METERING_COST_TABLE = "요금테이블";
+
+
+
+    public static final String MOTION_SETTING_TYPE_USE_INNER_MOTION_DETECTOR = "내부동체사용";
+    public static final String MOTION_SETTING_TYPE_USE_OUTER_MOTION_DETECTOR = "외부동체사용";
+    public static final String MOTION_SETTING_TYPE_USE_OUTER_MOTION_DETECTOR_TO_INNER_MOTION = "외부동체를내부동체로사용";
+
+    public static final String DONGHO_SETTING_TYPE_USE_ENERGY_DEVICES = "에너지제품군";
+    public static final String DONGHO_SETTING_TYPE_USE_SMART_KEY = "스마트키";
+    public static final String DONGHO_SETTING_TYPE_USE_DANJI_CONFIG = "단지설정";
+
+    public static final String DOOR_CAMERA_TYPE_DEFAULT = "기본";
+    public static final String DOOR_CAMERA_TYPE_RF_DOOR_CAMERA = "RF현관카메라";
+    public static final String DOOR_CAMERA_TYPE_SMART_KEY = "스마트키";
+    public static final String DOOR_CAMERA_TYPE_SMART_KEY_EXTERNAL = "대외스마트키현관카메라";
+    public static final String DOOR_CAMERA_TYPE_IOT_SMART = "스마트IOT현관카메라";
+    public static final String DOOR_CAMERA_TYPE_HYOSUNG_SMART = "스마트현관카메라-효성";
+    public static final String DOOR_CAMERA_TYPE_DAEWOO_SMART = "스마트현관카메라-대우";
+
+    public static final String BLE_SMARTKEY_TYPE_NONUSE    = "사용안함";
+    public static final String BLE_SMARTKEY_TYPE_SMARTKEY  = "스마트키";
+    public static final String BLE_SMARTKEY_TYPE_SMARTBAND = "스마트밴드";
+
+    public static final String MAIN_GUI_TYPE_DEFAULT = "기본";
+    public static final String MAIN_GUI_TYPE_METRO = "메트로";
+    public static final String MAIN_GUI_TYPE_HYOSUNG = "효성";
+    public static final String MAIN_GUI_TYPE_HIMCHAN = "힘찬";
+
+
+    //관리자설정의 설정버튼 문구를 "스마트키" -> "스마트키현관카메라"로 입력하기 위함임
+    public static final String DOOR_CAMERA_TYPE_SMART_KEY_DOOR_CAMERA = "스마트키현관카메라";
+
+    public static final String DOOR_CAMERA_TYPE_UKS = "UKS";
+    public static final String DOOR_CAMERA_TYPE_ETC = "ETC";
+
+
+    public static final String ELEVATOR_TYPE_DEFAULT = "기본";
+    public static final String ELEVATOR_TYPE_SHOW_FLOOR = "층표시";
+
+
+    public static final String FIELD_TYPE_KCC = "KCC";
+    public static final String FIELD_TYPE_AMKOR = "엠코";
+    public static final String FIELD_TYPE_HALLA = "한라건설";
+    public static final String FIELD_TYPE_HD = "현대건설";
+    public static final String FIELD_TYPE_LH = "LH";
+    public static final String FIELD_TYPE_SH = "SH";
+
+
+    public static final String PSTN_CALL_TYPE = "국선";
+    public static final String IPARK_ENERGY = "아이파크에너지";
+    public static final String IDLE_POWER_SAVING_SWITCH = "대기전력차단스위치";
+    public static final String ENERGY_MODULE = "에너지모듈";
+    public static final String ENERGY_SERVER_CONNECT = "에너지관리서버";
+
+    public static final String ESCAPE_LADDER_DOWN_SEND_UPPER = "윗집";
+    public static final String ESCAPE_LADDER_DOWN_SEND_BELOW = "아랫집";
+
+    public static final String VOLUME_LEVEL_TYPE = "볼륨";
+
+
+    public static final String IP_TYPE = "IP";
+
+
+    public static final String SYSTEM_AIRCON_TYPE_SAMSUNG_AIR = "삼성냉방";
+    public static final String SYSTEM_AIRCON_TYPE_SAMSUNG_AIR_HEAT = "삼성냉난방";
+    public static final String SYSTEM_AIRCON_TYPE_LG_AIR = "LG냉방";
+    public static final String SYSTEM_AIRCON_TYPE_LG_AIR_HEAT = "LG냉난방";
+    public static final String SYSTEM_AIRCON_TYPE_ETC = "기타APU";
+
+
+    public static final int CONTROLLER_MAX_COUNT = 8;
+    public static final int CONTROLLER_ONOFF_COUNT = 1;
+    public static final int CONTROLLER_LIGHT_MAX_COUNT = 5;
+    public static final int CONTROLLER_LIGHT_TYPE_MAX_COUNT = 2;
+    //    public static final int CONTROLLER_HEATER_MAX_COUNT = 2;
+    public static final int CONTROLLER_VENTILATION_MAX_COUNT = 3;
+    public static final int CONTROLLER_REALTIME_MEASURING_METER_MAX_COUNT = 2;
+    public static final int CONTROLLER_ELECTRONICALLY_CURTAIN_MAX_COUNT = 3;
+    public static final int CONTROLLER_LIGHT_BATCH_CONTROL_MAX_COUNT = 5;
+    public static final int CONTROLLER_REMOTE_MEASURING_METER_MAX_COUNT = 5;
+    public static final int CONTROLLER_ROOM_MAX_COUNT = 6;
+
+
+
+    public static final int CONTROLLER_TYPE_BASE =        Const.COMMON_TYPE_BASE;
+
+    public static final int CONTROLLER_TYPE_LIGHT_TYPE =                  CONTROLLER_TYPE_BASE + 0;
+    public static final int CONTROLLER_TYPE_LIGHT_LIVING_ROOM =           CONTROLLER_TYPE_BASE + 1;
+    public static final int CONTROLLER_TYPE_LIGHT_ROOMS =                 CONTROLLER_TYPE_BASE + 2;
+    public static final int CONTROLLER_TYPE_LIGHT_ROOMS_0 =               CONTROLLER_TYPE_BASE + 3;
+    public static final int CONTROLLER_TYPE_LIGHT_ROOMS_1 =               CONTROLLER_TYPE_BASE + 4;
+    public static final int CONTROLLER_TYPE_LIGHT_ROOMS_2 =               CONTROLLER_TYPE_BASE + 5;
+    public static final int CONTROLLER_TYPE_LIGHT_ROOMS_3 =               CONTROLLER_TYPE_BASE + 6;
+    public static final int CONTROLLER_TYPE_LIGHT_ROOMS_4 =               CONTROLLER_TYPE_BASE + 7;
+    public static final int CONTROLLER_TYPE_LIGHT_ROOMS_5 =               CONTROLLER_TYPE_BASE + 8;
+    public static final int CONTROLLER_TYPE_LIGHT_ROOMS_6 =               CONTROLLER_TYPE_BASE + 9;
+    public static final int CONTROLLER_TYPE_LIGHT_ROOMS_7 =               CONTROLLER_TYPE_BASE + 10;
+
+
+    public static final int CONTROLLER_TYPE_LIGHT_MULTI_SWITCH =          CONTROLLER_TYPE_BASE + 11;
+    public static final int CONTROLLER_TYPE_GAS =                         CONTROLLER_TYPE_BASE + 12;
+    public static final int CONTROLLER_TYPE_HEATER =                      CONTROLLER_TYPE_BASE + 13;
+
+    //    public static final int CONTROLLER_TYPE_DIGITAL_DOOR_LOCK =           CONTROLLER_TYPE_BASE + 14;
+    public static final int CONTROLLER_TYPE_DOOR_LOCK =                   CONTROLLER_TYPE_BASE + 14;
+    public static final int CONTROLLER_TYPE_DOOR_LOCK_WIRED =             CONTROLLER_TYPE_BASE + 14;
+    //    public static final int CONTROLLER_TYPE_DOOR_LOCK_WIRELESS =          CONTROLLER_TYPE_BASE + 15;
+    public static final int CONTROLLER_TYPE_VENTILATION =                 CONTROLLER_TYPE_BASE + 16;
+    public static final int CONTROLLER_TYPE_ELECTRICALLY_CURTAIN =        CONTROLLER_TYPE_BASE + 17;
+
+    public static final int CONTROLLER_TYPE_SYSTEM_AIRCON =               CONTROLLER_TYPE_BASE + 18;
+    public static final int CONTROLLER_TYPE_LIGHT_BATCH_CONTROLL =        CONTROLLER_TYPE_BASE + 19;
+    public static final int CONTROLLER_TYPE_REALTIME_MEASURING_METER  =   CONTROLLER_TYPE_BASE + 20;
+
+    public static final int CONTROLLER_TYPE_CALL_SUB_DEVICE =             CONTROLLER_TYPE_BASE + 30;
+    public static final int CONTROLLER_TYPE_BATH_PHONE =                  CONTROLLER_TYPE_BASE + 31;
+    public static final int CONTROLLER_TYPE_KICHEN_TV =                   CONTROLLER_TYPE_BASE + 32;
+
+    //public static final int CONTROLLER_TYPE_IPARK_ENREGY =                CONTROLLER_TYPE_BASE + 33;
+    //public static final int CONTROLLER_TYPE_IDLE_POWER_SAVING_SWITCH =    CONTROLLER_TYPE_BASE + 34;
+    //public static final int CONTROLLER_TYPE_ENERGY_MODULE =               CONTROLLER_TYPE_BASE + 35;
+
+
+    public static final int CONTROLLER_TYPE_ENERGY_METER_ROOMS_1  =        CONTROLLER_TYPE_BASE + 40;
+    public static final int CONTROLLER_TYPE_ENERGY_METER_ROOMS_2  =        CONTROLLER_TYPE_BASE + 41;
+    public static final int CONTROLLER_TYPE_ENERGY_METER_ROOMS_3  =        CONTROLLER_TYPE_BASE + 42;
+    public static final int CONTROLLER_TYPE_ENERGY_METER_ROOMS_4  =        CONTROLLER_TYPE_BASE + 43;
+    public static final int CONTROLLER_TYPE_ENERGY_METER_ROOMS_5  =        CONTROLLER_TYPE_BASE + 44;
+    public static final int CONTROLLER_TYPE_ENERGY_METER_ROOMS_6  =        CONTROLLER_TYPE_BASE + 45;
+    public static final int CONTROLLER_TYPE_ENERGY_METER_ROOMS_7  =        CONTROLLER_TYPE_BASE + 46;
+    public static final int CONTROLLER_TYPE_ENERGY_METER_ROOMS_8  =        CONTROLLER_TYPE_BASE + 47;
+
+    public static final int CONTROLLER_TYPE_IDLE_POWER_SAVING_SWITCH_ROOMS_1 =    CONTROLLER_TYPE_BASE + 50;
+    public static final int CONTROLLER_TYPE_IDLE_POWER_SAVING_SWITCH_ROOMS_2 =    CONTROLLER_TYPE_BASE + 51;
+    public static final int CONTROLLER_TYPE_IDLE_POWER_SAVING_SWITCH_ROOMS_3 =    CONTROLLER_TYPE_BASE + 52;
+    public static final int CONTROLLER_TYPE_IDLE_POWER_SAVING_SWITCH_ROOMS_4 =    CONTROLLER_TYPE_BASE + 53;
+    public static final int CONTROLLER_TYPE_IDLE_POWER_SAVING_SWITCH_ROOMS_5 =    CONTROLLER_TYPE_BASE + 54;
+    public static final int CONTROLLER_TYPE_IDLE_POWER_SAVING_SWITCH_ROOMS_6 =    CONTROLLER_TYPE_BASE + 55;
+    public static final int CONTROLLER_TYPE_IDLE_POWER_SAVING_SWITCH_ROOMS_7 =    CONTROLLER_TYPE_BASE + 56;
+    public static final int CONTROLLER_TYPE_IDLE_POWER_SAVING_SWITCH_ROOMS_8 =    CONTROLLER_TYPE_BASE + 57;
+
+    public static final int CONTROLLER_TYPE_ENERGY_MODULE_ROOMS_1 =               CONTROLLER_TYPE_BASE + 60;
+    public static final int CONTROLLER_TYPE_ENERGY_MODULE_ROOMS_2 =               CONTROLLER_TYPE_BASE + 61;
+    public static final int CONTROLLER_TYPE_ENERGY_MODULE_ROOMS_3 =               CONTROLLER_TYPE_BASE + 62;
+    public static final int CONTROLLER_TYPE_ENERGY_MODULE_ROOMS_4 =               CONTROLLER_TYPE_BASE + 63;
+    public static final int CONTROLLER_TYPE_ENERGY_MODULE_ROOMS_5 =               CONTROLLER_TYPE_BASE + 64;
+    public static final int CONTROLLER_TYPE_ENERGY_MODULE_ROOMS_6 =               CONTROLLER_TYPE_BASE + 65;
+    public static final int CONTROLLER_TYPE_ENERGY_MODULE_ROOMS_7 =               CONTROLLER_TYPE_BASE + 66;
+    public static final int CONTROLLER_TYPE_ENERGY_MODULE_ROOMS_8 =               CONTROLLER_TYPE_BASE + 67;
+
+
+//    public static final int CONTROLLER_TYPE_SMART_SWITCH =                CONTROLLER_TYPE_BASE + 40;
+
+//    public static final int CONTROLLER_TYPE_WIRELESS_REMOCON =            CONTROLLER_TYPE_BASE + 50;
+
+//    public static final int CONTROLLER_TYPE_REALTIME_MEASURING_METER =    CONTROLLER_TYPE_BASE + 60;
+
+    public static final int CONTROLLER_TYPE_RF_DOOR_CAMERA =              CONTROLLER_TYPE_BASE + 70;
+
+    public static final int CONTROLLER_TYPE_HDC_ALLLIGHT =                CONTROLLER_TYPE_BASE + 80; // 현산 일괄소등릴레이
+    public static final int CONTROLLER_TYPE_HDC_GATEWAY  =                CONTROLLER_TYPE_BASE + 90;
+
+    public static final int CONTROLLER_TYPE_SMART_RFCAM_SOUND_ONOFF  =    CONTROLLER_TYPE_BASE + 100;
+
+    public static final int CONTROLLER_TYPE_CALLAPP_TIMEOUT_ONOFF  =    CONTROLLER_TYPE_BASE + 110;
+
+    public static final int CONTROLLER_TYPE_DOOR_LOCK_WIRELESS_OPEN_DELAY_USE = CONTROLLER_TYPE_BASE + 120;
+    public static final int CONTROLLER_TYPE_GATEWAY = CONTROLLER_TYPE_BASE + 130;
+    public static final int CONTROLLER_TYPE_DIMMING_KCC = CONTROLLER_TYPE_BASE + 140;
+    public static final int CONTROLLER_TYPE_HEAT_ONEDEVICE = CONTROLLER_TYPE_BASE + 150;
+
+    public static final int CONTROLLER_TYPE_SMART_DIST = CONTROLLER_TYPE_BASE + 160;
+    public static final int CONTROLLER_TYPE_SMART_DIST_LIVEM = CONTROLLER_TYPE_BASE + 170;
+    public static final int CONTROLLER_TYPE_IGW300 = CONTROLLER_TYPE_BASE + 180;
+
+    public static final int CONTROLLER_TYPE_SENSOR_AP = CONTROLLER_TYPE_BASE + 190;
+    public static final int CONTROLLER_TYPE_INTERLAYER_NOISE = CONTROLLER_TYPE_BASE + 200;
+    public static final int CONTROLLER_TYPE_INNERROOM_DETECT_SENSOR = CONTROLLER_TYPE_BASE + 210;
+
+    public static final int CONTROLLER_TYPE_OUTLET_REGI_START = CONTROLLER_TYPE_BASE + 220;   // 거실EM 콘센트 등록 시작
+    public static final int CONTROLLER_TYPE_OUTLET_REGI_EXTENDTIME = CONTROLLER_TYPE_BASE + 230;   // 거실EM 콘센트 등록 시간 연장
+    public static final int CONTROLLER_TYPE_OUTLET_REGI_END = CONTROLLER_TYPE_BASE + 240;   // // 거실EM 콘센트 등록 종료
+
+    public static final int CONTROLLER_TYPE_GATEWAY_MODEL_KIND = CONTROLLER_TYPE_BASE + 250;
+    public static final int CONTROLLER_TYPE_INTEGRATED_SWITCH = CONTROLLER_TYPE_BASE + 260; // 통합 스위치
+
+    public static final int CONTROLLER_TYPE_ELECTRIC_RANGE1 = CONTROLLER_TYPE_BASE + 270;   // 전기 레인지1
+    public static final int CONTROLLER_TYPE_ELECTRIC_RANGE2 = CONTROLLER_TYPE_BASE + 271;   // 전기 레인지2
+
+    public static final int CONTROLLER_TYPE_COOKTOP_CONCENT = CONTROLLER_TYPE_BASE + 280;   // 쿡탑콘센트
+
+    public static final int CONTROLLER_TYPE_FACIAL_RECOG_MODULE = CONTROLLER_TYPE_BASE + 290;   // 안면인식 모듈
+
+    public static final int CONTROLLER_TYPE_LIGHT_REGI_START = CONTROLLER_TYPE_BASE + 300;   // 거실EM 조명 등록 시작
+    public static final int CONTROLLER_TYPE_LIGHT_REGI_EXTENDTIME = CONTROLLER_TYPE_BASE + 310;   // 거실EM 조명 등록 시간 연장
+    public static final int CONTROLLER_TYPE_LIGHT_REGI_END = CONTROLLER_TYPE_BASE + 320;   // 거실EM 조명 등록 종료
+
+    public static final int CONTROLLER_TYPE_SMARTSWITCH_ENERGY = CONTROLLER_TYPE_BASE + 330;   // 스마트스위치 에너지 종류
+
+    public static final int CONTROLLER_TYPE_PURITY = CONTROLLER_TYPE_BASE + 340; // 청정환기
+    public static final int CONTROLLER_TYPE_LOUVER = CONTROLLER_TYPE_BASE + 341; // 전동루버
+    public static final int CONTROLLER_TYPE_BIOMETICS = CONTROLLER_TYPE_BASE + 342; // 생체인식
+
+    public static final int CONTROLLER_TYPE_LH_GATEWAY = CONTROLLER_TYPE_BASE + 343; // LH게이트웨이
+    public static final int CONTROLLER_TYPE_CTRL_USE = CONTROLLER_TYPE_BASE + 344; // 제어기능
+
+   public static final String CONTENTS_ROOT = "/storage/emulated/0/wallpaddata/";
+    //public static final String CONTENTS_ROOT = "/storage/sdcard0/wallpaddata";
+    public static final String BESTIN_CONTENTS_ROOT = "/storage/emulated/0/Bestin/";
+
+    // Event Interface start
+    public static final int EVT_RING = 220;     // PSTN Incomingcall 상태 전달
+    public static final int BTN_EMR = 221;      // FRONT 비상 버튼 입력 상태 전달
+    public static final int BTN_CALL = 222;     // FRONT 통화 버튼 입력 상태 전달
+    public static final int BTN_OPEN = 223;     // FRONT OPEN 버튼 입력 상태 전달
+    public static final int BTN_DOOR = 224;     // 현관폰 벨 버튼 입력 상태 전달
+    public static final int EVT_EMR = 225;      // 비상 센서 입력 상태 전달
+    public static final int EVT_MAG0 = 226;     // 센서 마그네틱 0 입력 상태 전달
+    public static final int EVT_MAG1 = 227;     // 센서 마그네틱 1 입력 상태 전달
+    public static final int EVT_EXIT = 228;     // 센서 피난사다리 입력 상태 전달
+    public static final int EVT_MOTIN = 229;    // 센서 동체감지기-내부 입력 상태 전달
+    public static final int EVT_MOTOUT = 230;   // 센서 동체감지기-외부 입력 상태 전달
+    // Event Interface end
+
+    // IHN-1010 센서 키코드
+    public static final int EVT_EMR_1010 = 269;      // 비상 센서 입력 상태 전달
+    public static final int EVT_MAG0_1010 = 270;     // 센서 마그네틱 0 입력 상태 전달
+    public static final int EVT_EXIT_1010 = 276;     // 센서 피난사다리 입력 상태 전달
+    public static final int EVT_MOTIN_1010 = 277;    // 센서 동체감지기-내부 입력 상태 전달
+    public static final int EVT_MOTOUT_1010 = 278;   // 센서 동체감지기-외부 입력 상태 전달
+
+
+
+    // Audio Mode start
+    public static final int AUDIO_MODE_IN_CALL_PSTN  = 4;       // PSTN 로 WallPad 와 통화시
+    public static final int AUDIO_MODE_SUBPHONE = 5;            // MoIP로 WallPad 와 SubPhone 통화시
+    public static final int AUDIO_MODE_PSTN_SUBPHONE = 6;       // PSTN 로 SubPhone 과 통화시
+    public static final int AUDIO_MODE_DOOR_SUBPHONE = 7;       // 현관폰 과 SubPhone 통화시
+    public static final int AUDIO_MODE_IN_MIC_PSTN = 8;         // PSTN 로 WallPad 와 통화시 MIC On
+    public static final int AUDIO_MODE_IN_ARS_PSTN = 9;         // PSTN 로 WallPad 와 통화시 ARS 모드로
+    // Audio Mode end
+
+
+
+    // PhonNRemocon start
+    public static final int CALL_TYPE_DOOR = 0x01;
+    public static final int CALL_TYPE_LOBBY = 0x02;
+    public static final int CALL_TYPE_GUARD = 0x03;
+    public static final int CALL_TYPE_PSTN = 0x04;
+    public static final int CALL_TYPE_NEIB = 0x05;
+    // PhonNRemocon end
+
+    public static final int CALL_TYPE_SIP = 0x10;
+
+
+    public static final int MSG_OUTGOING = 21;
+
+    public static final int MSG_OUTGOING_TYPE_HP = 1;
+    public static final int MSG_OUTGOING_TYPE_HOME = 2;
+    public static final int MSG_OUTGOING_TYPE_DONGHO = 3;
+    public static final int MSG_OUTGOING_TYPE_OFFICE = 4;
+
+
+    /////////////////////////////////////////////////////////////////////////////
+    public static final boolean ENABLED_SUB_DEVICE_DEFAULT_VALUE = true; //true;
+
+    public static final boolean ENABLED_DOOR_PHONE_POWER_CONTROLL_BY_CALL_APP = true; //true;
+    /////////////////////////////////////////////////////////////////////////////
+
+
+    public static final String DONG_HO_SPLIT_TOKEN = "_";
+
+
+
+    public static final String SITE_CODE_DEFAULT_VALUE ="12345678";
+
+    public static final String BR_APP_FINISH = "kr.co.icontrols.wallpad.BR_APP_FINISH";
+
+
+    public static final int COMMON_TYPE_BASE = 101;
+
+
+    public static final int CAMERA_TYPE_WALLPAD = 0x01;
+    public static final int CAMERA_TYPE_DOOR = 0x02;
+
+
+
+
+    public static final String SIP_LOBBY_DEVICE_TYPE    = "Lobby";
+    public static final String SIP_GUARD_DEVICE_TYPE    = "Guard";
+    public static final String SIP_NEI_DEVICE_TYPE      = "Resi";
+
+
+
+    public static final String LOG_FILE_ROOT = "/storage/emulated/0/wallpaddata/log";
+
+
+
+    public static final byte DEVICE_TYPE_NONE                   = 0x00;
+    public static final byte DEVICE_TYPE_WALLPAD                = 0x01;
+    public static final byte DEVICE_TYPE_KITCHEN_TV             = 0x02;
+    public static final byte DEVICE_TYPE_BATH_PHONE             = 0x03;
+    public static final byte DEVICE_TYPE_900M_PHONE             = 0x04;
+    public static final byte DEVICE_TYPE_SET_OUTGOING_DEVICE    = 0x05;
+    public static final byte DEVICE_TYPE_HOME_AUTO_SUB_DEVICE   = 0x06;
+    public static final byte DEVICE_TYPE_WIRELESS_DEVICE        = 0x07;
+    public static final byte DEVICE_TYPE_BATCH_TV               = 0x08;
+
+
+
+    public static final int DEFUALT_SLEEP_TIMEOUT_INTERVAL = 60000;
+    public static final int DEFUALT_VOLUME = 8;
+    public static final int DEFUALT_BRIGHTNESS = 255; //100;
+
+    // GLE 모델 구분하기 위한 추가 함수
+    public final static String GLE_MODEL = "AN_8935_iHN1010GLE";
+
+    public static final String AppName_WallPadMain = "kr.co.icontrols.wallpadmain";
+    public static final String AppName_WallPadConfig = "kr.co.icontrols.wallpadconfig";
+    public static final String AppName_WallPadAddservice = "kr.co.icontrols.wallpadaddservice";
+    public static final String AppName_WallPadEmergency = "kr.co.icontrols.wallpademergency";
+    public static final String AppName_WallPadEnergyCtrl = "kr.co.icontrols.wallpadenergyctrl";
+    public static final String AppName_WallPadHomeCtrl = "kr.co.icontrols.wallpadhomectrl";
+    public static final String AppName_WallPadAutopicture = "kr.co.icontrols.autopicture";
+    public static final String AppName_WallPadSecurity = "kr.co.icontrols.wallpadsecurity";
+    public static final String AppName_WallPadOutModerun = "kr.co.icontrols.wallpadoutmoderun";
+
+    public static final String AppName_WallPadCall = "com.artncore.apps.ic_wallpad";
+    public static final String AppName_WallPadCall_hdc = "kr.co.icontrols.wallpadcall";
+
+    public static final String AppName_WallPadAlert = "com.artncore.wallpadalert";
+    public static final String AppName_WallPadDeviceService = "com.artncore.deviceservice";
+    public static final String AppName_WallPadManagerSetting = "com.artncore.managersetting";
+    public static final String AppName_WallPadUpdater = "com.artncore.updater";
+    public static final String AppName_WallPadAppUpdater = "com.artncore.appupdater";
+    public static final String AppName_WallPadLogOutput = "com.artncore.apps.ic_wallpad.service.log";
+
+    public static final boolean FINISH_TIME_ENABLE = true;
+    public static final int FINISH_TIME_SEC = (60 * 5); //5분
+    public static final int FINISH_TIME_SEC_20MIN = (60 * 20); //20분
+
+    /**
+     * IHN-D101-I(C) 월패드 카메라 설정을 위한 상수
+     */
+    public static final int WALLPAD_CAM_AHD_FRONT = 0;
+    public static final int WALLPAD_CAM_NORMAL_FRONT = 1;
+    public static final int WALLPAD_CAM_AHD_FRONT_FLIP = 2;
+}
+

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor