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 --- libs/ihealth-sdk/doc/am3s.md | 388 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 388 insertions(+) create mode 100644 libs/ihealth-sdk/doc/am3s.md (limited to 'libs/ihealth-sdk/doc/am3s.md') diff --git a/libs/ihealth-sdk/doc/am3s.md b/libs/ihealth-sdk/doc/am3s.md new file mode 100644 index 0000000..e9446de --- /dev/null +++ b/libs/ihealth-sdk/doc/am3s.md @@ -0,0 +1,388 @@ +# AM3S Workflow + +## Import AM3S Module + +```js +import { + AM3SModule, + AMProfileModule +} from '@ihealth/ihealthlibrary-react-native'; +``` + +## APIs + +### Add and remove listener + +```js +// add +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + console.log(event); +}); + +// remove +notifyListener.remove(); +``` + +### get all connected am3s devices + +```js +AM3SModule.getAllConnectedDevices(); +``` + +### disconnect a am3s devices + +```js +AM3SModule.disconnect(mac); +``` + +### erase am3s memory + +```js +AM3SModule.reset(mac); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_RESET_AM) { + if (0 === event[AMProfileModule.RESET_AM]) { + console.log('reset fail'); + } else if (1 === event[AMProfileModule.RESET_AM]) { + console.log('reset success'); + } + } +}); +``` + +### get the user id bound to the device + +```js +AM3SModule.getUserId(mac); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_USERID_AM) { + console.log(event[AMProfileModule.USERID_AM]); + } +}); +``` + +### set the user id to the device + +```js +// id: user id, the range is 0~0x7fffffff +AM3SModule.setUserId(mac, id); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_SET_USERID_SUCCESS_AM) { + console.log('set success'); + } +}); +``` + +### setAlarmClock + +```js + +/** + * id: alarm clock id, you can set up to 3 alarm clocks + * hour: clock hour + * min: clock minates + * isRepeat: one time or repeat + * weeks: available on the day of the week + * isOn: open or close + */ + +AM3SModule.setAlarmClock(mac, 1, 12, 0, true, [1, 1, 1, 1, 1, 0, 0], false); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_SET_ALARMINFO_SUCCESS_AM) { + console.log('set success'); + } +}); +``` + +### get alarm clock ids + +```js +AM3SModule.getAlarmClockNum(mac); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_SET_ALARMINFO_SUCCESS_AM) { + console.log(event[AMProfileModule.GET_ALARMNUM_AM]); // e.g. 3 + console.log(event[AMProfileModule.GET_ALARMNUM_ID_AM]); // e.g. [1, 2, 3] + } +}); +``` + +### get alarm clock detail + +```js +AM3SModule.getAlarmClockDetail(mac, [1, 3, 2]); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_GET_ALARMINFO_AM) { + let dataArray = event[BPProfileModule.GET_ALARM_CLOCK_DETAIL]; + if (dataArray == undefined) { + result = "There is not offline data in device" + }else { + for (let i = 0; i < dataArray.length; i++) { + let offlineData = dataArray[i]; + console.log(offlineData[AMProfileModule.GET_ALARM_ID_AM]); + console.log(offlineData[AMProfileModule.GET_ALARM_TIME_AM]); + console.log(offlineData[AMProfileModule.GET_ALARM_ISREPEAT_AM]); + console.log(offlineData[AMProfileModule.GET_ALARM_WEEK_AM]); + console.log(offlineData[AMProfileModule.GET_ALARM_ISON_AM]); + } + } + } +}); +``` + +### delete alarm clock by id + +```js +AM3SModule.deleteAlarmClock(mac, 1); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_DELETE_ALARM_SUCCESS_AM) { + console.log('delete success'); + } +}); +``` + +### set activity reminder interval + +```js +/** + * hour + * min + * isOn: open or close + */ +AM3SModule.setActivityRemind(mac, 0, 30, false); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_SET_ACTIVITYREMIND_SUCCESS_AM) { + console.log('set success'); + } +}); +``` + +### get activity reminder interval + +```js +AM3SModule.getActivityRemind(mac); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_GET_ACTIVITY_REMIND_AM) { + console.log('get success'); + } +}); +``` + +### get am3s information + +```js +AM3SModule.queryAMState(mac); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_QUERY_STATE_AM) { + // 0 indicates waist + // 1 indicates wrist + // 2 indicates sleep + console.log(event[AMProfileModule.QUERY_STATE_AM]); + // battery level 0~10 + console.log(event[AMProfileModule.QUERY_BATTERY_AM]); + } +}); +``` + +### set user id to the am3s device + +```js +// The user id range is from 0 to 0x7fffffff +AM3SModule.setUserId(mac, 8); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_SET_USERID_SUCCESS_AM) { + console.log('set success'); + } +}); +``` + +### set user information to the am3s device + +```js +/** + * age + * height(cm) + * weight(lbs) + * gender 0: female, 1: male + * unit 0: miles, 1: kilometre + * target the goal of steps, the range is from 4 ~ 65535 + * activityLevel 1: sedentary, 2: active, 3: very active + */ +AM3SModule.setUserInfo(mac, 25, 183, 80, AMProfileModule.AM_SET_MALE, AMProfileModule.AM_SET_UNIT_METRIC, 10000, 1, 30); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_SET_USERINFO_SUCCESS_AM) { + console.log('set success'); + } +}); +``` + +### get user information stored in the am3s device + +```js +AM3SModule.getUserInfo(mac); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_GET_USERINFO_AM) { + console.log(event[AMProfileModule.GET_USER_AGE_AM]); + console.log(event[AMProfileModule.GET_USER_STEP_AM]); + console.log(event[AMProfileModule.GET_USER_HEIGHT_AM]); + console.log(event[AMProfileModule.GET_USER_SEX_AM]); + console.log(event[AMProfileModule.GET_USER_WEIGHT_AM]); + console.log(event[AMProfileModule.GET_USER_UNIT_AM]); + console.log(event[AMProfileModule.GET_USER_AGE_AM]); + console.log(event[AMProfileModule.GET_USER_TARGET1_AM]); + console.log(event[AMProfileModule.GET_USER_TARGET2_AM]); + console.log(event[AMProfileModule.GET_USER_TARGET3_AM]); + } +}); +``` + +### set bmr to the am3s device + +```js +// bmr Basal Metabolic Rate +AM3SModule.setUserBmr(mac, 2000); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_SET_BMR_SUCCESS_AM) { + console.log('set success'); + } +}); +``` + +### get activity steps + +```js +AM3SModule.syncActivityData(mac); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_SYNC_ACTIVITY_DATA_AM) { + let dataArray = event[AMProfileModule.SYNC_ACTIVITY_EACH_DATA_AM]; + if (dataArray == undefined) { + result = "There is not offline data in device" + }else { + for (let i = 0; i < dataArray.length; i++) { + let offlineData = dataArray[i]; + console.log(offlineData[AMProfileModule.SYNC_ACTIVITY_DATA_TIME_AM]); + console.log(offlineData[AMProfileModule.SYNC_ACTIVITY_DATA_STEP_AM]); + console.log(offlineData[AMProfileModule.SYNC_ACTIVITY_DATA_CALORIE_AM]); + console.log(offlineData[AMProfileModule.SYNC_ACTIVITY_DATA_STEP_LENGTH_AM]); + console.log(offlineData[AMProfileModule.DATAID]); + } + } + } +}); +``` + +### get current activity steps + +```js +AM3SModule.syncRealData(mac); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_SYNC_REAL_DATA_AM) { + console.log(offlineData[AMProfileModule.SYNC_REAL_STEP_AM]); + console.log(offlineData[AMProfileModule.SYNC_REAL_CALORIE_AM]); + console.log(offlineData[AMProfileModule.SYNC_REAL_TOTALCALORIE_AM]); + } +}); +``` + +### set current time to am3s device + +```js +AM3SModule.syncRealData(mac); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_SYNC_TIME_SUCCESS_AM) { + console.log('set success'); + } +}); +``` + +### set hour mode (12 or 24) to am3s device + +```js +/** + * AMProfileModule.AM_SET_12_HOUR_MODE(0) + * AMProfileModule.AM_SET_24_HOUR_MODE(1) + * AMProfileModule.AM_SET_EXCEPT_EUROPE_12_HOUR_MODE(2) + * AMProfileModule.AM_SET_EUROPE_12_HOUR_MODE(3) + * AMProfileModule.AM_SET_EXCEPT_EUROPE_24_HOUR_MODE(4) + * AMProfileModule.AM_SET_EUROPE_24_HOUR_MODE + **/ +AM3SModule.setHourMode(mac, AMProfileModule.AM_SET_24_HOUR_MODE); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_SET_HOUR_MODE_SUCCESS_AM) { + console.log('set success'); + } +}); +``` + +### get hour mode (12 or 24) from am3s device + + +```js +AM3SModule.getHourMode(mac); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_GET_HOUR_MODE_AM) { + console.log(event[AMProfileModule.GET_HOUR_MODE_AM]); + } +}); +``` + +### get sleep data stored in the am3s + +```js +AM3SModule.syncSleepData(mac); + +// response +notifyListener = DeviceEventEmitter.addListener(AM3SModule.Event_Notify, (event) => { + if (event.action === AMProfileModule.ACTION_SYNC_SLEEP_DATA_AM) { + let dataArray = event[AMProfileModule.SYNC_SLEEP_DATA_AM]; + if (dataArray == undefined) { + result = "There is not offline data in device" + }else { + for (let i = 0; i < dataArray.length; i++) { + let offlineData = dataArray[i]; + console.log(offlineData[AMProfileModule.SYNC_SLEEP_EACH_DATA_AM]); + console.log(offlineData[AMProfileModule.SYNC_SLEEP_DATA_TIME_AM]); + console.log(offlineData[AMProfileModule.SYNC_SLEEP_DATA_LEVEL_AM]); + console.log(offlineData[AMProfileModule.DATAID]); + } + } + } +}); +``` -- cgit