Selaa lähdekoodia

增加点阵屏T4卡兼容,增加3368版本兼容

weizhengliang 2 vuotta sitten
vanhempi
commit
426f1d2e47

+ 21 - 1
android_host/src/main/h10_z3128_1h/java/com/wdkl/ncs/android/component/nursehome/activity/NurseHomeActivity.kt

@@ -249,6 +249,19 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNurs
 
         Thread {
             AppUtil.changePingMode()
+
+            try {
+                Thread.sleep(10000)
+
+                if (LedManagerUtils.getInstance().ledList.size > 0
+                    && !SettingConfig.getLedControl(activity)
+                    && SettingConfig.getLedType(activity) == 0
+                ) {
+                    LedManagerUtils.getInstance().removeAllProgram()
+                }
+            } catch (e: Exception) {
+                //
+            }
         }.start()
 
         //记录app启动时间
@@ -263,7 +276,7 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNurs
 
         language = LocaleMangerUtils.getApplicationLocale().language
 
-        if ("rk3128".equals(Build.MODEL)) {
+        if ("rk3128".equals(Build.MODEL) || "rk3368" == Build.MODEL) {
             checkLaunch()
         }
 
@@ -696,6 +709,13 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNurs
                 }
             }
 
+            if (data.boolLedService != null) {
+                SettingConfig.setLedControl(activity, data.boolLedService)
+                if (data.boolLedService) {
+                    led_settings_radio_bt.visibility = View.GONE
+                }
+            }
+
             setSettingConfiguration()
         } catch (e: Exception) {
             //showMessage("Setting configs error: " + e.message)

+ 1 - 1
android_host/src/main/h10_z3128_1h/java/com/wdkl/ncs/android/component/nursehome/activity/RegisterActivity.kt

@@ -80,7 +80,7 @@ class RegisterActivity : BaseActivity<DevicePresenter, ActivityRegisterBinding>(
 
         SoundPoolManager.getInstance().init()
 
-        if ("rk3128" == Build.MODEL) {
+        if ("rk3128" == Build.MODEL || "rk3368" == Build.MODEL) {
             btn_test.visibility = View.VISIBLE
         } else {
             btn_test.visibility = View.GONE

+ 37 - 0
android_host/src/main/h10_z3128_1h/java/com/wdkl/ncs/android/component/nursehome/fragment/LedSettingsFragment.kt

@@ -23,11 +23,13 @@ import com.wdkl.ncs.android.lib.utils.showMessage
 import com.wdkl.ncs.android.middleware.common.Constants
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction
+import com.wdkl.ncs.android.middleware.utils.MD5Utils
 import com.wdkl.ncs.android.middleware.utils.MessageEvent
 import kotlinx.android.synthetic.main.fragment_led_settings.*
 import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
+import java.io.File
 
 class LedSettingsFragment: Fragment() {
 
@@ -133,6 +135,14 @@ class LedSettingsFragment: Fragment() {
             rb_date_time.isChecked = true
             led_custom_content.visibility = View.INVISIBLE
         }
+
+        if (SettingConfig.getLedType(baseActivity) == 0) {
+            //T卡
+            radio_led_type_t4.isChecked = true
+        } else {
+            //C卡
+            radio_led_type_c2m.isChecked = true
+        }
     }
 
     private fun bindEvent() {
@@ -146,6 +156,25 @@ class LedSettingsFragment: Fragment() {
 
         btn_check_font.setOnClickListener {
             LedManagerUtils.getInstance().checkFontFile()
+
+            //检查字体文件md5: 4d96249c34f491ba811e06078263a47d
+            val fontFile = File(Constants.C2M_LED_FONT_PATH)
+            if (fontFile.exists()) {
+                Thread{
+                    Thread.sleep(5000)
+
+                    val md5 = MD5Utils.getFileMD5(fontFile)
+                    Log.e("Led", "led font file md5: $md5")
+                    val fileMd5 = "4d96249c34f491ba811e06078263a47d"
+                    activity.runOnUiThread {
+                        if (fileMd5 == md5) {
+                            showMessage("Font file MD5 correct!")
+                        } else {
+                            showMessage("Font file MD5 not correct: $md5")
+                        }
+                    }
+                }.start()
+            }
         }
 
         btn_power_on_off.setOnClickListener {
@@ -229,6 +258,14 @@ class LedSettingsFragment: Fragment() {
                 led_custom_content.visibility = View.VISIBLE
             }
         }
+
+        group_led_type.setOnCheckedChangeListener { group, checkedId ->
+            if (checkedId == R.id.radio_led_type_c2m) {
+                SettingConfig.setLedType(baseActivity, 3)
+            } else if (checkedId == R.id.radio_led_type_t4) {
+                SettingConfig.setLedType(baseActivity, 0)
+            }
+        }
     }
 
     override fun onStart() {

+ 47 - 25
android_host/src/main/h10_z3128_1h/java/com/wdkl/ncs/android/component/nursehome/led/LedC2MManager.java

@@ -289,15 +289,24 @@ public class LedC2MManager extends LedManager {
     private long createDefaultProgram(String ledResolution, int fontSize, int type, int savaType) {
         long hProgram = 0;
         String language = LocaleMangerUtils.getApplicationLocale().getLanguage();
+        int ledType = SettingConfig.getLedType(application);
+        int grayLevel = 1;
+        int nLayout = 0;
+        ledC2M.InitLedType(ledType);
+        if (ledType == 0) {
+            grayLevel = 0;
+            nLayout = 1;
+        }
+
         if (type == 0) {
             //仅显示时间
             if (LedItem.TYPE_192_32.equals(ledResolution)) {
                 //192x32
-                hProgram = ledC2M.CreateProgram(192, 32, 1,1, savaType);
+                hProgram = ledC2M.CreateProgram(192, 32, 1, grayLevel, savaType);
                 ledC2M.AddProgram(hProgram, 0, 10, 1);
                 if (Locale.CHINESE.getLanguage().equals(language)) {
                     //左边添加一个静字
-                    ledC2M.AddImageTextArea(hProgram, 0, 1, 0, 0, 48, 32, 0);
+                    ledC2M.AddImageTextArea(hProgram, 0, 1, 0, 0, 48, 32, nLayout);
                     ledC2M.AddStaticTextToImageTextArea(hProgram, 0, 1, 0, "静", Constants.Companion.getC2M_LED_FONT_PATH(), 28, 0xff, 1, 0, 0, 0, 1, 1);
                     //时间
                     ledC2M.AddDigitalClockArea(hProgram, 0, 2, 48, 0, 144, 32, Constants.Companion.getC2M_LED_FONT_PATH(),
@@ -312,7 +321,7 @@ public class LedC2MManager extends LedManager {
                 }
             } else if (LedItem.TYPE_64_16.equals(ledResolution)) {
                 //64x16
-                hProgram = ledC2M.CreateProgram(64, 16, 1,1,savaType);
+                hProgram = ledC2M.CreateProgram(64, 16, 1, grayLevel,savaType);
                 ledC2M.AddProgram(hProgram, 0, 10, 1);
 
                 if (Locale.CHINESE.getLanguage().equals(language)) {
@@ -328,7 +337,7 @@ public class LedC2MManager extends LedManager {
                 }
             } else if (LedItem.TYPE_128_16.equals(ledResolution)) {
                 //128x16
-                hProgram = ledC2M.CreateProgram(128, 16, 1,1,savaType);
+                hProgram = ledC2M.CreateProgram(128, 16, 1, grayLevel,savaType);
                 ledC2M.AddProgram(hProgram, 0, 10, 1);
                 ledC2M.AddDigitalClockArea(hProgram, 0, 1, 0, 0, 128, 16, Constants.Companion.getC2M_LED_FONT_PATH(),
                         16, 0xff, 0, 0, 0,
@@ -355,7 +364,7 @@ public class LedC2MManager extends LedManager {
             String text = SettingConfig.getLedCustomInfo(application);
             if (LedItem.TYPE_192_32.equals(ledResolution)) {
                 //192x32
-                hProgram = ledC2M.CreateProgram(192, 32, 1,1,savaType);
+                hProgram = ledC2M.CreateProgram(192, 32, 1,grayLevel,savaType);
                 ledC2M.AddProgram(hProgram, 0, 10, 1);
                 if (Locale.CHINESE.getLanguage().equals(language)) {
                     ledC2M.AddDigitalClockArea(hProgram, 0, 1, 0, 0, 192, 32, Constants.Companion.getC2M_LED_FONT_PATH(),
@@ -371,12 +380,12 @@ public class LedC2MManager extends LedManager {
 
                 if (!TextUtils.isEmpty(text)) {
                     ledC2M.AddProgram(hProgram, 1, 10, 1);
-                    ledC2M.AddImageTextArea(hProgram, 1, 1, 0, 0, 192, 32, 0);
+                    ledC2M.AddImageTextArea(hProgram, 1, 1, 0, 0, 192, 32, nLayout);
                     ledC2M.AddMultiLineTextToImageTextArea(hProgram, 1, 1, 0, text, Constants.Companion.getC2M_LED_FONT_PATH(), fontSize, 0xff, 0, 0, 0, 4, 5, 3, 1, 1);
                 }
             } else if (LedItem.TYPE_64_16.equals(ledResolution)) {
                 //64x16
-                hProgram = ledC2M.CreateProgram(64, 16, 1,1,savaType);
+                hProgram = ledC2M.CreateProgram(64, 16, 1,grayLevel,savaType);
                 ledC2M.AddProgram(hProgram, 0, 10, 1);
                 if (Locale.CHINESE.getLanguage().equals(language)) {
                     ledC2M.AddDigitalClockArea(hProgram, 0, 1, 0, 0, 64, 16, Constants.Companion.getC2M_LED_FONT_PATH(),
@@ -392,12 +401,12 @@ public class LedC2MManager extends LedManager {
 
                 if (!TextUtils.isEmpty(text)) {
                     ledC2M.AddProgram(hProgram, 1, 10, 1);
-                    ledC2M.AddImageTextArea(hProgram, 1, 1, 0, 0, 64, 16, 0);
+                    ledC2M.AddImageTextArea(hProgram, 1, 1, 0, 0, 64, 16, nLayout);
                     ledC2M.AddMultiLineTextToImageTextArea(hProgram, 1, 1, 0, text, Constants.Companion.getC2M_LED_FONT_PATH(), 16, 0xff, 0, 0, 0, 4, 5, 3, 1, 1);
                 }
             } else if (LedItem.TYPE_128_16.equals(ledResolution)){
                 //128x16
-                hProgram = ledC2M.CreateProgram(128, 16, 1,1,savaType);
+                hProgram = ledC2M.CreateProgram(128, 16, 1,grayLevel,savaType);
                 ledC2M.AddProgram(hProgram, 0, 10, 1);
                 ledC2M.AddDigitalClockArea(hProgram, 0, 1, 0, 0, 128, 16, Constants.Companion.getC2M_LED_FONT_PATH(),
                         16, 0xff, 0, 0, 0,
@@ -405,12 +414,12 @@ public class LedC2MManager extends LedManager {
                         4, 0xff, 0, 0xff, 2, 0xff, 0);
                 if (!TextUtils.isEmpty(text)) {
                     ledC2M.AddProgram(hProgram, 1, 10, 1);
-                    ledC2M.AddImageTextArea(hProgram, 1, 1, 0, 0, 128, 16, 0);
+                    ledC2M.AddImageTextArea(hProgram, 1, 1, 0, 0, 128, 16, nLayout);
                     ledC2M.AddMultiLineTextToImageTextArea(hProgram, 1, 1, 0, text, Constants.Companion.getC2M_LED_FONT_PATH(), fontSize, 0xff, 0, 0, 0, 4, 5, 3, 1, 1);
                 }
             } else {
                 //128x32
-                hProgram = ledC2M.CreateProgram(128, 32, 1,1,savaType);
+                hProgram = ledC2M.CreateProgram(128, 32, 1,grayLevel,savaType);
                 ledC2M.AddProgram(hProgram, 0, 10, 1);
                 if (Locale.CHINESE.getLanguage().equals(language)) {
                     ledC2M.AddDigitalClockArea(hProgram, 0, 1, 0, 0, 128, 32, Constants.Companion.getC2M_LED_FONT_PATH(),
@@ -426,7 +435,7 @@ public class LedC2MManager extends LedManager {
 
                 if (!TextUtils.isEmpty(text)) {
                     ledC2M.AddProgram(hProgram, 1, 10, 1);
-                    ledC2M.AddImageTextArea(hProgram, 1, 1, 0, 0, 128, 32, 0);
+                    ledC2M.AddImageTextArea(hProgram, 1, 1, 0, 0, 128, 32, nLayout);
                     ledC2M.AddMultiLineTextToImageTextArea(hProgram, 1, 1, 0, text, Constants.Companion.getC2M_LED_FONT_PATH(), fontSize, 0xff, 0, 0, 0, 4, 5, 3, 1, 1);
                 }
             }
@@ -437,18 +446,27 @@ public class LedC2MManager extends LedManager {
 
     private long createCallingProgram(String ledResolution, int fontSize) {
         long hProgram = 0;
+        int ledType = SettingConfig.getLedType(application);
+        int grayLevel = 1;
+        int nLayout = 0;
+        ledC2M.InitLedType(ledType);
+        if (ledType == 0) {
+            grayLevel = 0;
+            nLayout = 1;
+        }
+
         try {
             if (LedItem.TYPE_192_32.equals(ledResolution)) {
                 //192x32,双行显示
-                hProgram = ledC2M.CreateProgram(192, 32, 1, 1, 3);
+                hProgram = ledC2M.CreateProgram(192, 32, 1, grayLevel, 3);
                 int programTextCount = programTextList.size(); //呼叫信息数量
                 if (programTextCount == 1) {
                     ledC2M.AddProgram(hProgram, 0, SettingConfig.getLedProgramTime(BaseApplication.appContext), 1);
                     //左边添加一个静字
-                    ledC2M.AddImageTextArea(hProgram, 0, 1, 0, 0, 48, 32, 0);
+                    ledC2M.AddImageTextArea(hProgram, 0, 1, 0, 0, 48, 32, nLayout);
                     ledC2M.AddStaticTextToImageTextArea(hProgram, 0, 1, 0, "静", Constants.Companion.getC2M_LED_FONT_PATH(), 28, 0xff, 1, 0, 0, 0, 1, 1);
 
-                    ledC2M.AddImageTextArea(hProgram, 0, 2, 48, 0, 144, 16, 0);
+                    ledC2M.AddImageTextArea(hProgram, 0, 2, 48, 0, 144, 16, nLayout);
                     //ledC2M.AddSinglelineTextToImageTextArea(hProgram, 0, 1, 0, programTextList.get(0).getText(), Constants.Companion.getC2M_LED_FONT_PATH(), fontSize, 0xff, 0, 0, 0, 4, 5, 3);
                     ledC2M.AddMultiLineTextToImageTextArea(hProgram, 0, 2, 0, programTextList.get(0).getText(), Constants.Companion.getC2M_LED_FONT_PATH(), fontSize, 0xff, 0, 0, 0, 4, 2, 8, 1, 1);
                 } else {
@@ -465,17 +483,17 @@ public class LedC2MManager extends LedManager {
                         int textIndex = i * 2;
                         ledC2M.AddProgram(hProgram, i, SettingConfig.getLedProgramTime(BaseApplication.appContext), 1);
                         //左边添加一个静字
-                        ledC2M.AddImageTextArea(hProgram, i, 1, 0, 0, 48, 32, 0);
+                        ledC2M.AddImageTextArea(hProgram, i, 1, 0, 0, 48, 32, nLayout);
                         ledC2M.AddStaticTextToImageTextArea(hProgram, i, 1, 0, "静", Constants.Companion.getC2M_LED_FONT_PATH(), 28, 0xff, 1, 0, 0, 0, 1, 1);
 
                         //上面一行
-                        ledC2M.AddImageTextArea(hProgram, i, 2, 48, 0, 144, 16, 0);
+                        ledC2M.AddImageTextArea(hProgram, i, 2, 48, 0, 144, 16, nLayout);
                         //ledC2M.AddSinglelineTextToImageTextArea(hProgram, i, 1, 0, programTextList.get(textIndex).getText(), Constants.Companion.getC2M_LED_FONT_PATH(), fontSize, 0xff, 0, 0, 0, 4, 5, 3);
                         ledC2M.AddMultiLineTextToImageTextArea(hProgram, i, 2, 0, programTextList.get(textIndex).getText(), Constants.Companion.getC2M_LED_FONT_PATH(), fontSize, 0xff, 0, 0, 0, 4, 2, 8, 1, 1);
 
                         if (textIndex + 1 < programTextCount) {
                             //下面一行
-                            ledC2M.AddImageTextArea(hProgram, i, 3, 48, 16, 144, 16, 0);
+                            ledC2M.AddImageTextArea(hProgram, i, 3, 48, 16, 144, 16, nLayout);
                             //ledC2M.AddSinglelineTextToImageTextArea(hProgram, i, 2, 0, programTextList.get(textIndex + 1).getText(), Constants.Companion.getC2M_LED_FONT_PATH(), fontSize, 0xff, 0, 0, 0, 4, 5, 3);
                             ledC2M.AddMultiLineTextToImageTextArea(hProgram, i, 3, 0, programTextList.get(textIndex + 1).getText(), Constants.Companion.getC2M_LED_FONT_PATH(), fontSize, 0xff, 0, 0, 0, 4, 2, 8, 1, 1);
                         }
@@ -483,27 +501,27 @@ public class LedC2MManager extends LedManager {
                 }
             } else if (LedItem.TYPE_64_16.equals(ledResolution)) {
                 //64x16
-                hProgram = ledC2M.CreateProgram(64, 16, 1, 1, 3);
+                hProgram = ledC2M.CreateProgram(64, 16, 1, grayLevel, 3);
                 for (int i = 0; i < programTextList.size(); i++) {
                     String text = programTextList.get(i).getText();
                     ledC2M.AddProgram(hProgram, i, SettingConfig.getLedProgramTime(BaseApplication.appContext), 1);
-                    ledC2M.AddImageTextArea(hProgram, i, 1, 0, 0, 64, 16, 0);
+                    ledC2M.AddImageTextArea(hProgram, i, 1, 0, 0, 64, 16, nLayout);
                     ledC2M.AddMultiLineTextToImageTextArea(hProgram, i, 1, 0, text, Constants.Companion.getC2M_LED_FONT_PATH(), 16, 0xff, 0, 0, 0, 4, 5, 3, 1, 1);
                 }
             } else if (LedItem.TYPE_128_16.equals(ledResolution)) {
                 //128x16
-                hProgram = ledC2M.CreateProgram(128, 16, 1, 1, 3);
+                hProgram = ledC2M.CreateProgram(128, 16, 1, grayLevel, 3);
                 for (int i = 0; i < programTextList.size(); i++) {
                     ledC2M.AddProgram(hProgram, i, SettingConfig.getLedProgramTime(BaseApplication.appContext), 1);
-                    ledC2M.AddImageTextArea(hProgram, i, 1, 0, 0, 128, 16, 0);
+                    ledC2M.AddImageTextArea(hProgram, i, 1, 0, 0, 128, 16, nLayout);
                     ledC2M.AddMultiLineTextToImageTextArea(hProgram, i, 1, 0, programTextList.get(i).getText(), Constants.Companion.getC2M_LED_FONT_PATH(), fontSize, 0xff, 0, 0, 0, 4, 5, 3, 1, 1);
                 }
             } else {
                 //128x32
-                hProgram = ledC2M.CreateProgram(128, 32, 1, 1, 3);
+                hProgram = ledC2M.CreateProgram(128, 32, 1, grayLevel, 3);
                 for (int i = 0; i < programTextList.size(); i++) {
                     ledC2M.AddProgram(hProgram, i, SettingConfig.getLedProgramTime(BaseApplication.appContext), 1);
-                    ledC2M.AddImageTextArea(hProgram, i, 1, 0, 0, 128, 32, 0);
+                    ledC2M.AddImageTextArea(hProgram, i, 1, 0, 0, 128, 32, nLayout);
                     ledC2M.AddMultiLineTextToImageTextArea(hProgram, i, 1, 0, programTextList.get(i).getText(), Constants.Companion.getC2M_LED_FONT_PATH(), fontSize, 0xff, 0, 0, 0, 4, 5, 3, 1, 1);
                 }
             }
@@ -626,7 +644,11 @@ public class LedC2MManager extends LedManager {
     @Override
     public void removeAllProgram() {
         programTextList.clear();
-        sendDefaultProgram(true);
+        if (SettingConfig.getLedType(application) == 0) {
+            sendDefaultProgram(false);
+        } else {
+            sendDefaultProgram(true);
+        }
     }
 
     @Override

+ 12 - 0
android_host/src/main/h10_z3128_1h/java/com/wdkl/ncs/android/component/nursehome/settingconfig/SettingConfig.java

@@ -145,6 +145,9 @@ public class SettingConfig {
 
     private static final String KEY_SP_VOICE_NUMERIC = "KEY_SP_VOICE_NUMERIC";
 
+    //点阵屏控制卡型号
+    private static final String KEY_SP_LED_TYPE = "KEY_SP_LED_TYPE";
+
     //语音播报模式
     public static int getTtsMode(Context context) {
         return getSP(context).getInt(KEY_SP_TTS_MODE, TTS_ON);
@@ -227,6 +230,15 @@ public class SettingConfig {
         getEditor(context).putBoolean(KEY_SP_VOICE_NUMERIC, enable).apply();
     }
 
+    //0--T卡,3--C卡
+    public static int getLedType(Context context) {
+        return getSP(context).getInt(KEY_SP_LED_TYPE, 3);
+    }
+
+    public static void setLedType(Context context, int type) {
+        getEditor(context).putInt(KEY_SP_LED_TYPE, type).apply();
+    }
+
 
     /**
      * 获取播报次数

+ 1 - 1
android_host/src/main/h10_z3128_1h/java/com/wdkl/ncs/android/component/nursehome/util/AppUpdateHelper.java

@@ -210,7 +210,7 @@ public class AppUpdateHelper {
     }
 
     public static void reboot(Context context) {
-        if (Build.MODEL.equals("rk3128")) {
+        if (Build.MODEL.equals("rk3128") || Build.MODEL.equals("rk3368")) {
             try {
                 Intent intent = new Intent(Intent.ACTION_REBOOT);
                 intent.putExtra("nowait", 1);

+ 41 - 1
android_host/src/main/h10_z3128_1h/res/layout/fragment_led_settings.xml

@@ -92,8 +92,48 @@
         <!--点阵屏全局设置-->
         <LinearLayout
             android:layout_width="match_parent"
-            android:layout_height="80dp"
+            android:layout_height="wrap_content"
             android:layout_marginTop="20dp"
+            android:padding="10dp"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_vertical"
+                android:text="点阵屏类型:"
+                android:textColor="#000000"
+                android:textSize="24sp" />
+
+            <RadioGroup
+                android:id="@+id/group_led_type"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="20dp"
+                android:orientation="horizontal">
+
+                <RadioButton
+                    android:id="@+id/radio_led_type_c2m"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="C2M"
+                    android:textSize="24sp" />
+
+                <RadioButton
+                    android:id="@+id/radio_led_type_t4"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="20dp"
+                    android:text="T4"
+                    android:textSize="24sp" />
+            </RadioGroup>
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="80dp"
+            android:layout_marginTop="10dp"
             android:padding="10dp">
 
             <Button

+ 1 - 1
app/src/main/code/com/wdkl/app/ncs/application/Application.kt

@@ -98,7 +98,7 @@ class Application : BaseApplication() {
 
         Constants.supportCamera = isCameraSupport()
 
-        if (Build.MODEL.equals("rk3128")) {
+        if (Build.MODEL.equals("rk3128") || Build.MODEL.equals("rk3368")) {
             //卸载原来二代系统apk
             if (uninstallApk) {
                 //卸载老的二代app

+ 26 - 5
listenvision/src/main/java/com/listenvision/led.java

@@ -59,16 +59,27 @@ public class led {
             37=冒泡
             38=下雪
          */
-	
+
+	/********************************************************************************************
+	 *	InitLedType				初始化控制卡型号,程序启动,初始化调用一次即可
+	 *
+	 *	参数说明
+	 *				LedType		卡型号   0   	T/A/U/XC/W
+	 *									1   	E
+	 *									2		X
+	 *									3		C
+	 ********************************************************************************************/
+	public native void InitLedType(int LedType);
+
 	/********************************************************************************************
-	 *	CreateProgram				创建节目对象,成功返回节目对象句柄
+	 *	CreateProgram				创建节目对象,成功返回节目对象句柄,注意此处屏宽高及颜色参数必需与设置屏参的屏宽高及颜色一致,否则发送时会提示错误
 	 *
 	 *	参数说明
 	 *				LedWidth		屏的宽度
 	 *				LedHeight		屏的高度
-	 *				ColorType		屏的颜色 1.单色  2.双基色  3.三基色
-	 *				GrayLevel		灰度等级  赋值  1-5对应的灰度等级分别为 无,4,8,16,32
-	 *				SaveType		节目保存位置,默认为0保存为flash节目,3保存为ram节目
+	 *				ColorType		屏的颜色 1.单色  2.双基色  3.三基色     注:C卡全彩参数为3      X系列卡参数固定为 4
+	 *				GrayLevel		灰度等级  赋值  1-5对应的灰度等级分别为 无,4,8,16,32     除C卡外,其它卡传0
+	 *				SaveType		节目保存位置,默认为0保存为flash节目,3保存为ram节目。注:flash节目掉电不清除,ram节目掉电清除。应用场景需要实时刷新的,建议保持为ram节目
 	 *	返回值
 	 *				0				创建节目对象失败
 	 *				非0				创建节目对象成功
@@ -383,6 +394,16 @@ public class led {
 	public native int SetLedCommunicationParameter(String IpStr,String NewIp,String NewNetMask,String NewGateway,String NewMac,int IsClient,String ServerIp,int ServerPort,int IsDHCP,int IsHeartBeat,int HeartBeatTime);
 
 	/*********************************************************************************************
+	 *	GetErrorCodeInfo								获取错误信息
+	 *
+	 *	参数说明
+	 *				nErrCode					错误码
+	 *	返回值
+	 *				返回错误信息
+	 ********************************************************************************************/
+	public native String GetErrorCodeInfo(int nErrCode);
+
+	/*********************************************************************************************
 	*	LedInitServer			启动控制卡心跳包服务
 	*	
 	*	参数说明

+ 224 - 63
middleware/src/main/code/com/wdkl/ncs/android/middleware/model/dos/PartSettingDO.java

@@ -207,6 +207,26 @@ public class PartSettingDO implements Serializable {
     @Column(name = "transfer_duration_leader")
     @ApiModelProperty(value = "护士组长转接时长,单位:秒", required = false)
     private Integer transferDurationLeader;
+    /**
+     *	linux分机的呼出声音音量
+     */	@Column(name = "linux_bed_volume_native" )
+    @ApiModelProperty(value="linux分机的呼出声音音量",required=false)
+    private Integer linuxBedVolumeNative;
+    /**
+     *	linux分机的呼出声音增益
+     */	@Column(name = "linux_bed_gain_size" )
+    @ApiModelProperty(value="linux分机的呼出声音增益",required=false)
+    private Integer linuxBedGainSize;
+    /**
+     *	linux门口机的呼出声音音量
+     */	@Column(name = "linux_door_volume_native" )
+    @ApiModelProperty(value="linux门口机的呼出声音音量",required=false)
+    private Integer linuxDoorVolumeNative;
+    /**
+     *	linux门口机的呼出声音增益
+     */	@Column(name = "linux_door_gain_size" )
+    @ApiModelProperty(value="linux门口机的呼出声音增益",required=false)
+    private Integer linuxDoorGainSize;
 
 
     /**
@@ -246,59 +266,75 @@ public class PartSettingDO implements Serializable {
     @ApiModelProperty(value = "分机自定义呼叫角色按钮2要呼叫的角色ID", required = true)
     private Integer customizeRoleCallSecond;
     /**
-     *	分机自定义呼叫角色按钮3对应的角色id
-     */	@Column(name = "customize_role_call_third" )
-    @ApiModelProperty(value="分机自定义呼叫角色按钮3对应的角色id",required=false)
+     * 分机自定义呼叫角色按钮3对应的角色id
+     */
+    @Column(name = "customize_role_call_third")
+    @ApiModelProperty(value = "分机自定义呼叫角色按钮3对应的角色id", required = false)
     private Integer customizeRoleCallThird;
     /**
-     *	分机自定义呼叫角色按钮4对应的角色id
-     */	@Column(name = "customize_role_call_fourth" )
-    @ApiModelProperty(value="分机自定义呼叫角色按钮4对应的角色id",required=false)
+     * 分机自定义呼叫角色按钮4对应的角色id
+     */
+    @Column(name = "customize_role_call_fourth")
+    @ApiModelProperty(value = "分机自定义呼叫角色按钮4对应的角色id", required = false)
     private Integer customizeRoleCallFourth;
     /**
-     *	分机自定义呼叫角色按钮5对应的角色id
-     */	@Column(name = "customize_role_call_fifth" )
-    @ApiModelProperty(value="分机自定义呼叫角色按钮5对应的角色id",required=false)
+     * 分机自定义呼叫角色按钮5对应的角色id
+     */
+    @Column(name = "customize_role_call_fifth")
+    @ApiModelProperty(value = "分机自定义呼叫角色按钮5对应的角色id", required = false)
     private Integer customizeRoleCallFifth;
     /**
-     *	科室自定义呼叫医院级设备1的id
-     */	@Column(name = "customize_hospital_call_first" )
-    @ApiModelProperty(value="科室自定义呼叫医院级设备1的id",required=false)
+     * 科室自定义呼叫医院级设备1的id
+     */
+    @Column(name = "customize_hospital_call_first")
+    @ApiModelProperty(value = "科室自定义呼叫医院级设备1的id", required = false)
     private Integer customizeHospitalCallFirst;
     /**
-     *	科室自定义呼叫医院级设备1的名称
-     */	@Column(name = "customize_hospital_call_first_name" )
-    @ApiModelProperty(value="科室自定义呼叫医院级设备1的名称",required=false)
+     * 科室自定义呼叫医院级设备1的名称
+     */
+    @Column(name = "customize_hospital_call_first_name")
+    @ApiModelProperty(value = "科室自定义呼叫医院级设备1的名称", required = false)
     private String customizeHospitalCallFirstName;
     /**
-     *	科室自定义呼叫医院级设备2的id
-     */	@Column(name = "customize_hospital_call_second" )
-    @ApiModelProperty(value="科室自定义呼叫医院级设备2的id",required=false)
+     * 科室自定义呼叫医院级设备2的id
+     */
+    @Column(name = "customize_hospital_call_second")
+    @ApiModelProperty(value = "科室自定义呼叫医院级设备2的id", required = false)
     private Integer customizeHospitalCallSecond;
     /**
-     *	科室自定义呼叫医院级设备2的名称
-     */	@Column(name = "customize_hospital_call_second_name" )
-    @ApiModelProperty(value="科室自定义呼叫医院级设备2的名称",required=false)
+     * 科室自定义呼叫医院级设备2的名称
+     */
+    @Column(name = "customize_hospital_call_second_name")
+    @ApiModelProperty(value = "科室自定义呼叫医院级设备2的名称", required = false)
     private String customizeHospitalCallSecondName;
     /**
-     *	科室自定义呼叫医院级设备3的id
-     */	@Column(name = "customize_hospital_call_third" )
-    @ApiModelProperty(value="科室自定义呼叫医院级设备3的id",required=false)
+     * 科室自定义呼叫医院级设备3的id
+     */
+    @Column(name = "customize_hospital_call_third")
+    @ApiModelProperty(value = "科室自定义呼叫医院级设备3的id", required = false)
     private Integer customizeHospitalCallThird;
     /**
-     *	科室自定义呼叫医院级设备3的名称
+     * 科室自定义呼叫医院级设备3的名称
      */
-    @Column(name = "customize_hospital_call_third_name" )
-    @ApiModelProperty(value="科室自定义呼叫医院级设备3的名称",required=false)
+    @Column(name = "customize_hospital_call_third_name")
+    @ApiModelProperty(value = "科室自定义呼叫医院级设备3的名称", required = false)
     private String customizeHospitalCallThirdName;
 
     /**
-     *	用户名字是否隐藏,0就是不隐藏,1就是隐藏
+     * 用户名字是否隐藏,0就是不隐藏,1就是隐藏
      */
-    @Column(name = "customer_name_hidden" )
-    @ApiModelProperty(value="用户名字是否隐藏,0就是不隐藏,1就是隐藏",required=false)
+    @Column(name = "customer_name_hidden")
+    @ApiModelProperty(value = "用户名字是否隐藏,0就是不隐藏,1就是隐藏", required = false)
     private Integer customerNameHidden;
 
+    /**
+     * 工作人员名字是否隐藏,0就是不隐藏,1就是隐藏
+     */
+    @Column(name = "clerk_name_hidden")
+    @ApiModelProperty(value = "工作人员名字是否隐藏,0就是不隐藏,1就是隐藏", required = false)
+    private Integer clerkNameHidden;
+
+
     @Column(name = "doctor_title")
     @ApiModelProperty(value = "模拟分机医生标题", required = true)
     private String doctorTitle;
@@ -315,28 +351,28 @@ public class PartSettingDO implements Serializable {
     @ApiModelProperty(value = "是否显示模拟分机护士标题", required = true)
     private Integer nurseValid;
     /**
-     *	门口机呼叫护士的标题
+     * 门口机呼叫护士的标题
      */
-    @Column(name = "door_nurse_title" )
-    @ApiModelProperty(value="门口机呼叫护士的标题",required=false)
+    @Column(name = "door_nurse_title")
+    @ApiModelProperty(value = "门口机呼叫护士的标题", required = false)
     private String doorNurseTitle;
     /**
-     *	是否显示门口机呼叫护士的标题
+     * 是否显示门口机呼叫护士的标题
      */
-    @Column(name = "door_nurse_valid" )
-    @ApiModelProperty(value="是否显示门口机呼叫护士的标题",required=false)
+    @Column(name = "door_nurse_valid")
+    @ApiModelProperty(value = "是否显示门口机呼叫护士的标题", required = false)
     private Integer doorNurseValid;
     /**
-     *	门口机进入护理的标题
+     * 门口机进入护理的标题
      */
-    @Column(name = "door_nursing_title" )
-    @ApiModelProperty(value="门口机进入护理的标题",required=false)
+    @Column(name = "door_nursing_title")
+    @ApiModelProperty(value = "门口机进入护理的标题", required = false)
     private String doorNursingTitle;
     /**
-     *	是否显示进入护理的标题
+     * 是否显示进入护理的标题
      */
-    @Column(name = "door_nursing_valid" )
-    @ApiModelProperty(value="是否显示进入护理的标题",required=false)
+    @Column(name = "door_nursing_valid")
+    @ApiModelProperty(value = "是否显示进入护理的标题", required = false)
     private Integer doorNursingValid;
 
     @Column(name = "up_seconds")
@@ -349,38 +385,75 @@ public class PartSettingDO implements Serializable {
 
     @Column(name = "board_show_empty_bed")
     @ApiModelProperty(value = "信息看板显示空床位", required = true)
-    private Boolean boardShowEmptyBed;
+    private boolean boardShowEmptyBed;
 
     /**
-     *	事件是否开启转发
-     */	@Column(name = "event_forward" )
-    @ApiModelProperty(value="事件是否开启转发",required=false)
+     * 事件是否开启转发
+     */
+    @Column(name = "event_forward")
+    @ApiModelProperty(value = "事件是否开启转发", required = false)
     private Integer eventForward;
     /**
-     *	护理灯颜色
-     */	@Column(name = "nursing_color_rgb" )
-    @ApiModelProperty(value="护理门灯颜色",required=false)
+     * 护理灯颜色
+     */
+    @Column(name = "nursing_color_rgb")
+    @ApiModelProperty(value = "护理门灯颜色", required = false)
     private String nursingColorRgb;
     /**
-     *	是否开启双色门灯
-     */	@Column(name = "two_color_door_light_valid" )
-    @ApiModelProperty(value="是否开启双色门灯",required=false)
+     * 是否开启双色门灯
+     */
+    @Column(name = "two_color_door_light_valid")
+    @ApiModelProperty(value = "是否开启双色门灯", required = false)
     private Integer twoColorDoorLightValid;
     /**
-     *	图片地址
-     */	@Column(name = "qr_url" )
-    @ApiModelProperty(value="图片地址",required=false)
+     * 图片地址
+     */
+    @Column(name = "qr_url")
+    @ApiModelProperty(value = "图片地址", required = false)
     private String qrUrl;
     /**
-     *	群留言记录保留天数
-     */	@Column(name = "channel_im_history_store_days" )
-    @ApiModelProperty(value="群留言记录保留天数",required=false)
+     * 群留言记录保留天数
+     */
+    @Column(name = "channel_im_history_store_days")
+    @ApiModelProperty(value = "群留言记录保留天数", required = false)
     private Integer channelImHistoryStoreDays;
     /**
-     *	是否开启双色门灯
-     */	@Column(name = "record_enabled" )
-    @ApiModelProperty(value="是否开启录音录像功能",required=false)
+     * 是否开启双色门灯
+     */
+    @Column(name = "record_enabled")
+    @ApiModelProperty(value = "是否开启录音录像功能", required = false)
     private Integer recordEnabled;
+    /**
+     * 是否点击按钮亮屏并触发功能,0为点击按钮只亮屏,1为点击按钮亮屏并且触发功能
+     */
+    @Column(name = "screen_light")
+    @ApiModelProperty(value = "是否点击按钮亮屏,0为点击按钮只亮屏,1为点击按钮亮屏并且触发功能", required = false)
+    private Integer screenLight;
+
+    /**
+     * 是否开启门口机呼叫床位的按钮,0为关闭,1为开启
+     */
+    @Column(name = "room_call_bed")
+    @ApiModelProperty(value = "是否开启门口机呼叫床位的按钮,0为关闭,1为开启", required = false)
+    private Integer roomCallBed;
+
+    /**
+     * 呼叫时是否开启所有门口机呼显示,0不开启,1开启
+     */
+    @Column(name = "bool_all_door_status")
+    @ApiModelProperty(value = "呼叫时是否开启所有门口机呼显示,0不开启,1开启", required = false)
+    private Integer boolAllDoorStatus;
+
+    /**
+     *	呼叫时是否开启所有门口机呼显示,0不开启,1开启
+     */
+    @Column(name = "bool_door_light_always_on" )
+    @ApiModelProperty(value="门灯是否常亮,0否、1是",required=false)
+    private Integer boolDoorLightAlwaysOn;
+
+    @Column(name = "bool_led_service")
+    @ApiModelProperty(value = "点阵屏是否由服务端控制", required = false)
+    private Boolean boolLedService;
 
 
     @PrimaryKeyField
@@ -638,6 +711,38 @@ public class PartSettingDO implements Serializable {
         this.transferDurationLeader = transferDurationLeader;
     }
 
+    public Integer getLinuxBedVolumeNative() {
+        return linuxBedVolumeNative;
+    }
+
+    public void setLinuxBedVolumeNative(Integer linuxBedVolumeNative) {
+        this.linuxBedVolumeNative = linuxBedVolumeNative;
+    }
+
+    public Integer getLinuxBedGainSize() {
+        return linuxBedGainSize;
+    }
+
+    public void setLinuxBedGainSize(Integer linuxBedGainSize) {
+        this.linuxBedGainSize = linuxBedGainSize;
+    }
+
+    public Integer getLinuxDoorVolumeNative() {
+        return linuxDoorVolumeNative;
+    }
+
+    public void setLinuxDoorVolumeNative(Integer linuxDoorVolumeNative) {
+        this.linuxDoorVolumeNative = linuxDoorVolumeNative;
+    }
+
+    public Integer getLinuxDoorGainSize() {
+        return linuxDoorGainSize;
+    }
+
+    public void setLinuxDoorGainSize(Integer linuxDoorGainSize) {
+        this.linuxDoorGainSize = linuxDoorGainSize;
+    }
+
     public Integer getCommunicationModeBed() {
         return communicationModeBed;
     }
@@ -758,6 +863,14 @@ public class PartSettingDO implements Serializable {
         this.customerNameHidden = customerNameHidden;
     }
 
+    public Integer getClerkNameHidden() {
+        return clerkNameHidden;
+    }
+
+    public void setClerkNameHidden(Integer clerkNameHidden) {
+        this.clerkNameHidden = clerkNameHidden;
+    }
+
     public String getDoctorTitle() {
         return doctorTitle;
     }
@@ -838,11 +951,11 @@ public class PartSettingDO implements Serializable {
         this.autoAccept = autoAccept;
     }
 
-    public Boolean getBoardShowEmptyBed() {
+    public boolean isBoardShowEmptyBed() {
         return boardShowEmptyBed;
     }
 
-    public void setBoardShowEmptyBed(Boolean boardShowEmptyBed) {
+    public void setBoardShowEmptyBed(boolean boardShowEmptyBed) {
         this.boardShowEmptyBed = boardShowEmptyBed;
     }
 
@@ -887,6 +1000,9 @@ public class PartSettingDO implements Serializable {
     }
 
     public Integer getRecordEnabled() {
+        if (recordEnabled == null) {
+            return 0;
+        }
         return recordEnabled;
     }
 
@@ -894,6 +1010,51 @@ public class PartSettingDO implements Serializable {
         this.recordEnabled = recordEnabled;
     }
 
+    public Integer getScreenLight() {
+        if (screenLight == null) {
+            return 0;
+        }
+        return screenLight;
+    }
+
+    public void setScreenLight(Integer screenLight) {
+        this.screenLight = screenLight;
+    }
+
+    public Integer getRoomCallBed() {
+        return roomCallBed;
+    }
+
+    public void setRoomCallBed(Integer roomCallBed) {
+        this.roomCallBed = roomCallBed;
+    }
+
+    public Integer getBoolAllDoorStatus() {
+        if (boolAllDoorStatus == null) {
+            return 0;
+        }
+        return boolAllDoorStatus;
+    }
+
+    public void setBoolAllDoorStatus(Integer boolAllDoorStatus) {
+        this.boolAllDoorStatus = boolAllDoorStatus;
+    }
+
+    public Boolean getBoolLedService() {
+        return boolLedService;
+    }
+
+    public void setBoolLedService(Boolean boolLedService) {
+        this.boolLedService = boolLedService;
+    }
+    public Integer getBoolDoorLightAlwaysOn() {
+        return boolDoorLightAlwaysOn;
+    }
+
+    public void setBoolDoorLightAlwaysOn(Integer boolDoorLightAlwaysOn) {
+        this.boolDoorLightAlwaysOn = boolDoorLightAlwaysOn;
+    }
+
     @Override
     public String toString() {
         return "PartSettingDO{" +

+ 63 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/utils/MD5Utils.java

@@ -0,0 +1,63 @@
+package com.wdkl.ncs.android.middleware.utils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.security.MessageDigest;
+
+public class MD5Utils {
+    private static MappedByteBuffer[] mappedByteBuffers;
+    private static int bufferCount;
+
+    /**
+     * 获取单个文件的MD5值!
+     *
+     * @param file
+     * @return 解决首位0被省略问题
+     * 解决超大文件问题
+     */
+    public static String getFileMD5(File file) {
+
+        StringBuffer stringbuffer = null;
+        try {
+            char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+            FileInputStream in = new FileInputStream(file);
+            FileChannel ch = in.getChannel();
+
+            long fileSize = ch.size();
+            bufferCount = (int) Math.ceil((double) fileSize / (double) Integer.MAX_VALUE);
+            mappedByteBuffers = new MappedByteBuffer[bufferCount];
+
+            long preLength = 0;
+            long regionSize = Integer.MAX_VALUE;
+            for (int i = 0; i < bufferCount; i++) {
+                if (fileSize - preLength < Integer.MAX_VALUE) {
+                    regionSize = fileSize - preLength;
+                }
+                mappedByteBuffers[i] = ch.map(FileChannel.MapMode.READ_ONLY, preLength, regionSize);
+                preLength += regionSize;
+            }
+
+            MessageDigest messagedigest = MessageDigest.getInstance("MD5");
+
+            for (int i = 0; i < bufferCount; i++) {
+                messagedigest.update(mappedByteBuffers[i]);
+            }
+            byte[] bytes = messagedigest.digest();
+            int n = bytes.length;
+            stringbuffer = new StringBuffer(2 * n);
+            for (int l = 0; l < n; l++) {
+                byte bt = bytes[l];
+                char c0 = hexDigits[(bt & 0xf0) >> 4];
+                char c1 = hexDigits[bt & 0xf];
+                stringbuffer.append(c0);
+                stringbuffer.append(c1);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return stringbuffer.toString();
+
+    }
+}