From d6d9a09d505d11148599a95a5be3e1351edbe0ac Mon Sep 17 00:00:00 2001 From: hc Date: Mon, 13 Apr 2026 15:17:52 +0800 Subject: Local iHealth SDK, device detail screen, iOS event fixes --- .../ihealthlibrary/ExampleInstrumentedTest.java | 26 + .../ihealthlibrary/ExampleInstrumentedTest.java | 26 + .../android/src/main/AndroidManifest.xml | 7 + .../com/ihealth/ihealthlibrary/AM3SModule.java | 339 ++++++++++ .../java/com/ihealth/ihealthlibrary/AM4Module.java | 339 ++++++++++ .../java/com/ihealth/ihealthlibrary/AM5Module.java | 378 +++++++++++ .../ihealth/ihealthlibrary/AM5ProfileModule.java | 161 +++++ .../ihealth/ihealthlibrary/AMProfileModule.java | 312 +++++++++ .../java/com/ihealth/ihealthlibrary/BG1Module.java | 116 ++++ .../ihealth/ihealthlibrary/BG1ProfileModule.java | 176 +++++ .../com/ihealth/ihealthlibrary/BG1SModule.java | 106 +++ .../ihealth/ihealthlibrary/BG1SProfileModule.java | 225 +++++++ .../java/com/ihealth/ihealthlibrary/BG5Module.java | 323 +++++++++ .../com/ihealth/ihealthlibrary/BG5SModule.java | 185 ++++++ .../ihealth/ihealthlibrary/BG5SProfileModule.java | 113 ++++ .../ihealth/ihealthlibrary/BGProfileModule.java | 146 ++++ .../com/ihealth/ihealthlibrary/BP3LModule.java | 133 ++++ .../com/ihealth/ihealthlibrary/BP550BTModule.java | 159 +++++ .../java/com/ihealth/ihealthlibrary/BP5Module.java | 193 ++++++ .../com/ihealth/ihealthlibrary/BP5SModule.java | 155 +++++ .../java/com/ihealth/ihealthlibrary/BP7Module.java | 148 +++++ .../com/ihealth/ihealthlibrary/BP7SModule.java | 176 +++++ .../ihealth/ihealthlibrary/BPProfileModule.java | 168 +++++ .../java/com/ihealth/ihealthlibrary/BTMModule.java | 145 ++++ .../ihealth/ihealthlibrary/BTMProfileModule.java | 74 +++ .../java/com/ihealth/ihealthlibrary/ECGModule.java | 157 +++++ .../ihealth/ihealthlibrary/ECGProfileModule.java | 385 +++++++++++ .../com/ihealth/ihealthlibrary/ECGUSBModule.java | 290 ++++++++ .../java/com/ihealth/ihealthlibrary/HS2Module.java | 115 ++++ .../com/ihealth/ihealthlibrary/HS2SModule.java | 322 +++++++++ .../ihealth/ihealthlibrary/HS2SProfileModule.java | 209 ++++++ .../com/ihealth/ihealthlibrary/HS4SModule.java | 129 ++++ .../java/com/ihealth/ihealthlibrary/HS6Module.java | 134 ++++ .../ihealth/ihealthlibrary/HS6ProfileModule.java | 93 +++ .../ihealth/ihealthlibrary/HSProfileModule.java | 92 +++ .../com/ihealth/ihealthlibrary/NT13BModule.java | 98 +++ .../ihealth/ihealthlibrary/NT13BProfileModule.java | 52 ++ .../java/com/ihealth/ihealthlibrary/PO1Module.java | 99 +++ .../ihealth/ihealthlibrary/PO1ProfileModule.java | 73 ++ .../java/com/ihealth/ihealthlibrary/PO3Module.java | 115 ++++ .../ihealth/ihealthlibrary/POProfileModule.java | 78 +++ .../com/ihealth/ihealthlibrary/PT3SBTModule.java | 152 +++++ .../ihealthlibrary/PT3SBTProfileModule.java | 73 ++ .../com/ihealth/ihealthlibrary/TS28BModule.java | 98 +++ .../ihealth/ihealthlibrary/TS28BProfileModule.java | 52 ++ .../java/com/ihealth/ihealthlibrary/Utils.java | 123 ++++ .../ihealth/ihealthlibrary/iHealthBaseModule.java | 40 ++ .../ihealthlibrary/iHealthDeviceManagerModule.java | 734 +++++++++++++++++++++ .../iHealthDeviceManagerPackage.java | 70 ++ .../android/src/main/res/values/strings.xml | 3 + .../jing/ihealthlibrary/ExampleUnitTest.java | 17 + .../ihealth/ihealthlibrary/ExampleUnitTest.java | 17 + 52 files changed, 8149 insertions(+) create mode 100755 libs/ihealth-sdk/android/src/androidTest/java/com/example/jing/ihealthlibrary/ExampleInstrumentedTest.java create mode 100755 libs/ihealth-sdk/android/src/androidTest/java/com/ihealth/ihealthlibrary/ExampleInstrumentedTest.java create mode 100755 libs/ihealth-sdk/android/src/main/AndroidManifest.xml create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AM3SModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AM4Module.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AM5Module.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AM5ProfileModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AMProfileModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG1Module.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG1ProfileModule.java create mode 100644 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG1SModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG1SProfileModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG5Module.java create mode 100644 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG5SModule.java create mode 100644 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG5SProfileModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BGProfileModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP3LModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP550BTModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP5Module.java create mode 100644 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP5SModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP7Module.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP7SModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BPProfileModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BTMModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BTMProfileModule.java create mode 100644 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/ECGModule.java create mode 100644 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/ECGProfileModule.java create mode 100644 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/ECGUSBModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS2Module.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS2SModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS2SProfileModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS4SModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS6Module.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS6ProfileModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HSProfileModule.java create mode 100644 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/NT13BModule.java create mode 100644 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/NT13BProfileModule.java create mode 100644 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PO1Module.java create mode 100644 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PO1ProfileModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PO3Module.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/POProfileModule.java create mode 100644 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PT3SBTModule.java create mode 100644 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PT3SBTProfileModule.java create mode 100644 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/TS28BModule.java create mode 100644 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/TS28BProfileModule.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/Utils.java create mode 100755 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/iHealthBaseModule.java create mode 100644 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/iHealthDeviceManagerModule.java create mode 100644 libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/iHealthDeviceManagerPackage.java create mode 100755 libs/ihealth-sdk/android/src/main/res/values/strings.xml create mode 100755 libs/ihealth-sdk/android/src/test/java/com/example/jing/ihealthlibrary/ExampleUnitTest.java create mode 100755 libs/ihealth-sdk/android/src/test/java/com/ihealth/ihealthlibrary/ExampleUnitTest.java (limited to 'libs/ihealth-sdk/android/src') diff --git a/libs/ihealth-sdk/android/src/androidTest/java/com/example/jing/ihealthlibrary/ExampleInstrumentedTest.java b/libs/ihealth-sdk/android/src/androidTest/java/com/example/jing/ihealthlibrary/ExampleInstrumentedTest.java new file mode 100755 index 0000000..5417626 --- /dev/null +++ b/libs/ihealth-sdk/android/src/androidTest/java/com/example/jing/ihealthlibrary/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.example.jing.ihealthlibrary; + +import android.content.Context; +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumentation test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.example.jing.ihealthlibrary.test", appContext.getPackageName()); + } +} diff --git a/libs/ihealth-sdk/android/src/androidTest/java/com/ihealth/ihealthlibrary/ExampleInstrumentedTest.java b/libs/ihealth-sdk/android/src/androidTest/java/com/ihealth/ihealthlibrary/ExampleInstrumentedTest.java new file mode 100755 index 0000000..600e0ef --- /dev/null +++ b/libs/ihealth-sdk/android/src/androidTest/java/com/ihealth/ihealthlibrary/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.ihealth.ihealthlibrary; + +import android.content.Context; +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumentation test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.ihealth.ihealthlibrary.test", appContext.getPackageName()); + } +} diff --git a/libs/ihealth-sdk/android/src/main/AndroidManifest.xml b/libs/ihealth-sdk/android/src/main/AndroidManifest.xml new file mode 100755 index 0000000..82fcbe2 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AM3SModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AM3SModule.java new file mode 100755 index 0000000..77276fe --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AM3SModule.java @@ -0,0 +1,339 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.ReadableArray; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Am3sControl; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by Jeepend on 22/11/2016. + */ +@ReactModule(name = "AM3SModule") +public class AM3SModule extends iHealthBaseModule { + private static final String modelName = "AM3SModule"; + private static final String TAG = "AM3SModule"; + + private static final String EVENT_NOTIFY = "event_notify_am3s"; + + public AM3SModule(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + private static Am3sControl getControl(String mac) { + return iHealthDevicesManager.getInstance().getAm3sControl(mac); + } + + @ReactMethod + public void getIdps(String mac) { + Am3sControl control = getControl(mac); + if (control != null) { + String idps = control.getIdps(); + WritableMap params = Arguments.createMap(); + if (!TextUtils.isEmpty(idps)) { + Utils.jsonToMap(idps, params); + } + sendEvent(EVENT_NOTIFY, params); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void reset(String mac) { + Am3sControl control = getControl(mac); + if (control != null) { + control.reset(1); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void getUserId(String mac) { + Am3sControl control = getControl(mac); + if (control != null) { + control.getUserId(); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void getAlarmClockNum(String mac) { + Am3sControl control = getControl(mac); + if (control != null) { + control.getAlarmClockNum(); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void getAlarmClockDetail(String mac, ReadableArray alarmIDArray) { + Am3sControl control = getControl(mac); + if (control != null) { + int[] alarmIDs = new int[alarmIDArray.size()]; + for (int i = 0; i < alarmIDArray.size(); i++) { + alarmIDs[i] = alarmIDArray.getInt(i); + } + control.getAlarmClockDetail(alarmIDs); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void setAlarmClock(String mac, int id, int hour, int min, boolean isRepeat, ReadableArray weekArray, boolean isOn) { + Am3sControl control = getControl(mac); + if (control != null) { + int[] weeks = new int[weekArray.size()]; + for (int i = 0; i < weekArray.size(); i++) { + weeks[i] = weekArray.getInt(i); + } + control.setAlarmClock(id, hour, min, isRepeat, weeks, isOn); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void deleteAlarmClock(String mac, int id) { + Am3sControl control = getControl(mac); + if (control != null) { + control.deleteAlarmClock(id); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void getActivityRemind(String mac) { + Am3sControl control = getControl(mac); + if (control != null) { + control.getActivityRemind(); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void setActivityRemind(String mac, int hour, int min, boolean isOn) { + Am3sControl control = getControl(mac); + if (control != null) { + control.setActivityRemind(hour, min, isOn); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void queryAMState(String mac) { + Am3sControl control = getControl(mac); + if (control != null) { + control.queryAMState(); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void setUserId(String mac, int id) { + Am3sControl control = getControl(mac); + if (control != null) { + control.setUserId(id); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void getUserInfo(String mac) { + Am3sControl control = getControl(mac); + if (control != null) { + control.getUserInfo(); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void setUserBmr(String mac, int bmr) { + Am3sControl control = getControl(mac); + if (control != null) { + control.setUserBmr(bmr); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void syncActivityData(String mac) { + Am3sControl control = getControl(mac); + if (control != null) { + control.syncActivityData(); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void syncSleepData(String mac) { + Am3sControl control = getControl(mac); + if (control != null) { + control.syncSleepData(); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void syncRealData(String mac) { + Am3sControl control = getControl(mac); + if (control != null) { + control.syncRealData(); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void syncRealTime(String mac) { + Am3sControl control = getControl(mac); + if (control != null) { + control.syncRealTime(); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void setHourMode(String mac, int hourMode) { + Am3sControl control = getControl(mac); + if (control != null) { + control.setHourMode(hourMode); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void getHourMode(String mac) { + Am3sControl control = getControl(mac); + if (control != null) { + control.getHourMode(); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void disconnect(String mac) { + Am3sControl control = getControl(mac); + if (control != null) { + control.disconnect(); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void setUserInfo(String mac, int age, int height, float weight, int gender, int unit, int target, int activityLevel) { + Am3sControl control = getControl(mac); + if (control != null) { + control.setUserInfo(age, height, weight, gender, unit, target, activityLevel); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void syncStageReportData(String mac) { + Am3sControl control = getControl(mac); + if (control != null) { + control.syncStageReprotData(); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void sendRandom(String mac) { + Am3sControl control = getControl(mac); + if (control != null) { + control.sendRandom(); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void getPicture(String mac) { + Am3sControl control = getControl(mac); + if (control != null) { + control.getPicture(); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void setPicture(String mac, int index) { + Am3sControl control = getControl(mac); + if (control != null) { + control.setPicture(index); + } else { + Log.e(TAG, "Can not find AM3S Control mac:" + mac); + } + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getAm3sDevices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AM4Module.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AM4Module.java new file mode 100755 index 0000000..ca02e4c --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AM4Module.java @@ -0,0 +1,339 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.ReadableArray; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Am4Control; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by jing on 16/10/20. + */ +@ReactModule(name = "AM4Module") +public class AM4Module extends iHealthBaseModule { + private static final String modelName = "AM4Module"; + private static final String TAG = "AM4Module"; + + private static final String EVENT_NOTIFY = "event_notify_am4"; + + public AM4Module(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + private static Am4Control getControl(String mac) { + return iHealthDevicesManager.getInstance().getAm4Control(mac); + } + + @ReactMethod + public void getIdps(String mac) { + Am4Control control = getControl(mac); + if (control != null) { + String idps = control.getIdps(); + WritableMap params = Arguments.createMap(); + if (!TextUtils.isEmpty(idps)) { + Utils.jsonToMap(idps, params); + } + sendEvent(EVENT_NOTIFY, params); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void reset(String mac) { + Am4Control control = getControl(mac); + if (control != null) { + control.reset(1); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void getUserId(String mac) { + Am4Control control = getControl(mac); + if (control != null) { + control.getUserId(); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void getAlarmClockNum(String mac) { + Am4Control control = getControl(mac); + if (control != null) { + control.getAlarmClockNum(); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void getAlarmClockDetail(String mac, ReadableArray alarmIDArray) { + Am4Control control = getControl(mac); + if (control != null) { + int[] alarmIDs = new int[alarmIDArray.size()]; + for (int i = 0; i< alarmIDArray.size(); i++) { + alarmIDs[i] = alarmIDArray.getInt(i); + } + control.getAlarmClockDetail(alarmIDs); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void setAlarmClock(String mac, int id, int hour, int min, boolean isRepeat, ReadableArray weekArray, boolean isOn) { + Am4Control control = getControl(mac); + if (control != null) { + int[] weeks = new int[weekArray.size()]; + for (int i = 0; i < weekArray.size(); i++) { + weeks[i] = weekArray.getInt(i); + } + control.setAlarmClock(id, hour, min, isRepeat, weeks, isOn); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void deleteAlarmClock(String mac, int id) { + Am4Control control = getControl(mac); + if (control != null) { + control.deleteAlarmClock(id); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void getActivityRemind(String mac) { + Am4Control control = getControl(mac); + if (control != null) { + control.getActivityRemind(); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void setActivityRemind(String mac, int hour, int min, boolean isOn) { + Am4Control control = getControl(mac); + if (control != null) { + control.setActivityRemind(hour, min, isOn); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void queryAMState(String mac) { + Am4Control control = getControl(mac); + if (control != null) { + control.queryAMState(); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void setUserId(String mac, int id) { + Am4Control control = getControl(mac); + if (control != null) { + control.setUserId(id); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void getUserInfo(String mac) { + Am4Control control = getControl(mac); + if (control != null) { + control.getUserInfo(); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void setUserBmr(String mac, int bmr){ + Am4Control control = getControl(mac); + if (control != null) { + control.setUserBmr(bmr); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void syncActivityData(String mac) { + Am4Control control = getControl(mac); + if (control != null) { + control.syncActivityData(); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void syncSleepData(String mac) { + Am4Control control = getControl(mac); + if (control != null) { + control.syncSleepData(); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void syncRealData(String mac) { + Am4Control control = getControl(mac); + if (control != null) { + control.syncRealData(); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void syncRealTime(String mac) { + Am4Control control = getControl(mac); + if (control != null) { + control.syncRealTime(); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void setHourMode(String mac, int hourMode) { + Am4Control control = getControl(mac); + if (control != null) { + control.setHourMode(hourMode); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void getHourMode(String mac) { + Am4Control control = getControl(mac); + if (control != null) { + control.getHourMode(); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void disconnect(String mac) { + Am4Control control = getControl(mac); + if (control != null) { + control.disconnect(); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void setUserInfo(String mac, int age, int height, float weight, int gender, int unit, int target, int activityLevel, int min) { + Am4Control control = getControl(mac); + if (control != null) { + control.setUserInfo(age, height, weight, gender, unit, target, activityLevel, min); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void syncStageReportData(String mac) { + Am4Control control = getControl(mac); + if (control != null) { + control.syncStageReprotData(); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void sendRandom(String mac) { + Am4Control control = getControl(mac); + if (control != null) { + control.sendRandom(); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void checkSwimPara(String mac) { + Am4Control control = getControl(mac); + if (control != null) { + control.checkSwimPara(); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void setSwimPara(String mac, boolean isOpen, int poolLength, int hours, int minutes, int unit) { + Am4Control control = getControl(mac); + if (control != null) { + control.setSwimPara(isOpen, poolLength, hours, minutes, unit); + } else { + Log.e(TAG, "Can not find AM4 Control mac:" + mac); + } + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getAm4Devices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AM5Module.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AM5Module.java new file mode 100755 index 0000000..570a2fd --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AM5Module.java @@ -0,0 +1,378 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.ReadableArray; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ido.ble.protocol.model.QuickSportMode; +import com.ihealth.communication.control.Am5Control; +import com.ihealth.communication.manager.iHealthDevicesManager; +import com.ihealth.communication.model.AM5Alarm; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@ReactModule(name = "AM5Module") +public class AM5Module extends iHealthBaseModule { + private static final String modelName = "AM5Module"; + private static final String TAG = AM5Module.modelName; + + private static final String EVENT_NOTIFY = "event_notify_am5"; + + public AM5Module(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + private static Am5Control getControl(String mac) { + return iHealthDevicesManager.getInstance().getAm5Control(mac); + } + + @ReactMethod + public void bindDevice(String mac) { + Am5Control control = getControl(mac); + if (control != null) { + control.bindDevice(); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void unBindDevice(String mac) { + Am5Control control = getControl(mac); + if (control != null) { + control.unBindDevice(); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void isBind(String mac) { + Am5Control control = getControl(mac); + if (control != null) { + control.isBind(); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void getBasicInfo(String mac) { + Am5Control control = getControl(mac); + if (control != null) { + control.getBasicInfo(); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void getMacAddress(String mac) { + Am5Control control = getControl(mac); + if (control != null) { + control.getMacAddress(); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void getLiveData(String mac) { + Am5Control control = getControl(mac); + if (control != null) { + control.getLiveData(); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void getActivityCount(String mac) { + Am5Control control = getControl(mac); + if (control != null) { + control.getActivityCount(); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void setTime(String mac) { + Am5Control control = getControl(mac); + if (control != null) { + control.setTime(); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + // @ReactMethod + // public void setTime(String mac, int year, int month, int day, int hour, int minute, int second, int week) { + // Am5Control control = getControl(mac); + // if (control != null) { + // control.setTime(year, month, day, hour, minute, second, week); + // } else { + // Log.e(TAG, "Can not find AM5 Control mac:" + mac); + // } + // } + + @ReactMethod + public void setAlarm(String mac, List alarmList) { + Am5Control control = getControl(mac); + if (control != null) { + control.setAlarm(alarmList); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void setGoal(String mac, String goal) { + Am5Control control = getControl(mac); + if (control != null) { + control.setGoal(goal); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void setLongSit(String mac, int startHour, int startMinute, + int endHour,int endMinute, int interval, + boolean isOn, boolean[] repeat){ + Am5Control control = getControl(mac); + if (control != null) { + control.setLongSit(startHour, startMinute, endHour, + endMinute, interval, isOn, repeat); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void setUserInfo(String mac, int birthYear, int birthMonth, int birthDay, int weight, int height, int sex) { + Am5Control control = getControl(mac); + if (control != null) { + control.setUserInfo(birthYear, birthMonth, birthDay, weight, height, sex); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void setUnit(String mac, int type, int unit) { + Am5Control control = getControl(mac); + if (control != null) { + control.setUnit(type, unit); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void reboot(String mac) { + Am5Control control = getControl(mac); + if (control != null) { + control.reboot(); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void setHandWearMode(String mac, int mode) { + Am5Control control = getControl(mac); + if (control != null) { + control.setHandWearMode(mode); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void setHeartRateInterval(String mac, int burn, int aerobic, int limit, int userMaxHR) { + Am5Control control = getControl(mac); + if (control != null) { + control.setHeartRateInterval(burn, aerobic, limit, userMaxHR); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void setHeartRateMeasureMode(String mac, int hasTimeRange, int measureMode, int startHour, int startMin, int endHour, int endMin) { + Am5Control control = getControl(mac); + if (control != null) { + control.setHeartRateMeasureMode(hasTimeRange, measureMode, startHour, startMin, endHour, endMin); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void setNotDisturb(String mac, boolean isOpen, int startHour, int startMin, int endHour, int endMin) { + Am5Control control = getControl(mac); + if (control != null) { + control.setNotDisturb(isOpen, startHour, startMin, endHour, endMin); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void setSportMode(String mac, QuickSportMode quickSportMode) { + Am5Control control = getControl(mac); + if (control != null) { + control.setSportMode(quickSportMode); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void setIncomingCallInfo(String mac, String name, String phoneNumber) { + Am5Control control = getControl(mac); + if (control != null) { + control.setIncomingCallInfo(name, phoneNumber); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void setStopInComingCall(String mac) { + Am5Control control = getControl(mac); + if (control != null) { + control.setStopInComingCall(); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void setNewMessageDetailInfo(String mac, int type, String name, String number, String content) { + Am5Control control = getControl(mac); + if (control != null) { + control.setNewMessageDetailInfo(type, name, number, content); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void syncConfigData(String mac) { + Am5Control control = getControl(mac); + if (control != null) { + control.syncConfigData(); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void stopSyncConfigData(String mac) { + Am5Control control = getControl(mac); + if (control != null) { + control.stopSyncConfigData(); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void syncHealthData(String mac) { + Am5Control control = getControl(mac); + if (control != null) { + control.syncHealthData(); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void stopSyncHealthData(String mac) { + Am5Control control = getControl(mac); + if (control != null) { + control.stopSyncHealthData(); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void syncActivityData(String mac) { + Am5Control control = getControl(mac); + if (control != null) { + control.syncActivityData(); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void stopSyncActivityData(String mac) { + Am5Control control = getControl(mac); + if (control != null) { + control.stopSyncActivityData(); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void disconnect(String mac) { + Am5Control control = getControl(mac); + if (control != null) { + control.disconnect(); + } else { + Log.e(TAG, "Can not find AM5 Control mac:" + mac); + } + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getAm5Devices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AM5ProfileModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AM5ProfileModule.java new file mode 100755 index 0000000..18c585e --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AM5ProfileModule.java @@ -0,0 +1,161 @@ +package com.ihealth.ihealthlibrary; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.AmProfile; +import com.ihealth.communication.control.OtherDeviceProfile; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +@ReactModule(name = "AM5ProfileModule") +public class AM5ProfileModule extends ReactContextBaseJavaModule { + + private static final String modelName = "AM5ProfileModule"; + private static final String TAG = "AM5ProfileModule"; + + private static final String ACTION_ERROR = "ACTION_ERROR"; + private static final String ERROR_NUM = "ERROR_NUM"; + private static final String ERROR_DESCRIPTION = "ERROR_DESCRIPTION"; + + private static final String ACTION_USER_BIND = "ACTION_USER_BIND"; + private static final String ACTION_USER_UNBIND = "ACTION_USER_UNBIND"; + private static final String ACTION_FUNCTION_SUPPORT = "ACTION_FUNCTION_SUPPORT"; + private static final String ACTION_BASIC_INFO = "ACTION_BASIC_INFO"; + private static final String ACTION_MAC_ADDRESS = "ACTION_MAC_ADDRESS"; + + private static final String MAC_ADDRESS = "MAC_ADDRESS"; + private static final String BASIC_BATTSTATUS = "BASIC_BATTSTATUS"; + private static final String BASIC_DEIVCEID = "BASIC_DEIVCEID"; + private static final String BASIC_ENERGE = "BASIC_ENERGE"; + private static final String BASIC_FIRMWAREVERSION = "BASIC_FIRMWAREVERSION"; + private static final String BASIC_MODE = "BASIC_MODE"; + private static final String BASIC_PAIRFLAG = "BASIC_PAIRFLAG"; + private static final String BASIC_REBOOT = "BASIC_REBOOT"; + + private static final String ACTION_LIVE_DATA = "ACTION_LIVE_DATA"; + private static final String ACTION_ACTIVITY_COUNT = "ACTION_ACTIVITY_COUNT"; + private static final String ACTION_SET_TIME = "ACTION_SET_TIME"; + private static final String ACTION_SET_ALARM = "ACTION_SET_ALARM"; + private static final String ACTION_SET_GOAL = "ACTION_SET_GOAL"; + private static final String ACTION_SET_LONG_SIT = "ACTION_SET_LONG_SIT"; + private static final String ACTION_SET_USER_INFO = "ACTION_SET_USER_INFO"; + private static final String ACTION_SET_UNIT = "ACTION_SET_UNIT"; + private static final String ACTION_SET_HAND_WEAR_MODE = "ACTION_SET_HAND_WEAR_MODE"; + private static final String ACTION_SET_UP_HAND_GESTURE = "ACTION_SET_UP_HAND_GESTURE"; + private static final String ACTION_SET_HEART_RATE_INTERVAL = "ACTION_SET_HEART_RATE_INTERVAL"; + private static final String ACTION_SET_HEART_RATE_MEASURE_MODE = "ACTION_SET_HEART_RATE_MEASURE_MODE"; + private static final String ACTION_SET_ONE_KEY_RESET = "ACTION_SET_ONE_KEY_RESET"; + private static final String ACTION_SET_NOT_DISTURB = "ACTION_SET_NOT_DISTURB"; + private static final String ACTION_SET_SPORT_MODE = "ACTION_SET_SPORT_MODE"; + + private static final String OPERATION_RESULT = "OPERATION_RESULT"; + private static final String OPERATION_ACTION = "OPERATION_ACTION"; + + private static final String ACTION_NOTICE_COMMING_CALL = "ACTION_NOTICE_COMMING_CALL"; + private static final String ACTION_NOTICE_COMMING_CALL_STOP = "ACTION_NOTICE_COMMING_CALL_STOP"; + private static final String ACTION_NOTICE_NEW_MESSAGE = "ACTION_NOTICE_NEW_MESSAGE"; + + private static final String ACTION_SYNC_ACTIVITY = "ACTION_SYNC_ACTIVITY"; + private static final String ACTION_SYNC_ACTIVITY_DATA = "ACTION_SYNC_ACTIVITY_DATA"; + private static final String ACTION_SYNC_CONFIG = "ACTION_SYNC_CONFIG"; + private static final String ACTION_SYNC_HEALTH_DATA = "ACTION_SYNC_HEALTH_DATA"; + private static final String ACTION_SYNC_HEALTH_DATA_SPORT = "ACTION_SYNC_HEALTH_DATA_SPORT"; + private static final String ACTION_SYNC_HEALTH_DATA_SLEEP = "ACTION_SYNC_HEALTH_DATA_SLEEP"; + private static final String ACTION_SYNC_HEALTH_DATA_HEART_RATE = "ACTION_SYNC_HEALTH_DATA_HEART_RATE"; + private static final String ACTION_SYNC_HEALTH_DATA_BLOOD_PRESSURE = "ACTION_SYNC_HEALTH_DATA_BLOOD_PRESSURE"; + + private static final String OPERATION_STATUS = "OPERATION_STATUS"; + private static final String PROGRESS = "PROGRESS"; + private static final int STATUS_START = 0; + private static final int STATUS_STOP = 1; + private static final int STATUS_DOING = 2; + private static final int STATUS_SUCCESS = 3; + private static final int STATUS_FAIL = 4; + private static final int STATUS_CANCEL = 5; + + private static final String ACTION_GET_ALL_CONNECTED_DEVICES = "ACTION_GET_ALL_CONNECTED_DEVICES"; + + + public AM5ProfileModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Nullable + @Override + public Map getConstants() { + Map constants = new HashMap<>(); + constants.put(ACTION_ERROR, OtherDeviceProfile.ACTION_ERROR); + constants.put(ERROR_NUM, OtherDeviceProfile.ERROR_NUM); + constants.put(ERROR_DESCRIPTION, OtherDeviceProfile.ERROR_DESCRIPTION); + + constants.put(ACTION_USER_BIND, OtherDeviceProfile.ACTION_USER_BIND); + constants.put(ACTION_USER_UNBIND, OtherDeviceProfile.ACTION_USER_UNBIND); + constants.put(ACTION_FUNCTION_SUPPORT, OtherDeviceProfile.ACTION_FUNCTION_SUPPORT); + constants.put(ACTION_BASIC_INFO, OtherDeviceProfile.ACTION_BASIC_INFO); + constants.put(ACTION_MAC_ADDRESS, OtherDeviceProfile.ACTION_MAC_ADDRESS); + + constants.put(MAC_ADDRESS, OtherDeviceProfile.MAC_ADDRESS); + constants.put(BASIC_BATTSTATUS, OtherDeviceProfile.BASIC_BATTSTATUS); + constants.put(BASIC_DEIVCEID, OtherDeviceProfile.BASIC_DEIVCEID); + constants.put(BASIC_ENERGE, OtherDeviceProfile.BASIC_ENERGE); + constants.put(BASIC_FIRMWAREVERSION, OtherDeviceProfile.BASIC_FIRMWAREVERSION); + constants.put(BASIC_MODE, OtherDeviceProfile.BASIC_MODE); + constants.put(BASIC_PAIRFLAG, OtherDeviceProfile.BASIC_PAIRFLAG); + constants.put(BASIC_REBOOT, OtherDeviceProfile.BASIC_REBOOT); + + constants.put(ACTION_LIVE_DATA, OtherDeviceProfile.ACTION_LIVE_DATA); + constants.put(ACTION_ACTIVITY_COUNT, OtherDeviceProfile.ACTION_ACTIVITY_COUNT); + constants.put(ACTION_SET_TIME, OtherDeviceProfile.ACTION_SET_TIME); + + constants.put(ACTION_SET_ALARM, OtherDeviceProfile.ACTION_SET_ALARM); + constants.put(ACTION_SET_GOAL, OtherDeviceProfile.ACTION_SET_GOAL); + constants.put(ACTION_SET_LONG_SIT, OtherDeviceProfile.ACTION_SET_LONG_SIT); + constants.put(ACTION_SET_USER_INFO, OtherDeviceProfile.ACTION_SET_USER_INFO); + constants.put(ACTION_SET_UNIT, OtherDeviceProfile.ACTION_SET_UNIT); + constants.put(ACTION_SET_HAND_WEAR_MODE, OtherDeviceProfile.ACTION_SET_HAND_WEAR_MODE); + constants.put(ACTION_SET_UP_HAND_GESTURE, OtherDeviceProfile.ACTION_SET_UP_HAND_GESTURE); + constants.put(ACTION_SET_HEART_RATE_INTERVAL, OtherDeviceProfile.ACTION_SET_HEART_RATE_INTERVAL); + constants.put(ACTION_SET_HEART_RATE_MEASURE_MODE, OtherDeviceProfile.ACTION_SET_HEART_RATE_MEASURE_MODE); + constants.put(ACTION_SET_ONE_KEY_RESET, OtherDeviceProfile.ACTION_SET_ONE_KEY_RESET); + constants.put(ACTION_SET_NOT_DISTURB, OtherDeviceProfile.ACTION_SET_NOT_DISTURB); + constants.put(ACTION_SET_SPORT_MODE, OtherDeviceProfile.ACTION_SET_SPORT_MODE); + + constants.put(OPERATION_RESULT, OtherDeviceProfile.OPERATION_RESULT); + constants.put(OPERATION_ACTION, OtherDeviceProfile.OPERATION_ACTION); + + constants.put(ACTION_NOTICE_COMMING_CALL, OtherDeviceProfile.ACTION_NOTICE_COMMING_CALL); + constants.put(ACTION_NOTICE_COMMING_CALL_STOP, OtherDeviceProfile.ACTION_NOTICE_COMMING_CALL_STOP); + constants.put(ACTION_NOTICE_NEW_MESSAGE, OtherDeviceProfile.ACTION_NOTICE_NEW_MESSAGE); + + constants.put(ACTION_SYNC_ACTIVITY, OtherDeviceProfile.ACTION_SYNC_ACTIVITY); + constants.put(ACTION_SYNC_ACTIVITY_DATA, OtherDeviceProfile.ACTION_SYNC_ACTIVITY_DATA); + constants.put(ACTION_SYNC_CONFIG, OtherDeviceProfile.ACTION_SYNC_CONFIG); + constants.put(ACTION_SYNC_HEALTH_DATA, OtherDeviceProfile.ACTION_SYNC_HEALTH_DATA); + constants.put(ACTION_SYNC_HEALTH_DATA_SPORT, OtherDeviceProfile.ACTION_SYNC_HEALTH_DATA_SPORT); + constants.put(ACTION_SYNC_HEALTH_DATA_SLEEP, OtherDeviceProfile.ACTION_SYNC_HEALTH_DATA_SLEEP); + constants.put(ACTION_SYNC_HEALTH_DATA_HEART_RATE, OtherDeviceProfile.ACTION_SYNC_HEALTH_DATA_HEART_RATE); + constants.put(ACTION_SYNC_HEALTH_DATA_BLOOD_PRESSURE, OtherDeviceProfile.ACTION_SYNC_HEALTH_DATA_BLOOD_PRESSURE); + + constants.put(OPERATION_STATUS, OtherDeviceProfile.OPERATION_STATUS); + constants.put(PROGRESS, OtherDeviceProfile.PROGRESS); + + constants.put("STATUS_START", 0); + constants.put("STATUS_STOP", 1); + constants.put("STATUS_DOING", 2); + constants.put("STATUS_SUCCESS", 3); + constants.put("STATUS_FAIL", 4); + constants.put("STATUS_CANCEL", 5); + + constants.put(ACTION_GET_ALL_CONNECTED_DEVICES, iHealthBaseModule.ACTION_GET_ALL_CONNECTED_DEVICES); + return constants; + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AMProfileModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AMProfileModule.java new file mode 100755 index 0000000..344ac85 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/AMProfileModule.java @@ -0,0 +1,312 @@ +package com.ihealth.ihealthlibrary; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.AmProfile; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +/** + * Created by Jeepend on 15/11/2016. + */ +@ReactModule(name = "AMProfileModule") +public class AMProfileModule extends ReactContextBaseJavaModule { + private static final String modelName = "AMProfileModule"; + private static final String TAG = "AMProfileModule"; + + private static final String ACTION_ERROR_AM = "ACTION_ERROR_AM"; + private static final String ACTION_RESET_AM = "ACTION_RESET_AM"; + private static final String ACTION_USERID_AM = "ACTION_USERID_AM"; + private static final String ACTION_SET_USERID_SUCCESS_AM = "ACTION_SET_USERID_SUCCESS_AM"; + private static final String ACTION_SYNC_TIME_SUCCESS_AM = "ACTION_SYNC_TIME_SUCCESS_AM"; + private static final String ACTION_SET_USERINFO_SUCCESS_AM = "ACTION_SET_USERINFO_SUCCESS_AM"; + private static final String ACTION_GET_USERINFO_AM = "ACTION_GET_USERINFO_AM"; + private static final String ACTION_GET_ALARMNUM_AM = "ACTION_GET_ALARMNUM_AM"; + private static final String ACTION_GET_ALARMINFO_AM = "ACTION_GET_ALARMINFO_AM"; + private static final String ACTION_SET_ALARMINFO_SUCCESS_AM = "ACTION_SET_ALARMINFO_SUCCESS_AM"; + private static final String ACTION_DELETE_ALARM_SUCCESS_AM = "ACTION_DELETE_ALARM_SUCCESS_AM"; + private static final String ACTION_GET_ACTIVITY_REMIND_AM = "ACTION_GET_ACTIVITY_REMIND_AM"; + private static final String ACTION_SET_ACTIVITYREMIND_SUCCESS_AM = "ACTION_SET_ACTIVITYREMIND_SUCCESS_AM"; + private static final String ACTION_SYNC_ACTIVITY_DATA_AM = "ACTION_SYNC_ACTIVITY_DATA_AM"; + private static final String ACTION_SYNC_SLEEP_DATA_AM = "ACTION_SYNC_SLEEP_DATA_AM"; + private static final String ACTION_SYNC_STAGE_DATA_AM = "ACTION_SYNC_STAGE_DATA_AM"; + private static final String ACTION_QUERY_STATE_AM = "ACTION_QUERY_STATE_AM"; + private static final String ACTION_SYNC_REAL_DATA_AM = "ACTION_SYNC_REAL_DATA_AM"; + private static final String ACTION_SET_BMR_SUCCESS_AM = "ACTION_SET_BMR_SUCCESS_AM"; + private static final String ACTION_GET_SWIMINFO_AM = "ACTION_GET_SWIMINFO_AM"; + private static final String ACTION_SET_SWIMINFO_AM = "ACTION_SET_SWIMINFO_AM"; + private static final String ACTION_GET_RANDOM_AM = "ACTION_GET_RANDOM_AM"; + private static final String ACTION_SET_HOUR_MODE_SUCCESS_AM = "ACTION_SET_HOUR_MODE_SUCCESS_AM"; + private static final String ACTION_GET_HOUR_MODE_AM = "ACTION_GET_HOUR_MODE_AM"; + private static final String ACTION_SET_DEVICE_MODE_AM = "ACTION_SET_DEVICE_MODE_AM"; + private static final String ACTION_CLOUD_BINDING_AM_SUCCESS = "ACTION_CLOUD_BINDING_AM_SUCCESS"; + private static final String ACTION_CLOUD_BINDING_AM_FAIL = "ACTION_CLOUD_BINDING_AM_FAIL"; + private static final String ACTION_CLOUD_UNBINDING_AM_SUCCESS = "ACTION_CLOUD_UNBINDING_AM_SUCCESS"; + private static final String ACTION_CLOUD_UNBINDING_AM_FAIL = "ACTION_CLOUD_UNBINDING_AM_FAIL"; + private static final String ACTION_CLOUD_SEARCH_AM = "ACTION_CLOUD_SEARCH_AM"; + private static final String ACTION_CLOUD_SEARCH_FAIL_AM = "ACTION_CLOUD_SEARCH_FAIL_AM"; + private static final String ACTION_SET_PICTURE_SUCCESS_AM = "ACTION_SET_PICTURE_SUCCESS_AM"; + private static final String ACTION_GET_PICTURE_AM = "ACTION_GET_PICTURE_AM"; + + private static final String ERROR_NUM_AM = "ERROR_NUM_AM"; + private static final String ERROR_ID_ILLEGAL_ARGUMENT = "ERROR_ID_ILLEGAL_ARGUMENT"; + private static final String ERROR_ID_VERSION_NOT_SUPPORT = "ERROR_ID_VERSION_NOT_SUPPORT"; + private static final String ERROR_DESCRIPTION_AM = "ERROR_DESCRIPTION_AM"; + private static final String RESET_AM = "RESET_AM"; + private static final String USERID_AM = "USERID_AM"; + private static final String GET_USER_AGE_AM = "GET_USER_AGE_AM"; + private static final String GET_USER_STEP_AM = "GET_USER_STEP_AM"; + private static final String GET_USER_HEIGHT_AM = "GET_USER_HEIGHT_AM"; + private static final String GET_USER_SEX_AM = "GET_USER_SEX_AM"; + private static final String GET_USER_WEIGHT_AM = "GET_USER_WEIGHT_AM"; + private static final String GET_USER_UNIT_AM = "GET_USER_UNIT_AM"; + private static final String GET_USER_TARGET1_AM = "GET_USER_TARGET1_AM"; + private static final String GET_USER_TARGET2_AM = "GET_USER_TARGET2_AM"; + private static final String GET_USER_TARGET3_AM = "GET_USER_TARGET3_AM"; + private static final String GET_USER_SWIMTARGET_AM = "GET_USER_SWIMTARGET_AM"; + private static final String GET_ALARMNUM_AM = "GET_ALARMNUM_AM"; + private static final String GET_ALARMNUM_ID_AM = "GET_ALARMNUM_ID_AM"; + private static final String GET_ALARM_CLOCK_DETAIL = "GET_ALARM_CLOCK_DETAIL"; + private static final String GET_ALARM_ID_AM = "GET_ALARM_ID_AM"; + private static final String GET_ALARM_TIME_AM = "GET_ALARM_TIME_AM"; + private static final String GET_ALARM_ISREPEAT_AM = "GET_ALARM_ISREPEAT_AM"; + private static final String GET_ALARM_WEEK_AM = "GET_ALARM_WEEK_AM"; + private static final String GET_ALARM_WEEK_SUNDAY_AM = "GET_ALARM_WEEK_SUNDAY_AM"; + private static final String GET_ALARM_WEEK_MONDAY_AM = "GET_ALARM_WEEK_MONDAY_AM"; + private static final String GET_ALARM_WEEK_TUESDAY_AM = "GET_ALARM_WEEK_TUESDAY_AM"; + private static final String GET_ALARM_WEEK_WEDNESDAY_AM = "GET_ALARM_WEEK_WEDNESDAY_AM"; + private static final String GET_ALARM_WEEK_THURSDAY_AM = "GET_ALARM_WEEK_THURSDAY_AM"; + private static final String GET_ALARM_WEEK_FRIDAY_AM = "GET_ALARM_WEEK_FRIDAY_AM"; + private static final String GET_ALARM_WEEK_SATURDAY_AM = "GET_ALARM_WEEK_SATURDAY_AM"; + private static final String GET_ALARM_ISON_AM = "GET_ALARM_ISON_AM"; + private static final String GET_ACTIVITY_REMIND_TIME_AM = "GET_ACTIVITY_REMIND_TIME_AM"; + private static final String GET_ACTIVITY_REMIND_ISON_AM = "GET_ACTIVITY_REMIND_ISON_AM"; + private static final String SYNC_ACTIVITY_DATA_AM = "SYNC_ACTIVITY_DATA_AM"; + private static final String SYNC_ACTIVITY_DATA_TIME_AM = "SYNC_ACTIVITY_DATA_TIME_AM"; + private static final String SYNC_ACTIVITY_DATA_STEP_AM = "SYNC_ACTIVITY_DATA_STEP_AM"; + private static final String SYNC_ACTIVITY_DATA_STEP_LENGTH_AM = "SYNC_ACTIVITY_DATA_STEP_LENGTH_AM"; + private static final String SYNC_ACTIVITY_DATA_CALORIE_AM = "SYNC_ACTIVITY_DATA_CALORIE_AM"; + private static final String SYNC_ACTIVITY_EACH_DATA_AM = "SYNC_ACTIVITY_EACH_DATA_AM"; + private static final String SYNC_SLEEP_DATA_AM = "SYNC_SLEEP_DATA_AM"; + private static final String SYNC_SLEEP_DATA_TIME_AM = "SYNC_SLEEP_DATA_TIME_AM"; + private static final String SYNC_SLEEP_DATA_LEVEL_AM = "SYNC_SLEEP_DATA_LEVEL_AM"; + private static final String SYNC_SLEEP_EACH_DATA_AM = "SYNC_SLEEP_EACH_DATA_AM"; + private static final String SYNC_STAGE_DATA_AM = "SYNC_STAGE_DATA_AM"; + private static final String SYNC_STAGE_DATA_TYPE_AM = "SYNC_STAGE_DATA_TYPE_AM"; + private static final String SYNC_STAGE_DATA_TYPE_WORKOUT_AM = "SYNC_STAGE_DATA_TYPE_WORKOUT_AM"; + private static final String SYNC_STAGE_DATA_TYPE_SLEEP_AM = "SYNC_STAGE_DATA_TYPE_SLEEP_AM"; + private static final String SYNC_STAGE_DATA_TYPE_SWIM_AM = "SYNC_STAGE_DATA_TYPE_SWIM_AM"; + private static final String SYNC_STAGE_DATA_TYPE_PAGE_VIEW_SUMMARY = "SYNC_STAGE_DATA_TYPE_PAGE_VIEW_SUMMARY"; + private static final String SYNC_STAGE_DATA_STOP_TIME_AM = "SYNC_STAGE_DATA_STOP_TIME_AM"; + private static final String SYNC_STAGE_DATA_USED_TIME_AM = "SYNC_STAGE_DATA_USED_TIME_AM"; + private static final String SYNC_STAGE_DATA_WORKOUT_STEP_AM = "SYNC_STAGE_DATA_WORKOUT_STEP_AM"; + private static final String SYNC_STAGE_DATA_DISTANCE_AM = "SYNC_STAGE_DATA_DISTANCE_AM"; + private static final String SYNC_STAGE_DATA_CALORIE_AM = "SYNC_STAGE_DATA_CALORIE_AM"; + private static final String SYNC_STAGE_DATA_SLEEP_EFFICIENCY_AM = "SYNC_STAGE_DATA_SLEEP_EFFICIENCY_AM"; + private static final String SYNC_STAGE_DATA_SLEEP_IS50MIN_AM = "SYNC_STAGE_DATA_SLEEP_IS50MIN_AM"; + private static final String SYNC_STAGE_DATA_SWIM_STROKE_AM = "SYNC_STAGE_DATA_SWIM_STROKE_AM"; + private static final String SYNC_STAGE_DATA_SWIM_PULL_TIMES_AM = "SYNC_STAGE_DATA_SWIM_PULL_TIMES_AM"; + private static final String SYNC_STAGE_DATA_SWIM_TURNS_AM = "SYNC_STAGE_DATA_SWIM_TURNS_AM"; + private static final String SYNC_STAGE_DATA_SWIMPOOL_LENGTH_AM = "SYNC_STAGE_DATA_SWIMPOOL_LENGTH_AM"; + private static final String SYNC_STAGE_DATA_SWIM_CUTINDIF_AM = "SYNC_STAGE_DATA_SWIM_CUTINDIF_AM"; + private static final String SYNC_STAGE_DATA_SWIM_CUTOUTDIF_AM = "SYNC_STAGE_DATA_SWIM_CUTOUTDIF_AM"; + private static final String SYNC_STAGE_DATA_SWIM_PROCESSFLAG_AM = "SYNC_STAGE_DATA_SWIM_PROCESSFLAG_AM"; + private static final String SYNC_STAGE_DATA_VIEW_SUMMARY_DATE_AM = "SYNC_STAGE_DATA_VIEW_SUMMARY_DATE_AM"; + private static final String SYNC_STAGE_DATA_VIEW_SUMMARY_STEP_AM = "SYNC_STAGE_DATA_VIEW_SUMMARY_STEP_AM"; + private static final String SYNC_STAGE_DATA_VIEW_SUMMARY_DISTANCE_AM = "SYNC_STAGE_DATA_VIEW_SUMMARY_DISTANCE_AM"; + private static final String SYNC_STAGE_DATA_VIEW_SUMMARY_CALORIE_AM = "SYNC_STAGE_DATA_VIEW_SUMMARY_CALORIE_AM"; + private static final String SYNC_STAGE_DATA_VIEW_SUMMARY_TARGET_AM = "SYNC_STAGE_DATA_VIEW_SUMMARY_TARGET_AM"; + private static final String SYNC_STAGE_DATA_VIEW_SUMMARY_SWIM_AM = "SYNC_STAGE_DATA_VIEW_SUMMARY_SWIM_AM"; + private static final String QUERY_STATE_AM = "QUERY_STATE_AM"; + private static final String QUERY_BATTERY_AM = "QUERY_BATTERY_AM"; + private static final String SYNC_REAL_STEP_AM = "SYNC_REAL_STEP_AM"; + private static final String SYNC_REAL_CALORIE_AM = "SYNC_REAL_CALORIE_AM"; + private static final String SYNC_REAL_TOTALCALORIE_AM = "SYNC_REAL_TOTALCALORIE_AM"; + private static final String GET_SWIMLANE_LENGTH_AM = "GET_SWIMLANE_LENGTH_AM"; + private static final String GET_SWIM_SWITCH_AM = "GET_SWIM_SWITCH_AM"; + private static final String GET_SWIM_CUTOUT_HOUR_AM = "GET_SWIM_CUTOUT_HOUR_AM"; + private static final String GET_SWIM_CUTOUT_MINUTE_AM = "GET_SWIM_CUTOUT_MINUTE_AM"; + private static final String GET_SWIM_UNIT_AM = "GET_SWIM_UNIT_AM"; + private static final String GET_RANDOM_AM = "GET_RANDOM_AM"; + private static final String AM_SWITCH_OPEN = "AM_SWITCH_OPEN"; + private static final String AM_SWITCH_CLOSE = "AM_SWITCH_CLOSE"; + private static final String AM_SWITCH_REPEAT = "AM_SWITCH_REPEAT"; + private static final String AM_SEITCH_NOT_REPEAT = "AM_SEITCH_NOT_REPEAT"; + private static final String AM_SET_MALE = "AM_SET_MALE"; + private static final String AM_SET_FEMALE = "AM_SET_FEMALE"; + private static final String AM_SET_UNIT_METRIC = "AM_SET_UNIT_METRIC"; + private static final String AM_SET_UNIT_IMPERIAL_STANDARD = "AM_SET_UNIT_IMPERIAL_STANDARD"; + private static final String AM_SET_12_HOUR_MODE = "AM_SET_12_HOUR_MODE"; + private static final String AM_SET_24_HOUR_MODE = "AM_SET_24_HOUR_MODE"; + private static final String AM_SET_EUROPE_12_HOUR_MODE = "AM_SET_EUROPE_12_HOUR_MODE"; + private static final String AM_SET_EUROPE_24_HOUR_MODE = "AM_SET_EUROPE_24_HOUR_MODE"; + private static final String AM_SET_EXCEPT_EUROPE_12_HOUR_MODE = "AM_SET_EXCEPT_EUROPE_12_HOUR_MODE"; + private static final String AM_SET_EXCEPT_EUROPE_24_HOUR_MODE = "AM_SET_EXCEPT_EUROPE_24_HOUR_MODE"; + private static final String GET_HOUR_MODE_AM = "GET_HOUR_MODE_AM"; + private static final String AM_DEVICE_MODE_SLEEP = "AM_DEVICE_MODE_SLEEP"; + private static final String AM_DEVICE_MODE_ACTIVITY = "AM_DEVICE_MODE_ACTIVITY"; + private static final String AM_DEVICE_MODE_FLIGHT = "AM_DEVICE_MODE_FLIGHT"; + private static final String AM_DEVICE_MODE_DRIVING = "AM_DEVICE_MODE_DRIVING"; + private static final String CLOUD_SEARCH_AM = "CLOUD_SEARCH_AM"; + private static final String DATAID = "DATAID"; + private static final String GET_PICTURE_AM = "GET_PICTURE_AM"; + private static final String ACTION_GET_ALL_CONNECTED_DEVICES = "ACTION_GET_ALL_CONNECTED_DEVICES"; + + + public AMProfileModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Nullable + @Override + public Map getConstants() { + Map constants = new HashMap<>(); + constants.put(ACTION_ERROR_AM, AmProfile.ACTION_ERROR_AM); + constants.put(ACTION_RESET_AM, AmProfile.ACTION_RESET_AM); + constants.put(ACTION_USERID_AM, AmProfile.ACTION_USERID_AM); + constants.put(ACTION_SET_USERID_SUCCESS_AM, AmProfile.ACTION_SET_USERID_SUCCESS_AM); + constants.put(ACTION_SYNC_TIME_SUCCESS_AM, AmProfile.ACTION_SYNC_TIME_SUCCESS_AM); + constants.put(ACTION_SET_USERINFO_SUCCESS_AM, AmProfile.ACTION_SET_USERINFO_SUCCESS_AM); + constants.put(ACTION_GET_USERINFO_AM, AmProfile.ACTION_GET_USERINFO_AM); + constants.put(ACTION_GET_ALARMNUM_AM, AmProfile.ACTION_GET_ALARMNUM_AM); + constants.put(ACTION_GET_ALARMINFO_AM, AmProfile.ACTION_GET_ALARMINFO_AM); + constants.put(ACTION_SET_ALARMINFO_SUCCESS_AM, AmProfile.ACTION_SET_ALARMINFO_SUCCESS_AM); + constants.put(ACTION_DELETE_ALARM_SUCCESS_AM, AmProfile.ACTION_DELETE_ALARM_SUCCESS_AM); + constants.put(ACTION_GET_ACTIVITY_REMIND_AM, AmProfile.ACTION_GET_ACTIVITY_REMIND_AM); + constants.put(ACTION_SET_ACTIVITYREMIND_SUCCESS_AM, AmProfile.ACTION_SET_ACTIVITYREMIND_SUCCESS_AM); + constants.put(ACTION_SYNC_ACTIVITY_DATA_AM, AmProfile.ACTION_SYNC_ACTIVITY_DATA_AM); + constants.put(ACTION_SYNC_SLEEP_DATA_AM, AmProfile.ACTION_SYNC_SLEEP_DATA_AM); + constants.put(ACTION_SYNC_STAGE_DATA_AM, AmProfile.ACTION_SYNC_STAGE_DATA_AM); + constants.put(ACTION_QUERY_STATE_AM, AmProfile.ACTION_QUERY_STATE_AM); + constants.put(ACTION_SYNC_REAL_DATA_AM, AmProfile.ACTION_SYNC_REAL_DATA_AM); + constants.put(ACTION_SET_BMR_SUCCESS_AM, AmProfile.ACTION_SET_BMR_SUCCESS_AM); + constants.put(ACTION_GET_SWIMINFO_AM, AmProfile.ACTION_GET_SWIMINFO_AM); + constants.put(ACTION_SET_SWIMINFO_AM, AmProfile.ACTION_SET_SWIMINFO_AM); + constants.put(ACTION_GET_RANDOM_AM, AmProfile.ACTION_GET_RANDOM_AM); + constants.put(ACTION_SET_HOUR_MODE_SUCCESS_AM, AmProfile.ACTION_SET_HOUR_MODE_SUCCESS_AM); + constants.put(ACTION_GET_HOUR_MODE_AM, AmProfile.ACTION_GET_HOUR_MODE_AM); + constants.put(ACTION_SET_DEVICE_MODE_AM, AmProfile.ACTION_SET_DEVICE_MODE_AM); + constants.put(ACTION_CLOUD_BINDING_AM_SUCCESS, AmProfile.ACTION_CLOUD_BINDING_AM_SUCCESS); + constants.put(ACTION_CLOUD_BINDING_AM_FAIL, AmProfile.ACTION_CLOUD_BINDING_AM_FAIL); + constants.put(ACTION_CLOUD_UNBINDING_AM_SUCCESS, AmProfile.ACTION_CLOUD_UNBINDING_AM_SUCCESS); + constants.put(ACTION_CLOUD_UNBINDING_AM_FAIL, AmProfile.ACTION_CLOUD_UNBINDING_AM_FAIL); + constants.put(ACTION_CLOUD_SEARCH_AM, AmProfile.ACTION_CLOUD_SEARCH_AM); + constants.put(ACTION_CLOUD_SEARCH_FAIL_AM, AmProfile.ACTION_CLOUD_SEARCH_FAIL_AM); + constants.put(ACTION_SET_PICTURE_SUCCESS_AM, AmProfile.ACTION_SET_PICTURE_SUCCESS_AM); + constants.put(ACTION_GET_PICTURE_AM, AmProfile.ACTION_GET_PICTURE_AM); + + constants.put(ERROR_NUM_AM, AmProfile.ERROR_NUM_AM); + constants.put(ERROR_ID_ILLEGAL_ARGUMENT, AmProfile.ERROR_ID_ILLEGAL_ARGUMENT); + constants.put(ERROR_ID_VERSION_NOT_SUPPORT, AmProfile.ERROR_ID_VERSION_NOT_SUPPORT); + constants.put(ERROR_DESCRIPTION_AM, AmProfile.ERROR_DESCRIPTION_AM); + constants.put(RESET_AM, AmProfile.RESET_AM); + constants.put(USERID_AM, AmProfile.USERID_AM); + constants.put(GET_USER_AGE_AM, AmProfile.GET_USER_AGE_AM); + constants.put(GET_USER_STEP_AM, AmProfile.GET_USER_STEP_AM); + constants.put(GET_USER_HEIGHT_AM, AmProfile.GET_USER_HEIGHT_AM); + constants.put(GET_USER_SEX_AM, AmProfile.GET_USER_SEX_AM); + constants.put(GET_USER_WEIGHT_AM, AmProfile.GET_USER_WEIGHT_AM); + constants.put(GET_USER_UNIT_AM, AmProfile.GET_USER_UNIT_AM); + constants.put(GET_USER_TARGET1_AM, AmProfile.GET_USER_TARGET1_AM); + constants.put(GET_USER_TARGET2_AM, AmProfile.GET_USER_TARGET2_AM); + constants.put(GET_USER_TARGET3_AM, AmProfile.GET_USER_TARGET3_AM); + constants.put(GET_USER_SWIMTARGET_AM, AmProfile.GET_USER_SWIMTARGET_AM); + constants.put(GET_ALARMNUM_AM, AmProfile.GET_ALARMNUM_AM); + constants.put(GET_ALARMNUM_ID_AM, AmProfile.GET_ALARMNUM_ID_AM); + constants.put(GET_ALARM_CLOCK_DETAIL, AmProfile.GET_ALARM_CLOCK_DETAIL); + constants.put(GET_ALARM_ID_AM, AmProfile.GET_ALARM_ID_AM); + constants.put(GET_ALARM_TIME_AM, AmProfile.GET_ALARM_TIME_AM); + constants.put(GET_ALARM_ISREPEAT_AM, AmProfile.GET_ALARM_ISREPEAT_AM); + constants.put(GET_ALARM_WEEK_AM, AmProfile.GET_ALARM_WEEK_AM); + constants.put(GET_ALARM_WEEK_SUNDAY_AM, AmProfile.GET_ALARM_WEEK_SUNDAY_AM); + constants.put(GET_ALARM_WEEK_MONDAY_AM, AmProfile.GET_ALARM_WEEK_MONDAY_AM); + constants.put(GET_ALARM_WEEK_TUESDAY_AM, AmProfile.GET_ALARM_WEEK_TUESDAY_AM); + constants.put(GET_ALARM_WEEK_WEDNESDAY_AM, AmProfile.GET_ALARM_WEEK_WEDNESDAY_AM); + constants.put(GET_ALARM_WEEK_THURSDAY_AM, AmProfile.GET_ALARM_WEEK_THURSDAY_AM); + constants.put(GET_ALARM_WEEK_FRIDAY_AM, AmProfile.GET_ALARM_WEEK_FRIDAY_AM); + constants.put(GET_ALARM_WEEK_SATURDAY_AM, AmProfile.GET_ALARM_WEEK_SATURDAY_AM); + constants.put(GET_ALARM_ISON_AM, AmProfile.GET_ALARM_ISON_AM); + constants.put(GET_ACTIVITY_REMIND_TIME_AM, AmProfile.GET_ACTIVITY_REMIND_TIME_AM); + constants.put(GET_ACTIVITY_REMIND_ISON_AM, AmProfile.GET_ACTIVITY_REMIND_ISON_AM); + constants.put(SYNC_ACTIVITY_DATA_AM, AmProfile.SYNC_ACTIVITY_DATA_AM); + constants.put(SYNC_ACTIVITY_DATA_TIME_AM, AmProfile.SYNC_ACTIVITY_DATA_TIME_AM); + constants.put(SYNC_ACTIVITY_DATA_STEP_AM, AmProfile.SYNC_ACTIVITY_DATA_STEP_AM); + constants.put(SYNC_ACTIVITY_DATA_STEP_LENGTH_AM, AmProfile.SYNC_ACTIVITY_DATA_STEP_LENGTH_AM); + constants.put(SYNC_ACTIVITY_DATA_CALORIE_AM, AmProfile.SYNC_ACTIVITY_DATA_CALORIE_AM); + constants.put(SYNC_ACTIVITY_EACH_DATA_AM, AmProfile.SYNC_ACTIVITY_EACH_DATA_AM); + constants.put(SYNC_SLEEP_DATA_AM, AmProfile.SYNC_SLEEP_DATA_AM); + constants.put(SYNC_SLEEP_DATA_TIME_AM, AmProfile.SYNC_SLEEP_DATA_TIME_AM); + constants.put(SYNC_SLEEP_DATA_LEVEL_AM, AmProfile.SYNC_SLEEP_DATA_LEVEL_AM); + constants.put(SYNC_SLEEP_EACH_DATA_AM, AmProfile.SYNC_SLEEP_EACH_DATA_AM); + constants.put(SYNC_STAGE_DATA_AM, AmProfile.SYNC_STAGE_DATA_AM); + constants.put(SYNC_STAGE_DATA_TYPE_AM, AmProfile.SYNC_STAGE_DATA_TYPE_AM); + constants.put(SYNC_STAGE_DATA_TYPE_WORKOUT_AM, AmProfile.SYNC_STAGE_DATA_TYPE_WORKOUT_AM); + constants.put(SYNC_STAGE_DATA_TYPE_SLEEP_AM, AmProfile.SYNC_STAGE_DATA_TYPE_SLEEP_AM); + constants.put(SYNC_STAGE_DATA_TYPE_SWIM_AM, AmProfile.SYNC_STAGE_DATA_TYPE_SWIM_AM); + constants.put(SYNC_STAGE_DATA_TYPE_PAGE_VIEW_SUMMARY, AmProfile.SYNC_STAGE_DATA_TYPE_PAGE_VIEW_SUMMARY); + constants.put(SYNC_STAGE_DATA_STOP_TIME_AM, AmProfile.SYNC_STAGE_DATA_STOP_TIME_AM); + constants.put(SYNC_STAGE_DATA_USED_TIME_AM, AmProfile.SYNC_STAGE_DATA_USED_TIME_AM); + constants.put(SYNC_STAGE_DATA_WORKOUT_STEP_AM, AmProfile.SYNC_STAGE_DATA_WORKOUT_STEP_AM); + constants.put(SYNC_STAGE_DATA_DISTANCE_AM, AmProfile.SYNC_STAGE_DATA_DISTANCE_AM); + constants.put(SYNC_STAGE_DATA_CALORIE_AM, AmProfile.SYNC_STAGE_DATA_CALORIE_AM); + constants.put(SYNC_STAGE_DATA_SLEEP_EFFICIENCY_AM, AmProfile.SYNC_STAGE_DATA_SLEEP_EFFICIENCY_AM); + constants.put(SYNC_STAGE_DATA_SLEEP_IS50MIN_AM, AmProfile.SYNC_STAGE_DATA_SLEEP_IS50MIN_AM); + constants.put(SYNC_STAGE_DATA_SWIM_STROKE_AM, AmProfile.SYNC_STAGE_DATA_SWIM_STROKE_AM); + constants.put(SYNC_STAGE_DATA_SWIM_PULL_TIMES_AM, AmProfile.SYNC_STAGE_DATA_SWIM_PULL_TIMES_AM); + constants.put(SYNC_STAGE_DATA_SWIM_TURNS_AM, AmProfile.SYNC_STAGE_DATA_SWIM_TURNS_AM); + constants.put(SYNC_STAGE_DATA_SWIMPOOL_LENGTH_AM, AmProfile.SYNC_STAGE_DATA_SWIMPOOL_LENGTH_AM); + constants.put(SYNC_STAGE_DATA_SWIM_CUTINDIF_AM, AmProfile.SYNC_STAGE_DATA_SWIM_CUTINDIF_AM); + constants.put(SYNC_STAGE_DATA_SWIM_CUTOUTDIF_AM, AmProfile.SYNC_STAGE_DATA_SWIM_CUTOUTDIF_AM); + constants.put(SYNC_STAGE_DATA_SWIM_PROCESSFLAG_AM, AmProfile.SYNC_STAGE_DATA_SWIM_PROCESSFLAG_AM); + constants.put(SYNC_STAGE_DATA_VIEW_SUMMARY_DATE_AM, AmProfile.SYNC_STAGE_DATA_VIEW_SUMMARY_DATE_AM); + constants.put(SYNC_STAGE_DATA_VIEW_SUMMARY_STEP_AM, AmProfile.SYNC_STAGE_DATA_VIEW_SUMMARY_STEP_AM); + constants.put(SYNC_STAGE_DATA_VIEW_SUMMARY_DISTANCE_AM, AmProfile.SYNC_STAGE_DATA_VIEW_SUMMARY_DISTANCE_AM); + constants.put(SYNC_STAGE_DATA_VIEW_SUMMARY_CALORIE_AM, AmProfile.SYNC_STAGE_DATA_VIEW_SUMMARY_CALORIE_AM); + constants.put(SYNC_STAGE_DATA_VIEW_SUMMARY_TARGET_AM, AmProfile.SYNC_STAGE_DATA_VIEW_SUMMARY_TARGET_AM); + constants.put(SYNC_STAGE_DATA_VIEW_SUMMARY_SWIM_AM, AmProfile.SYNC_STAGE_DATA_VIEW_SUMMARY_SWIM_AM); + constants.put(QUERY_STATE_AM, AmProfile.QUERY_STATE_AM); + constants.put(QUERY_BATTERY_AM, AmProfile.QUERY_BATTERY_AM); + constants.put(SYNC_REAL_STEP_AM, AmProfile.SYNC_REAL_STEP_AM); + constants.put(SYNC_REAL_CALORIE_AM, AmProfile.SYNC_REAL_CALORIE_AM); + constants.put(SYNC_REAL_TOTALCALORIE_AM, AmProfile.SYNC_REAL_TOTALCALORIE_AM); + constants.put(GET_SWIMLANE_LENGTH_AM, AmProfile.GET_SWIMLANE_LENGTH_AM); + constants.put(GET_SWIM_SWITCH_AM, AmProfile.GET_SWIM_SWITCH_AM); + constants.put(GET_SWIM_CUTOUT_HOUR_AM, AmProfile.GET_SWIM_CUTOUT_HOUR_AM); + constants.put(GET_SWIM_CUTOUT_MINUTE_AM, AmProfile.GET_SWIM_CUTOUT_MINUTE_AM); + constants.put(GET_SWIM_UNIT_AM, AmProfile.GET_SWIM_UNIT_AM); + constants.put(GET_RANDOM_AM, AmProfile.GET_RANDOM_AM); + constants.put(AM_SWITCH_OPEN, AmProfile.AM_SWITCH_OPEN); + constants.put(AM_SWITCH_CLOSE, AmProfile.AM_SWITCH_CLOSE); + constants.put(AM_SWITCH_REPEAT, AmProfile.AM_SWITCH_REPEAT); + constants.put(AM_SEITCH_NOT_REPEAT, AmProfile.AM_SEITCH_NOT_REPEAT); + constants.put(AM_SET_MALE, AmProfile.AM_SET_MALE); + constants.put(AM_SET_FEMALE, AmProfile.AM_SET_FEMALE); + constants.put(AM_SET_UNIT_METRIC, AmProfile.AM_SET_UNIT_METRIC); + constants.put(AM_SET_UNIT_IMPERIAL_STANDARD, AmProfile.AM_SET_UNIT_IMPERIAL_STANDARD); + constants.put(AM_SET_12_HOUR_MODE, AmProfile.AM_SET_12_HOUR_MODE); + constants.put(AM_SET_24_HOUR_MODE, AmProfile.AM_SET_24_HOUR_MODE); + constants.put(AM_SET_EUROPE_12_HOUR_MODE, AmProfile.AM_SET_EUROPE_12_HOUR_MODE); + constants.put(AM_SET_EUROPE_24_HOUR_MODE, AmProfile.AM_SET_EUROPE_24_HOUR_MODE); + constants.put(AM_SET_EXCEPT_EUROPE_12_HOUR_MODE, AmProfile.AM_SET_EXCEPT_EUROPE_12_HOUR_MODE); + constants.put(AM_SET_EXCEPT_EUROPE_24_HOUR_MODE, AmProfile.AM_SET_EXCEPT_EUROPE_24_HOUR_MODE); + constants.put(GET_HOUR_MODE_AM, AmProfile.GET_HOUR_MODE_AM); + constants.put(AM_DEVICE_MODE_SLEEP, AmProfile.AM_DEVICE_MODE_SLEEP); + constants.put(AM_DEVICE_MODE_ACTIVITY, AmProfile.AM_DEVICE_MODE_ACTIVITY); + constants.put(AM_DEVICE_MODE_FLIGHT, AmProfile.AM_DEVICE_MODE_FLIGHT); + constants.put(AM_DEVICE_MODE_DRIVING, AmProfile.AM_DEVICE_MODE_DRIVING); + constants.put(CLOUD_SEARCH_AM, AmProfile.CLOUD_SEARCH_AM); + constants.put(DATAID, AmProfile.DATAID); + constants.put(GET_PICTURE_AM, AmProfile.GET_PICTURE_AM); + constants.put(ACTION_GET_ALL_CONNECTED_DEVICES, iHealthBaseModule.ACTION_GET_ALL_CONNECTED_DEVICES); + return constants; + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG1Module.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG1Module.java new file mode 100755 index 0000000..6b19583 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG1Module.java @@ -0,0 +1,116 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Bg1Control; +import com.ihealth.communication.control.Bg1Profile; +import com.ihealth.communication.utils.Log; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +/** + * Created by zhaoyongguang on 29/11/2016. + */ +@ReactModule(name = "BG1Module") +public class BG1Module extends iHealthBaseModule { + private static final String TAG = BG1Module.class.getSimpleName(); + private static final String moduleName = BG1Module.class.getSimpleName(); + private static final String EVENT_NOTIFY = "event_notify_bg1"; + + public BG1Module(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return moduleName; + } + +// @ReactMethod +// public void init(String userName, int filter, boolean showUI) { +// //Bg1Control.getInstance().init(getReactApplicationContext(), userName, filter, showUI); +// } +// +// @ReactMethod +// public void connect() { +// //Bg1Control.getInstance().connect(); +// } +// +// @ReactMethod +// public void disconnect() { +// //Bg1Control.getInstance().disconnect(); +// } + + @ReactMethod + public void sendCode(String QRCode, int stripType, int measureType) { + Bg1Control.getInstance().sendCode(QRCode, stripType, measureType); + } + + @ReactMethod + public void getBottleInfoFromQR(String QRCode) { + String result = Bg1Control.getBottleInfoFromQR(QRCode); + Log.v(TAG, "code info = " + result); + + JSONObject resultJsonStr = new JSONObject(); + + try { + JSONArray jsonArray = new JSONObject(result).getJSONArray("bottleInfo"); + resultJsonStr.put("strip_num", ((JSONObject) jsonArray.get(0)).getString("stripNum")); + resultJsonStr.put("expire_time", ((JSONObject) jsonArray.get(0)).getString("overDate")); + resultJsonStr.put("bottle_id", ((JSONObject) jsonArray.get(0)).getString("bottleId")); + + } catch (JSONException e) { + try { + resultJsonStr.put("description","QRCode format error"); + } catch (JSONException e1) { + e1.printStackTrace(); + } + } + + + WritableMap params = Arguments.createMap(); + params.putString("action", "action_code_analysis"); + if (!TextUtils.isEmpty(resultJsonStr.toString())) { + Utils.jsonToMap(resultJsonStr.toString(), params); + } + sendEvent(EVENT_NOTIFY, params); + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + Log.v(TAG, "action ----> " + action ); + Log.v(TAG, "message ----> " + message ); + } + + /** + * @return a map of constants this module exports to JS. Supports JSON types. + */ + @Nullable + @Override + public Map getConstants() { + final Map constants = new HashMap<>(); + constants.put("Event_Notify", EVENT_NOTIFY); + + return constants; + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG1ProfileModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG1ProfileModule.java new file mode 100755 index 0000000..f715dc4 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG1ProfileModule.java @@ -0,0 +1,176 @@ +package com.ihealth.ihealthlibrary; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Bg1Profile; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +/** + * Created by zhaoyongguang on 07/12/2016. + */ +@ReactModule(name = "BG1ProfileModule") +public class BG1ProfileModule extends ReactContextBaseJavaModule { + private static final String name = BG1ProfileModule.class.getSimpleName(); + /** + * Callback indicating the send code result of bg1 device. + *
    + * KeyList: + *
      + *
    • + * {@link #BG1_SENDCODE_RESULT} + *
    • + */ + private static final String ACTION_BG1_SENDCODE_RESULT = "ACTION_BG1_SENDCODE_RESULT"; + + /** + * The send code result of bg1 device. + *

      + * value : 0 success; other error + */ + private static final String BG1_SENDCODE_RESULT = "BG1_SENDCODE_RESULT"; + + /** + * Callback indicating the error of Bg1 device. + *

        + * KeyList: + *
          + *
        • + * {@link #BG1_MEASURE_ERROR} + *
        • + *
        + * eg. {"error_num_for_bg1":0} + *
      + */ + private static final String ACTION_BG1_MEASURE_ERROR = "ACTION_BG1_MEASURE_ERROR"; + + /** + * Flag Error number of Bg1 device. + *

      Error code and Description

      + *

      0:Battery is low.

      + *

      1:Glucose test result is out of the measurement range.

      + *

      2:Unknown interference detected, please repeat the test.

      + *

      3:Strip is used or unknown moisture detected, discard the test strip and repeat the test with a new strip..

      + *

      4:Communication error,resend the code to repeat the test. {@link Bg1Control#sendCode(String)}

      + *

      5:The environmental temperature is beyond normal range, place the meter at room temperature for at least 30 minutes, then repeat the test.

      + *

      6:The environmental temperature is beyond normal range, place the meter at room temperature for at least 30 minutes, then repeat the test.

      + *

      7:Test strip coding error.

      + *

      8:Communication error,rescan the code to repeat the test.

      + *

      9:Communication error,Repeat the test with a new test strip. If the problem persists, contact iHealth customer service for assistance.

      + *

      10:Communication error,Repeat the test with a new test strip. If the problem persists, contact iHealth customer service for assistance.

      + *

      11:Communication error,Repeat the test with a new test strip. If the problem persists, contact iHealth customer service for assistance.

      + *

      12:Glucose test result is low.

      + *

      13:Glucose test result is high.

      + *

      400:Parameters out of range.

      + *

      401:Dolby is on ,please turn it off.

      + */ + private static final String BG1_MEASURE_ERROR = "BG1_MEASURE_ERROR"; + + /** + * Callback indicating the strip in action. + */ + private static final String ACTION_BG1_MEASURE_STRIP_IN = "ACTION_BG1_MEASURE_STRIP_IN"; + + /** + * Callback indicating the get blood action. + */ + private static final String ACTION_BG1_MEASURE_GET_BLOOD = "ACTION_BG1_MEASURE_GET_BLOOD"; + + /** + * Callback indicating the measure result. + *
        + * KeyList: + *
          + *
        • + * {@link #BG1_MEASURE_RESULT} + *
        • + */ + private static final String ACTION_BG1_MEASURE_RESULT = "ACTION_BG1_MEASURE_RESULT"; + + /** + * The measure result + *

          + * Range : 20-600 mg/dL + */ + private static final String BG1_MEASURE_RESULT = "BG1_MEASURE_RESULT"; + + /** + * Callback indicating the strip out action. + */ + private static final String ACTION_BG1_MEASURE_STRIP_OUT = "ACTION_BG1_MEASURE_STRIP_OUT"; + + /** + * Callback indicating the Bg1 device get in standby mode. + */ + private static final String ACTION_BG1_MEASURE_STANDBY = "ACTION_BG1_MEASURE_STANDBY"; + + /** + * the data id + */ + private static final String DATA_ID = "DATA_ID"; + + /** + * Callback indicating the code analysis result. + */ + private static final String ACTION_CODE_ANALYSIS = "ACTION_CODE_ANALYSIS"; + + + /** + * the strip number + */ + private static final String STRIP_NUM_BG = "STRIP_NUM_BG"; + + + /** + * the expire time + */ + private static final String STRIP_EXPIRETIME_BG = "STRIP_EXPIRETIME_BG"; + + + /** + * the bottle id + */ + private static final String BOTTLEID_BG = "BOTTLEID_BG"; + + /** + * @return the name of this module. This will be the name used to {@code require()} this module + * from javascript. + */ + @Override + public String getName() { + return name; + } + + public BG1ProfileModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + /** + * @return a map of constants this module exports to JS. Supports JSON types. + */ + @Nullable + @Override + public Map getConstants() { + Map constants = new HashMap<>(); + constants.put(ACTION_BG1_SENDCODE_RESULT, Bg1Profile.ACTION_BG1_SENDCODE_RESULT); + constants.put(BG1_SENDCODE_RESULT, Bg1Profile.BG1_SENDCODE_RESULT); + constants.put(ACTION_BG1_MEASURE_ERROR, Bg1Profile.ACTION_BG1_MEASURE_ERROR); + constants.put(BG1_MEASURE_ERROR, Bg1Profile.BG1_MEASURE_ERROR); + constants.put(ACTION_BG1_MEASURE_STRIP_IN, Bg1Profile.ACTION_BG1_MEASURE_STRIP_IN); + constants.put(ACTION_BG1_MEASURE_GET_BLOOD, Bg1Profile.ACTION_BG1_MEASURE_GET_BLOOD); + constants.put(ACTION_BG1_MEASURE_RESULT, Bg1Profile.ACTION_BG1_MEASURE_RESULT); + constants.put(BG1_MEASURE_RESULT, Bg1Profile.BG1_MEASURE_RESULT); + constants.put(ACTION_BG1_MEASURE_STRIP_OUT, Bg1Profile.ACTION_BG1_MEASURE_STRIP_OUT); + constants.put(ACTION_BG1_MEASURE_STANDBY, Bg1Profile.ACTION_BG1_MEASURE_STANDBY); + constants.put(DATA_ID, Bg1Profile.DATA_ID); + constants.put(ACTION_CODE_ANALYSIS, "action_code_analysis"); + constants.put(STRIP_NUM_BG, "strip_num"); + constants.put(STRIP_EXPIRETIME_BG, "expire_time"); + constants.put(BOTTLEID_BG, "bottle_id"); + return constants; + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG1SModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG1SModule.java new file mode 100644 index 0000000..7349ca6 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG1SModule.java @@ -0,0 +1,106 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Bg1sControl; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@ReactModule(name = "BG1SModule") +public class BG1SModule extends iHealthBaseModule { + + private static final String moduleName = "BG1SModule"; + private static final String TAG = "BG1SModule"; + private static final String EVENT_NOTIFY = "event_notify_bg1s"; + + public BG1SModule(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return moduleName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + @ReactMethod + public void getFunction(String mac) { + Bg1sControl Bg1sControl = getBg1sControl(mac); + if (Bg1sControl != null) { + Bg1sControl.getDeviceStatus(); + } + } + + @ReactMethod + public void measure(String mac,int measureMode) { + Bg1sControl Bg1sControl = getBg1sControl(mac); + if (Bg1sControl != null) { + Bg1sControl.setMeasureMode(measureMode); + } + } + + @ReactMethod + public void disconnect(String mac) { + Bg1sControl Bg1sControl = getBg1sControl(mac); + if (Bg1sControl != null) { + Bg1sControl.disconnect(); + } + } + + private void senErrMessage(int errId) { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", errId); + sendEvent(EVENT_NOTIFY, params); + } + + private Bg1sControl getBg1sControl(String mac) { + Bg1sControl Bg1sControl = iHealthDevicesManager.getInstance().getBg1sControl(mac); + if (Bg1sControl == null) { + senErrMessage(400); + } + return Bg1sControl; + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getBg1sDevices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG1SProfileModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG1SProfileModule.java new file mode 100755 index 0000000..9dd00aa --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG1SProfileModule.java @@ -0,0 +1,225 @@ +package com.ihealth.ihealthlibrary; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Bg1Profile; +import com.ihealth.communication.control.Bg1sProfile; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +/** + * Created by zhaoyongguang on 07/12/2016. + */ +@ReactModule(name = "BG1SProfileModule") +public class BG1SProfileModule extends ReactContextBaseJavaModule { + private static final String name = BG1SProfileModule.class.getSimpleName(); + /** + * The action type of callback indicating the error of BG1S device.
          + * KeyList of the message: + *

            + *
          • {@link #ERROR_NUM_BG1S}
          • + *
          • {@link #ERROR_DESCRIPTION_BG1S}
          • + *
          + * Example message:
          + * {
          + *     "error": 400,
          + *     "description": "getOfflineData() parameter userPstCode should be in the range [0, 19]."
          + * }
          + */ + String ACTION_ERROR_BG1S = "action_error"; + /** + * error code + */ + String ERROR_NUM_BG1S = "error_num"; + /** + * error description + */ + String ERROR_DESCRIPTION_BG1S = "error_description"; + + /** + * The action type of callback indicating get device info. + */ + String ACTION_GET_DEVICE_INFO = "action_get_device_info"; + + /** + * The action type of callback indicating set mode of measure. + */ + String ACTION_SET_MEASURE_MODE = "action_set_measure_mode"; + + /** + * Callback indicating power of Battery for BG1S device. + */ + String ACTION_BATTERY_BG1S = "battery_bg1s"; + + /** + * The power of Battery for BG1S device. + */ + String INFO_BATTERY_BG1S = "battery"; + + /** + * The version of Blood Code for BG1S device. + */ + String INFO_VERSION_CODE_BLOOD_BG1S = "info_version_code_blood_bg1s"; + + /** + * The version of CTL Code for BG1S device. + */ + String INFO_VERSION_CODE_CTL_BG1S = "info_version_code_ctl_bg1s"; + + /** + * The history data status + *
            + *
          • 0: has no history data
          • + *
          • 1: has history data
          • + *
          + */ + String INFO_HISTORY_STATUS_BG1S = "info_history_status_bg1s"; + + + /** + * The action type of callback indicating blood drop detected. + */ + String ACTION_GET_BLOOD = "action_get_blood"; + + /** + * The action type of callback indicating insertion status of test strip. + *
            + *
          • 1: strip in
          • + *
          • 2: strip out
          • + *
          + */ + String ACTION_STRIP_INSERTION_STATUS = "action_strip_insertion_status"; + + /** + * The insertion status of test strip + */ + String STRIP_INSERTION_STATUS = "insertion_status"; + + /** + * The action type of callback indicating result of measure. + */ + String ACTION_MEASURE_RESULT = "action_measure_result"; + /** + * The mode of measure + */ + String MEASURE_MODE = "measure_mode"; + /** + * The result of measure + */ + String MEASURE_RESULT = "measure_result"; + /** + * The status of operation + */ + String OPERATION_STATUS = "status"; + + /** + * The describe of operation + */ + String OPERATION_DESCRIBE = "describe"; + + /** + * The action type of callback indicating check code of device. + */ + String ACTION_CHECK_CODE = "action_check_code"; + + /** + * The result of check the blood code + *
            + *
          • 0: check the blood code is success
          • + *
          • other: check the blood code is fail
          • + *
          + */ + String BLOOD_CHECK_CODE_RESULT = "blood_check_code_result"; + + /** + * The blood code. + */ + String BLOOD_CODE = "blood_code"; + + /** + * The CRC of the blood code + */ + String BLOOD_CODE_CRC = "blood_code_crc"; + + + /** + * The result of check the blood code + *
            + *
          • 0: check the blood code is success
          • + *
          • other: check the blood code is fail
          • + *
          + */ + String CTL_CHECK_CODE_RESULT = "ctl_check_code_result"; + + /** + * The CTL code. + */ + String CTL_CODE = "ctl_code"; + + /** + * The CRC of the CTL code + */ + String CTL_CODE_CRC = "ctl_code_crc"; + + /** + * The action type of callback indicating set code of device. + */ + String ACTION_SET_DEVICE_CODE = "action_set_device_code"; + + /** + * @return the name of this module. This will be the name used to {@code require()} this module + * from javascript. + */ + @Override + public String getName() { + return name; + } + + public BG1SProfileModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + /** + * @return a map of constants this module exports to JS. Supports JSON types. + */ + @Nullable + @Override + public Map getConstants() { + Map constants = new HashMap<>(); + constants.put(ACTION_ERROR_BG1S, Bg1sProfile.ACTION_ERROR_BG1S); + constants.put(ERROR_NUM_BG1S, Bg1sProfile.ERROR_NUM_BG1S); + constants.put(ERROR_DESCRIPTION_BG1S, Bg1sProfile.ERROR_DESCRIPTION_BG1S); + + constants.put(ACTION_GET_DEVICE_INFO, Bg1sProfile.ACTION_GET_DEVICE_INFO); + constants.put(ACTION_SET_MEASURE_MODE, Bg1sProfile.ACTION_SET_MEASURE_MODE); + constants.put(ACTION_BATTERY_BG1S, Bg1sProfile.ACTION_BATTERY_BG1S); + constants.put(INFO_BATTERY_BG1S, Bg1sProfile.INFO_BATTERY_BG1S); + constants.put(INFO_VERSION_CODE_BLOOD_BG1S, Bg1sProfile.INFO_VERSION_CODE_BLOOD_BG1S); + constants.put(INFO_VERSION_CODE_CTL_BG1S, Bg1sProfile.INFO_VERSION_CODE_CTL_BG1S); + constants.put(INFO_HISTORY_STATUS_BG1S, Bg1sProfile.INFO_HISTORY_STATUS_BG1S); + + constants.put(ACTION_GET_BLOOD, Bg1sProfile.ACTION_GET_BLOOD); + constants.put(ACTION_STRIP_INSERTION_STATUS, Bg1sProfile.ACTION_STRIP_INSERTION_STATUS); + constants.put(STRIP_INSERTION_STATUS, Bg1sProfile.STRIP_INSERTION_STATUS); + constants.put(ACTION_MEASURE_RESULT, Bg1sProfile.ACTION_MEASURE_RESULT); + constants.put(MEASURE_MODE, Bg1sProfile.MEASURE_MODE); + constants.put(MEASURE_RESULT, Bg1sProfile.MEASURE_RESULT); + + constants.put(OPERATION_STATUS, Bg1sProfile.OPERATION_STATUS); + constants.put(OPERATION_DESCRIBE, Bg1sProfile.OPERATION_DESCRIBE); + + constants.put(ACTION_CHECK_CODE, Bg1sProfile.ACTION_CHECK_CODE); + constants.put(BLOOD_CHECK_CODE_RESULT, Bg1sProfile.BLOOD_CHECK_CODE_RESULT); + constants.put(BLOOD_CODE, Bg1sProfile.BLOOD_CODE); + constants.put(BLOOD_CODE_CRC, Bg1sProfile.BLOOD_CODE_CRC); + constants.put(CTL_CHECK_CODE_RESULT, Bg1sProfile.CTL_CHECK_CODE_RESULT); + constants.put(CTL_CODE, Bg1sProfile.CTL_CODE); + constants.put(CTL_CODE_CRC, Bg1sProfile.CTL_CODE_CRC); + constants.put(ACTION_SET_DEVICE_CODE, Bg1sProfile.ACTION_SET_DEVICE_CODE); + return constants; + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG5Module.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG5Module.java new file mode 100755 index 0000000..8932de4 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG5Module.java @@ -0,0 +1,323 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Bg5Control; +import com.ihealth.communication.control.Bg5Profile; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * Created by gyl on 2016/11/15. + */ + +@ReactModule(name = "BG5Module") +public class BG5Module extends iHealthBaseModule { + + private static final String modelName = "BG5Module"; + private static final String TAG = modelName; + + private static final String EVENT_NOTIFY = "event_notify_bg5"; + + public BG5Module(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + @ReactMethod + public void holdLink(String mac) { + Bg5Control bg5Control = iHealthDevicesManager.getInstance().getBg5Control(mac); + if (bg5Control != null) { + Log.v("aa", "bg5Control != null "); + bg5Control.holdLink(); + } else { + Log.v("aa", "bg5Control == null "); + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent(EVENT_NOTIFY, params); + } + } + + @ReactMethod + public void setTime(String mac) { + Bg5Control bg5Control = iHealthDevicesManager.getInstance().getBg5Control(mac); + if (bg5Control != null) { + bg5Control.setTime(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent(EVENT_NOTIFY, params); + } + } + + @ReactMethod + public void setUnit(String mac, double type) { + Bg5Control bg5Control = iHealthDevicesManager.getInstance().getBg5Control(mac); + if (bg5Control != null) { + bg5Control.setUnit((int) type); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent(EVENT_NOTIFY, params); + } + } + + @ReactMethod + public void getBattery(String mac) { + Bg5Control bg5Control = iHealthDevicesManager.getInstance().getBg5Control(mac); + if (bg5Control != null) { + bg5Control.getBattery(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent(EVENT_NOTIFY, params); + } + } + + @ReactMethod + public void startMeasure(String mac, double type) { + Bg5Control bg5Control = iHealthDevicesManager.getInstance().getBg5Control(mac); + if (bg5Control != null) { + bg5Control.startMeasure((int) type); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent(EVENT_NOTIFY, params); + } + } + + @ReactMethod + public void getOfflineData(String mac) { + Bg5Control bg5Control = iHealthDevicesManager.getInstance().getBg5Control(mac); + if (bg5Control != null) { + bg5Control.getOfflineData(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent(EVENT_NOTIFY, params); + } + } + + @ReactMethod + public void deleteOfflineData(String mac) { + Bg5Control bg5Control = iHealthDevicesManager.getInstance().getBg5Control(mac); + if (bg5Control != null) { + bg5Control.deleteOfflineData(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent(EVENT_NOTIFY, params); + } + } + +// @ReactMethod +// public void setBottleMessage(String mac, String QRCode) { +// Bg5Control bg5Control = iHealthDevicesManager.getInstance().getBg5Control(mac); +// if (bg5Control != null) { +// bg5Control.setBottleMessage(QRCode); +// } else { +// WritableMap params = Arguments.createMap(); +// params.putInt("errorid", 400); +// sendEvent(EVENT_NOTIFY, params); +// } +// } + +// @ReactMethod +// public void setBottleMessage(String mac , String QRCode, final int stripNum, final String overDate) { +// Bg5Control bg5Control = iHealthDevicesManager.getInstance().getBg5Control(mac); +// if (bg5Control != null) { +// bg5Control.setBottleMessage(QRCode, stripNum, overDate); +// } else { +// WritableMap params = Arguments.createMap(); +// params.putInt("errorid", 400); +// iHealthDeviceManagerModule.sendEvent("Error", params); +// } +// } + + @ReactMethod + public void setBottleMessageWithInfo(String mac, int stripType, int measureType, String QRCode, int stripNum, String overDate) { + Bg5Control bg5Control = iHealthDevicesManager.getInstance().getBg5Control(mac); + if (bg5Control != null) { + bg5Control.setBottleMessageWithInfo(stripType, measureType, QRCode, stripNum, overDate); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent(EVENT_NOTIFY, params); + } + } + + @ReactMethod + public void getBottleMessage(String mac) { + Bg5Control bg5Control = iHealthDevicesManager.getInstance().getBg5Control(mac); + if (bg5Control != null) { + bg5Control.getBottleMessage(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent(EVENT_NOTIFY, params); + } + } + + @ReactMethod + public void setBottleId(String mac, String bottleID) { + long bottleId = 0; + try { + bottleId = Long.parseLong(bottleID); + } catch (NumberFormatException e) { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent(EVENT_NOTIFY, params); + return; + } + Bg5Control bg5Control = iHealthDevicesManager.getInstance().getBg5Control(mac); + if (bg5Control != null) { + bg5Control.setBottleId(bottleId); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent(EVENT_NOTIFY, params); + } + } + + @ReactMethod + public void getBottleId(String mac) { + Bg5Control bg5Control = iHealthDevicesManager.getInstance().getBg5Control(mac); + if (bg5Control != null) { + bg5Control.getBottleId(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent(EVENT_NOTIFY, params); + } + } + + @ReactMethod + public void disConnect(String mac) { + Bg5Control bg5Control = iHealthDevicesManager.getInstance().getBg5Control(mac); + if (bg5Control != null) { + bg5Control.disconnect(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent(EVENT_NOTIFY, params); + } + } + + @ReactMethod + public void Logger(String tag, String msg) { + Log.e(TAG, msg); + } + + @ReactMethod + public void getBottleInfoFromQR(String QRCode) { + String result = Bg5Control.getBottleInfoFromQR(QRCode); + Log.v(TAG, "code info = " + result); + + JSONObject resultJsonStr = new JSONObject(); + + try { + JSONArray jsonArray = new JSONObject(result).getJSONArray("bottleInfo"); + resultJsonStr.put("strip_num", ((JSONObject) jsonArray.get(0)).getString("stripNum")); + resultJsonStr.put("expire_time", ((JSONObject) jsonArray.get(0)).getString("overDate")); + resultJsonStr.put("bottle_id", ((JSONObject) jsonArray.get(0)).getString("bottleId")); + + } catch (JSONException e) { + try { + resultJsonStr.put("description", "QRCode format error"); + } catch (JSONException e1) { + e1.printStackTrace(); + } + } + + + WritableMap params = Arguments.createMap(); + params.putString("action", "action_code_analysis"); + if (!TextUtils.isEmpty(resultJsonStr.toString())) { + Utils.jsonToMap(resultJsonStr.toString(), params); + } + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getBg5Devices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + switch (action) { + + //只需要Action就代表成功 + case Bg5Profile.ACTION_KEEP_LINK: + case Bg5Profile.ACTION_SET_TIME: + case Bg5Profile.ACTION_SET_UNIT: + case Bg5Profile.ACTION_START_MEASURE: + case Bg5Profile.ACTION_DELETE_HISTORICAL_DATA: + case Bg5Profile.ACTION_SET_BOTTLE_ID_SUCCESS: + case Bg5Profile.ACTION_STRIP_IN: + case Bg5Profile.ACTION_STRIP_OUT: + case Bg5Profile.ACTION_GET_BLOOD: + + sendEvent(EVENT_NOTIFY, params); + break; + + case Bg5Profile.ACTION_BATTERY_BG: + case Bg5Profile.ACTION_HISTORICAL_NUM_BG: + case Bg5Profile.ACTION_HISTORICAL_DATA_BG: + case Bg5Profile.ACTION_SET_BOTTLE_MESSAGE_SUCCESS: + case Bg5Profile.ACTION_GET_CODEINFO: + case Bg5Profile.ACTION_GET_BOTTLEID: + case Bg5Profile.ACTION_ERROR_BG: + case Bg5Profile.ACTION_ONLINE_RESULT_BG: + + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + break; + + default: + break; + } + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG5SModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG5SModule.java new file mode 100644 index 0000000..783835f --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG5SModule.java @@ -0,0 +1,185 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Bg5Profile; +import com.ihealth.communication.control.Bg5sControl; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.ihealth.communication.control.Bg5Profile.ACTION_HISTORICAL_DATA_BG; + +/** + * @author chenxuewei + * @date 04/19/2019 + */ +@ReactModule(name = "BG5SModule") +public class BG5SModule extends iHealthBaseModule { + + private static final String TAG = BG5SModule.class.getName(); + + private static final String ModelName = "BG5SModule"; + private static final String EVENT_NOTIFY = "event_notify_bg5s"; + + public BG5SModule(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return ModelName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + @ReactMethod + public void getStatusInfo(String mac) { + Bg5sControl bg5sControl = getBg5sControl(mac); + if (bg5sControl != null) { + bg5sControl.getStatusInfo(); + } + } + + @ReactMethod + public void setTime(String mac, String date, float timezone) { + Bg5sControl bg5sControl = getBg5sControl(mac); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + try { + Date temp = formatter.parse(date); + if (bg5sControl != null) { + bg5sControl.setTime(temp, timezone); + } + } catch (ParseException e) { + Log.i(TAG, "time format need yyyy-MM-dd HH:mm:ss"); + } + + } + + @ReactMethod + public void setUnit(String mac, int unitType) { + Bg5sControl bg5sControl = getBg5sControl(mac); + if (bg5sControl != null) { + bg5sControl.setUnit(unitType); + } + } + + @ReactMethod + public void deleteUsedStrip(String mac) { + Bg5sControl bg5sControl = getBg5sControl(mac); + if (bg5sControl != null) { + bg5sControl.deleteUsedStrip(); + } + } + + @ReactMethod + public void deleteOfflineData(String mac) { + Bg5sControl bg5sControl = getBg5sControl(mac); + if (bg5sControl != null) { + bg5sControl.deleteOfflineData(); + } + } + + @ReactMethod + public void getOfflineData(String mac) { + Bg5sControl bg5sControl = getBg5sControl(mac); + if (bg5sControl != null) { + bg5sControl.getOfflineData(); + } + } + + @ReactMethod + public void setOfflineModel(String mac, boolean enable) { + Bg5sControl bg5sControl = getBg5sControl(mac); + if (bg5sControl != null) { + bg5sControl.setOfflineMeasurementMode(enable); + } + } + + @ReactMethod + public void startMeasure(String mac, int measureType) { + Bg5sControl bg5sControl = getBg5sControl(mac); + if (bg5sControl != null) { + bg5sControl.startMeasure(measureType); + } + } + + @ReactMethod + public void adjustOfflineData(String mac, String timeString, String originData) { + Bg5sControl bg5sControl = getBg5sControl(mac); + if (bg5sControl != null) { + String offlineData = bg5sControl.adjustOfflineData(timeString, originData); + WritableMap params = Arguments.createMap(); + params.putString(Bg5Profile.HISTORICAL_DATA_BG, offlineData); + params.putString("action", "action_adjust_offline_data"); + sendEvent(EVENT_NOTIFY, params); + } + } + + @ReactMethod + public void disconnect(String mac) { + Bg5sControl bg5sControl = getBg5sControl(mac); + if (bg5sControl != null) { + bg5sControl.disconnect(); + } + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getBg5sDevices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } + + private void senErrMessage(int errId) { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", errId); + sendEvent(EVENT_NOTIFY, params); + } + + private Bg5sControl getBg5sControl(String mac) { + Bg5sControl bg5sControl = iHealthDevicesManager.getInstance().getBg5sControl(mac); + if (bg5sControl == null) { + senErrMessage(400); + } + return bg5sControl; + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG5SProfileModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG5SProfileModule.java new file mode 100644 index 0000000..e9d8140 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BG5SProfileModule.java @@ -0,0 +1,113 @@ +package com.ihealth.ihealthlibrary; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Bg5Profile; +import com.ihealth.communication.control.Bg5sProfile; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +@ReactModule(name = "BG5SProfileModule") +public class BG5SProfileModule extends ReactContextBaseJavaModule { + + private static final String modelName = "BG5SProfileModule"; + private static final String TAG = modelName; + + private static final String ACTION_ERROR = "action_error"; + private static final String ACTION_SET_TIME = "action_set_time"; + private static final String ACTION_SET_UNIT = "action_set_unit"; + private static final String ACTION_SEND_CODE = "action_send_code"; + private static final String ACTION_DELETE_USED_STRIP = "action_delete_used_strip"; + private static final String ACTION_DELETE_OFFLINE_DATA = "action_delete_offline_data"; + private static final String ACTION_GET_OFFLINE_DATA = "action_get_offline_data"; + private static final String ACTION_START_MEASURE = "action_start_measure"; + private static final String ACTION_KEEP_LINK = "action_keep_link"; + private static final String ACTION_STRIP_IN = "action_strip_in"; + private static final String ACTION_GET_BLOOD = "action_get_blood"; + private static final String ACTION_STRIP_OUT = "action_strip_out"; + private static final String ACTION_RESULT = "action_result"; + private static final String ACTION_GET_STATUS_INFO = "action_get_status_info"; + private static final String ACTION_SET_OFFLINE_MEASUREMENT_MODE = "action_set_offline_measurement_mode"; + private static final String ACTION_ENTER_CHARGED_STATE = "action_enter_charged_state"; + private static final String ACTION_LEAVE_CHARGED_STATE = "action_leave_charged_state"; + private static final String ACTION_GET_ALL_CONNECTED_DEVICES = "ACTION_GET_ALL_CONNECTED_DEVICES"; + + private static final String ERROR_NUM = "error_num"; + private static final String ERROR_DESCRIPTION = "error_description"; + private static final String INFO_BATTERY_LEVEL = "info_battery_level"; + private static final String INFO_TIME = "info_time"; + private static final String INFO_TIMEZONE = "info_timezone"; + private static final String INFO_USED_STRIP = "info_used_strip"; + private static final String INFO_OFFLINE_DATA_NUM = "info_offline_data_num"; + private static final String INFO_CODE_VERSION_BLOOD = "info_code_version_blood"; + private static final String INFO_CODE_VERSION_CTL = "info_code_version_ctl"; + private static final String INFO_UNIT = "info_unit"; + private static final String SEND_CODE_RESULT = "send_code_result"; + private static final String OFFLINE_DATA = "offline_data"; + private static final String DATA_TIME_PROOF = "data_time_proof"; + private static final String DATA_MEASURE_TIME = "data_measure_time"; + private static final String DATA_MEASURE_TIMEZONE = "data_measure_timezone"; + private static final String DATA_VALUE = "data_value"; + private static final String RESULT_VALUE = "result_value"; + private static final String DATA_ID = "dataID"; + + public BG5SProfileModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Nullable + @Override + public Map getConstants() { + + final Map constants = new HashMap<>(); + + constants.put(ACTION_ERROR, Bg5sProfile.ACTION_ERROR); + constants.put(ACTION_SET_TIME, Bg5sProfile.ACTION_SET_TIME); + constants.put(ACTION_SET_UNIT, Bg5sProfile.ACTION_SET_UNIT); + constants.put(ACTION_SEND_CODE, Bg5sProfile.ACTION_SEND_CODE); + constants.put(ACTION_START_MEASURE, Bg5sProfile.ACTION_START_MEASURE); + constants.put(ACTION_DELETE_USED_STRIP, Bg5sProfile.ACTION_DELETE_USED_STRIP); + constants.put(ACTION_DELETE_OFFLINE_DATA, Bg5sProfile.ACTION_DELETE_OFFLINE_DATA); + constants.put(ACTION_GET_OFFLINE_DATA, Bg5sProfile.ACTION_GET_OFFLINE_DATA); + constants.put(ACTION_KEEP_LINK, Bg5sProfile.ACTION_KEEP_LINK); + constants.put(ACTION_STRIP_IN, Bg5sProfile.ACTION_STRIP_IN); + constants.put(ACTION_STRIP_OUT, Bg5sProfile.ACTION_STRIP_OUT); + constants.put(ACTION_GET_BLOOD, Bg5sProfile.ACTION_GET_BLOOD); + constants.put(ACTION_RESULT, Bg5sProfile.ACTION_RESULT); + constants.put(ACTION_GET_STATUS_INFO, Bg5sProfile.ACTION_GET_STATUS_INFO); + constants.put(ACTION_SET_OFFLINE_MEASUREMENT_MODE, Bg5sProfile.ACTION_SET_OFFLINE_MEASUREMENT_MODE); + constants.put(ACTION_ENTER_CHARGED_STATE, Bg5sProfile.ACTION_ENTER_CHARGED_STATE); + constants.put(ACTION_LEAVE_CHARGED_STATE, Bg5sProfile.ACTION_LEAVE_CHARGED_STATE); + constants.put(ACTION_GET_ALL_CONNECTED_DEVICES, iHealthBaseModule.ACTION_GET_ALL_CONNECTED_DEVICES); + + constants.put(ERROR_NUM, Bg5sProfile.ERROR_NUM); + constants.put(ERROR_DESCRIPTION, Bg5sProfile.ERROR_DESCRIPTION); + constants.put(INFO_BATTERY_LEVEL, Bg5sProfile.INFO_BATTERY_LEVEL); + constants.put(INFO_TIME, Bg5sProfile.INFO_TIME); + constants.put(INFO_TIMEZONE, Bg5sProfile.INFO_TIMEZONE); + constants.put(INFO_USED_STRIP, Bg5sProfile.INFO_USED_STRIP); + constants.put(INFO_OFFLINE_DATA_NUM, Bg5sProfile.INFO_OFFLINE_DATA_NUM); + constants.put(INFO_CODE_VERSION_BLOOD, Bg5sProfile.INFO_CODE_VERSION_BLOOD); + constants.put(INFO_CODE_VERSION_CTL, Bg5sProfile.INFO_CODE_VERSION_CTL); + constants.put(INFO_UNIT, Bg5sProfile.INFO_UNIT); + constants.put(SEND_CODE_RESULT, Bg5sProfile.SEND_CODE_RESULT); + constants.put(OFFLINE_DATA, Bg5sProfile.OFFLINE_DATA); + constants.put(DATA_TIME_PROOF, Bg5sProfile.DATA_TIME_PROOF); + constants.put(DATA_MEASURE_TIME, Bg5sProfile.DATA_MEASURE_TIME); + constants.put(DATA_MEASURE_TIMEZONE, Bg5sProfile.DATA_MEASURE_TIMEZONE); + constants.put(DATA_VALUE, Bg5sProfile.DATA_VALUE); + constants.put(RESULT_VALUE, Bg5sProfile.RESULT_VALUE); + constants.put(DATA_ID, Bg5sProfile.DATA_ID); + + return constants; + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BGProfileModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BGProfileModule.java new file mode 100755 index 0000000..256bb13 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BGProfileModule.java @@ -0,0 +1,146 @@ +package com.ihealth.ihealthlibrary; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Bg5Profile; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +/** + * Created by gaoyuanlong on 16/11/17. + */ +@ReactModule(name = "BGProfileModule") +public class BGProfileModule extends ReactContextBaseJavaModule { + + private static final String modelName = "BGProfileModule"; + private static final String TAG = modelName; + + private static final String ACTION_KEEP_LINK = "ACTION_KEEP_LINK"; + private static final String ACTION_SET_TIME = "ACTION_SET_TIME"; + private static final String ACTION_SET_UNIT = "ACTION_SET_UNIT"; + private static final String ACTION_GET_BATTERY = "ACTION_GET_BATTERY"; + private static final String ACTION_START_MEASURE = "ACTION_START_MEASURE"; + private static final String ACTION_GET_OFFLINEDATA_COUNT = "ACTION_GET_OFFLINEDATA_COUNT"; + private static final String ACTION_GET_OFFLINEDATA = "ACTION_GET_OFFLINEDATA"; + private static final String ACTION_DELETE_OFFLINEDATA = "ACTION_DELETE_OFFLINEDATA"; + private static final String ACTION_SET_BOTTLEMESSAGE = "ACTION_SET_BOTTLEMESSAGE"; + private static final String ACTION_GET_BOTTLEMESSAGE = "ACTION_GET_BOTTLEMESSAGE"; + private static final String ACTION_SET_BOTTLEID = "ACTION_SET_BOTTLEID"; + private static final String ACTION_GET_BOTTLEID = "ACTION_GET_BOTTLEID"; + private static final String ACTION_ERROR_BG = "ACTION_ERROR_BG"; + private static final String ACTION_STRIP_IN = "ACTION_STRIP_IN"; + private static final String ACTION_STRIP_OUT = "ACTION_STRIP_OUT"; + private static final String ACTION_GET_BLOOD = "ACTION_GET_BLOOD"; + private static final String ACTION_ONLINE_RESULT_BG = "ACTION_ONLINE_RESULT_BG"; + + +// private static final String KEEP_LINK = "KEEP_LINK"; +// private static final String SET_TIME = "SET_TIME"; +// private static final String SET_UNIT = "SET_UNIT"; + private static final String GET_BATTERY = "GET_BATTERY"; +// private static final String START_MEASURE = "START_MEASURE"; + private static final String GET_OFFLINEDATA_COUNT = "GET_OFFLINEDATA_COUNT"; + private static final String GET_OFFLINEDATA = "GET_OFFLINEDATA"; +// private static final String DELETE_OFFLINEDATA = "DELETE_OFFLINEDATA"; + private static final String SET_BOTTLEMESSAGE = "SET_BOTTLEMESSAGE"; + private static final String START_MODE = "START_MODE"; + private static final String GET_EXPIRECTIME = "GET_EXPIRECTIME"; + private static final String GET_USENUM = "GET_USENUM"; +// private static final String SET_BOTTLEID = "SET_BOTTLEID"; + private static final String GET_BOTTLEID = "GET_BOTTLEID"; + private static final String ERROR_NUM_BG = "ERROR_NUM_BG"; + private static final String ERROR_DESCRIPTION_BG = "ERROR_DESCRIPTION_BG"; + private static final String ONLINE_RESULT_BG = "ONLINE_RESULT_BG"; + private static final String DATA_ID = "DATA_ID"; + + /** + * Callback indicating the code analysis result. + */ + private static final String ACTION_CODE_ANALYSIS = "ACTION_CODE_ANALYSIS"; + + + /** + * the strip number + */ + private static final String STRIP_NUM_BG = "STRIP_NUM_BG"; + + + /** + * the expire time + */ + private static final String STRIP_EXPIRETIME_BG = "STRIP_EXPIRETIME_BG"; + + + /** + * the bottle id + */ + private static final String BOTTLEID_BG = "BOTTLEID_BG"; + + private static final String ACTION_GET_ALL_CONNECTED_DEVICES = "ACTION_GET_ALL_CONNECTED_DEVICES"; + + + public BGProfileModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Nullable + @Override + public Map getConstants() { + + final Map constants = new HashMap<>(); + + constants.put(ACTION_KEEP_LINK, Bg5Profile.ACTION_KEEP_LINK); + constants.put(ACTION_SET_TIME, Bg5Profile.ACTION_SET_TIME); + constants.put(ACTION_SET_UNIT, Bg5Profile.ACTION_SET_UNIT); + constants.put(ACTION_GET_BATTERY, Bg5Profile.ACTION_BATTERY_BG); + constants.put(ACTION_START_MEASURE, Bg5Profile.ACTION_START_MEASURE); + constants.put(ACTION_GET_OFFLINEDATA_COUNT, Bg5Profile.ACTION_HISTORICAL_NUM_BG); + constants.put(ACTION_GET_OFFLINEDATA, Bg5Profile.ACTION_HISTORICAL_DATA_BG); + constants.put(ACTION_DELETE_OFFLINEDATA, Bg5Profile.ACTION_DELETE_HISTORICAL_DATA); + constants.put(ACTION_SET_BOTTLEMESSAGE, Bg5Profile.ACTION_SET_BOTTLE_MESSAGE_SUCCESS); + constants.put(ACTION_GET_BOTTLEMESSAGE, Bg5Profile.ACTION_GET_CODEINFO); + constants.put(ACTION_SET_BOTTLEID, Bg5Profile.ACTION_SET_BOTTLE_ID_SUCCESS); + constants.put(ACTION_GET_BOTTLEID, Bg5Profile.ACTION_GET_BOTTLEID); + constants.put(ACTION_ERROR_BG, Bg5Profile.ACTION_ERROR_BG); + constants.put(ACTION_STRIP_IN, Bg5Profile.ACTION_STRIP_IN); + constants.put(ACTION_STRIP_OUT, Bg5Profile.ACTION_STRIP_OUT); + constants.put(ACTION_GET_BLOOD, Bg5Profile.ACTION_GET_BLOOD); + constants.put(ACTION_ONLINE_RESULT_BG, Bg5Profile.ACTION_ONLINE_RESULT_BG); + + +// constants.put(KEEP_LINK, Bg5Profile.KEEP_LINK); +// constants.put(SET_TIME, Bg5Profile.SET_TIME); +// constants.put(SET_UNIT, Bg5Profile.SET_UNIT); + constants.put(GET_BATTERY, Bg5Profile.BATTERY_BG); +// constants.put(START_MEASURE, Bg5Profile.START_MEASURE); + constants.put(GET_OFFLINEDATA_COUNT, Bg5Profile.HISTORICAL_NUM_BG); + constants.put(GET_OFFLINEDATA, Bg5Profile.HISTORICAL_DATA_BG); +// constants.put(DELETE_OFFLINEDATA, Bg5Profile.DELETE_HISTORICAL_DATA); + constants.put(SET_BOTTLEMESSAGE, Bg5Profile.SET_BOTTLE_MESSAGE); + constants.put(START_MODE,Bg5Profile.START_MODE_EXTRA); + constants.put(GET_EXPIRECTIME, Bg5Profile.GET_EXPIRECTIME); + constants.put(GET_USENUM, Bg5Profile.GET_USENUM); + constants.put(GET_BOTTLEID, Bg5Profile.GET_BOTTLEID); +// constants.put(SET_BOTTLEID, Bg5Profile.SET_BOTTLE_MESSAGE); + constants.put(ERROR_NUM_BG, Bg5Profile.ERROR_NUM_BG); + constants.put(ERROR_DESCRIPTION_BG, Bg5Profile.ERROR_DESCRIPTION_BG); + constants.put(ONLINE_RESULT_BG, Bg5Profile.ONLINE_RESULT_BG); + constants.put(DATA_ID, Bg5Profile.DATA_ID); + + constants.put(ACTION_CODE_ANALYSIS, "action_code_analysis"); + constants.put(STRIP_NUM_BG, "strip_num"); + constants.put(STRIP_EXPIRETIME_BG, "expire_time"); + constants.put(BOTTLEID_BG, "bottle_id"); + constants.put(ACTION_GET_ALL_CONNECTED_DEVICES, iHealthBaseModule.ACTION_GET_ALL_CONNECTED_DEVICES); + return constants; + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP3LModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP3LModule.java new file mode 100755 index 0000000..587a06b --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP3LModule.java @@ -0,0 +1,133 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Bp3lControl; +import com.ihealth.communication.control.BpProfile; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by zhangxu on 16/11/14. + */ +@ReactModule(name = "BP3LModule") +public class BP3LModule extends iHealthBaseModule { + private String modelName = "BP3LModule"; + private static final String TAG = "BP3LModule"; + + private static final String EVENT_NOTIFY = "event_notify_bp3l"; + + public BP3LModule(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + + @ReactMethod + public void startMeasure(String mac) { + Bp3lControl bp3lControl = iHealthDevicesManager.getInstance().getBp3lControl(mac); + if (bp3lControl != null) { + bp3lControl.startMeasure(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error", params); + } + } + + + @ReactMethod + public void stopMeasure(String mac) { + Bp3lControl bp3lControl = iHealthDevicesManager.getInstance().getBp3lControl(mac); + if (bp3lControl != null) { + bp3lControl.interruptMeasure(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void getBattery(String mac) { + Bp3lControl bp3lControl = iHealthDevicesManager.getInstance().getBp3lControl(mac); + if (bp3lControl != null) { + bp3lControl.getBattery(); + }else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error",params); + } + } + + @ReactMethod + public void disconnect(String mac) { + Bp3lControl bp3lControl = iHealthDevicesManager.getInstance().getBp3lControl(mac); + if (bp3lControl != null) { + bp3lControl.disconnect(); + }else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error",params); + } + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + if (action.equals(BpProfile.ACTION_ONLINE_RESULT_BP)) { + try { + JSONObject jsonObject = new JSONObject(message); + jsonObject.remove(BpProfile.MEASUREMENT_HSD_BP); + message = jsonObject.toString(); + } catch (JSONException e) { + e.printStackTrace(); + } + } + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getBp3lDevices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP550BTModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP550BTModule.java new file mode 100755 index 0000000..41023b5 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP550BTModule.java @@ -0,0 +1,159 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Bp550BTControl; +import com.ihealth.communication.control.BpProfile; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by zhangxu on 16/11/20. + */ +@ReactModule(name = "BP550BTModule") +public class BP550BTModule extends iHealthBaseModule { + private static final String modelName = "BP550BTModule"; + private static final String TAG = "BP550BTModule"; + + private static final String EVENT_NOTIFY = "event_notify_bp550bt"; + + public BP550BTModule(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + @ReactMethod + public void getBattery(String mac) { + Bp550BTControl bp550BTControl = iHealthDevicesManager.getInstance().getBp550BTControl(mac); + + if (bp550BTControl != null) { + bp550BTControl.getBattery(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void getOffLineNum(String mac) { + Bp550BTControl bp550BTControl = iHealthDevicesManager.getInstance().getBp550BTControl(mac); + if (bp550BTControl != null) { + bp550BTControl.getOfflineNum(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void getOffLineData(String mac) { + Bp550BTControl bp550BTControl = iHealthDevicesManager.getInstance().getBp550BTControl(mac); + ; + if (bp550BTControl != null) { + bp550BTControl.getOfflineData(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void getFunctionInfo(String mac) { + Bp550BTControl bp550BTControl = iHealthDevicesManager.getInstance().getBp550BTControl(mac); + if (bp550BTControl != null) { + bp550BTControl.getFunctionInfo(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void disconnect(String mac) { + Bp550BTControl bp550BTControl = iHealthDevicesManager.getInstance().getBp550BTControl(mac); + if (bp550BTControl != null) { + bp550BTControl.disconnect(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent("Error", params); + } + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + switch (action) { + case BpProfile.ACTION_BATTERY_BP: + + break; + case BpProfile.ACTION_ZOREING_BP: + + break; + case BpProfile.ACTION_ZOREOVER_BP: + + break; + case BpProfile.ACTION_ONLINE_PRESSURE_BP: + + break; + case BpProfile.ACTION_ONLINE_PULSEWAVE_BP: + + break; + case BpProfile.ACTION_ONLINE_RESULT_BP: + + break; + default: + break; + } + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + if (deviceType.equals("KN-550BT")) { + params.putString("type", "KN550"); + } else { + params.putString("type", deviceType); + } + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getBp550BTDevices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP5Module.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP5Module.java new file mode 100755 index 0000000..e190ad7 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP5Module.java @@ -0,0 +1,193 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Bp5Control; +import com.ihealth.communication.control.BpProfile; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by jing on 16/10/24. + */ +@ReactModule(name = "BP5Module") +public class BP5Module extends iHealthBaseModule { + + private static final String modelName = "BP5Module"; + private static final String TAG = "BP5Module"; + private static final String EVENT_NOTIFY = "event_notify_bp5"; + + public BP5Module(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + + @Override + public String getName() { + return modelName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + @ReactMethod + public void startMeasure(String mac) { + Bp5Control bp5Control = iHealthDevicesManager.getInstance().getBp5Control(mac); + if (bp5Control != null) { + bp5Control.startMeasure(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void stopMeasure(String mac) { + Bp5Control bp5Control = iHealthDevicesManager.getInstance().getBp5Control(mac); + if (bp5Control != null) { + bp5Control.interruptMeasure(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error", params); + } + } + @ReactMethod + public void getBattery(String mac) { + Bp5Control bp5Control = iHealthDevicesManager.getInstance().getBp5Control(mac); + if (bp5Control != null) { + bp5Control.getBattery(); + }else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error", params); + } + } + @ReactMethod + public void enbleOffline(String mac) { + Bp5Control bp5Control = iHealthDevicesManager.getInstance().getBp5Control(mac); + if (bp5Control != null) { + bp5Control.enbleOffline(); + }else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error", params); + } + } + @ReactMethod + public void disableOffline(String mac) { + Bp5Control bp5Control = iHealthDevicesManager.getInstance().getBp5Control(mac); + if (bp5Control != null) { + bp5Control.disableOffline(); + }else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error", params); + } + } + @ReactMethod + public void isEnableOffline(String mac) { + Bp5Control bp5Control = iHealthDevicesManager.getInstance().getBp5Control(mac); + if (bp5Control != null) { + bp5Control.isEnableOffline(); + }else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void getOfflineNum(String mac) { + Bp5Control bp5Control = iHealthDevicesManager.getInstance().getBp5Control(mac); + if (bp5Control != null) { + bp5Control.getOfflineNum(); + }else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error", params); + } + } + @ReactMethod + public void getOfflineData(String mac) { + Bp5Control bp5Control = iHealthDevicesManager.getInstance().getBp5Control(mac); + if (bp5Control != null) { + bp5Control.getOfflineData(); + }else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void disconnect(String mac) { + Bp5Control bp5Control = iHealthDevicesManager.getInstance().getBp5Control(mac); + if (bp5Control != null) { + bp5Control.disconnect(); + }else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error",params); + } + } + + @ReactMethod + public void Logger(String tag, String msg) { + Log.e(TAG, msg); + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + if (action.equals(BpProfile.ACTION_ONLINE_RESULT_BP)) { + try { + JSONObject jsonObject = new JSONObject(message); + jsonObject.remove(BpProfile.MEASUREMENT_HSD_BP); + message = jsonObject.toString(); + } catch (JSONException e) { + e.printStackTrace(); + } + } + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getBp5Devices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP5SModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP5SModule.java new file mode 100644 index 0000000..6a99caf --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP5SModule.java @@ -0,0 +1,155 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Bp5sControl; +import com.ihealth.communication.control.BpProfile; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@ReactModule(name = "BP5SModule") +public class BP5SModule extends iHealthBaseModule { + + private static final String moduleName = "BP5SModule"; + private static final String TAG = "BP5SModule"; + private static final String EVENT_NOTIFY = "event_notify_bp5s"; + + public BP5SModule(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return moduleName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + @ReactMethod + public void getBattery(String mac) { + Bp5sControl bp5sControl = getBp5sControl(mac); + if (bp5sControl != null) { + bp5sControl.getBattery(); + } + } + + @ReactMethod + public void getOffLineNum(String mac) { + Bp5sControl bp5sControl = getBp5sControl(mac); + if (bp5sControl != null) { + bp5sControl.getOfflineDataNum(); + } + } + + @ReactMethod + public void getOffLineData(String mac) { + Bp5sControl bp5sControl = getBp5sControl(mac); + if (bp5sControl != null) { + bp5sControl.getOfflineData(); + } + } + + @ReactMethod + public void getFunctionInfo(String mac) { + Bp5sControl bp5sControl = getBp5sControl(mac); + if (bp5sControl != null) { + bp5sControl.getFunctionInfo(); + } + } + + @ReactMethod + public void startMeasure(String mac) { + Bp5sControl bp5sControl = getBp5sControl(mac); + if (bp5sControl != null) { + bp5sControl.startMeasure(); + } + } + + @ReactMethod + public void stopMeasure(String mac) { + Bp5sControl bp5sControl = getBp5sControl(mac); + if (bp5sControl != null) { + bp5sControl.interruptMeasure(); + } + } + + @ReactMethod + public void enbleOffline(String mac, int mode) { + Bp5sControl bp5sControl = getBp5sControl(mac); + if (bp5sControl != null) { + bp5sControl.setMode(mode); + } + } + + @ReactMethod + public void deleteData(String mac) { + Bp5sControl bp5sControl = getBp5sControl(mac); + if (bp5sControl != null) { + bp5sControl.deleteMemoryData(); + } + } + + @ReactMethod + public void disconnect(String mac) { + Bp5sControl bp5sControl = getBp5sControl(mac); + if (bp5sControl != null) { + bp5sControl.disconnect(); + } + } + + private void senErrMessage(int errId) { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", errId); + sendEvent(EVENT_NOTIFY, params); + } + + private Bp5sControl getBp5sControl(String mac) { + Bp5sControl bp5sControl = iHealthDevicesManager.getInstance().getBp5sControl(mac); + if (bp5sControl == null) { + senErrMessage(400); + } + return bp5sControl; + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getBp5sDevices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP7Module.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP7Module.java new file mode 100755 index 0000000..f68b93c --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP7Module.java @@ -0,0 +1,148 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Bp7Control; +import com.ihealth.communication.control.BpProfile; +import com.ihealth.communication.control.Po1Control; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@ReactModule(name = "BP7Module") +public class BP7Module extends iHealthBaseModule { + + private static final String moduleName = BP7Module.class.getSimpleName(); + private static final String TAG = BP7Module.class.getSimpleName(); + + private static final String EVENT_NOTIFY = "event_notify_bp7"; + + public BP7Module(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return moduleName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + private void senErrMessage(int errId) { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", errId); + sendEvent(EVENT_NOTIFY, params); + } + + private Bp7Control getBp7Control(String mac) { + Bp7Control bp7Control = iHealthDevicesManager.getInstance().getBp7Control(mac); + if (bp7Control == null) { + senErrMessage(400); + } + return bp7Control; + } + + @ReactMethod + public void getBattery(String mac) { + Bp7Control bp7Control = getBp7Control(mac); + if (bp7Control != null) { + bp7Control.getBattery(); + } + } + + @ReactMethod + public void startMeasure(String mac) { + Bp7Control bp7Control = getBp7Control(mac); + if (bp7Control != null) { + bp7Control.startMeasure(); + } + } + + @ReactMethod + public void stopMeasure(String mac) { + Bp7Control bp7Control = getBp7Control(mac); + if (bp7Control != null) { + bp7Control.interruptMeasure(); + } + } + + @ReactMethod + public void enableOfflineMeasurement(String mac) { + Bp7Control bp7Control = getBp7Control(mac); + if (bp7Control != null) { + bp7Control.enableOffline(); + } + } + + @ReactMethod + public void getOfflineNum(String mac) { + Bp7Control bp7Control = getBp7Control(mac); + if (bp7Control != null) { + bp7Control.getOfflineNum(); + } + } + + @ReactMethod + public void getOfflineData(String mac) { + Bp7Control bp7Control = getBp7Control(mac); + if (bp7Control != null) { + bp7Control.getOfflineData(); + } + } + + @ReactMethod + public void conformAngle(String mac) { + Bp7Control bp7Control = getBp7Control(mac); + if (bp7Control != null) { + bp7Control.conformAngle(); + } + } + + @ReactMethod + public void disconnect(String mac) { + Bp7Control bp7Control = getBp7Control(mac); + if (bp7Control != null) { + bp7Control.disconnect(); + } + } + + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getBp7sDevices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } + +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP7SModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP7SModule.java new file mode 100755 index 0000000..bc4f109 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BP7SModule.java @@ -0,0 +1,176 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Bp7sControl; +import com.ihealth.communication.control.BpProfile; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by zhangxu on 16/11/20. + */ +@ReactModule(name = "BP7SModule") +public class BP7SModule extends iHealthBaseModule { + + private static final String moduleName = "BP7SModule"; + private static final String TAG = "BP7SModule"; + + private static final String EVENT_NOTIFY = "event_notify_bp7s"; + + public BP7SModule(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return moduleName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + @ReactMethod + public void getBattery(String mac) { + Bp7sControl bp7sControl = iHealthDevicesManager.getInstance().getBp7sControl(mac); + if (bp7sControl != null) { + bp7sControl.getBattery(); + }else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void getOffLineNum(String mac) { + Bp7sControl bp7sControl = iHealthDevicesManager.getInstance().getBp7sControl(mac); + if (bp7sControl != null) { + bp7sControl.getOfflineNum(); + }else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error", params); + } + } + @ReactMethod + public void getOffLineData(String mac) { + Bp7sControl bp7sControl = iHealthDevicesManager.getInstance().getBp7sControl(mac); + if (bp7sControl != null) { + bp7sControl.getOfflineData(); + }else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error", params); + } + } + @ReactMethod + public void setUnit(String mac, int unit) { + Bp7sControl bp7sControl = iHealthDevicesManager.getInstance().getBp7sControl(mac); + if (bp7sControl != null) { + bp7sControl.setUnit(unit); + }else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error", params); + } + } + @ReactMethod + public void angleSet(String mac, int leftUpper,int leftLow, int rightUpper, int rightLow) { + Bp7sControl bp7sControl = iHealthDevicesManager.getInstance().getBp7sControl(mac); + if (bp7sControl != null) { + bp7sControl.angleSet((byte)leftUpper,(byte)leftLow,(byte)rightUpper,(byte)rightLow); + }else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error", params); + } + } + @ReactMethod + public void getFunctionInfo(String mac) { + Bp7sControl bp7sControl = iHealthDevicesManager.getInstance().getBp7sControl(mac); + if (bp7sControl != null) { + bp7sControl.getFunctionInfo(); + }else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void disconnect(String mac) { + Bp7sControl bp7sControl = iHealthDevicesManager.getInstance().getBp7sControl(mac); + if (bp7sControl != null) { + bp7sControl.disconnect(); + }else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid",400); + sendEvent("Error",params); + } + } + + + public void handleNotify(String mac, String deviceType, String action, String message) { + switch (action) { + case BpProfile.ACTION_BATTERY_BP: + + break; + case BpProfile.ACTION_ZOREING_BP: + + break; + case BpProfile.ACTION_ZOREOVER_BP: + + break; + case BpProfile.ACTION_ONLINE_PRESSURE_BP: + + break; + case BpProfile.ACTION_ONLINE_PULSEWAVE_BP: + + break; + case BpProfile.ACTION_ONLINE_RESULT_BP: + + break; + default: + break; + } + + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getBp7sDevices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } + +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BPProfileModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BPProfileModule.java new file mode 100755 index 0000000..e92b417 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BPProfileModule.java @@ -0,0 +1,168 @@ +package com.ihealth.ihealthlibrary; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.BpProfile; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +/** + * Created by zhangxu on 16/11/16. + */ +@ReactModule(name = "BPProfileModule") +public class BPProfileModule extends ReactContextBaseJavaModule { + + + private static final String modelName = "BPProfileModule"; + private static final String TAG = "BPProfileModule"; + + + private static final String ACTION_ERROR_BP = "ACTION_ERROR_BP"; + private static final String ERROR_NUM_BP = "ERROR_NUM_BP"; + private static final String ERROR_DESCRIPTION_BP = "ERROR_DESCRIPTION_BP"; + + //battery + private static final String ACTION_BATTERY_BP = "ACTION_BATTERY_BP"; + private static final String BATTERY_BP = "BATTERY_BP"; + + private static final String ACTION_ZOREING_BP = "ACTION_ZOREING_BP"; + private static final String ACTION_ZOREOVER_BP = "ACTION_ZOREOVER_BP"; + + private static final String ACTION_ONLINE_PRESSURE_BP = "ACTION_ONLINE_PRESSURE_BP"; + private static final String BLOOD_PRESSURE_BP = "BLOOD_PRESSURE_BP"; + + private static final String ACTION_ONLINE_PULSEWAVE_BP = "ACTION_ONLINE_PULSEWAVE_BP"; + private static final String FLAG_HEARTBEAT_BP = "FLAG_HEARTBEAT_BP"; + private static final String PULSEWAVE_BP = "PULSEWAVE_BP"; + + private static final String ACTION_ONLINE_RESULT_BP = "ACTION_ONLINE_RESULT_BP"; + private static final String HIGH_BLOOD_PRESSURE_BP = "HIGH_BLOOD_PRESSURE_BP"; + private static final String LOW_BLOOD_PRESSURE_BP = "LOW_BLOOD_PRESSURE_BP"; + private static final String PULSE_BP = "PULSE_BP"; + private static final String MEASUREMENT_AHR_BP = "MEASUREMENT_AHR_BP"; + private static final String MEASUREMENT_HSD_BP = "MEASUREMENT_HSD_BP"; + private static final String DATAID = "DATAID"; + + private static final String ACTION_HISTORICAL_NUM_BP = "ACTION_HISTORICAL_NUM_BP"; + private static final String HISTORICAL_NUM_BP = "HISTORICAL_NUM_BP"; + + + private static final String ACTION_HISTORICAL_DATA_BP = "ACTION_HISTORICAL_DATA_BP"; + private static final String HISTORICAL_DATA_BP = "HISTORICAL_DATA_BP"; + private static final String MEASUREMENT_DATE_BP = "MEASUREMENT_DATE_BP"; + private static final String MEASUREMENT_STRAT_ANGLE_BP = "MEASUREMENT_STRAT_ANGLE_BP"; + private static final String MEASUREMENT_ANGLE_CHANGE_BP = "MEASUREMENT_ANGLE_CHANGE_BP"; + private static final String MEASUREMENT_HAND_BP = "MEASUREMENT_HAND_BP"; + + private static final String ACTION_HISTORICAL_OVER_BP = "ACTION_HISTORICAL_OVER_BP"; + + private static final String ACTION_FUNCTION_INFORMATION_BP = "ACTION_FUNCTION_INFORMATION_BP"; + private static final String FUNCTION_IS_UPAIR_MEASURE = "FUNCTION_IS_UPAIR_MEASURE"; + private static final String FUNCTION_IS_ARM_MEASURE = "FUNCTION_IS_ARM_MEASURE"; + private static final String FUNCTION_HAVE_ANGLE_SENSOR = "FUNCTION_HAVE_ANGLE_SENSOR"; + private static final String FUNCTION_HAVE_OFFLINE = "FUNCTION_HAVE_OFFLINE"; + private static final String FUNCTION_HAVE_HSD = "FUNCTION_HAVE_HSD"; + private static final String FUNCTION_HAVE_ANGLE_SETTING = "FUNCTION_HAVE_ANGLE_SETTING"; + private static final String FUNCTION_IS_MULTI_UPLOAD = "FUNCTION_IS_MULTI_UPLOAD"; + private static final String FUNCTION_HAVE_SELF_UPDATE = "FUNCTION_HAVE_SELF_UPDATE"; + + private static final String ACTION_ENABLE_OFFLINE_BP = "ACTION_ENABLE_OFFLINE_BP"; + private static final String ACTION_DISENABLE_OFFLINE_BP = "ACTION_DISENABLE_OFFLINE_BP"; + private static final String ACTION_IS_ENABLE_OFFLINE = "ACTION_IS_ENABLE_OFFLINE"; + private static final String IS_ENABLE_OFFLINE = "IS_ENABLE_OFFLINE"; + + private static final String ACTION_SET_UNIT_SUCCESS_BP = "ACTION_SET_UNIT_SUCCESS_BP"; + private static final String ACTION_SET_ANGLE_SUCCESS_BP = "ACTION_SET_ANGLE_SUCCESS_BP"; + + private static final String ACTION_INTERRUPTED_BP = "ACTION_INTERRUPTED_BP"; + private static final String ACTION_GET_ALL_CONNECTED_DEVICES = "ACTION_GET_ALL_CONNECTED_DEVICES"; + + private static final String ACTION_ANGLE_BP = "ACTION_ANGLE_BP"; + private static final String WHICH_ARM = "WHICH_ARM"; + private static final String ANGLE_BP = "ANGLE_BP"; + + public BPProfileModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Nullable + @Override + public Map getConstants() { + + final Map constants = new HashMap<>(); + + constants.put(ACTION_ERROR_BP, BpProfile.ACTION_ERROR_BP); + constants.put(ERROR_NUM_BP, BpProfile.ERROR_NUM_BP); + constants.put(ERROR_DESCRIPTION_BP, BpProfile.ERROR_DESCRIPTION_BP); + + constants.put(ACTION_BATTERY_BP, BpProfile.ACTION_BATTERY_BP); + constants.put(BATTERY_BP,BpProfile.BATTERY_BP); + + constants.put(ACTION_ZOREING_BP, BpProfile.ACTION_ZOREING_BP); + constants.put(ACTION_ZOREOVER_BP, BpProfile.ACTION_ZOREOVER_BP); + + constants.put(ACTION_ONLINE_PRESSURE_BP, BpProfile.ACTION_ONLINE_PRESSURE_BP); + constants.put(BLOOD_PRESSURE_BP,BpProfile.BLOOD_PRESSURE_BP); + + constants.put(ACTION_ONLINE_PULSEWAVE_BP,BpProfile.ACTION_ONLINE_PULSEWAVE_BP); + constants.put(FLAG_HEARTBEAT_BP,BpProfile.FLAG_HEARTBEAT_BP); + constants.put(PULSEWAVE_BP,BpProfile.PULSEWAVE_BP); + + constants.put(ACTION_ONLINE_RESULT_BP, BpProfile.ACTION_ONLINE_RESULT_BP); + constants.put(HIGH_BLOOD_PRESSURE_BP,BpProfile.HIGH_BLOOD_PRESSURE_BP); + constants.put(LOW_BLOOD_PRESSURE_BP,BpProfile.LOW_BLOOD_PRESSURE_BP); + constants.put(PULSE_BP,BpProfile.PULSE_BP); + constants.put(MEASUREMENT_AHR_BP,BpProfile.MEASUREMENT_AHR_BP); + constants.put(MEASUREMENT_HSD_BP,BpProfile.MEASUREMENT_HSD_BP); + constants.put(DATAID,BpProfile.DATAID); + + constants.put(ACTION_HISTORICAL_NUM_BP, BpProfile.ACTION_HISTORICAL_NUM_BP); + constants.put(HISTORICAL_NUM_BP, BpProfile.HISTORICAL_NUM_BP); + + constants.put(ACTION_HISTORICAL_DATA_BP,BpProfile.ACTION_HISTORICAL_DATA_BP); + constants.put(HISTORICAL_DATA_BP, BpProfile.HISTORICAL_DATA_BP); + constants.put(MEASUREMENT_DATE_BP, BpProfile.MEASUREMENT_DATE_BP); + constants.put(MEASUREMENT_STRAT_ANGLE_BP,BpProfile.MEASUREMENT_STRAT_ANGLE_BP); + constants.put(MEASUREMENT_ANGLE_CHANGE_BP,BpProfile.MEASUREMENT_ANGLE_CHANGE_BP); + constants.put(MEASUREMENT_HAND_BP,BpProfile.MEASUREMENT_HAND_BP); + + constants.put(ACTION_HISTORICAL_OVER_BP,BpProfile.ACTION_HISTORICAL_OVER_BP); + + constants.put(ACTION_FUNCTION_INFORMATION_BP,BpProfile.ACTION_FUNCTION_INFORMATION_BP); + constants.put(FUNCTION_IS_UPAIR_MEASURE, BpProfile.FUNCTION_IS_UPAIR_MEASURE); + constants.put(FUNCTION_IS_ARM_MEASURE, BpProfile.FUNCTION_IS_ARM_MEASURE); + constants.put(FUNCTION_HAVE_ANGLE_SENSOR, BpProfile.FUNCTION_HAVE_ANGLE_SENSOR); + constants.put(FUNCTION_HAVE_OFFLINE, BpProfile.FUNCTION_HAVE_OFFLINE); + constants.put(FUNCTION_HAVE_HSD, BpProfile.FUNCTION_HAVE_HSD); + constants.put(FUNCTION_HAVE_ANGLE_SETTING, BpProfile.FUNCTION_HAVE_ANGLE_SETTING); + constants.put(FUNCTION_IS_MULTI_UPLOAD, BpProfile.FUNCTION_IS_MULTI_UPLOAD); + constants.put(FUNCTION_HAVE_SELF_UPDATE, BpProfile.FUNCTION_HAVE_SELF_UPDATE); + + constants.put(ACTION_ENABLE_OFFLINE_BP, BpProfile.ACTION_ENABLE_OFFLINE_BP); + constants.put(ACTION_DISENABLE_OFFLINE_BP, BpProfile.ACTION_DISENABLE_OFFLINE_BP); + + constants.put(ACTION_IS_ENABLE_OFFLINE, BpProfile.ACTION_IS_ENABLE_OFFLINE); + constants.put(IS_ENABLE_OFFLINE,BpProfile.IS_ENABLE_OFFLINE); + + constants.put(ACTION_SET_UNIT_SUCCESS_BP,BpProfile.ACTION_SET_UNIT_SUCCESS_BP); + constants.put(ACTION_SET_ANGLE_SUCCESS_BP,BpProfile.ACTION_SET_ANGLE_SUCCESS_BP); + + constants.put(ACTION_INTERRUPTED_BP, BpProfile.ACTION_INTERRUPTED_BP); + constants.put(ACTION_GET_ALL_CONNECTED_DEVICES, iHealthBaseModule.ACTION_GET_ALL_CONNECTED_DEVICES); + + constants.put(ACTION_ANGLE_BP, BpProfile.ACTION_ANGLE_BP); + constants.put(WHICH_ARM, BpProfile.WHICH_ARM); + constants.put(ANGLE_BP, BpProfile.ANGLE_BP); + + return constants; + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BTMModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BTMModule.java new file mode 100755 index 0000000..32e7106 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BTMModule.java @@ -0,0 +1,145 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.BtmControl; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by lixuesong on 2016/11/21. + */ +@ReactModule(name = "BTMModule") +public class BTMModule extends iHealthBaseModule { + private static final String modelName = "BTMModule"; + private static final String TAG = "BTMModule"; + + private static final String EVENT_NOTIFY = "event_notify_btm"; + + public BTMModule(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + private static BtmControl getControl(String mac) { + return iHealthDevicesManager.getInstance().getBtmControl(mac); + } + + @ReactMethod + public void getBattery(String mac) { + BtmControl btmControl = getControl(mac); + if (btmControl != null) { + btmControl.getBattery(); + } else { + Log.e(TAG, "Can not find BTM Control mac:" + mac); + } + } + + @ReactMethod + public void setStandbyTime(String mac, int hour, int minute, int second) { + BtmControl btmControl = getControl(mac); + if (btmControl != null) { + btmControl.setStandbyTime(hour, minute, second); + } else { + Log.e(TAG, "Can not find BTM Control mac:" + mac); + } + } + + @ReactMethod + public void setTemperatureUnit(String mac, int unit) { + BtmControl btmControl = getControl(mac); + if (btmControl != null) { + btmControl.setTemperatureUnit((byte) unit); + } else { + Log.e(TAG, "Can not find BTM Control mac:" + mac); + } + } + + @ReactMethod + public void setMeasuringTarget(String mac, int target) { + BtmControl btmControl = getControl(mac); + if (btmControl != null) { + btmControl.setMeasuringTarget((byte) target); + } else { + Log.e(TAG, "Can not find BTM Control mac:" + mac); + } + } + + @ReactMethod + public void setOfflineTarget(String mac, int target) { + BtmControl btmControl = getControl(mac); + if (btmControl != null) { + btmControl.setOfflineTarget((byte) target); + } else { + Log.e(TAG, "Can not find BTM Control mac:" + mac); + } + } + + @ReactMethod + public void getMemoryData(String mac) { + BtmControl btmControl = getControl(mac); + if (btmControl != null) { + btmControl.getMemoryData(); + } else { + Log.e(TAG, "Can not find BTM Control mac:" + mac); + } + } + + @ReactMethod + public void disconnect(String mac) { + BtmControl btmControl = getControl(mac); + if (btmControl != null) { + btmControl.disconnect(); + } else { + Log.e(TAG, "Can not find BTM Control mac:" + mac); + } + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getBTMDevices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BTMProfileModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BTMProfileModule.java new file mode 100755 index 0000000..4949093 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/BTMProfileModule.java @@ -0,0 +1,74 @@ +package com.ihealth.ihealthlibrary; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.BtmProfile; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +/** + * Created by lixuesong on 15/11/2016. + */ +@ReactModule(name = "BTMProfileModule") +public class BTMProfileModule extends ReactContextBaseJavaModule { + private static final String modelName = "BTMProfileModule"; + private static final String TAG = "BTMProfileModule"; + + private static final String ACTION_BTM_BATTERY = "ACTION_BTM_BATTERY"; + private static final String BTM_BATTERY = "BTM_BATTERY"; + + private static final String ACTION_BTM_MEMORY = "ACTION_BTM_MEMORY"; + private static final String MEMORY_COUNT = "MEMORY_COUNT"; + private static final String BTM_TEMPERATURE_ARRAY = "BTM_TEMPERATURE_ARRAY"; + private static final String BTM_TEMPERATURE = "BTM_TEMPERATURE"; + private static final String BTM_TEMPERATURE_TARGET = "BTM_TEMPERATURE_TARGET"; + private static final String BTM_MEASURE_TIME = "BTM_MEASURE_TIME"; + + private static final String ACTION_BTM_MEASURE = "ACTION_BTM_MEASURE"; + + private static final String ACTION_BTM_CALLBACK = "ACTION_BTM_CALLBACK"; + + private static final String ACTION_ERROR_BTM = "ACTION_ERROR_BTM"; + private static final String ERROR_NUM_BTM = "ERROR_NUM_BTM"; + private static final String ERROR_DESCRIPTION_BTM = "ERROR_DESCRIPTION_BTM"; + private static final String ACTION_GET_ALL_CONNECTED_DEVICES = "ACTION_GET_ALL_CONNECTED_DEVICES"; + + + public BTMProfileModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Nullable + @Override + public Map getConstants() { + Map constants = new HashMap<>(); + constants.put(ACTION_BTM_BATTERY, BtmProfile.ACTION_BTM_BATTERY); + constants.put(BTM_BATTERY, BtmProfile.BTM_BATTERY); + + constants.put(ACTION_BTM_MEMORY, BtmProfile.ACTION_BTM_MEMORY); + constants.put(MEMORY_COUNT, BtmProfile.MEMORY_COUNT); + constants.put(BTM_TEMPERATURE_ARRAY, BtmProfile.BTM_TEMPERATURE_ARRAY); + constants.put(BTM_TEMPERATURE, BtmProfile.BTM_TEMPERATURE); + constants.put(BTM_TEMPERATURE_TARGET, BtmProfile.BTM_TEMPERATURE_TARGET); + constants.put(BTM_MEASURE_TIME, BtmProfile.BTM_MEASURE_TIME); + + constants.put(ACTION_BTM_MEASURE, BtmProfile.ACTION_BTM_MEASURE); + + constants.put(ACTION_BTM_CALLBACK, BtmProfile.ACTION_BTM_CALLBACK); + + constants.put(ACTION_ERROR_BTM, BtmProfile.ACTION_ERROR_BTM); + constants.put(ERROR_NUM_BTM, BtmProfile.ERROR_NUM_BTM); + constants.put(ERROR_DESCRIPTION_BTM, BtmProfile.ERROR_DESCRIPTION_BTM); + constants.put(ACTION_GET_ALL_CONNECTED_DEVICES, iHealthBaseModule.ACTION_GET_ALL_CONNECTED_DEVICES); + return constants; + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/ECGModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/ECGModule.java new file mode 100644 index 0000000..566e276 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/ECGModule.java @@ -0,0 +1,157 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.ECG3Control; +import com.ihealth.communication.control.ECG3Profile; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.ihealth.communication.control.ECG3Profile.ONLINE_DATA; +import static com.ihealth.communication.control.ECG3Profile.ONLINE_HR; +import static com.ihealth.ihealthlibrary.ECGProfileModule.MEASURE_WAVEData; +import static com.ihealth.ihealthlibrary.ECGProfileModule.MEASURE_ECGPulse; + +/** + * Created by zhaoyongguang on 2018/1/22. + */ +@ReactModule(name = "ECGModule") +public class ECGModule extends iHealthBaseModule { + private static final String modelName = "ECGModule"; + private static final String TAG = "ECGModule"; + + private static final String EVENT_NOTIFY = "event_notify_ecg3"; + + public ECGModule(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + + if (action.equals(ECG3Profile.ACTION_SYNC_ONLINE_DATA)) { + params.putString("action", ECGProfileModule.ACTION_MEASURE_WAVEData); + try { + JSONObject jsonObject = new JSONObject(message); + params.putArray(MEASURE_WAVEData, Utils.getWritableArrayFromJSONArray(jsonObject.getJSONArray(ONLINE_DATA))); + + //split pulse + if (jsonObject.getInt(MEASURE_ECGPulse) > 0) { + WritableMap paramsHR = Arguments.createMap(); + paramsHR.putString("action", ECGProfileModule.ACTION_MEASURE_ECGPulse); + paramsHR.putInt(MEASURE_ECGPulse, jsonObject.getInt(ONLINE_HR)); + paramsHR.putString("mac", mac); + paramsHR.putString("type", deviceType); + sendEvent(EVENT_NOTIFY, paramsHR); + } + } catch (Exception e) { + e.printStackTrace(); + } + } else { + params.putString("action", action); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + } + params.putString("mac", mac); + params.putString("type", deviceType); + + sendEvent(EVENT_NOTIFY, params); + } + + + private static ECG3Control getControl(String mac) { + return iHealthDevicesManager.getInstance().getECG3Control(mac); + } + + /** + * @return the name of this module. This will be the name used to {@code require()} this module + * from javascript. + */ + @Override + public String getName() { + return modelName; + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getECG3Devices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void sysTime(String mac) { + ECG3Control control = getControl(mac); + if (control != null) { + control.setTime(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void getBattery(String mac) { + ECG3Control control = getControl(mac); + if (control != null) { + control.getBattery(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void startMeasure(String mac) { + ECG3Control control = getControl(mac); + if (control != null) { + control.startMeasure(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void stopMeasure(String mac) { + ECG3Control control = getControl(mac); + if (control != null) { + control.stopMeasure(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent("Error", params); + } + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/ECGProfileModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/ECGProfileModule.java new file mode 100644 index 0000000..6f51279 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/ECGProfileModule.java @@ -0,0 +1,385 @@ +package com.ihealth.ihealthlibrary; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.ECG3Profile; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +/** + * Created by zhaoyongguang on 2018/1/22. + */ +@ReactModule(name = "ECGProfileModule") +public class ECGProfileModule extends ReactContextBaseJavaModule { + private static final String modelName = "ECGProfileModule"; + + private static final String ACTION_ERROR_ECG = "ACTION_ERROR_ECG"; + private static final String ERROR_NUM_ECG = "ERROR_NUM_ECG"; + private static final String ERROR_DESCRIPTION_ECG = "ERROR_DESCRIPTION_ECG"; + private static final String ACTION_BATTERY_ECG = "ACTION_BATTERY_ECG"; + private static final String BATTERY_ECG = "BATTERY_ECG"; + private static final String ACTION_SYSTIME = "ACTION_SYSTIME"; + private static final String ACTION_STOPMEASURE_ECG = "ACTION_STOPMEASURE_ECG"; + public static final String ACTION_MEASURE_WAVEData = "ACTION_MEASURE_WAVEData"; + public static final String ACTION_MEASURE_ECGPulse = "ACTION_MEASURE_ECGPulse"; + + /** + * Callback indicating sync offline data from ECG3_USB. + *
            + * KeyList: + *
              + *
            • {@link #OFFLINE_DATA_SYNC_PROGRESS}
            • + *
            • {@link #OFFLINE_DATA_SYNC_FINISH}
            • + *
            • {@link #OFFLINE_DATAS}
            • + *
            + *
          + *

          + *

          + * If {@link #OFFLINE_DATA_SYNC_FINISH sync finish }, you can get filtered data info with {@link #OFFLINE_DATAS}. + *
          eg.
          + * {
          + *     "offline_data_sync_progress": 100,
          + *     "offline_data_sync_finish": true,
          + *     "offline_datas": [{
          + *         "offline_data_file_name": "20160420022253",
          + *         "offline_data_simpling_rate": 248,
          + *         "offline_data_start_time": "20160420022253",
          + *         "offline_data_finish_time": "20160420022357",
          + *         "offline_data_flag": 7
          + * }]
          + * }
          + *

          + *

          All the filtered data is stored in the current app`s internal storage {@link iHealthDevicesManager#TYPE_ECG3_USB ECG3_USB} directory. + * And the data fields are in the order of MSB to LSB. Where MSB = Most Significant Bit and LSB = Least Significant Bit. + *

          The definition of those data as bellow 1~7: + *

            + *
          1. Filtered ECG data, Short type, every 2 bytes represent a simpling value. The target file: {@link ECGAnalyseResult_[fileName].txt} That is {@link #PREFIX_FILTERED_DATA} + fileName + .txt + *
          2. ECG HR Information EveryHour, Int type, every 4 bytes represent a value, and every 4 value as a group. Act as Maximum HR/Minimum HR/Average HR/Total heart beat of every hour. The target file: {@link ECGHREveryHour_[fileName].txt} That is {@link #PREFIX_HR_EVERY_HOUR} + fileName + .txt + *
          3. ECG HR Information for Day, Int type, every 4 bytes represent a value, and every 4 value as a group. Act as Maximum HR/Minimum HR/Average HR/Total heart beat of the day. The target file: {@link ECGDetail_[fileName].txt} That is {@link #PREFIX_HR_DETAIL} + fileName + .txt + *
          4. Abnormal points filtered by algorithm, Int type, every 4 bytes represent a value. The target file: {@link ECGOBByFilter_[fileName].txt} That is {@link #PREFIX_OB_BY_FILTER} + fileName + .txt + *
          5. Abnormal points marked by user, Int type, every 4 bytes represent a value.The target file: {@link OBData_[fileName].txt} That is {@link #PREFIX_OB} + fileName + .txt + *
          6. Electrode lead off Begin points, Int type, every 4 bytes represent a value. The target file: {@link ECGLeadOffBegin_[fileName].txt} That is {@link #PREFIX_LEADOFF_BEGIN} + fileName + .txt + *
          7. Electrode lead off End points, Int type, every 4 bytes represent a value. The target file: {@link ECGLeadOffEnd_[fileName].txt} That is {@link #PREFIX_LEADOFF_END} + fileName + .txt + *

            + *

          + *

          {@link notice And then, read the target data as follows:} + *

          +     * //Example to access the result files
          +     * private void readData() {
          +     * // Step 1, get the dir path
          +     * File resultsDir = new File(getFilesDir().getAbsolutePath() + File.separator + iHealthDevicesManager.TYPE_ECG3_USB);
          +     * // Step 2, get the target file according to the file name and flags {@link ECG3Profile#OFFLINE_DATA_FLAG}
          +     * //check bit 0 of OFFLINE_DATA_FLAG
          +     * if ((offline_data_flag & 0x01) != 0) {
          +     * //wave data
          +     * File file = new File(resultsDir, ECG3Profile.PREFIX_FILTERED_DATA + fileName + ".txt");
          +     * if (file.exists()) {
          +     * byte[] array = new byte[(int) file.length()];
          +     * InputStream in = null;
          +     * try {
          +     * in = new FileInputStream(file);
          +     * in.read(array);
          +     * } catch (FileNotFoundException e) {
          +     * e.printStackTrace();
          +     * } catch (IOException e) {
          +     * e.printStackTrace();
          +     * } finally {
          +     * if (in != null) {
          +     * try {
          +     * in.close();
          +     * } catch (IOException e) {
          +     * e.printStackTrace();
          +     * }
          +     * }
          +     * }
          +     * short[] waveBuffer = BytetoShort(array);
          +     * float[] formatDataBuffer = FormatECGData(waveBuffer);
          +     * //todo draw view
          +     * } else {
          +     * Log.e(TAG, "File not exist: " + file);
          +     * }
          +     * }
          +     * //check bit 1 of OFFLINE_DATA_FLAG
          +     * if ((offline_data_flag & 0x02) != 0) {
          +     * //heart rate data
          +     * File fileHREveryHour = new File(resultsDir, ECG3Profile.PREFIX_HR_EVERY_HOUR + fileName + ".txt");
          +     * if (fileHREveryHour.exists()) {
          +     * byte[] array = new byte[(int) fileHREveryHour.length()];
          +     * InputStream in = null;
          +     * try {
          +     * in = new FileInputStream(fileHREveryHour);
          +     * in.read(array);
          +     * } catch (FileNotFoundException e) {
          +     * e.printStackTrace();
          +     * } catch (IOException e) {
          +     * e.printStackTrace();
          +     * } finally {
          +     * if (in != null) {
          +     * try {
          +     * in.close();
          +     * } catch (IOException e) {
          +     * e.printStackTrace();
          +     * }
          +     * }
          +     * }
          +     * int[] hrEveryHourBuffer = BytetoInt(array);
          +     * //todo show hr list
          +     * } else {
          +     * Log.e(TAG, "File not exist: " + fileHREveryHour);
          +     * }
          +     * File fileHRAllDay = new File(resultsDir, ECG3Profile.PREFIX_HR_DETAIL + fileName + ".txt");
          +     * if (fileHRAllDay.exists()) {
          +     * byte[] array = new byte[(int) fileHRAllDay.length()];
          +     * InputStream in = null;
          +     * try {
          +     * in = new FileInputStream(fileHRAllDay);
          +     * in.read(array);
          +     * } catch (FileNotFoundException e) {
          +     * e.printStackTrace();
          +     * } catch (IOException e) {
          +     * e.printStackTrace();
          +     * } finally {
          +     * if (in != null) {
          +     * try {
          +     * in.close();
          +     * } catch (IOException e) {
          +     * e.printStackTrace();
          +     * }
          +     * }
          +     * }
          +     * int[] hrAllDayBuffer = BytetoInt(array);
          +     * //todo show hr list
          +     * } else {
          +     * Log.e(TAG, "File not exist: " + fileHRAllDay);
          +     * }
          +     * }
          +     * // the same for other data
          +     * }
          +     * // Every 2 bytes represents a short data, the fields are in the order of MSB to LSB. Where MSB = Most Significant Bit and LSB = Least Significant Bit
          +     * private short[] BytetoShort(byte[] array) {
          +     * short[] result = new short[array.length / 2];
          +     * for (int i = 0; i < result.length; i++) {
          +     * int value = array[i * 2] * 256 + array[i * 2 + 1];
          +     * result[i] = (short) ((value > 32767) ? (value - 65536) : value);
          +     * }
          +     * return result;
          +     * }
          +     * // Every 4 bytes represents a int data, the fields are in the order of MSB to LSB. Where MSB = Most Significant Bit and LSB = Least Significant Bit
          +     * private int[] BytetoInt(byte[] array) {
          +     * int[] result = new int[array.length / 4];
          +     * for (int i = 0; i < result.length; i++) {
          +     * result[i] = array[i * 4] * 256 * 256 * 256
          +     * + array[i * 4 + 1] * 256 * 256
          +     * + array[i * 4 + 2] * 256
          +     * + array[i * 4 + 3];
          +     * }
          +     * return result;
          +     * }
          +     * //Format ECG value,  unit mV
          +     * private float[] FormatECGData(short[] array) {
          +     * float[] result = new float[array.length];
          +     * for (int i = 0; i < result.length; i++) {
          +     * result[i] = array[i] * 2420.0f / (6 * 32767);
          +     * }
          +     * return result;
          +     * }
          +     * 
          + * Otherwise, no filtered data, only update the sync progress. + *
          eg. + * {
          + *     "offline_data_sync_progress": 30.5,
          + *     "offline_data_sync_finish": false
          + * }
          + *
          + */ + public static final String ACTION_STARTSYNCDATA_ECGUSB = "ACTION_STARTSYNCDATA_ECGUSB"; + + public static final String ACTION_SYNCDATAPROGRESS_ECGUSB = "ACTION_SYNCDATAPROGRESS_ECGUSB"; + /** + * Callback indicating no historical data for ECG device. + */ + public static final String ACTION_NO_HISTORICAL_DATA = "ACTION_NO_HISTORICAL_DATA"; + /** + * Key of sync progress, range [0, 100]. Value 100 indicates sync finish. + */ + public static final String PROGRESS = "PROGRESS"; + + public static final String ACTION_SYNCDATAINFO_ECGUSB = "ACTION_SYNCDATAINFO_ECGUSB"; + public static final String DATAINFO = "DATAINFO"; + + public static final String MEASURE_WAVEData = "MEASURE_WAVEData"; + public static final String MEASURE_ECGPulse = "MEASURE_ECGPulse"; + + public static final String FILEPATH = "FilePath"; + /** + * Key of file name. + */ + private static final String OFFLINE_DATA_FILE_NAME = "OFFLINE_DATA_FILE_NAME"; + + /** + * Key of simpling rate.You should use it to display view. + */ + private static final String OFFLINE_DATA_SIMPLING_RATE = "OFFLINE_DATA_SIMPLING_RATE"; + /** + * Key of start measure time. + */ + private static final String OFFLINE_DATA_START_TIME = "OFFLINE_DATA_START_TIME"; + /** + * Key of stop measure time. + */ + private static final String OFFLINE_DATA_FINISH_TIME = "OFFLINE_DATA_FINISH_TIME"; + + public static final String ACTION_SPLICE = "ACTION_SPLICE"; + public static final String SPLICE_DATA = "SPLICE_DATA"; + public static final String ACTION_GET_CACHE = "ACTION_GET_CACHE"; + public static final String GET_CACHE_DATA = "GET_CACHE_DATA"; + public static final String ACTION_FILTER = "ACTION_FILTER"; + public static final String FILTER_DATA = "FILTER_DATA"; + + + /** + * Key of data flags, define which data fields are valid in the result. + *

          + * + * + * + * + * + * + *
          NameFormatBit field
          Flags32bits + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
          BitSizeNameDefinition
          01Represent filtered data, target file: {@link #PREFIX_FILTERED_DATA}+[fileName].txt + * + * + * + * + * + * + *
          ValueDescription
          0NA
          1Valid
          11Represent heart rate data, target file: {@link #PREFIX_HR_EVERY_HOUR}+[fileName].txt and {@link #PREFIX_HR_DETAIL}+[fileName].txt + * + * + * + * + * + *
          0NA
          1Valid
          21Represent abnormal points filtered by algorithm, target file: {@link #PREFIX_OB_BY_FILTER}+[fileName].txt + * + * + * + * + * + *
          0NA
          1Valid
          31Represent electrode lead off data,target file: {@link #PREFIX_LEADOFF_BEGIN}+[fileName].txt and {@link #PREFIX_LEADOFF_END}+[fileName].txt + * + * + * + * + * + *
          0NA
          1Valid
          41Represent abnormal points marked by user, target file: {@link #PREFIX_OB}+[fileName].txt + * + * + * + * + * + *
          0NA
          1Valid
          5~3127Reserved
          + */ + private static final String OFFLINE_DATA_FLAG = "offline_data_flag"; + + private static final String ACTION_DELETEDATA_ECGUSB = "ACTION_DELETEDATA_ECGUSB"; + private static final String DELETE_RESULT = "DELETE_RESULT"; + private static final String ACTION_ELECTRODE_STATUS = "ACTION_ELECTRODE_STATUS"; + private static final String ELECTRODE_STATUS = "ELECTRODE_STATUS"; + + private static final String ACTION_GET_IDPS = "ACTION_GET_IDPS"; + + private static final String ACTION_ERROR_ECGUSB = "ACTION_ERROR_ECGUSB"; + private static final String ERROR_NUM_ECGUSB = "ERROR_NUM_ECGUSB"; + private static final String ERROR_DESCRIPTION_ECGUSB = "ERROR_DESCRIPTION_ECGUSB"; + private static final String ACTION_GET_ALL_CONNECTED_DEVICES = "ACTION_GET_ALL_CONNECTED_DEVICES"; + + public ECGProfileModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + /** + * @return the name of this module. This will be the name used to {@code require()} this module + * from javascript. + */ + @Override + public String getName() { + return modelName; + } + + /** + * @return a map of constants this module exports to JS. Supports JSON types. + */ + @Nullable + @Override + public Map getConstants() { + final Map constants = new HashMap<>(); + + constants.put(ACTION_ERROR_ECG, ECG3Profile.ACTION_ERROR); + constants.put(ERROR_NUM_ECG, ECG3Profile.ERROR_NUM); + constants.put(ERROR_DESCRIPTION_ECG, ECG3Profile.ERROR_DESCRIPTION); + constants.put(ACTION_BATTERY_ECG, ECG3Profile.ACTION_GET_BATTERY); + constants.put(BATTERY_ECG, ECG3Profile.BATTERY); + constants.put(ACTION_SYSTIME, ECG3Profile.ACTION_SET_TIME); + constants.put(ACTION_STOPMEASURE_ECG, ECG3Profile.ACTION_STOP_ONLINE_MEASUREMENT); + constants.put(ACTION_MEASURE_WAVEData, ACTION_MEASURE_WAVEData); + constants.put(MEASURE_WAVEData, MEASURE_WAVEData); + constants.put(ACTION_MEASURE_ECGPulse, ACTION_MEASURE_ECGPulse); + constants.put(MEASURE_ECGPulse, MEASURE_ECGPulse); + + constants.put(ACTION_STARTSYNCDATA_ECGUSB, ACTION_STARTSYNCDATA_ECGUSB); + constants.put(ACTION_SYNCDATAPROGRESS_ECGUSB, ACTION_SYNCDATAPROGRESS_ECGUSB); + constants.put(PROGRESS, PROGRESS); + constants.put(ACTION_SYNCDATAINFO_ECGUSB, ACTION_SYNCDATAINFO_ECGUSB); + constants.put(DATAINFO, DATAINFO); + constants.put(OFFLINE_DATA_FILE_NAME, ECG3Profile.OFFLINE_DATA_FILE_NAME); + constants.put(OFFLINE_DATA_SIMPLING_RATE, ECG3Profile.OFFLINE_DATA_SIMPLING_RATE); + constants.put(OFFLINE_DATA_START_TIME, ECG3Profile.OFFLINE_DATA_START_TIME); + constants.put(OFFLINE_DATA_FINISH_TIME, ECG3Profile.OFFLINE_DATA_FINISH_TIME); + constants.put(OFFLINE_DATA_FLAG, ECG3Profile.OFFLINE_DATA_FLAG); + + constants.put(ACTION_DELETEDATA_ECGUSB, ECG3Profile.ACTION_DELETE_DATA); + constants.put(DELETE_RESULT, ECG3Profile.DELETE_RESULT); + constants.put(ACTION_ELECTRODE_STATUS, ECG3Profile.ACTION_ELECTRODE_STATUS); + constants.put(ELECTRODE_STATUS, ECG3Profile.ELECTRODE_STATUS); + + constants.put(ACTION_GET_IDPS, ECG3Profile.ACTION_GET_IDPS); + + constants.put(ACTION_ERROR_ECGUSB, ECG3Profile.ACTION_ERROR); + constants.put(ERROR_NUM_ECGUSB, ECG3Profile.ERROR_NUM); + constants.put(ERROR_DESCRIPTION_ECGUSB, ECG3Profile.ERROR_DESCRIPTION); + constants.put(ACTION_GET_ALL_CONNECTED_DEVICES, iHealthBaseModule.ACTION_GET_ALL_CONNECTED_DEVICES); + constants.put(FILEPATH,ECG3Profile.FILE_PATH); + + constants.put(ACTION_SPLICE, ECG3Profile.ACTION_SPLICING_DATA); + constants.put(SPLICE_DATA, ECG3Profile.GET_SPLICING_DATA); + + constants.put(ACTION_GET_CACHE, ECG3Profile.ACTION_GET_CACHE_DATA); + constants.put(GET_CACHE_DATA, ECG3Profile.GET_CACHE_DATA); + + constants.put(ACTION_FILTER, ECG3Profile.ACTION_GET_FILTER_FILES); + constants.put(FILTER_DATA, ECG3Profile.GET_FILTER_DATA); + return constants; + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/ECGUSBModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/ECGUSBModule.java new file mode 100644 index 0000000..94f3451 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/ECGUSBModule.java @@ -0,0 +1,290 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.ReadableArray; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.ECG3Profile; +import com.ihealth.communication.control.ECG3USBControl; +import com.ihealth.communication.manager.iHealthDevicesManager; +import com.facebook.react.bridge.Callback; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +import static com.ihealth.ihealthlibrary.ECGProfileModule.ACTION_FILTER; +import static com.ihealth.ihealthlibrary.ECGProfileModule.ACTION_SPLICE; +import static com.ihealth.ihealthlibrary.ECGProfileModule.ACTION_GET_CACHE; +import static com.ihealth.ihealthlibrary.ECGProfileModule.ACTION_SYNCDATAINFO_ECGUSB; +import static com.ihealth.ihealthlibrary.ECGProfileModule.ACTION_SYNCDATAPROGRESS_ECGUSB; +import static com.ihealth.ihealthlibrary.ECGProfileModule.DATAINFO; +import static com.ihealth.ihealthlibrary.ECGProfileModule.GET_CACHE_DATA; +import static com.ihealth.ihealthlibrary.ECGProfileModule.FILTER_DATA; +import static com.ihealth.ihealthlibrary.ECGProfileModule.SPLICE_DATA; +import static com.ihealth.ihealthlibrary.ECGProfileModule.PROGRESS; +import static com.ihealth.ihealthlibrary.ECGProfileModule.FILEPATH; + + +/** + * Created by zhaoyongguang on 2018/1/22. + */ +@ReactModule(name = "ECGUSBModule") +public class ECGUSBModule extends iHealthBaseModule { + private static final String modelName = "ECGUSBModule"; + private static final String TAG = "ECGUSBModule"; + private static final String mac = "000000000000"; + private static final String EVENT_NOTIFY = "event_notify_ecg3_usb"; + + public ECGUSBModule(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + if (action.equals(ECG3Profile.ACTION_SYNC_OFFLINE_DATA)){ + WritableMap params = Arguments.createMap(); + try { + JSONObject jsonObject = new JSONObject(message); + //split progress + if (jsonObject.getBoolean(ECG3Profile.OFFLINE_DATA_SYNC_FINISH)) { + WritableMap paramsFinish = Arguments.createMap(); + paramsFinish.putString("action", ACTION_SYNCDATAPROGRESS_ECGUSB); + paramsFinish.putDouble(PROGRESS, 100); + paramsFinish.putString("mac", mac); + paramsFinish.putString("type", deviceType); + sendEvent(EVENT_NOTIFY, paramsFinish); + + + params.putString("action", ACTION_SYNCDATAINFO_ECGUSB); + params.putArray(DATAINFO, Utils.getWritableArrayFromJSONArray(jsonObject.getJSONArray(ECG3Profile.OFFLINE_DATAS))); + params.putString("mac", mac); + params.putString("type", deviceType); +// params.putString(FILEPATH, jsonObject.getString(ECG3Profile.FILE_PATH)); + sendEvent(EVENT_NOTIFY, params); + } else { + params.putString("action", ACTION_SYNCDATAPROGRESS_ECGUSB); + params.putDouble(PROGRESS, jsonObject.getDouble(ECG3Profile.OFFLINE_DATA_SYNC_PROGRESS)); + params.putString("mac", mac); + params.putString("type", deviceType); + sendEvent(EVENT_NOTIFY, params); + } + + } catch (Exception e) { + e.printStackTrace(); + } + + return; + } + if (action.equals(ECG3Profile.ACTION_SPLICING_DATA)) { + WritableMap params = Arguments.createMap(); + try { + JSONObject jsonObject = new JSONObject(message); + params.putString("action", ACTION_SPLICE); + params.putMap(SPLICE_DATA, Utils.getMapFromJSONObject(jsonObject.getJSONObject(ECG3Profile.GET_SPLICING_DATA))); + params.putString("mac", mac); + params.putString("type", deviceType); + params.putString(FILEPATH, jsonObject.getString(ECG3Profile.FILE_PATH)); + sendEvent(EVENT_NOTIFY, params); + } catch (Exception e) { + e.printStackTrace(); + } + + return; + } + if (action.equals(ECG3Profile.ACTION_GET_CACHE_DATA)) + { + WritableMap params = Arguments.createMap(); + try { + JSONObject jsonObject = new JSONObject(message); + params.putString("action", ACTION_GET_CACHE); + params.putArray(GET_CACHE_DATA, Utils.getWritableArrayFromJSONArray(jsonObject.getJSONArray(GET_CACHE_DATA))); + params.putString("mac", mac); + params.putString("type", deviceType); + params.putString(FILEPATH, jsonObject.getString(ECG3Profile.FILE_PATH)); + sendEvent(EVENT_NOTIFY, params); + } catch ( + Exception e) + { + e.printStackTrace(); + } + + return; + } + if (action.equals(ECG3Profile.ACTION_GET_FILTER_FILES)) + { + WritableMap params = Arguments.createMap(); + try { + JSONObject jsonObject = new JSONObject(message); + params.putString("action", ACTION_FILTER); + params.putArray(FILTER_DATA, Utils.getWritableArrayFromJSONArray(jsonObject.getJSONArray(ECG3Profile.GET_FILTER_DATA))); + params.putString("mac", mac); + params.putString("type", deviceType); + params.putString(FILEPATH, jsonObject.getString(ECG3Profile.FILE_PATH)); + sendEvent(EVENT_NOTIFY, params); + } catch ( + Exception e) + { + e.printStackTrace(); + } + + return; + } + if (action.equals(ECG3Profile.ACTION_GET_IDPS)){ + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + try { + params.putMap("idps", Utils.getMapFromJSONObject(new JSONObject(message))); + } catch (JSONException e) { + e.printStackTrace(); + } + sendEvent(EVENT_NOTIFY, params); + return; + } + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + /** + * @return the name of this module. This will be the name used to {@code require()} this module + * from javascript. + */ + @Override + public String getName() { + return modelName; + } + + private static ECG3USBControl getControl() { + return iHealthDevicesManager.getInstance().getECG3USBControl(mac); + } + + @ReactMethod + public void syncData() { + ECG3USBControl control = getControl(); + if (control != null) { + control.syncData(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void getIdps() { + ECG3USBControl control = getControl(); + if (control != null) { + control.getIdps(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void deleteData() { + ECG3USBControl control = getControl(); + if (control != null) { + control.deleteAll(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getECG3USBDevices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void spliceData(ReadableArray filesNames) { + ECG3USBControl control = getControl(); + if (control != null && filesNames != null) { + + String[] files = new String[filesNames.size()]; + for (int x = 0; x < filesNames.size(); x++) { + files[x] = filesNames.getString(x); + } + control.spliceWithFileNames(files); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void getCache() { + ECG3USBControl control = getControl(); + if (control != null) { + control.getCacheData(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void deleteCacheData() { + ECG3USBControl control = getControl(); + if (control != null) { + control.deleteCacheData(); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent("Error", params); + } + } + + @ReactMethod + public void getFilterDataByFileName(String dataFileName,String markFileName) { + ECG3USBControl control = getControl(); + if (control != null) { + control.getFilterDataByFileName(dataFileName,markFileName); + } else { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", 400); + sendEvent("Error", params); + } + } + +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS2Module.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS2Module.java new file mode 100755 index 0000000..b637b7e --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS2Module.java @@ -0,0 +1,115 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Hs2Control; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by lixuesong on 16/10/20. + */ +@ReactModule(name = "HS2Module") +public class HS2Module extends iHealthBaseModule { + private static final String modelName = "HS2Module"; + private static final String TAG = "HS2Module"; + + private static final String EVENT_NOTIFY = "event_notify_hs2"; + + public HS2Module(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + private static Hs2Control getControl(String mac) { + return iHealthDevicesManager.getInstance().getHs2Control(mac); + } + + @ReactMethod + public void getOfflineData(String mac) { + Hs2Control control = getControl(mac); + if (control != null) { + control.getOfflineData(); + } else { + Log.e(TAG, "Can not find HS2 Control mac:" + mac); + } + } + + @ReactMethod + public void measureOnline(String mac, int unit, int userId) { + Hs2Control control = getControl(mac); + if (control != null) { + control.measureOnline(unit, userId); + } else { + Log.e(TAG, "Can not find HS2 Control mac:" + mac); + } + } + + @ReactMethod + public void disconnect(String mac) { + Hs2Control hs2Control = getControl(mac); + if (hs2Control != null) { + hs2Control.disconnect(); + } else { + Log.e(TAG, "Can not find HS2 Control mac:" + mac); + } + } + + @ReactMethod + public void getBattery(String mac) { + Hs2Control hs2Control = getControl(mac); + if (hs2Control != null) { + hs2Control.getBattery(); + } else { + Log.e(TAG, "Can not find HS2 Control mac:" + mac); + } + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getHs2Devices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS2SModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS2SModule.java new file mode 100755 index 0000000..f99dfcc --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS2SModule.java @@ -0,0 +1,322 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.ReadableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Hs2sControl; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@ReactModule(name = "HS2SModule") +public class HS2SModule extends iHealthBaseModule { + private static final String modelName = "HS2SModule"; + private static final String TAG = "HS2SModule"; + + private static final String EVENT_NOTIFY = "event_notify_hs2s"; + + public HS2SModule(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + private static Hs2sControl getControl(String mac) { + return iHealthDevicesManager.getInstance().getHs2sControl(mac); + } + + @ReactMethod + public void getDeviceInfo(String mac) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.getDeviceInfo(); + } else { + Log.e(TAG, "Can not find HS2S Control mac:" + mac); + } + } + + @ReactMethod + public void disconnect(String mac) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.disconnect(); + } else { + Log.e(TAG, "Can not find HS2 Control mac:" + mac); + } + } + + @ReactMethod + public void getBattery(String mac) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.getBattery(); + } else { + Log.e(TAG, "Can not find HS2 Control mac:" + mac); + } + } + + @ReactMethod + public void setUnit(String mac, int unit) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.setUnit(unit); + } else { + Log.e(TAG, "Can not find HS2S Control mac:" + mac); + } + } + + @ReactMethod + public void getUserInfo(String mac) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.getUserInfo(); + } else { + Log.e(TAG, "Can not find HS2S Control mac:" + mac); + } + } + + @ReactMethod + public void updateUserInfo(String mac, String id, int createTS, float weight, int age, int height, int gender, int impedance, int bodybuilding) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.createOrUpdateUserInfo(id, weight, gender, age, height, impedance, bodybuilding); + } else { + Log.e(TAG, "Can not find HS2S Control mac:" + mac); + } + } + + @ReactMethod + public void deleteUser(String mac, String id) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.deleteUserInfo(id); + } else { + Log.e(TAG, "Can not find HS2S Control mac:" + mac); + } + } + + @ReactMethod + public void specifyTouristUsers(String mac) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.specifyTouristUsers(); + } else { + Log.e(TAG, "Can not find HS2S Control mac:" + mac); + } + } + + @ReactMethod + public void measure(String mac, int index, String id, int ts, float weight, int age, int height, int gender, int impedance, int bodybuilding) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.specifyOnlineUsers(id, weight, gender, age, height, impedance, bodybuilding); + } else { + Log.e(TAG, "Can not find HS2S Control mac:" + mac); + } + } + + @ReactMethod + public void getMemoryDataCount(String mac, String id) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.getOfflineDataCount(id); + } else { + Log.e(TAG, "Can not find HS2S Control mac:" + mac); + } + } + + @ReactMethod + public void getMemoryData(String mac, String id) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.getOfflineData(id); + } else { + Log.e(TAG, "Can not find HS2S Control mac:" + mac); + } + } + + @ReactMethod + public void deleteMemoryData(String mac, String id) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.deleteOfflineData(id); + } else { + Log.e(TAG, "Can not find HS2S Control mac:" + mac); + } + } + + @ReactMethod + public void getAnonymousMemoryDataCount(String mac) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.getAnonymousDataCount(); + } else { + Log.e(TAG, "Can not find HS2S Control mac:" + mac); + } + } + + @ReactMethod + public void getAnonymousMemoryData(String mac) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.getAnonymousData(); + } else { + Log.e(TAG, "Can not find HS2S Control mac:" + mac); + } + } + + @ReactMethod + public void deleteAnonymousMemoryData(String mac) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.deleteAnonymousData(); + } else { + Log.e(TAG, "Can not find HS2S Control mac:" + mac); + } + } + + @ReactMethod + public void resetDevice(String mac) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.restoreFactorySettings(); + } else { + Log.e(TAG, "Can not find HS2S Control mac:" + mac); + } + } + + @ReactMethod + public void setDeviceLightUp(String mac) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.setBleLight(); + } else { + Log.e(TAG, "Can not find HS2S Control mac:" + mac); + } + } + + @ReactMethod + public void enterHS2SHeartRateMeasurementMode(String mac) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.startHeartRateMode(); + } else { + Log.e(TAG, "Can not find HS2S Control mac:" + mac); + } + } + + @ReactMethod + public void exitHS2SHeartRateMeasurementMode(String mac) { + Hs2sControl control = getControl(mac); + if (control != null) { + control.stopHeartRateMode(); + } else { + Log.e(TAG, "Can not find HS2S Control mac:" + mac); + } + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + Log.i(TAG, "message -> " + message); + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + + if ("action_history_data".equals(action) || "action_anonymous_data".equals(action)) { + message = "{\"history_data\":" + message + "}"; + } + + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + if ("battery_hs".equals(action)) { + params.putString("action", "action_get_battery_hs"); + int battery = params.getInt("battery"); + params.putInt("battery", battery); + + } else if ("action_set_unit_success".equals(action)) { + params.putString("action", "action_set_unit"); + params.putBoolean("result", true); + + } else if ("action_create_or_update_user_info".equals(action)) { + int status = params.getInt("status"); + params.putInt("result", status); + params.putNull("describe"); + params.putNull("status"); + + } else if ("action_delete_user_info".equals(action)) { + int status = params.getInt("status"); + params.putInt("result", status); + params.putNull("describe"); + params.putNull("status"); + + } else if ("action_history_data_num".equals(action)) { + ReadableArray array = params.getArray("history_data_count_array"); + int history_data_count = 0; + if (array != null && array.size() > 0) { + history_data_count = array.getMap(0).getInt("history_data_count"); + } + params.putNull("history_data_count_array"); + params.putNull("history_data_user_count"); + params.putInt("history_data_count", history_data_count); + + } else if ("action_delete_history_data".equals(action)) { + int status = params.getInt("status"); + params.putInt("result", status); + params.putNull("describe"); + params.putNull("status"); + + } else if ("action_delete_anonymous_data".equals(action)) { + int status = params.getInt("status"); + params.putInt("result", status); + params.putNull("describe"); + params.putNull("status"); + + } else if ("action_restore_factory_settings".equals(action)) { + params.putBoolean("result", true); + + } else if ("action_specify_users".equals(action)) { + int status = params.getInt("status"); + params.putInt("result", status); + params.putNull("describe"); + params.putNull("status"); + } + + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getHs2sDevices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS2SProfileModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS2SProfileModule.java new file mode 100755 index 0000000..725d09c --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS2SProfileModule.java @@ -0,0 +1,209 @@ +package com.ihealth.ihealthlibrary; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Hs2sProfile; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +@ReactModule(name = "HS2SProfileModule") +public class HS2SProfileModule extends ReactContextBaseJavaModule { + private static final String modelName = "HS2SProfileModule"; + private static final String TAG = "HS2SProfileModule"; + + private static final String ACTION_ERROR_HS = "ACTION_ERROR_HS"; + private static final String ERROR_NUM_HS = "ERROR_NUM_HS"; + private static final String ERROR_DESCRIPTION_HS = "ERROR_DESCRIPTION_HS"; + + private static final String ACTION_GET_DEVICE_INFO = "ACTION_GET_DEVICE_INFO"; + private static final String HS_USER_COUNT = "HS_USER_COUNT"; + private static final String HS_UNIT_CURRENT = "HS_UNIT_CURRENT"; + + private static final String ACTION_BATTERY_HS = "ACTION_BATTERY_HS"; + private static final String BATTERY_HS = "BATTERY_HS"; + + private static final String ACTION_SET_UNIT_SUCCESS = "ACTION_SET_UNIT_SUCCESS"; + + private static final String ACTION_GET_USER_INFO = "ACTION_GET_USER_INFO"; + private static final String USER_INFO_COUNT = "USER_INFO_COUNT"; + private static final String USER_INFO_ARRAY = "USER_INFO_ARRAY"; + private static final String USER_INFO_USER_ID = "USER_INFO_USER_ID"; + private static final String USER_INFO_CREATE_TIME = "USER_INFO_CREATE_TIME"; + private static final String USER_INFO_WEIGHT = "USER_INFO_WEIGHT"; + private static final String USER_INFO_GENDER = "USER_INFO_GENDER"; + private static final String USER_INFO_AGE = "USER_INFO_AGE"; + private static final String USER_INFO_HEIGHT = "USER_INFO_HEIGHT"; + private static final String USER_INFO_IMPEDANCE = "USER_INFO_IMPEDANCE"; + private static final String USER_INFO_BODYBUILDING = "USER_INFO_BODYBUILDING"; + + private static final String ACTION_CREATE_OR_UPDATE_USER_INFO = "ACTION_CREATE_OR_UPDATE_USER_INFO"; + private static final String OPERATION_STATUS = "OPERATION_STATUS"; + private static final String OPERATION_DESCRIBE = "OPERATION_DESCRIBE"; + + private static final String ACTION_DELETE_USER_INFO = "ACTION_DELETE_USER_INFO"; + + private static final String ACTION_SPECIFY_USERS = "ACTION_SPECIFY_USERS"; + + private static final String ACTION_MEASURE_FINISH_AT_CRITICAL = "ACTION_MEASURE_FINISH_AT_CRITICAL"; + + private static final String ACTION_HISTORY_DATA_NUM = "ACTION_HISTORY_DATA_NUM"; + private static final String HISTORY_DATA_USER_COUNT = "HISTORY_DATA_USER_COUNT"; + private static final String HISTORY_DATA_COUNT_ARRAY = "HISTORY_DATA_COUNT_ARRAY"; + private static final String HISTORY_DATA_COUNT = "HISTORY_DATA_COUNT"; + + private static final String ACTION_HISTORY_DATA = "ACTION_HISTORY_DATA"; + private static final String DATA_ID = "DATA_ID"; + private static final String DATA_WEIGHT = "DATA_WEIGHT"; + private static final String DATA_IMPEDANCE = "DATA_IMPEDANCE"; + private static final String DATA_USER_NUM = "DATA_USER_NUM"; + private static final String DATA_GENDER = "DATA_GENDER"; + private static final String DATA_AGE = "DATA_AGE"; + private static final String DATA_HEIGHT = "DATA_HEIGHT"; + private static final String DATA_MEASURE_TIME = "DATA_MEASURE_TIME"; + private static final String DATA_RIGHT_TIME = "DATA_RIGHT_TIME"; + private static final String DATA_BODYBUILDING = "DATA_BODYBUILDING"; + private static final String DATA_INSTRUCTION_TYPE = "DATA_INSTRUCTION_TYPE"; + private static final String DATA_BODY_FIT_PERCENTAGE = "DATA_BODY_FIT_PERCENTAGE"; + private static final String DATA_MUSCLE_MASS = "DATA_MUSCLE_MASS"; + private static final String DATA_BONE_SALT_CONTENT = "DATA_BONE_SALT_CONTENT"; + private static final String DATA_BODY_WATER_RATE = "DATA_BODY_WATER_RATE"; + private static final String DATA_PROTEIN_RATE = "DATA_PROTEIN_RATE"; + private static final String DATA_SKELETAL_MUSCLE_MASS = "DATA_SKELETAL_MUSCLE_MASS"; + private static final String DATA_BASAL_METABOLIC_RATE = "DATA_BASAL_METABOLIC_RATE"; + private static final String DATA_VISCERAL_FAT_GRADE = "DATA_VISCERAL_FAT_GRADE"; + private static final String DATA_PHYSICAL_AGE = "DATA_PHYSICAL_AGE"; + private static final String DATA_BODY_MASS_INDEX = "DATA_BODY_MASS_INDEX"; + + private static final String DATA_STANDARD_WEIGHT = "DATA_STANDARD_WEIGHT"; + private static final String DATA_WEIGHT_CONTROL = "DATA_WEIGHT_CONTROL"; + private static final String DATA_MUSCLE_CONTROL = "DATA_MUSCLE_CONTROL"; + private static final String DATA_FAT_CONTROL = "DATA_FAT_CONTROL"; + private static final String DATA_FAT_WEIGHT = "DATA_FAT_WEIGHT"; + private static final String DATA_DE_FAT_WEIGHT = "DATA_DE_FAT_WEIGHT"; + + private static final String ACTION_ONLINE_RESULT = "ACTION_ONLINE_RESULT"; + private static final String ACTION_DELETE_HISTORY_DATA = "ACTION_DELETE_HISTORY_DATA"; + + private static final String ACTION_ANONYMOUS_DATA_NUM = "ACTION_ANONYMOUS_DATA_NUM"; + private static final String ANONYMOUS_DATA_COUNT = "ANONYMOUS_DATA_COUNT"; + + private static final String ACTION_DELETE_ANONYMOUS_DATA = "ACTION_DELETE_ANONYMOUS_DATA"; + private static final String ACTION_ONLINE_REAL_TIME_WEIGHT = "ACTION_ONLINE_REAL_TIME_WEIGHT"; + private static final String ACTION_BODY_FAT_RESULT = "ACTION_BODY_FAT_RESULT"; + private static final String DATA_BODY_FAT_RESULT = "DATA_BODY_FAT_RESULT"; + + private static final String ACTION_RESTORE_FACTORY_SETTINGS = "ACTION_RESTORE_FACTORY_SETTINGS"; + + private static final String ACTION_GET_ALL_CONNECTED_DEVICES = "ACTION_GET_ALL_CONNECTED_DEVICES"; + + private static final String ACTION_HS2S_LightUp_DEVICE = "ACTION_HS2S_LightUp_DEVICE"; + private static final String HS2S_DEVICE_STATUS = "HS2S_DEVICE_STATUS"; + private static final String ACTION_HS2S_MEASURE_HEARTRATE = "ACTION_HS2S_MEASURE_HEARTRATE"; + private static final String ACTION_HS2S_EXIT_MEASURE_HEARTRATE_STATUS = "ACTION_HS2S_EXIT_MEASURE_HEARTRATE_STATUS"; + private static final String HS2S_MEASURE_HEARTRATE_RESULT = "HS2S_MEASURE_HEARTRATE_RESULT"; + + public HS2SProfileModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Nullable + @Override + public Map getConstants() { + Map constants = new HashMap<>(); + constants.put(ACTION_ERROR_HS, Hs2sProfile.ACTION_ERROR_HS); + constants.put(ERROR_NUM_HS, Hs2sProfile.ERROR_NUM_HS); + constants.put(ERROR_DESCRIPTION_HS, Hs2sProfile.ERROR_DESCRIPTION_HS); + + constants.put(ACTION_GET_DEVICE_INFO, Hs2sProfile.ACTION_GET_DEVICE_INFO); + constants.put(HS_USER_COUNT, Hs2sProfile.HS_USER_COUNT); + constants.put(HS_UNIT_CURRENT, Hs2sProfile.HS_UNIT_CURRENT); + + constants.put(ACTION_BATTERY_HS, Hs2sProfile.ACTION_BATTERY_HS); + constants.put(BATTERY_HS, Hs2sProfile.BATTERY_HS); + + constants.put(ACTION_SET_UNIT_SUCCESS, Hs2sProfile.ACTION_SET_UNIT_SUCCESS); + + constants.put(ACTION_GET_USER_INFO, Hs2sProfile.ACTION_GET_USER_INFO); + constants.put(USER_INFO_COUNT, Hs2sProfile.USER_INFO_COUNT); + constants.put(USER_INFO_ARRAY, Hs2sProfile.USER_INFO_ARRAY); + constants.put(USER_INFO_USER_ID, Hs2sProfile.USER_INFO_USER_ID); + constants.put(USER_INFO_CREATE_TIME, Hs2sProfile.USER_INFO_CREATE_TIME); + constants.put(USER_INFO_WEIGHT, Hs2sProfile.USER_INFO_WEIGHT); + constants.put(USER_INFO_GENDER, Hs2sProfile.USER_INFO_GENDER); + constants.put(USER_INFO_AGE, Hs2sProfile.USER_INFO_AGE); + constants.put(USER_INFO_HEIGHT, Hs2sProfile.USER_INFO_HEIGHT); + constants.put(USER_INFO_IMPEDANCE, Hs2sProfile.USER_INFO_IMPEDANCE); + constants.put(USER_INFO_BODYBUILDING, Hs2sProfile.USER_INFO_BODYBUILDING); + + constants.put(ACTION_CREATE_OR_UPDATE_USER_INFO, Hs2sProfile.ACTION_CREATE_OR_UPDATE_USER_INFO); + constants.put(OPERATION_STATUS, Hs2sProfile.OPERATION_STATUS); + constants.put(OPERATION_DESCRIBE, Hs2sProfile.OPERATION_DESCRIBE); + + constants.put(ACTION_DELETE_USER_INFO, Hs2sProfile.ACTION_DELETE_USER_INFO); + constants.put(ACTION_SPECIFY_USERS, Hs2sProfile.ACTION_SPECIFY_USERS); + constants.put(ACTION_MEASURE_FINISH_AT_CRITICAL, Hs2sProfile.ACTION_MEASURE_FINISH_AT_CRITICAL); + + constants.put(ACTION_HISTORY_DATA_NUM, Hs2sProfile.ACTION_HISTORY_DATA_NUM); + constants.put(HISTORY_DATA_USER_COUNT, Hs2sProfile.HISTORY_DATA_USER_COUNT); + constants.put(HISTORY_DATA_COUNT_ARRAY, Hs2sProfile.HISTORY_DATA_COUNT_ARRAY); + constants.put(HISTORY_DATA_COUNT, Hs2sProfile.HISTORY_DATA_COUNT); + + constants.put(ACTION_HISTORY_DATA, Hs2sProfile.ACTION_HISTORY_DATA); + constants.put(DATA_ID, Hs2sProfile.DATA_ID); + constants.put(DATA_WEIGHT, Hs2sProfile.DATA_WEIGHT); + constants.put(DATA_IMPEDANCE, Hs2sProfile.DATA_IMPEDANCE); + constants.put(DATA_USER_NUM, Hs2sProfile.DATA_USER_NUM); + constants.put(DATA_GENDER, Hs2sProfile.DATA_GENDER); + constants.put(DATA_AGE, Hs2sProfile.DATA_AGE); + constants.put(DATA_HEIGHT, Hs2sProfile.DATA_HEIGHT); + constants.put(DATA_MEASURE_TIME, Hs2sProfile.DATA_MEASURE_TIME); + constants.put(DATA_RIGHT_TIME, Hs2sProfile.DATA_RIGHT_TIME); + constants.put(DATA_BODYBUILDING, Hs2sProfile.DATA_BODYBUILDING); + constants.put(DATA_INSTRUCTION_TYPE, Hs2sProfile.DATA_INSTRUCTION_TYPE); + constants.put(DATA_BODY_FIT_PERCENTAGE, Hs2sProfile.DATA_BODY_FIT_PERCENTAGE); + constants.put(DATA_MUSCLE_MASS, Hs2sProfile.DATA_MUSCLE_MASS); + constants.put(DATA_BONE_SALT_CONTENT, Hs2sProfile.DATA_BONE_SALT_CONTENT); + constants.put(DATA_BODY_WATER_RATE, Hs2sProfile.DATA_BODY_WATER_RATE); + constants.put(DATA_SKELETAL_MUSCLE_MASS, Hs2sProfile.DATA_SKELETAL_MUSCLE_MASS); + constants.put(DATA_BASAL_METABOLIC_RATE, Hs2sProfile.DATA_BASAL_METABOLIC_RATE); + constants.put(DATA_VISCERAL_FAT_GRADE, Hs2sProfile.DATA_VISCERAL_FAT_GRADE); + constants.put(DATA_PHYSICAL_AGE, Hs2sProfile.DATA_PHYSICAL_AGE); + constants.put(DATA_BODY_MASS_INDEX, Hs2sProfile.DATA_BODY_MASS_INDEX); + constants.put(DATA_STANDARD_WEIGHT, Hs2sProfile.DATA_STANDARD_WEIGHT); + constants.put(DATA_WEIGHT_CONTROL, Hs2sProfile.DATA_WEIGHT_CONTROL); + constants.put(DATA_MUSCLE_CONTROL, Hs2sProfile.DATA_MUSCLE_CONTROL); + constants.put(DATA_FAT_CONTROL, Hs2sProfile.DATA_FAT_CONTROL); + constants.put(DATA_FAT_WEIGHT, Hs2sProfile.DATA_FAT_WEIGHT); + constants.put(DATA_DE_FAT_WEIGHT, Hs2sProfile.DATA_DE_FAT_WEIGHT); + + constants.put(ACTION_ONLINE_RESULT, Hs2sProfile.ACTION_ONLINE_RESULT); + constants.put(ACTION_DELETE_HISTORY_DATA, Hs2sProfile.ACTION_DELETE_HISTORY_DATA); + + constants.put(ACTION_ANONYMOUS_DATA_NUM, Hs2sProfile.ACTION_ANONYMOUS_DATA_NUM); + constants.put(ANONYMOUS_DATA_COUNT, Hs2sProfile.ANONYMOUS_DATA_COUNT); + + constants.put(ACTION_DELETE_ANONYMOUS_DATA, Hs2sProfile.ACTION_DELETE_ANONYMOUS_DATA); + constants.put(ACTION_ONLINE_REAL_TIME_WEIGHT, Hs2sProfile.ACTION_ONLINE_REAL_TIME_WEIGHT); + constants.put(ACTION_BODY_FAT_RESULT, Hs2sProfile.ACTION_BODY_FAT_RESULT); + constants.put(DATA_BODY_FAT_RESULT, Hs2sProfile.DATA_BODY_FAT_RESULT); + + constants.put(ACTION_RESTORE_FACTORY_SETTINGS, Hs2sProfile.ACTION_RESTORE_FACTORY_SETTINGS); + constants.put(ACTION_GET_ALL_CONNECTED_DEVICES, iHealthBaseModule.ACTION_GET_ALL_CONNECTED_DEVICES); + + constants.put(ACTION_HS2S_LightUp_DEVICE, Hs2sProfile.ACTION_SET_BLE_LIGHT); + constants.put(HS2S_DEVICE_STATUS, Hs2sProfile.OPERATION_STATUS); + constants.put(ACTION_HS2S_MEASURE_HEARTRATE, Hs2sProfile.ACTION_START_HEARTRATE_MEASURE); + constants.put(ACTION_HS2S_EXIT_MEASURE_HEARTRATE_STATUS, Hs2sProfile.ACTION_STOP_HEARTRATE_MEASURE); + constants.put(HS2S_MEASURE_HEARTRATE_RESULT, Hs2sProfile.DATA_HEARTRATE); + return constants; + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS4SModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS4SModule.java new file mode 100755 index 0000000..e7b8469 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS4SModule.java @@ -0,0 +1,129 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Hs4Control; +import com.ihealth.communication.control.Hs4sControl; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by lixuesong on 16/10/20. + */ +@ReactModule(name = "HS4SModule") +public class HS4SModule extends iHealthBaseModule { + private static final String modelName = "HS4SModule"; + private static final String TAG = "HS4SModule"; + + private static final String EVENT_NOTIFY = "event_notify_hs4s"; + + public HS4SModule(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + private static Hs4Control getHs4Control(String mac) { + return iHealthDevicesManager.getInstance().getHs4Control(mac); + } + + private static Hs4sControl getHs4sControl(String mac) { + return iHealthDevicesManager.getInstance().getHs4sControl(mac); + } + + @ReactMethod + public void getOfflineData(String mac) { + Hs4Control hs4Control = getHs4Control(mac); + Hs4sControl hs4sControl = getHs4sControl(mac); + if (hs4Control != null) { + hs4Control.getOfflineData(); + + } else if (hs4sControl != null){ + hs4sControl.getOfflineData(); + + } else { + Log.e(TAG, "Can not find HS4/HS4S Control mac:" + mac); + } + } + + @ReactMethod + public void measureOnline(String mac, int unit, int userId) { + Hs4Control hs4Control = getHs4Control(mac); + Hs4sControl hs4sControl = getHs4sControl(mac); + if (hs4Control != null) { + hs4Control.measureOnline(unit, userId); + + } else if (hs4sControl != null) { + hs4sControl.measureOnline(unit, userId); + + } else { + Log.e(TAG, "Can not find HS4/HS4S Control mac:" + mac); + } + } + + @ReactMethod + public void disconnect(String mac) { + Hs4Control hs4Control = getHs4Control(mac); + Hs4sControl hs4sControl = getHs4sControl(mac); + if (hs4Control != null) { + hs4Control.disconnect(); + + } else if (hs4sControl != null) { + hs4sControl.disconnect(); + + } else { + Log.e(TAG, "Can not find HS4/HS4S Control mac:" + mac); + } + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getHs4Devices(); + List device2 = iHealthDevicesManager.getInstance().getHs4sDevices(); + devices.addAll(device2); + + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS6Module.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS6Module.java new file mode 100755 index 0000000..c0da5b2 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS6Module.java @@ -0,0 +1,134 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.HS6Control; +import com.ihealth.communication.manager.iHealthDeviceHs6Callback; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by lixuesong on 16/10/20. + */ +@ReactModule(name = "HS6Module") +public class HS6Module extends iHealthBaseModule { + private static final String modelName = "HS6Module"; + private static final String TAG = "HS6Module"; + + private static final String EVENT_NOTIFY = "event_notify_hs6"; + private ReactApplicationContext mContext; + private HS6Control mHS6control; + + public HS6Module(ReactApplicationContext reactContext) { + super(TAG, reactContext); + this.mContext = reactContext; + } + + @Override + public String getName() { + return modelName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + @ReactMethod + public void init(String userName) { + mHS6control = new HS6Control(userName, mContext, iHealthDevicesManager.TYPE_HS6, mIHealthDeviceHs6Callback); + } + + @ReactMethod + public void setWifi(String ssid, String password) { + if (mHS6control != null) { + mHS6control.setWifi(ssid, password); + } else { + Log.e(TAG, "Please call init(String username) method first"); + } + } + + @ReactMethod + public void bindDeviceHS6(String birthday, float weight, int height, int isSporter, int gender, String serialNumber) { + if (mHS6control != null) { + mHS6control.bindDeviceHS6(birthday, weight, height, isSporter, gender, serialNumber); + } else { + Log.e(TAG, "Please call init(String username) method first"); + } + } + + @ReactMethod + public void unBindDeviceHS6(String serialNumber) { + if (mHS6control != null) { + mHS6control.unBindDeviceHS6(serialNumber); + } else { + Log.e(TAG, "Please call init(String username) method first"); + } + } + + @ReactMethod + public void getToken(String clientId, String clientSecret, String username, String clientPara) { + if (mHS6control != null) { + mHS6control.getToken(clientId, clientSecret, username, clientPara); + } else { + Log.e(TAG, "Please call init(String username) method first"); + } + } + + @ReactMethod + public void setUnit(String username, int unitType) { + if (mHS6control != null) { + mHS6control.setUnit(username, unitType); + } else { + Log.e(TAG, "Please call init(String username) method first"); + } + } + + @ReactMethod + public void getCloudData(String clientId, String clientSecret, String username, double downloadTS, double pageSize) { + if (mHS6control != null) { + mHS6control.getDataByMeasuretimeFromCloud(clientId, clientSecret, username, (long) downloadTS, (long) pageSize); + } else { + Log.e(TAG, "Please call init(String username) method first"); + } + } + + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + private iHealthDeviceHs6Callback mIHealthDeviceHs6Callback = new iHealthDeviceHs6Callback() { + public void setWifiNotify(String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("deviceType", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + public void onNotify(String mac, String deviceType, String action, String message) { + handleNotify(mac, deviceType, action, message); + } + }; +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS6ProfileModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS6ProfileModule.java new file mode 100755 index 0000000..2b3a77d --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HS6ProfileModule.java @@ -0,0 +1,93 @@ +package com.ihealth.ihealthlibrary; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.HS6Control; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +/** + * Created by lixuesong on 15/11/2016. + */ +@ReactModule(name = "HS6ProfileModule") +public class HS6ProfileModule extends ReactContextBaseJavaModule { + private static final String modelName = "HS6ProfileModule"; + private static final String TAG = "HS6ProfileModule"; + + private static final String ACTION_HS6_SETWIFI = "ACTION_HS6_SETWIFI"; + private static final String SETWIFI_RESULT = "SETWIFI_RESULT"; + + private static final String ACTION_HS6_BIND = "ACTION_HS6_BIND"; + private static final String HS6_BIND_EXTRA = "HS6_BIND_EXTRA"; + private static final String BIND_HS6_RESULT = "BIND_HS6_RESULT"; + private static final String HS6_MODEL = "HS6_MODEL"; + private static final String HS6_POSITION = "HS6_POSITION"; + private static final String HS6_SETTED_WIFI = "HS6_SETTED_WIFI"; + + private static final String ACTION_HS6_UNBIND = "ACTION_HS6_UNBIND"; + private static final String HS6_UNBIND_RESULT = "HS6_UNBIND_RESULT"; + + private static final String ACTION_HS6_GET_TOKEN = "ACTION_HS6_GET_TOKEN"; + private static final String GET_TOKEN_RESULT = "GET_TOKEN_RESULT"; + + private static final String ACTION_HS6_SET_UNIT = "ACTION_HS6_SET_UNIT"; + private static final String SET_UNIT_RESULT = "SET_UNIT_RESULT"; + + private static final String ACTION_HS6_ERROR = "ACTION_HS6_ERROR"; + private static final String HS6_ERROR = "HS6_ERROR"; + + + public static final String ACTION_HS6_GET_DATA = "ACTION_HS6_GET_DATA"; + + public static final String DATA_RESULT = "DATA_RESULT"; + + public static final String DATA_DOWNLOAD_TS = "DATA_DOWNLOAD_TS"; + public static final String DATA_LEFTNUMBER = "DATA_LEFTNUMBER"; + + + public HS6ProfileModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Nullable + @Override + public Map getConstants() { + Map constants = new HashMap<>(); + constants.put(ACTION_HS6_SETWIFI, HS6Control.ACTION_HS6_SETWIFI); + constants.put(SETWIFI_RESULT, HS6Control.SETWIFI_RESULT); + + constants.put(ACTION_HS6_BIND, HS6Control.ACTION_HS6_BIND); + constants.put(HS6_BIND_EXTRA, HS6Control.HS6_BIND_EXTRA); + constants.put(BIND_HS6_RESULT, HS6Control.BIND_HS6_RESULT); + constants.put(HS6_MODEL, HS6Control.HS6_MODEL); + constants.put(HS6_POSITION, HS6Control.HS6_POSITION); + constants.put(HS6_SETTED_WIFI, HS6Control.HS6_SETTED_WIFI); + + constants.put(ACTION_HS6_UNBIND, HS6Control.ACTION_HS6_UNBIND); + constants.put(HS6_UNBIND_RESULT, HS6Control.HS6_UNBIND_RESULT); + + constants.put(ACTION_HS6_GET_TOKEN, HS6Control.ACTION_HS6_GET_TOKEN); + constants.put(GET_TOKEN_RESULT, HS6Control.GET_TOKEN_RESULT); + + constants.put(ACTION_HS6_SET_UNIT, HS6Control.ACTION_HS6_SET_UNIT); + constants.put(SET_UNIT_RESULT, HS6Control.SET_UNIT_RESULT); + + constants.put(ACTION_HS6_ERROR, HS6Control.ACTION_HS6_ERROR); + constants.put(HS6_ERROR, HS6Control.HS6_ERROR); + constants.put(ACTION_HS6_GET_DATA, HS6Control.ACTION_HS6_GET_DATA); + constants.put(DATA_RESULT, HS6Control.DATA_RESULT); + constants.put(DATA_DOWNLOAD_TS, HS6Control.DATA_DOWNLOAD_TS); + constants.put(DATA_LEFTNUMBER, HS6Control.DATA_LEFTNUMBER); + + return constants; + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HSProfileModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HSProfileModule.java new file mode 100755 index 0000000..75c7930 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/HSProfileModule.java @@ -0,0 +1,92 @@ +package com.ihealth.ihealthlibrary; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.HsProfile; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +/** + * Created by lixuesong on 15/11/2016. + */ +@ReactModule(name = "HSProfileModule") +public class HSProfileModule extends ReactContextBaseJavaModule { + private static final String modelName = "HSProfileModule"; + private static final String TAG = "HSProfileModule"; + + private static final String ACTION_LIVEDATA_HS = "ACTION_LIVEDATA_HS"; + private static final String LIVEDATA_HS = "LIVEDATA_HS"; + + private static final String ACTION_ONLINE_RESULT_HS = "ACTION_ONLINE_RESULT_HS"; + private static final String DATAID = "DATAID"; + private static final String WEIGHT_HS = "WEIGHT_HS"; + private static final String FAT_HS = "FAT_HS"; + private static final String WATER_HS = "WATER_HS"; + private static final String MUSCLE_HS = "MUSCLE_HS"; + private static final String SKELETON_HS = "SKELETON_HS"; + private static final String FATELEVEL_HS = "FATELEVEL_HS"; + private static final String DCI_HS = "DCI_HS"; + + private static final String ACTION_HISTORICAL_DATA_HS = "ACTION_HISTORICAL_DATA_HS"; + private static final String HISTORDATA_HS = "HISTORDATA_HS"; + private static final String MEASUREMENT_DATE_HS = "MEASUREMENT_DATE_HS"; + + private static final String ACTION_HISTORICAL_DATA_COMPLETE_HS = "ACTION_HISTORICAL_DATA_COMPLETE_HS"; + + private static final String ACTION_NO_HISTORICALDATA = "ACTION_NO_HISTORICALDATA"; + + private static final String ACTION_ERROR_HS = "ACTION_ERROR_HS"; + private static final String ERROR_NUM_HS = "ERROR_NUM_HS"; + private static final String ERROR_ID_ILLEGAL_ARGUMENT = "ERROR_ID_ILLEGAL_ARGUMENT"; + private static final String ERROR_ID_WIFI_DISABLED = "ERROR_ID_WIFI_DISABLED"; + private static final String ERROR_DESCRIPTION_HS = "ERROR_DESCRIPTION_HS"; + private static final String ACTION_GET_ALL_CONNECTED_DEVICES = "ACTION_GET_ALL_CONNECTED_DEVICES"; + + + public HSProfileModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Nullable + @Override + public Map getConstants() { + Map constants = new HashMap<>(); + constants.put(ACTION_LIVEDATA_HS, HsProfile.ACTION_LIVEDATA_HS); + constants.put(LIVEDATA_HS, HsProfile.LIVEDATA_HS); + + constants.put(ACTION_ONLINE_RESULT_HS, HsProfile.ACTION_ONLINE_RESULT_HS); + constants.put(HISTORDATA_HS, HsProfile.HISTORDATA_HS); + constants.put(DATAID, HsProfile.DATAID); + constants.put(WEIGHT_HS, HsProfile.WEIGHT_HS); + constants.put(FAT_HS, HsProfile.FAT_HS); + constants.put(WATER_HS, HsProfile.WATER_HS); + constants.put(MUSCLE_HS, HsProfile.MUSCLE_HS); + constants.put(SKELETON_HS, HsProfile.SKELETON_HS); + constants.put(FATELEVEL_HS, HsProfile.FATELEVEL_HS); + constants.put(DCI_HS, HsProfile.DCI_HS); + + constants.put(ACTION_HISTORICAL_DATA_HS, HsProfile.ACTION_HISTORICAL_DATA_HS); + constants.put(MEASUREMENT_DATE_HS, HsProfile.MEASUREMENT_DATE_HS); + + constants.put(ACTION_HISTORICAL_DATA_COMPLETE_HS, HsProfile.ACTION_HISTORICAL_DATA_COMPLETE_HS); + + constants.put(ACTION_NO_HISTORICALDATA, HsProfile.ACTION_NO_HISTORICALDATA); + + constants.put(ACTION_ERROR_HS, HsProfile.ACTION_ERROR_HS); + constants.put(ERROR_NUM_HS, HsProfile.ERROR_NUM_HS); + constants.put(ERROR_ID_ILLEGAL_ARGUMENT, HsProfile.ERROR_ID_ILLEGAL_ARGUMENT); + constants.put(ERROR_ID_WIFI_DISABLED, HsProfile.ERROR_ID_WIFI_DISABLED); + constants.put(ERROR_DESCRIPTION_HS, HsProfile.ERROR_DESCRIPTION_HS); + constants.put(ACTION_GET_ALL_CONNECTED_DEVICES, iHealthBaseModule.ACTION_GET_ALL_CONNECTED_DEVICES); + return constants; + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/NT13BModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/NT13BModule.java new file mode 100644 index 0000000..ab26294 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/NT13BModule.java @@ -0,0 +1,98 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.NT13BControl; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@ReactModule(name = "NT13BModule") +public class NT13BModule extends iHealthBaseModule{ + + private static final String modelName = "NT13BModule"; + private static final String TAG = "NT13BModule"; + + private static final String EVENT_NOTIFY = "event_notify_nt13b"; + + public NT13BModule(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + @ReactMethod + public void measure(String mac) { + NT13BControl nt13bControl = getNt13bControl(mac); + if (nt13bControl != null) { + nt13bControl.getMeasurement(); + } + } + + @ReactMethod + public void disconnect(String mac) { + NT13BControl nt13bControl = getNt13bControl(mac); + if (nt13bControl != null) { + nt13bControl.disconnect(); + } + } + + private NT13BControl getNt13bControl(String mac) { + NT13BControl nt13bControl = iHealthDevicesManager.getInstance().getNT13BControl(mac); + if (nt13bControl == null) { + senErrMessage(400); + } + return nt13bControl; + } + + private void senErrMessage(int errId) { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", errId); + sendEvent(EVENT_NOTIFY, params); + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getNT13BDevices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/NT13BProfileModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/NT13BProfileModule.java new file mode 100644 index 0000000..8160b90 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/NT13BProfileModule.java @@ -0,0 +1,52 @@ +package com.ihealth.ihealthlibrary; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.NT13BProfile; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +@ReactModule(name = "NT13BProfileModule") +public class NT13BProfileModule extends ReactContextBaseJavaModule { + + private static final String modelName = "NT13BProfileModule"; + private static final String TAG = "NT13BProfileModule"; + + private static final String ACTION_MEASUREMENT_RESULT = "ACTION_MEASUREMENT_RESULT"; + private static final String UNIT_FLAG = "unit_flag"; + private static final String RESULT = "result"; + private static final String TS_FLAG = "ts_flag"; + private static final String TS = "ts"; + private static final String THERMOMETER_TYPE_FLAG = "thermometer_type_flag"; + private static final String THERMOMETER_TYPE = "thermometer_type"; + + private static final String ACTION_GET_ALL_CONNECTED_DEVICES = "ACTION_GET_ALL_CONNECTED_DEVICES"; + + public NT13BProfileModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Nullable + @Override + public Map getConstants() { + Map constants = new HashMap<>(); + constants.put(ACTION_MEASUREMENT_RESULT, NT13BProfile.ACTION_MEASUREMENT_RESULT); + constants.put(UNIT_FLAG, NT13BProfile.UNIT_FLAG); + constants.put(RESULT, NT13BProfile.RESULT); + constants.put(TS_FLAG, NT13BProfile.TS_FLAG); + constants.put(TS, NT13BProfile.TS); + constants.put(THERMOMETER_TYPE_FLAG, NT13BProfile.THERMOMETER_TYPE_FLAG); + constants.put(THERMOMETER_TYPE, NT13BProfile.THERMOMETER_TYPE); + constants.put(ACTION_GET_ALL_CONNECTED_DEVICES, iHealthBaseModule.ACTION_GET_ALL_CONNECTED_DEVICES); + return constants; + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PO1Module.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PO1Module.java new file mode 100644 index 0000000..3213531 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PO1Module.java @@ -0,0 +1,99 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Po1Control; +import com.ihealth.communication.control.Pt3sbtControl; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@ReactModule(name = "PO1Module") +public class PO1Module extends iHealthBaseModule { + + private static final String modelName = PO1Module.class.getSimpleName(); + private static final String TAG = PO1Module.class.getSimpleName(); + + private static final String EVENT_NOTIFY = "event_notify_po1"; + + public PO1Module(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + @ReactMethod + public void getBattery(String mac) { + Po1Control po1Control = getPo1Control(mac); + if (po1Control != null) { + po1Control.getBattery(); + } + } + + @ReactMethod + public void disconnect(String mac) { + Po1Control po1Control = getPo1Control(mac); + if (po1Control != null) { + po1Control.disconnect(); + } + } + + private Po1Control getPo1Control(String mac) { + Po1Control po1Control = iHealthDevicesManager.getInstance().getPo1Device(mac); + if (po1Control == null) { + senErrMessage(400); + } + return po1Control; + } + + private void senErrMessage(int errId) { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", errId); + sendEvent(EVENT_NOTIFY, params); + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getPo1Devices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PO1ProfileModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PO1ProfileModule.java new file mode 100644 index 0000000..8860361 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PO1ProfileModule.java @@ -0,0 +1,73 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Po1Profile; +import com.ihealth.communication.control.PoProfile; +import com.ihealth.communication.control.Pt3sbtControl; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Nullable; + +@ReactModule(name = "PO1ProfileModule") +public class PO1ProfileModule extends ReactContextBaseJavaModule { + + private static final String modelName = PO1ProfileModule.class.getSimpleName(); + private static final String TAG = PO1ProfileModule.class.getSimpleName(); + + private static final String ACTION_BO_MEASUREMENT = "ACTION_BO_MEASUREMENT"; + private static final String ACTION_ERROR_PO1 = "ACTION_ERROR_PO1"; + private static final String ACTION_GET_BATTERY = "ACTION_GET_BATTERY"; + private static final String ACTION_GET_ALL_CONNECTED_DEVICES = "ACTION_GET_ALL_CONNECTED_DEVICES"; + + private static final String ERROR_ID = "ERROR_ID"; + private static final String ERROR_DESCRIPTION = "ERROR_DESCRIPTION"; + private static final String BATTERY = "BATTERY"; + private static final String STATUS = "STATUS"; + + private static final String BLOOD_OXYGEN = "PO1_BLOOD_OXYGEN"; + private static final String PULSE = "PO1_PULSE"; + private static final String PULSE_FORCE = "PO1_PULSE_FORCE"; + private static final String PI = "PO1_PI"; + private static final String WAVE = "PO1_WAVE"; + + public PO1ProfileModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Nullable + @Override + public Map getConstants() { + Map constants = new HashMap<>(); + constants.put(ACTION_BO_MEASUREMENT, Po1Profile.ACTION_BO_MEASUREMENT); + constants.put(ACTION_GET_BATTERY, Po1Profile.ACTION_GET_BATTERY); + constants.put(ACTION_ERROR_PO1, Po1Profile.ACTION_ERROR_PO1); + constants.put(ERROR_ID, Po1Profile.ERROR_ID); + constants.put(ERROR_DESCRIPTION, Po1Profile.ERROR_DESCRIPTION); + constants.put(BATTERY, Po1Profile.BATTERY); + constants.put(STATUS, Po1Profile.STATUS); + constants.put(BLOOD_OXYGEN, Po1Profile.BLOOD_OXYGEN); + constants.put(PULSE, Po1Profile.PULSE); + constants.put(PULSE_FORCE, Po1Profile.PULSE_FORCE); + constants.put(PI, Po1Profile.PI); + constants.put(WAVE, Po1Profile.WAVE); + constants.put(ACTION_GET_ALL_CONNECTED_DEVICES, iHealthBaseModule.ACTION_GET_ALL_CONNECTED_DEVICES); + return constants; + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PO3Module.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PO3Module.java new file mode 100755 index 0000000..2db176c --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PO3Module.java @@ -0,0 +1,115 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Po3Control; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by lixuesong on 2016/11/21. + */ +@ReactModule(name = "PO3Module") +public class PO3Module extends iHealthBaseModule { + private static final String modelName = "PO3Module"; + private static final String TAG = "PO3Module"; + + private static final String EVENT_NOTIFY = "event_notify_po3"; + + public PO3Module(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + private static Po3Control getControl(String mac) { + return iHealthDevicesManager.getInstance().getPo3Control(mac); + } + + @ReactMethod + public void getBattery(String mac) { + Po3Control po3Control = getControl(mac); + if (po3Control != null) { + po3Control.getBattery(); + } else { + Log.e(TAG, "Can not find PO3 Control mac:" + mac); + } + } + + @ReactMethod + public void startMeasure(String mac) { + Po3Control po3Control = getControl(mac); + if (po3Control != null) { + po3Control.startMeasure(); + } else { + Log.e(TAG, "Can not find PO3 Control mac:" + mac); + } + } + + @ReactMethod + public void getHistoryData(String mac) { + Po3Control po3Control = getControl(mac); + if (po3Control != null) { + po3Control.getHistoryData(); + } else { + Log.e(TAG, "Can not find PO3 Control mac:" + mac); + } + } + + @ReactMethod + public void disconnect(String mac) { + Po3Control po3Control = getControl(mac); + if (po3Control != null) { + po3Control.disconnect(); + } else { + Log.e(TAG, "Can not find PO3 Control mac:" + mac); + } + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getPo3Devices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/POProfileModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/POProfileModule.java new file mode 100755 index 0000000..ca6a962 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/POProfileModule.java @@ -0,0 +1,78 @@ +package com.ihealth.ihealthlibrary; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.PoProfile; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +/** + * Created by lixuesong on 15/11/2016. + */ +@ReactModule(name = "POProfileModule") +public class POProfileModule extends ReactContextBaseJavaModule { + private static final String modelName = "POProfileModule"; + private static final String TAG = "POProfileModule"; + + private static final String ACTION_BATTERY_PO = "ACTION_BATTERY_PO"; + private static final String BATTERY_PO = "BATTERY_PO"; + + private static final String ACTION_LIVEDA_PO = "ACTION_LIVEDA_PO"; + private static final String PULSE_WAVE_PO = "PULSE_WAVE_PO"; + private static final String PI_PO = "PI_PO"; + private static final String PULSE_STRENGTH_PO = "PULSE_STRENGTH_PO"; + private static final String BLOOD_OXYGEN_PO = "BLOOD_OXYGEN_PO"; + private static final String PULSE_RATE_PO = "PULSE_RATE_PO"; + + private static final String ACTION_RESULTDATA_PO = "ACTION_RESULTDATA_PO"; + private static final String DATAID = "DATAID"; + + private static final String ACTION_OFFLINEDATA_PO = "ACTION_OFFLINEDATA_PO"; + private static final String OFFLINEDATA_PO = "OFFLINEDATA_PO"; + private static final String MEASURE_DATE_PO = "MEASURE_DATE_PO"; + + private static final String ACTION_NO_OFFLINEDATA_PO = "ACTION_NO_OFFLINEDATA_PO"; + private static final String ACTION_ERROR_PO = "ACTION_ERROR_PO"; + private static final String ACTION_GET_ALL_CONNECTED_DEVICES = "ACTION_GET_ALL_CONNECTED_DEVICES"; + + + public POProfileModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Nullable + @Override + public Map getConstants() { + Map constants = new HashMap<>(); + constants.put(ACTION_BATTERY_PO, PoProfile.ACTION_BATTERY_PO); + constants.put(BATTERY_PO, PoProfile.BATTERY_PO); + + constants.put(ACTION_LIVEDA_PO, PoProfile.ACTION_LIVEDA_PO); + constants.put(PULSE_WAVE_PO, PoProfile.PULSE_WAVE_PO); + constants.put(PI_PO, PoProfile.PI_PO); + constants.put(PULSE_STRENGTH_PO, PoProfile.PULSE_STRENGTH_PO); + constants.put(BLOOD_OXYGEN_PO, PoProfile.BLOOD_OXYGEN_PO); + constants.put(PULSE_RATE_PO, PoProfile.PULSE_RATE_PO); + + constants.put(ACTION_RESULTDATA_PO, PoProfile.ACTION_RESULTDATA_PO); + constants.put(DATAID, PoProfile.DATAID); + + constants.put(ACTION_OFFLINEDATA_PO, PoProfile.ACTION_OFFLINEDATA_PO); + constants.put(OFFLINEDATA_PO, PoProfile.OFFLINEDATA_PO); + constants.put(MEASURE_DATE_PO, PoProfile.MEASURE_DATE_PO); + + constants.put(ACTION_NO_OFFLINEDATA_PO, PoProfile.ACTION_NO_OFFLINEDATA_PO); + constants.put(ACTION_ERROR_PO, PoProfile.ACTION_ERROR_PO); + constants.put(ACTION_GET_ALL_CONNECTED_DEVICES, iHealthBaseModule.ACTION_GET_ALL_CONNECTED_DEVICES); + return constants; + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PT3SBTModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PT3SBTModule.java new file mode 100644 index 0000000..cefb077 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PT3SBTModule.java @@ -0,0 +1,152 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Pt3sbtControl; +import com.ihealth.communication.control.Pt3sbtProfile; +import com.ihealth.communication.control.TS28BControl; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@ReactModule(name = "PT3SBTModule") +public class PT3SBTModule extends iHealthBaseModule { + + private static final String modelName = PT3SBTModule.class.getSimpleName(); + private static final String TAG = PT3SBTModule.class.getSimpleName(); + + private static final String EVENT_NOTIFY = "event_notify_pt3sbt"; + + public PT3SBTModule(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + @ReactMethod + public void setTime(String mac) { + Pt3sbtControl pt3sbtControl = getPt3sbtControl(mac); + if (pt3sbtControl != null) { + pt3sbtControl.setTime(); + } + } + + @ReactMethod + public void getBattery(String mac) { + Pt3sbtControl pt3sbtControl = getPt3sbtControl(mac); + if (pt3sbtControl != null) { + pt3sbtControl.getBattery(); + } + } + + @ReactMethod + public void setUnit(String mac, int unit) { + Pt3sbtControl pt3sbtControl = getPt3sbtControl(mac); + if (pt3sbtControl != null) { + if (unit == 1) { + pt3sbtControl.setUnit(Pt3sbtProfile.PT3SBT_UNIT.Centigrade); + } else { + pt3sbtControl.setUnit(Pt3sbtProfile.PT3SBT_UNIT.Fahrenheit); + } + } + } + + @ReactMethod + public void getUnit(String mac) { + Pt3sbtControl pt3sbtControl = getPt3sbtControl(mac); + if (pt3sbtControl != null) { + pt3sbtControl.getUnit(); + } + } + + @ReactMethod + public void getHistoryCount(String mac) { + Pt3sbtControl pt3sbtControl = getPt3sbtControl(mac); + if (pt3sbtControl != null) { + pt3sbtControl.getHistoryCount(); + } + } + + @ReactMethod + public void getHistoryData(String mac) { + Pt3sbtControl pt3sbtControl = getPt3sbtControl(mac); + if (pt3sbtControl != null) { + pt3sbtControl.getHistoryData(); + } + } + + @ReactMethod + public void deleteHistory(String mac) { + Pt3sbtControl pt3sbtControl = getPt3sbtControl(mac); + if (pt3sbtControl != null) { + pt3sbtControl.deleteHistory(); + } + } + + @ReactMethod + public void disconnect(String mac) { + Pt3sbtControl pt3sbtControl = getPt3sbtControl(mac); + if (pt3sbtControl != null) { + pt3sbtControl.disconnect(); + } + } + + private Pt3sbtControl getPt3sbtControl(String mac) { + Pt3sbtControl pt3sbtControl = iHealthDevicesManager.getInstance().getPt3sbtDevice(mac); + if (pt3sbtControl == null) { + senErrMessage(400); + } + return pt3sbtControl; + } + + private void senErrMessage(int errId) { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", errId); + sendEvent(EVENT_NOTIFY, params); + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getPt3Devices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PT3SBTProfileModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PT3SBTProfileModule.java new file mode 100644 index 0000000..7ef1282 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/PT3SBTProfileModule.java @@ -0,0 +1,73 @@ +package com.ihealth.ihealthlibrary; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Pt3sbtProfile; +import com.ihealth.communication.control.TS28BProfile; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +@ReactModule(name = "PT3SBTProfileModule") +public class PT3SBTProfileModule extends ReactContextBaseJavaModule { + + private static final String modelName = PT3SBTProfileModule.class.getSimpleName(); + private static final String TAG = PT3SBTProfileModule.class.getSimpleName(); + + private static final String ACTION_SET_TIME = "ACTION_SET_TIME"; + private static final String ACTION_GET_BATTERY = "ACTION_GET_BATTERY"; + private static final String ACTION_SET_UNIT = "ACTION_SET_UNIT"; + private static final String ACTION_GET_UNIT = "ACTION_GET_UNIT"; + private static final String ACTION_GET_HISTORY_COUNT = "ACTION_GET_HISTORY_COUNT"; + private static final String ACTION_GET_HISTORY_DATA = "ACTION_GET_HISTORY_DATA"; + private static final String ACTION_DELETE_HISTORY_DATA = "ACTION_DELETE_HISTORY_DATA"; + private static final String ACTION_TEMPERATURE_MEASUREMENT = "ACTION_TEMPERATURE_MEASUREMENT"; + private static final String ACTION_PUB_UNIT = "ACTION_PUB_UNIT"; + private static final String ACTION_GET_ALL_CONNECTED_DEVICES = "ACTION_GET_ALL_CONNECTED_DEVICES"; + + private static final String STATUS = "STATUS"; + private static final String BATTERY = "BATTERY"; + private static final String UNIT = "UNIT"; + private static final String COUNT = "COUNT"; + private static final String TEMPERATURE = "TEMPERATURE"; + private static final String TS = "TS"; + private static final String HISTORY = "HISTORY"; + + public PT3SBTProfileModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Nullable + @Override + public Map getConstants() { + Map constants = new HashMap<>(); + constants.put(ACTION_SET_TIME, Pt3sbtProfile.ACTION_SET_TIME); + constants.put(ACTION_GET_BATTERY, Pt3sbtProfile.ACTION_GET_BATTERY); + constants.put(ACTION_SET_UNIT, Pt3sbtProfile.ACTION_SET_UNIT); + constants.put(ACTION_GET_UNIT, Pt3sbtProfile.ACTION_GET_UNIT); + constants.put(ACTION_GET_HISTORY_COUNT, Pt3sbtProfile.ACTION_GET_HISTORY_COUNT); + constants.put(ACTION_GET_HISTORY_DATA, Pt3sbtProfile.ACTION_GET_HISTORY_DATA); + constants.put(ACTION_DELETE_HISTORY_DATA, Pt3sbtProfile.ACTION_DELETE_HISTORY_DATA); + constants.put(ACTION_TEMPERATURE_MEASUREMENT, Pt3sbtProfile.ACTION_TEMPERATURE_MEASUREMENT); + constants.put(ACTION_PUB_UNIT, Pt3sbtProfile.ACTION_PUB_UNIT); + constants.put(ACTION_GET_ALL_CONNECTED_DEVICES, iHealthBaseModule.ACTION_GET_ALL_CONNECTED_DEVICES); + + constants.put(STATUS, Pt3sbtProfile.STATUS); + constants.put(BATTERY, Pt3sbtProfile.BATTERY); + constants.put(UNIT, Pt3sbtProfile.UNIT); + constants.put(TS, Pt3sbtProfile.TS); + constants.put(COUNT, Pt3sbtProfile.COUNT); + constants.put(TEMPERATURE, Pt3sbtProfile.TEMPERATURE); + constants.put(HISTORY, Pt3sbtProfile.HISTORY); + + return constants; + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/TS28BModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/TS28BModule.java new file mode 100644 index 0000000..a6c2ed5 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/TS28BModule.java @@ -0,0 +1,98 @@ +package com.ihealth.ihealthlibrary; + +import android.text.TextUtils; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.TS28BControl; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@ReactModule(name = "TS28BModule") +public class TS28BModule extends iHealthBaseModule { + + private static final String modelName = "TS28BModule"; + private static final String TAG = "TS28BModule"; + + private static final String EVENT_NOTIFY = "event_notify_ts28b"; + + public TS28BModule(ReactApplicationContext reactContext) { + super(TAG, reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Override + public Map getConstants() { + Map map = new HashMap<>(); + map.put("Event_Notify", EVENT_NOTIFY); + return map; + } + + @ReactMethod + public void measure(String mac) { + TS28BControl ts28bControl = getTs28bControl(mac); + if (ts28bControl != null) { + ts28bControl.getMeasurement(); + } + } + + @ReactMethod + public void disconnect(String mac) { + TS28BControl ts28bControl = getTs28bControl(mac); + if (ts28bControl != null) { + ts28bControl.disconnect(); + } + } + + private TS28BControl getTs28bControl(String mac) { + TS28BControl ts28bControl = iHealthDevicesManager.getInstance().getTS28BControl(mac); + if (ts28bControl == null) { + senErrMessage(400); + } + return ts28bControl; + } + + private void senErrMessage(int errId) { + WritableMap params = Arguments.createMap(); + params.putInt("errorid", errId); + sendEvent(EVENT_NOTIFY, params); + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + WritableMap params = Arguments.createMap(); + params.putString("action", action); + params.putString("mac", mac); + params.putString("type", deviceType); + if (!TextUtils.isEmpty(message)) { + Utils.jsonToMap(message, params); + } + sendEvent(EVENT_NOTIFY, params); + } + + @ReactMethod + public void getAllConnectedDevices() { + List devices = iHealthDevicesManager.getInstance().getTS28BDevices(); + WritableMap params = Arguments.createMap(); + if (devices.size() > 0) { + WritableArray array = Arguments.createArray(); + for (String device : devices) { + array.pushString(device); + } + params.putArray("devices", array); + params.putString("action", ACTION_GET_ALL_CONNECTED_DEVICES); + } + sendEvent(EVENT_NOTIFY, params); + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/TS28BProfileModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/TS28BProfileModule.java new file mode 100644 index 0000000..4becc24 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/TS28BProfileModule.java @@ -0,0 +1,52 @@ +package com.ihealth.ihealthlibrary; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.TS28BProfile; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +@ReactModule(name = "TS28BProfileModule") +public class TS28BProfileModule extends ReactContextBaseJavaModule { + + private static final String modelName = "TS28BProfileModule"; + private static final String TAG = "TS28BProfileModule"; + + private static final String ACTION_MEASUREMENT_RESULT = "ACTION_MEASUREMENT_RESULT"; + private static final String UNIT_FLAG = "unit_flag"; + private static final String RESULT = "result"; + private static final String TS_FLAG = "ts_flag"; + private static final String TS = "ts"; + private static final String THERMOMETER_TYPE_FLAG = "thermometer_type_flag"; + private static final String THERMOMETER_TYPE = "thermometer_type"; + + private static final String ACTION_GET_ALL_CONNECTED_DEVICES = "ACTION_GET_ALL_CONNECTED_DEVICES"; + + public TS28BProfileModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + @Override + public String getName() { + return modelName; + } + + @Nullable + @Override + public Map getConstants() { + Map constants = new HashMap<>(); + constants.put(ACTION_MEASUREMENT_RESULT, TS28BProfile.ACTION_MEASUREMENT_RESULT); + constants.put(UNIT_FLAG, TS28BProfile.UNIT_FLAG); + constants.put(RESULT, TS28BProfile.RESULT); + constants.put(TS_FLAG, TS28BProfile.TS_FLAG); + constants.put(TS, TS28BProfile.TS); + constants.put(THERMOMETER_TYPE_FLAG, TS28BProfile.THERMOMETER_TYPE_FLAG); + constants.put(THERMOMETER_TYPE, TS28BProfile.THERMOMETER_TYPE); + constants.put(ACTION_GET_ALL_CONNECTED_DEVICES, iHealthBaseModule.ACTION_GET_ALL_CONNECTED_DEVICES); + return constants; + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/Utils.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/Utils.java new file mode 100755 index 0000000..8d95011 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/Utils.java @@ -0,0 +1,123 @@ +package com.ihealth.ihealthlibrary; + + + +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.WritableMap; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + + +import java.util.Iterator; + + +/** + * Created by jing on 16/11/10. + */ + + +public class Utils { + + private static final String TAG = "Utils"; + + + public static void jsonToMap(String jsonString, WritableMap writableMap) { + JSONObject jsonObject = null; + try { + jsonObject = new JSONObject(jsonString); + + if (jsonObject.length()>0) { + for (Iterator keys=jsonObject.keys(); keys.hasNext();) { + String key = keys.next(); + try { + Object object = jsonObject.get(key); + if (object instanceof JSONObject) { + writableMap.putMap(key, getMapFromJSONObject((JSONObject) object)); + } else if (object instanceof JSONArray) { + writableMap.putArray(key, getWritableArrayFromJSONArray((JSONArray) object)); + } else { + objectToMap(object, writableMap, key); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + } + + } catch (JSONException e) { + e.printStackTrace(); + } + } + + public static WritableMap getMapFromJSONObject(JSONObject object) { + WritableMap map = Arguments.createMap(); + Iterator keyIterator = object.keys(); + while (keyIterator.hasNext()) { + String key = keyIterator.next(); + try { + Object value = object.get(key); + if (value instanceof JSONObject) { + // value is JSONObject case + map.putMap(key, getMapFromJSONObject((JSONObject) value)); + } else if (value instanceof JSONArray) { + // value is JSONArray case + map.putArray(key, getWritableArrayFromJSONArray((JSONArray) value)); + } else { + // Normal object case + objectToMap(value, map, key); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + return map; + } + + public static WritableArray getWritableArrayFromJSONArray(JSONArray array) { + WritableArray writableArray = Arguments.createArray(); + for (int i = 0; i < array.length(); i++) { + try { + Object objectInArray = array.get(i); + if (objectInArray instanceof JSONObject) { + writableArray.pushMap(getMapFromJSONObject((JSONObject) objectInArray)); + } else if (objectInArray instanceof Boolean) { + writableArray.pushBoolean((Boolean) objectInArray); + } else if(objectInArray instanceof Integer) { + writableArray.pushInt((Integer) objectInArray); + } else if(objectInArray instanceof Double) { + writableArray.pushDouble((Double) objectInArray); + } else if(objectInArray instanceof String) { + writableArray.pushString((String) objectInArray); + } else if(objectInArray instanceof Long) { + writableArray.pushDouble((Long) objectInArray); + } else { + Log.e(TAG, "Unknown type : " + objectInArray.getClass().getSimpleName()); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + return writableArray; + } + + private static void objectToMap(Object object, WritableMap writableMap, String key) { + if (object instanceof Boolean) { + writableMap.putBoolean(key, (Boolean) object); + } else if(object instanceof Integer) { + writableMap.putInt(key, (Integer) object); + } else if(object instanceof Double) { + writableMap.putDouble(key, (Double) object); + } else if(object instanceof String) { + writableMap.putString(key, (String) object); + } else if(object instanceof Long) { + writableMap.putDouble(key, (Long) object); + } else { + Log.e(TAG, "Unknown type : " + object.getClass().getSimpleName()); + } + } +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/iHealthBaseModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/iHealthBaseModule.java new file mode 100755 index 0000000..3b41d55 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/iHealthBaseModule.java @@ -0,0 +1,40 @@ +package com.ihealth.ihealthlibrary; + +import android.util.Log; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.facebook.react.modules.core.DeviceEventManagerModule; + +/** + * Created by Jeepend on 21/11/2016. + * Base class for iHealth Modules, provide sendEvent method for you. + */ +@ReactModule(name = "iHealthBaseModule") +public abstract class iHealthBaseModule extends ReactContextBaseJavaModule { + + private final String TAG; + private DeviceEventManagerModule.RCTDeviceEventEmitter mEmitter = null; + public static final String ACTION_GET_ALL_CONNECTED_DEVICES = "action_get_all_connected_devices"; + + public iHealthBaseModule(String tag, ReactApplicationContext reactContext) { + super(reactContext); + TAG = tag; + } + + void sendEvent(String eventName, WritableMap data) { + if (mEmitter == null) { + mEmitter = getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class); + } + if (mEmitter != null) { + mEmitter.emit(eventName, data); + } else { + Log.e(TAG, "mEmitter is null, can't send event."); + } + } + + public abstract void handleNotify(String mac, String deviceType, String action, String message); +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/iHealthDeviceManagerModule.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/iHealthDeviceManagerModule.java new file mode 100644 index 0000000..b752d27 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/iHealthDeviceManagerModule.java @@ -0,0 +1,734 @@ +package com.ihealth.ihealthlibrary; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.text.TextUtils; +import android.util.Log; + +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.Callback; +import com.facebook.react.bridge.LifecycleEventListener; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; +import com.ihealth.communication.control.Bg1Control; +import com.ihealth.communication.control.Bg1Profile; +import com.ihealth.communication.manager.DiscoveryTypeEnum; +import com.ihealth.communication.manager.iHealthDevicesCallback; +import com.ihealth.communication.manager.iHealthDevicesManager; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +/** + * Created by jing on 16/10/20. + */ +@ReactModule(name = "iHealthDeviceManagerModule") +public class iHealthDeviceManagerModule extends iHealthBaseModule implements LifecycleEventListener { + + private static final String modelName = "iHealthDeviceManagerModule"; + private static final String TAG = "iHealthModel"; + + private final static String AM3S = "AM3S"; + private final static String AM4 = "AM4"; + private final static String AM5 = "AM5"; + private final static String PO3 = "PO3"; + private final static String BP5 = "BP5"; + private final static String BP5S = "BP5S"; + private final static String BP3L = "BP3L"; + private final static String BP7 = "BP7"; + private final static String BP7S = "BP7S"; + private final static String KN550 = "KN550"; + private final static String HS2 = "HS2"; + private final static String HS2S = "HS2S"; + private final static String HS4 = "HS4"; + private final static String HS4S = "HS4S"; + // private final static String HS6 = "HS6"; + private final static String BG1 = "BG1"; + private final static String BG1S = "BG1S"; + private final static String BG5 = "BG5"; + private final static String BG5S = "BG5S"; + private final static String BG5L = "BG5L"; + private final static String BTM = "BTM"; + private final static String ECG3 = "ECG3"; + private final static String ECG3USB = "ECG3USB"; + + private final static String PT3SBT = "PT3SBT"; + private final static String TS28B = "TS28B"; + private final static String NT13B = "NT13B"; + private final static String PO1 = "PO1"; + + + private final static String Event_Scan_Device = "event_scan_device"; + private final static String Event_Scan_Finish = "event_scan_finish"; + private final static String Event_Device_Connected = "event_device_connected"; + private final static String Event_Device_Connect_Failed = "event_device_connect_failed"; + private final static String Event_Device_Disconnect = "event_device_disconnect"; + private final static String Event_Authenticate_Result = "event_authenticate_result"; + + private static int callbackId; + private ReactApplicationContext mContext; + private String userName; + private String mac = "";//macAddressForBg1 + private static final String DESCRIPTION = "description"; + private static final String IDPS = "idps"; + private String idps = ""; + + public iHealthDeviceManagerModule(ReactApplicationContext reactContext) { + super(TAG, reactContext); + mContext = reactContext; + reactContext.addLifecycleEventListener(this); + + // SDK init deferred to ensureInitialized() — called lazily on first startDiscovery + } + + private iHealthDevicesCallback miHealthDevicesCallback = new iHealthDevicesCallback() { + + @Override + public void onScanDevice(String mac, String deviceType, int rssi, Map manufactorData) { + WritableMap params = Arguments.createMap(); + params.putString("mac", mac); + if (deviceType.equals("ECGUSB")) { + params.putString("type", "ECG3USB"); + + } else if (deviceType.equals("KN-550BT")) { + params.putString("type", "KN550"); + + } else { + params.putString("type", deviceType); + } + params.putInt("rssi", rssi); + sendEvent(Event_Scan_Device, params); + } + + @Override + public void onDeviceConnectionStateChange(String mac, String deviceType, int status, int errorID, Map manufactorData) { + String eventName = null; + if (status == iHealthDevicesManager.DEVICE_STATE_CONNECTED) { + eventName = Event_Device_Connected; + } else if (status == iHealthDevicesManager.DEVICE_STATE_CONNECTIONFAIL) { + eventName = Event_Device_Connect_Failed; + } else if (status == iHealthDevicesManager.DEVICE_STATE_DISCONNECTED) { + eventName = Event_Device_Disconnect; + } + if (eventName != null) { + WritableMap params = Arguments.createMap(); + params.putString("mac", mac); + if (deviceType.equals("ECGUSB")) { + params.putString("type", "ECG3USB"); + + } else if (deviceType.equals("KN-550BT")) { + params.putString("type", "KN550"); + + } else { + params.putString("type", deviceType); + } + params.putInt("errorid", errorID); + sendEvent(eventName, params); + } + } + + @Override + public void onUserStatus(String username, int userStatus) { + WritableMap params = Arguments.createMap(); + params.putInt("authen", userStatus); + sendEvent(Event_Authenticate_Result, params); + } + + @Override + public void onDeviceNotify(String mac, String deviceType, String action, String message) { + commandHandleDeviceNotify(mac, deviceType, action, message); + } + + @Override + public void onScanFinish() { + sendEvent(Event_Scan_Finish, null); + } + + }; + + private void commandHandleDeviceNotify(String mac, String deviceType, String action, String message) { + //为了与iOS返回值保持一致,需要进行二次加工 + iHealthBaseModule module = null; + switch (deviceType) { + case iHealthDevicesManager.TYPE_BP5: + module = getReactApplicationContext().getNativeModule(BP5Module.class); + break; + + case iHealthDevicesManager.TYPE_BP5S: + module = getReactApplicationContext().getNativeModule(BP5SModule.class); + break; + + case iHealthDevicesManager.TYPE_BP3L: + module = getReactApplicationContext().getNativeModule(BP3LModule.class); + break; + + case iHealthDevicesManager.TYPE_550BT: + module = getReactApplicationContext().getNativeModule(BP550BTModule.class); + break; + + case iHealthDevicesManager.TYPE_BP7: + module = getReactApplicationContext().getNativeModule(BP7Module.class); + break; + + case iHealthDevicesManager.TYPE_BP7S: + module = getReactApplicationContext().getNativeModule(BP7SModule.class); + break; + + case iHealthDevicesManager.TYPE_AM3S: + module = getReactApplicationContext().getNativeModule(AM3SModule.class); + break; + + case iHealthDevicesManager.TYPE_AM4: + module = getReactApplicationContext().getNativeModule(AM4Module.class); + break; + + case iHealthDevicesManager.TYPE_AM5: + module = getReactApplicationContext().getNativeModule(AM5Module.class); + break; + + case iHealthDevicesManager.TYPE_PO3: + module = getReactApplicationContext().getNativeModule(PO3Module.class); + break; + + case iHealthDevicesManager.TYPE_HS2: + module = getReactApplicationContext().getNativeModule(HS2Module.class); + break; + + case iHealthDevicesManager.TYPE_HS2S: + case iHealthDevicesManager.TYPE_HS2S_PRO: + module = getReactApplicationContext().getNativeModule(HS2SModule.class); + break; + + case iHealthDevicesManager.TYPE_HS4: + case iHealthDevicesManager.TYPE_HS4S: + module = getReactApplicationContext().getNativeModule(HS4SModule.class); + break; + + case iHealthDevicesManager.TYPE_HS6: + break; + + case iHealthDevicesManager.TYPE_BG1: + break; + + case iHealthDevicesManager.TYPE_BG1S: + module = getReactApplicationContext().getNativeModule(BG1SModule.class); + break; + + case iHealthDevicesManager.TYPE_BG5: + module = getReactApplicationContext().getNativeModule(BG5Module.class); + break; + + case iHealthDevicesManager.TYPE_BG5S: + module = getReactApplicationContext().getNativeModule(BG5SModule.class); + break; + + case iHealthDevicesManager.TYPE_FDIR_V3: + module = getReactApplicationContext().getNativeModule(BTMModule.class); + break; + + case iHealthDevicesManager.TYPE_ECG3: + module = getReactApplicationContext().getNativeModule(ECGModule.class); + break; + + case iHealthDevicesManager.TYPE_ECG3_USB: + module = getReactApplicationContext().getNativeModule(ECGUSBModule.class); + break; + + case iHealthDevicesManager.TYPE_PT3SBT: + module = getReactApplicationContext().getNativeModule(PT3SBTModule.class); + break; + + case iHealthDevicesManager.TYPE_TS28B: + module = getReactApplicationContext().getNativeModule(TS28BModule.class); + break; + + case iHealthDevicesManager.TYPE_NT13B: + module = getReactApplicationContext().getNativeModule(NT13BModule.class); + break; + + case iHealthDevicesManager.TYPE_PO1: + module = getReactApplicationContext().getNativeModule(PO1Module.class); + break; + + default: + module = null; + break; + } + if (module != null) { + module.handleNotify(mac, deviceType, action, message); + } else { + Log.e(TAG, "We do not support this type: " + deviceType); + } + } + + @Nullable + @Override + public Map getConstants() { + final Map constants = new HashMap<>(); + constants.put(AM3S, iHealthDevicesManager.DISCOVERY_AM3S); + constants.put(AM4, iHealthDevicesManager.DISCOVERY_AM4); + constants.put(AM5, iHealthDevicesManager.DISCOVERY_AM5); + constants.put(PO3, iHealthDevicesManager.DISCOVERY_PO3); + constants.put(BP5, iHealthDevicesManager.DISCOVERY_BP5); + constants.put(BP5S, iHealthDevicesManager.DISCOVERY_BP5S); + constants.put(BP3L, iHealthDevicesManager.DISCOVERY_BP3L); + constants.put(BP7, iHealthDevicesManager.DISCOVERY_BP7); + constants.put(BP7S, iHealthDevicesManager.DISCOVERY_BP7S); + constants.put(KN550, iHealthDevicesManager.DISCOVERY_BP550BT); + constants.put(HS2, iHealthDevicesManager.DISCOVERY_HS2); + constants.put(HS2S, iHealthDevicesManager.DISCOVERY_HS2S); + constants.put(HS4, iHealthDevicesManager.DISCOVERY_HS4); + constants.put(HS4S, iHealthDevicesManager.DISCOVERY_HS4S); + constants.put(BG1, (double) 110); + constants.put(BG1S, iHealthDevicesManager.DISCOVERY_BG1S); + constants.put(BG5, iHealthDevicesManager.DISCOVERY_BG5); + constants.put(BG5S, iHealthDevicesManager.DISCOVERY_BG5S); + constants.put(BTM, iHealthDevicesManager.DISCOVERY_FDIR_V3); + constants.put(ECG3, iHealthDevicesManager.DISCOVERY_ECG3); + constants.put(ECG3USB, iHealthDevicesManager.DISCOVERY_ECG3_USB); + constants.put(PT3SBT, iHealthDevicesManager.DISCOVERY_PT3SBT); + constants.put(TS28B, iHealthDevicesManager.DISCOVERY_TS28B); + constants.put(NT13B, iHealthDevicesManager.DISCOVERY_NT13B); + constants.put(PO1, iHealthDevicesManager.DISCOVERY_PO1); + constants.put(PO3, iHealthDevicesManager.DISCOVERY_PO3); + + constants.put("Event_Scan_Device", Event_Scan_Device); + constants.put("Event_Scan_Finish", Event_Scan_Finish); + constants.put("Event_Device_Connected", Event_Device_Connected); + constants.put("Event_Device_Connect_Failed", Event_Device_Connect_Failed); + constants.put("Event_Device_Disconnect", Event_Device_Disconnect); + constants.put("Event_Authenticate_Result", Event_Authenticate_Result); + + return constants; + } + + @Override + public String getName() { + return modelName; + } + + + @Override + public void onHostResume() { + if (callbackId == 0) { + android.app.Activity activity = getCurrentActivity(); + android.app.Application app = activity != null ? activity.getApplication() : (android.app.Application) mContext.getApplicationContext(); + iHealthDevicesManager.getInstance().init(app, Log.VERBOSE, Log.VERBOSE); + Bg1Control.getInstance().init(mContext, "", 0, true); + callbackId = iHealthDevicesManager.getInstance().registerClientCallback(miHealthDevicesCallback); + } + } + + @Override + public void onHostPause() { + Log.i(TAG, "onHostPause"); + } + + @Override + public void onHostDestroy() { + Log.e(TAG, "onHostDestroy"); + + if (mBroadcastReceiverRegistered) { + unRegisterReceiver(); + } + callbackId = 0; + iHealthDevicesManager.getInstance().unRegisterClientCallback(callbackId); + iHealthDevicesManager.getInstance().destroy(); + } + + private DiscoveryTypeEnum getDiscoveryType(String type) { + + switch (type) { + case "AM3S": + return DiscoveryTypeEnum.AM3S; + + case "AM4": + return DiscoveryTypeEnum.AM4; + + case "AM5": + return DiscoveryTypeEnum.AM5; + + case "BG1S": + return DiscoveryTypeEnum.BG1S; + + case "BG5": + return DiscoveryTypeEnum.BG5; + + case "BG5S": + return DiscoveryTypeEnum.BG5S; + + case "BP3L": + return DiscoveryTypeEnum.BP3L; + + case "BP5": + return DiscoveryTypeEnum.BP5; + + case "BP5S": + return DiscoveryTypeEnum.BP5S; + + case "BP7": + return DiscoveryTypeEnum.BP7; + + case "KN550": + return DiscoveryTypeEnum.BP550BT; + + case "HS2": + return DiscoveryTypeEnum.HS2; + + case "HS2S": + return DiscoveryTypeEnum.HS2S; + + case "HS4": + return DiscoveryTypeEnum.HS4; + + case "HS4S": + return DiscoveryTypeEnum.HS4S; + + case "PO1": + return DiscoveryTypeEnum.PO1; + + case "PO3": + return DiscoveryTypeEnum.PO3; + + case "PT3SBT": + return DiscoveryTypeEnum.PT3SBT; + + case "NT13B": + return DiscoveryTypeEnum.NT13B; + + case "TS28B": + return DiscoveryTypeEnum.TS28B; + + default: + return DiscoveryTypeEnum.All; + + } + } + + private void ensureInitialized() { + if (callbackId == 0) { + android.app.Activity activity = getCurrentActivity(); + if (activity != null) { + iHealthDevicesManager.getInstance().init(activity.getApplication(), Log.VERBOSE, Log.VERBOSE); + } else { + iHealthDevicesManager.getInstance().init((android.app.Application) mContext.getApplicationContext(), Log.VERBOSE, Log.VERBOSE); + } + Bg1Control.getInstance().init(mContext, "", 0, true); + callbackId = iHealthDevicesManager.getInstance().registerClientCallback(miHealthDevicesCallback); + android.util.Log.e("iHealthScanner", "=== SDK initialized from ensureInitialized, callbackId=" + callbackId + " ==="); + } + } + + @ReactMethod + public void startDiscovery(String type) { + ensureInitialized(); + if (type.equals("BG1")) { + registerReceiver();//scan BG1 + } else { + iHealthDevicesManager.getInstance().startDiscovery(getDiscoveryType(type)); + } + } + + @ReactMethod + public void stopDiscovery() { + iHealthDevicesManager.getInstance().stopDiscovery(); + } + + @ReactMethod + public void connectDevice(String mac, String type) { + if (type.equals(BG1)) { + Bg1Control.getInstance().connect(); + } else if (type.equals(iHealthDevicesManager.TYPE_FDIR_V3)) { + connectTherm(this.userName, mac, type, 1, 1, 2, 0, 1, 0); + } else { + if (type.equals("KN550")) { + iHealthDevicesManager.getInstance().connectDevice(this.userName, mac, iHealthDevicesManager.TYPE_550BT); + } else { + iHealthDevicesManager.getInstance().connectDevice(this.userName, mac, type); + } + + } + } + + @ReactMethod + public void connectTherm(String userName, String mac, String type, int unit, int measureTarget, + int functionTarget, int hour, int minute, int second) { + iHealthDevicesManager.getInstance().connectTherm(userName, mac, type, + unit, measureTarget, functionTarget, hour, minute, second); + } + + @ReactMethod + public void authenConfigureInfo(String userName, String clientID, String clientSecret) { + this.userName = userName; + iHealthDevicesManager.getInstance().sdkUserInAuthor(mContext, userName, clientID, clientSecret, callbackId); + } + + @ReactMethod + public void authenAppSecret(String appSecret, Callback callback) { + boolean authenResult = iHealthDevicesManager.getInstance().sdkAuthWithAppSecret(mContext, appSecret); + callback.invoke(authenResult); + } + + @ReactMethod + public void getDevicesIDPS(String mac, Callback callback) { + String idpsInfo = iHealthDevicesManager.getInstance().getDevicesIDPS(mac); + WritableMap writableMap = Arguments.createMap(); + Utils.jsonToMap(idpsInfo, writableMap); + callback.invoke(writableMap); + } + + @Override + public void handleNotify(String mac, String deviceType, String action, String message) { + //Do nothing + } + + + private void registerReceiver() { + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(Intent.ACTION_HEADSET_PLUG); + intentFilter.addAction(Bg1Profile.ACTION_BG1_CONNECT_RESULT); + intentFilter.addAction(Bg1Profile.ACTION_BG1_SENDCODE_RESULT); + intentFilter.addAction(Bg1Profile.ACTION_BG1_MEASURE_ERROR); + intentFilter.addAction(Bg1Profile.ACTION_BG1_MEASURE_STANDBY); + intentFilter.addAction(Bg1Profile.ACTION_BG1_MEASURE_RESULT); + intentFilter.addAction(Bg1Profile.ACTION_BG1_MEASURE_STRIP_IN); + intentFilter.addAction(Bg1Profile.ACTION_BG1_MEASURE_GET_BLOOD); + intentFilter.addAction(Bg1Profile.ACTION_BG1_MEASURE_STRIP_OUT); + intentFilter.addAction(Bg1Profile.ACTION_BG1_IDPS); + mContext.registerReceiver(broadcastReceiver, intentFilter); + mBroadcastReceiverRegistered = true; + } + + synchronized private void unRegisterReceiver() { + mContext.unregisterReceiver(broadcastReceiver); + mBroadcastReceiverRegistered = false; + } + + private boolean mBroadcastReceiverRegistered = false; + private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (!TextUtils.isEmpty(intent.getAction())) { + iHealthBaseModule module = getReactApplicationContext().getNativeModule(BG1Module.class); + WritableMap params = Arguments.createMap(); + params.putString("action", intent.getAction()); + params.putString("mac", mac); + params.putString("type", BG1); + try { + JSONObject jsonObject = new JSONObject(); + switch (intent.getAction()) { + case Intent.ACTION_HEADSET_PLUG: + Log.e(TAG, "headset state -----> " + intent.getExtras().getInt("state")); + Log.e(TAG, "has microphone ----> " + intent.getExtras().getInt("microphone")); + Log.e(TAG, "headset name ------> " + intent.getExtras().getString("name")); + + jsonObject.put("state", intent.getExtras().getInt("state")); + Utils.jsonToMap(jsonObject.toString(), params); + + if (intent.getExtras().getInt("state") == 1) { + if (intent.getExtras().getInt("microphone") == 1) {//1 if headset has a microphone, 0 otherwise + sendEvent(Event_Scan_Device, params); + } else { + Log.e(TAG, "headSet has no microphone"); + } + + } else { + sendEvent(Event_Device_Disconnect, params); + Bg1Control.getInstance().disconnect(); + module.handleNotify(mac, BG1, Event_Device_Disconnect, jsonObject.toString()); + + } + sendEvent(Event_Scan_Finish, null); + + break; + case Bg1Profile.ACTION_BG1_CONNECT_RESULT: + int connectFlag = intent.getIntExtra(Bg1Profile.BG1_CONNECT_RESULT, -1); + jsonObject.put(Bg1Profile.BG1_CONNECT_RESULT, connectFlag); + jsonObject.put(DESCRIPTION, getErrorDescription(Bg1Profile.ACTION_BG1_CONNECT_RESULT, connectFlag)); + if (formatIdps(idps) != null) { + jsonObject.put(IDPS, formatIdps(idps)); + } + Utils.jsonToMap(jsonObject.toString(), params); + if (connectFlag == 0) { + sendEvent(Event_Device_Connected, params); + } else { + sendEvent(Event_Device_Connect_Failed, params); + } + break; + case Bg1Profile.ACTION_BG1_SENDCODE_RESULT: + int sendCodeFlag = intent.getIntExtra(Bg1Profile.BG1_SENDCODE_RESULT, -1); + jsonObject.put(Bg1Profile.BG1_SENDCODE_RESULT, sendCodeFlag); + jsonObject.put(DESCRIPTION, getErrorDescription(Bg1Profile.ACTION_BG1_SENDCODE_RESULT, sendCodeFlag)); + //Utils.jsonToMap(jsonObject.toString(), params); + + module.handleNotify(mac, BG1, Bg1Profile.ACTION_BG1_SENDCODE_RESULT, jsonObject.toString()); + break; + case Bg1Profile.ACTION_BG1_MEASURE_ERROR: + int errorNumber = intent.getIntExtra(Bg1Profile.BG1_MEASURE_ERROR, -1); + jsonObject.put(Bg1Profile.BG1_MEASURE_ERROR, errorNumber); + jsonObject.put(DESCRIPTION, getErrorDescription(Bg1Profile.ACTION_BG1_MEASURE_ERROR, errorNumber)); + module.handleNotify(mac, BG1, Bg1Profile.ACTION_BG1_MEASURE_ERROR, jsonObject.toString()); + break; + + case Bg1Profile.ACTION_BG1_MEASURE_RESULT: + int measureResult = intent.getIntExtra(Bg1Profile.BG1_MEASURE_RESULT, -1); + jsonObject.put(Bg1Profile.BG1_MEASURE_RESULT, measureResult); + module.handleNotify(mac, BG1, Bg1Profile.ACTION_BG1_MEASURE_RESULT, jsonObject.toString()); + break; + case Bg1Profile.ACTION_BG1_IDPS: + idps = intent.getStringExtra(Bg1Profile.BG1_IDPS); + mac = getMacFromIdps(idps); + // module.handleNotify(mac, BG1, Bg1Profile.ACTION_BG1_IDPS, intent.getStringExtra(Bg1Profile.BG1_IDPS)); + break; + default: + module.handleNotify(mac, BG1, intent.getAction(), jsonObject.toString()); + break; + + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + } + + String getMacFromIdps(String idps) { + //{"IDPS":[{"DeviceId":"9D300A5682","FirmWare":"13.5.0","HardWare":"13.6.0"}]} + try { + JSONObject sourceObject = new JSONObject(idps); + JSONArray array = sourceObject.getJSONArray("IDPS"); + JSONObject object = (JSONObject) array.get(0); + return object.getString("DeviceId"); + } catch (Exception e) { + + } + return ""; + } + + JSONObject formatIdps(String idps) { + try { + JSONObject sourceObject = new JSONObject(idps); + JSONArray array = sourceObject.getJSONArray("IDPS"); + return (JSONObject) array.get(0); + } catch (Exception e) { + + } + return null; + } + + + String getErrorDescription(String action, int err_num) { + switch (action) { + case Bg1Profile.ACTION_BG1_CONNECT_RESULT: + case Bg1Profile.ACTION_BG1_SENDCODE_RESULT: + if ((err_num >= 6 && err_num <= 13) || (err_num >= 19 && err_num <= 28)) { + return "Send code failed."; + } + switch (err_num) { + case 0: + return "Success."; + case 1: + return "Hand shake timeout."; + case 2: + case 16://1307 + return "Get idps failed."; + case 3: + return "Register clientId failed."; + case 5: + case 17://1307 + return "Identify failed."; + case 32: + return "Connect timeout"; + case 18: + return "Set bottleId failed."; + default: + return "Unknown."; + } + + case Bg1Profile.ACTION_BG1_MEASURE_ERROR: + switch (err_num) { + case 0: + return "Battery is low."; + case 1: + return "Glucose test result is out of the measurement range."; + case 2: + return "Unknown interference detected, please repeat the test."; + case 3: + return "Strip is used or unknown moisture detected, discard the test strip and repeat the test with a new strip."; + case 4: + return "Communication error,resend the code to repeat the test."; + case 5: + case 6: + return "The environmental temperature is beyond normal range, place the meter at room temperature for at least 30 minutes, then repeat the test."; + case 7: + return "Authentication failed more than 10 times."; + case 8: + return "Communication error, please repeat the test."; + case 9: + case 10: + case 11: + return "Communication error, please repeat the test. If the problem persists, contact iHealth customer service for assistance."; + case 12: + return "Glucose test result is low."; + case 13: + return "Glucose test result is high."; + case 400: + return "Parameters out of range."; + case 401: + return "Dolby is on, please turn it off."; + default: + return "Unknown."; + } + default: + return "Unknown."; + } + } + }; + + @ReactMethod + public void disconnectDevice(String mac, String type) { + if (type.equals(BG1)) { + Bg1Control.getInstance().disconnect(); + } else { + iHealthDevicesManager.getInstance().disconnectDevice(mac, type); + } + } + + @ReactMethod + public void sdkAuthWithLicense(String license) { + boolean result = false; + try { + InputStream ins = mContext.getAssets().open(license); + byte[] licenseBuffer = new byte[ins.available()]; + ins.read(licenseBuffer); + ins.close(); + result = iHealthDevicesManager.getInstance().sdkAuthWithLicense(licenseBuffer); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + WritableMap writableMap = Arguments.createMap(); + writableMap.putBoolean("access", result); + sendEvent(Event_Authenticate_Result, writableMap); + } + + @ReactMethod + public void isSupportOTG(Callback callback) { + boolean isSupportOTG = iHealthDevicesManager.getInstance().checkSupportOTG(); + callback.invoke(isSupportOTG); + } + +} diff --git a/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/iHealthDeviceManagerPackage.java b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/iHealthDeviceManagerPackage.java new file mode 100644 index 0000000..79bfcb6 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/java/com/ihealth/ihealthlibrary/iHealthDeviceManagerPackage.java @@ -0,0 +1,70 @@ +package com.ihealth.ihealthlibrary; + +import com.facebook.react.ReactPackage; +import com.facebook.react.bridge.NativeModule; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.uimanager.ViewManager; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * Created by jing on 16/10/20. + */ + +public class iHealthDeviceManagerPackage implements ReactPackage { + @Override + public List createNativeModules(ReactApplicationContext reactContext) { + List modules = new ArrayList<>(); + modules.add(new iHealthDeviceManagerModule(reactContext)); + modules.add(new AM3SModule(reactContext)); + modules.add(new AM4Module(reactContext)); + modules.add(new AMProfileModule(reactContext)); + modules.add(new AM5Module(reactContext)); + modules.add(new AM5ProfileModule(reactContext)); + modules.add(new BP5Module(reactContext)); + modules.add(new BP5SModule(reactContext)); + modules.add(new BP3LModule(reactContext)); + modules.add(new BP550BTModule(reactContext)); + modules.add(new BP7Module(reactContext)); + modules.add(new BP7SModule(reactContext)); + modules.add(new BPProfileModule(reactContext)); + modules.add(new POProfileModule(reactContext)); + modules.add(new PO3Module(reactContext)); + modules.add(new HS2Module(reactContext)); + modules.add(new HS2SModule(reactContext)); + modules.add(new HS4SModule(reactContext)); + modules.add(new HSProfileModule(reactContext)); + modules.add(new HS2SProfileModule(reactContext)); + modules.add(new BG1Module(reactContext)); + modules.add(new BG1SModule(reactContext)); + modules.add(new BG1ProfileModule(reactContext)); + modules.add(new BG1SProfileModule(reactContext)); + modules.add(new BG5Module(reactContext)); + modules.add(new BG5SModule(reactContext)); + modules.add(new BG5SProfileModule(reactContext)); + modules.add(new BGProfileModule(reactContext)); + modules.add(new HS6Module(reactContext)); + modules.add(new HS6ProfileModule(reactContext)); + modules.add(new BTMModule(reactContext)); + modules.add(new BTMProfileModule(reactContext)); + modules.add(new ECGModule(reactContext)); + modules.add(new ECGProfileModule(reactContext)); + modules.add(new ECGUSBModule(reactContext)); + modules.add(new TS28BModule(reactContext)); + modules.add(new TS28BProfileModule(reactContext)); + modules.add(new NT13BModule(reactContext)); + modules.add(new NT13BProfileModule(reactContext)); + modules.add(new PO1Module(reactContext)); + modules.add(new PO1ProfileModule(reactContext)); + modules.add(new PT3SBTModule(reactContext)); + modules.add(new PT3SBTProfileModule(reactContext)); + return modules; + } + + @Override + public List createViewManagers(ReactApplicationContext reactContext) { + return Collections.emptyList(); + } +} diff --git a/libs/ihealth-sdk/android/src/main/res/values/strings.xml b/libs/ihealth-sdk/android/src/main/res/values/strings.xml new file mode 100755 index 0000000..827d429 --- /dev/null +++ b/libs/ihealth-sdk/android/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + iHealthLibrary + diff --git a/libs/ihealth-sdk/android/src/test/java/com/example/jing/ihealthlibrary/ExampleUnitTest.java b/libs/ihealth-sdk/android/src/test/java/com/example/jing/ihealthlibrary/ExampleUnitTest.java new file mode 100755 index 0000000..84a3f08 --- /dev/null +++ b/libs/ihealth-sdk/android/src/test/java/com/example/jing/ihealthlibrary/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.example.jing.ihealthlibrary; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/libs/ihealth-sdk/android/src/test/java/com/ihealth/ihealthlibrary/ExampleUnitTest.java b/libs/ihealth-sdk/android/src/test/java/com/ihealth/ihealthlibrary/ExampleUnitTest.java new file mode 100755 index 0000000..ee64f09 --- /dev/null +++ b/libs/ihealth-sdk/android/src/test/java/com/ihealth/ihealthlibrary/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.ihealth.ihealthlibrary; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file -- cgit