diff options
| -rw-r--r-- | drivers/mfd/m4sensorhub-irq.c | 3 | ||||
| -rw-r--r-- | drivers/mfd/m4sensorhub-reg.h | 33 | ||||
| -rw-r--r-- | drivers/misc/m4sensorhub_heartrate.c | 14 | ||||
| -rw-r--r-- | drivers/misc/m4sensorhub_passive.c | 64 | ||||
| -rw-r--r-- | drivers/misc/m4sensorhub_pedometer.c | 19 | ||||
| -rw-r--r-- | include/linux/iio/m4sensorhub/m4sensorhub_passive.h | 8 | ||||
| -rw-r--r-- | include/linux/iio/m4sensorhub/m4sensorhub_pedometer.h | 6 | ||||
| -rw-r--r-- | include/linux/m4sensorhub/m4sensorhub_irqs.h | 3 | ||||
| -rw-r--r-- | include/linux/m4sensorhub/m4sensorhub_reg_enum.h | 13 |
9 files changed, 109 insertions, 54 deletions
diff --git a/drivers/mfd/m4sensorhub-irq.c b/drivers/mfd/m4sensorhub-irq.c index d569c47a8c5..b4b046b01d9 100644 --- a/drivers/mfd/m4sensorhub-irq.c +++ b/drivers/mfd/m4sensorhub-irq.c @@ -73,8 +73,9 @@ static const char *irq_name[] = { [M4SH_IRQ_WRIST_READY] = "WRIST_READY", [M4SH_IRQ_PASSIVE_BUFFER_FULL] = "PASSIVE_BUFFER_FULL", [M4SH_IRQ_LIGHTSENSOR_DATA_READY] = "ALS_DATA_READY", - [M4SH_IRQ_HRSENSOR_DATA_READY] = "HR_DATA_READY", + [M4SH_IRQ_HRSENSOR_DATA_READY] = "HRSENSOR_DATA_READY", [M4SH_IRQ_AP_ALARM_EXPIRED] = "AP_ALARM_EXPIRED", + [M4SH_IRQ_HEARTRATE_DATA_READY] = "HR_DATA_READY", }; /* -------------- Local Data Structures ------------- */ diff --git a/drivers/mfd/m4sensorhub-reg.h b/drivers/mfd/m4sensorhub-reg.h index 9e88714f806..a69c95da7c8 100644 --- a/drivers/mfd/m4sensorhub-reg.h +++ b/drivers/mfd/m4sensorhub-reg.h @@ -69,12 +69,12 @@ static const struct { [M4SH_REG_PEDOMETER_TESTCMD] = {M4SH_TYPE_PEDOMETER, 0x1, 1}, [M4SH_REG_PEDOMETER_ACTIVITY] = {M4SH_TYPE_PEDOMETER, 0x2, 1}, [M4SH_REG_PEDOMETER_EQUIPMENTTYPE] = {M4SH_TYPE_PEDOMETER, 0x3, 1}, - [M4SH_REG_PEDOMETER_TOTALSTEPS] = {M4SH_TYPE_PEDOMETER, 0x4, 2}, - [M4SH_REG_PEDOMETER_FLOORSCLIMBED] = {M4SH_TYPE_PEDOMETER, 0x6, 2}, - [M4SH_REG_PEDOMETER_TOTATDISTANCE] = {M4SH_TYPE_PEDOMETER, 0x8, 4}, - [M4SH_REG_PEDOMETER_CURRENTSPEED] = {M4SH_TYPE_PEDOMETER, 0xc, 4}, - [M4SH_REG_PEDOMETER_REPORTEDDISTANCE] = {M4SH_TYPE_PEDOMETER, 0x10, 4}, - [M4SH_REG_PEDOMETER_USERDISTANCE] = {M4SH_TYPE_PEDOMETER, 0x14, 4}, + [M4SH_REG_PEDOMETER_TOTALSTEPS] = {M4SH_TYPE_PEDOMETER, 0x4, 4}, + [M4SH_REG_PEDOMETER_REPORTEDDISTANCE] = {M4SH_TYPE_PEDOMETER, 0x8, 4}, + [M4SH_REG_PEDOMETER_USERDISTANCE] = {M4SH_TYPE_PEDOMETER, 0xc, 4}, + [M4SH_REG_PEDOMETER_TOTALDISTANCE] = {M4SH_TYPE_PEDOMETER, 0x10, 4}, + [M4SH_REG_PEDOMETER_FLOORSCLIMBED] = {M4SH_TYPE_PEDOMETER, 0x14, 2}, + [M4SH_REG_PEDOMETER_CURRENTSPEED] = {M4SH_TYPE_PEDOMETER, 0x16, 2}, [M4SH_REG_TCMD_OPCODE] = {M4SH_TYPE_TCMD, 0x0, 1}, [M4SH_REG_LOG_LOGENABLE] = {M4SH_TYPE_LOG, 0x0, 8}, [M4SH_REG_LOG_ISLOGIMMEDIATE] = {M4SH_TYPE_LOG, 0x8, 1}, @@ -111,6 +111,7 @@ static const struct { [M4SH_REG_METS_MSSAMPLETIME] = {M4SH_TYPE_METS, 0x2, 2}, [M4SH_REG_METS_METS] = {M4SH_TYPE_METS, 0x4, 4}, [M4SH_REG_METS_CALORIES] = {M4SH_TYPE_METS, 0x8, 4}, + [M4SH_REG_METS_HEALTHYMINUTES] = {M4SH_TYPE_METS, 0xc, 4}, [M4SH_REG_USERSETTINGS_VERSION] = {M4SH_TYPE_USERSETTINGS, 0x0, 1}, [M4SH_REG_USERSETTINGS_USERAGE] = {M4SH_TYPE_USERSETTINGS, 0x1, 1}, [M4SH_REG_USERSETTINGS_USERGENDER] = {M4SH_TYPE_USERSETTINGS, 0x2, 1}, @@ -162,15 +163,19 @@ static const struct { [M4SH_REG_GESTURE_CONFIDENCE3] = {M4SH_TYPE_GESTURE, 0x8, 1}, [M4SH_REG_GESTURE_VALUE3] = {M4SH_TYPE_GESTURE, 0x9, 1}, [M4SH_REG_PASSIVE_TIMESTAMP] = {M4SH_TYPE_PASSIVE, 0x0, 48}, - [M4SH_REG_PASSIVE_STEPS] = {M4SH_TYPE_PASSIVE, 0x30, 48}, - [M4SH_REG_PASSIVE_CALORIES] = {M4SH_TYPE_PASSIVE, 0x60, 48}, - [M4SH_REG_PASSIVE_FLOORSCLIMBED] = {M4SH_TYPE_PASSIVE, 0x90, 48}, + [M4SH_REG_PASSIVE_STEPS] = {M4SH_TYPE_PASSIVE, 0x30, 24}, + [M4SH_REG_PASSIVE_CALORIES] = {M4SH_TYPE_PASSIVE, 0x48, 24}, + [M4SH_REG_PASSIVE_HEARTRATE] = {M4SH_TYPE_PASSIVE, 0x60, 24}, + [M4SH_REG_PASSIVE_HRCONFIDENCE] = {M4SH_TYPE_PASSIVE, 0x78, 12}, + [M4SH_REG_PASSIVE_HEALTHYMINUTES] = {M4SH_TYPE_PASSIVE, 0x84, 12}, [M4SH_REG_EMG_SIGNALCOUNT] = {M4SH_TYPE_EMG, 0x0, 1}, [M4SH_REG_EMG_DUMMY] = {M4SH_TYPE_EMG, 0x1, 1}, [M4SH_REG_EMG_SAMPLERATE] = {M4SH_TYPE_EMG, 0x2, 2}, [M4SH_REG_EMG_SIGNALS] = {M4SH_TYPE_EMG, 0x4, 326}, - [M4SH_REG_HEARTRATE_HEARTRATE] = {M4SH_TYPE_HEARTRATE, 0x0, 2}, - [M4SH_REG_HEARTRATE_CONFIDENCE] = {M4SH_TYPE_HEARTRATE, 0x2, 1}, + [M4SH_REG_HEARTRATE_ENABLE] = {M4SH_TYPE_HEARTRATE, 0x0, 4}, + [M4SH_REG_HEARTRATE_APSAMPLERATE] = {M4SH_TYPE_HEARTRATE, 0x4, 4}, + [M4SH_REG_HEARTRATE_HEARTRATE] = {M4SH_TYPE_HEARTRATE, 0x8, 2}, + [M4SH_REG_HEARTRATE_CONFIDENCE] = {M4SH_TYPE_HEARTRATE, 0xa, 1}, [M4SH_REG_HRSENSOR_VERSION] = {M4SH_TYPE_HRSENSOR, 0x0, 1}, [M4SH_REG_HRSENSOR_DUMMY] = {M4SH_TYPE_HRSENSOR, 0x1, 1}, [M4SH_REG_HRSENSOR_SAMPLERATE] = {M4SH_TYPE_HRSENSOR, 0x2, 2}, @@ -195,7 +200,7 @@ static const unsigned int bank_size_tbl[M4SH_TYPE__NUM] = { [M4SH_TYPE_FUSION] = 59, [M4SH_TYPE_COMPASS] = 17, [M4SH_TYPE_GYRO] = 16, - [M4SH_TYPE_METS] = 12, + [M4SH_TYPE_METS] = 16, [M4SH_TYPE_USERSETTINGS] = 8, [M4SH_TYPE_POWER] = 8, [M4SH_TYPE_LOCATION] = 14, @@ -204,9 +209,9 @@ static const unsigned int bank_size_tbl[M4SH_TYPE__NUM] = { [M4SH_TYPE_TIMEPIECE] = 8, [M4SH_TYPE_WRIST] = 8, [M4SH_TYPE_GESTURE] = 10, - [M4SH_TYPE_PASSIVE] = 192, + [M4SH_TYPE_PASSIVE] = 144, [M4SH_TYPE_EMG] = 330, - [M4SH_TYPE_HEARTRATE] = 3, + [M4SH_TYPE_HEARTRATE] = 11, [M4SH_TYPE_HRSENSOR] = 13, [M4SH_TYPE_LIGHTSENSOR] = 6, }; diff --git a/drivers/misc/m4sensorhub_heartrate.c b/drivers/misc/m4sensorhub_heartrate.c index fc207b32834..9d785ab4b06 100644 --- a/drivers/misc/m4sensorhub_heartrate.c +++ b/drivers/misc/m4sensorhub_heartrate.c @@ -97,8 +97,8 @@ static int m4hrt_set_samplerate(struct iio_dev *iio, int16_t rate) goto m4hrt_set_samplerate_irq_check; size = m4sensorhub_reg_getsize(dd->m4, - M4SH_REG_HRSENSOR_SAMPLERATE); - err = m4sensorhub_reg_write(dd->m4, M4SH_REG_HRSENSOR_SAMPLERATE, + M4SH_REG_HEARTRATE_APSAMPLERATE); + err = m4sensorhub_reg_write(dd->m4, M4SH_REG_HEARTRATE_APSAMPLERATE, (char *)&rate, m4sh_no_mask); if (err < 0) { m4hrt_err("%s: Failed to set sample rate.\n", __func__); @@ -116,7 +116,7 @@ m4hrt_set_samplerate_irq_check: /* Enable the IRQ if necessary */ if (!(dd->status & (1 << M4HRT_IRQ_ENABLED_BIT))) { err = m4sensorhub_irq_enable(dd->m4, - M4SH_IRQ_HRSENSOR_DATA_READY); + M4SH_IRQ_HEARTRATE_DATA_READY); if (err < 0) { m4hrt_err("%s: Failed to enable irq.\n", __func__); @@ -128,7 +128,7 @@ m4hrt_set_samplerate_irq_check: /* Disable the IRQ if necessary */ if (dd->status & (1 << M4HRT_IRQ_ENABLED_BIT)) { err = m4sensorhub_irq_disable(dd->m4, - M4SH_IRQ_HRSENSOR_DATA_READY); + M4SH_IRQ_HEARTRATE_DATA_READY); if (err < 0) { m4hrt_err("%s: Failed to disable irq.\n", __func__); @@ -482,7 +482,7 @@ static int m4hrt_driver_init(struct init_calldata *p_arg) } err = m4sensorhub_irq_register(dd->m4, - M4SH_IRQ_HRSENSOR_DATA_READY, m4hrt_isr, iio); + M4SH_IRQ_HEARTRATE_DATA_READY, m4hrt_isr, iio); if (err < 0) { m4hrt_err("%s: Failed to register M4 IRQ.\n", __func__); goto m4hrt_driver_init_fail; @@ -552,11 +552,11 @@ static int __exit m4hrt_remove(struct platform_device *pdev) mutex_lock(&(dd->mutex)); if (dd->status & (1 << M4HRT_IRQ_ENABLED_BIT)) { m4sensorhub_irq_disable(dd->m4, - M4SH_IRQ_HRSENSOR_DATA_READY); + M4SH_IRQ_HEARTRATE_DATA_READY); dd->status = dd->status & ~(1 << M4HRT_IRQ_ENABLED_BIT); } m4sensorhub_irq_unregister(dd->m4, - M4SH_IRQ_HRSENSOR_DATA_READY); + M4SH_IRQ_HEARTRATE_DATA_READY); m4sensorhub_unregister_initcall(m4hrt_driver_init); m4hrt_remove_iiodev(iio); /* dd is freed here */ diff --git a/drivers/misc/m4sensorhub_passive.c b/drivers/misc/m4sensorhub_passive.c index c62ae7fac97..d94ba4381ac 100644 --- a/drivers/misc/m4sensorhub_passive.c +++ b/drivers/misc/m4sensorhub_passive.c @@ -57,9 +57,11 @@ static void m4pas_isr(enum m4sensorhub_irqs int_event, void *handle) struct m4pas_driver_data *dd = iio_priv(iio); int size = 0; uint32_t passive_timestamp[M4PAS_NUM_PASSIVE_BUFFERS]; - uint32_t steps[M4PAS_NUM_PASSIVE_BUFFERS]; - uint32_t calories[M4PAS_NUM_PASSIVE_BUFFERS]; - uint32_t floors_climbed[M4PAS_NUM_PASSIVE_BUFFERS]; + uint16_t steps[M4PAS_NUM_PASSIVE_BUFFERS]; + uint16_t calories[M4PAS_NUM_PASSIVE_BUFFERS]; + uint16_t heartrate[M4PAS_NUM_PASSIVE_BUFFERS]; + uint8_t hrconfidence[M4PAS_NUM_PASSIVE_BUFFERS]; + uint8_t healthy_minutes[M4PAS_NUM_PASSIVE_BUFFERS]; int i = 0; mutex_lock(&(dd->mutex)); @@ -104,16 +106,44 @@ static void m4pas_isr(enum m4sensorhub_irqs int_event, void *handle) goto m4pas_isr_fail; } - size = m4sensorhub_reg_getsize(dd->m4, M4SH_REG_PASSIVE_FLOORSCLIMBED); - err = m4sensorhub_reg_read(dd->m4, M4SH_REG_PASSIVE_FLOORSCLIMBED, - (char *)&(floors_climbed)); + size = m4sensorhub_reg_getsize(dd->m4, M4SH_REG_PASSIVE_HEARTRATE); + err = m4sensorhub_reg_read(dd->m4, M4SH_REG_PASSIVE_HEARTRATE, + (char *)&(heartrate)); if (err < 0) { - m4pas_err("%s: Failed to read floors_climbed data.\n", + m4pas_err("%s: Failed to read heartrate data.\n", __func__); goto m4pas_isr_fail; } else if (err != size) { m4pas_err("%s: Read %d bytes instead of %d for %s.\n", - __func__, err, size, "floors_climbed"); + __func__, err, size, "heartrate"); + err = -EBADE; + goto m4pas_isr_fail; + } + + size = m4sensorhub_reg_getsize(dd->m4, M4SH_REG_PASSIVE_HRCONFIDENCE); + err = m4sensorhub_reg_read(dd->m4, M4SH_REG_PASSIVE_HRCONFIDENCE, + (char *)&(hrconfidence)); + if (err < 0) { + m4pas_err("%s: Failed to read hrconfidence data.\n", + __func__); + goto m4pas_isr_fail; + } else if (err != size) { + m4pas_err("%s: Read %d bytes instead of %d for %s.\n", + __func__, err, size, "hrconfidence"); + err = -EBADE; + goto m4pas_isr_fail; + } + + size = m4sensorhub_reg_getsize(dd->m4, M4SH_REG_PASSIVE_HEALTHYMINUTES); + err = m4sensorhub_reg_read(dd->m4, M4SH_REG_PASSIVE_HEALTHYMINUTES, + (char *)&(healthy_minutes)); + if (err < 0) { + m4pas_err("%s: Failed to read healthy_minutes data.\n", + __func__); + goto m4pas_isr_fail; + } else if (err != size) { + m4pas_err("%s: Read %d bytes instead of %d for %s.\n", + __func__, err, size, "healthy_minutes"); err = -EBADE; goto m4pas_isr_fail; } @@ -122,11 +152,19 @@ static void m4pas_isr(enum m4sensorhub_irqs int_event, void *handle) dd->iiodat[i].passive_timestamp = passive_timestamp[i]; dd->iiodat[i].steps = steps[i]; dd->iiodat[i].calories = calories[i]; - dd->iiodat[i].floors_climbed = floors_climbed[i]; + dd->iiodat[i].heartrate = heartrate[i]; + dd->iiodat[i].hrconfidence = hrconfidence[i]; + dd->iiodat[i].healthy_minutes = healthy_minutes[i]; dd->iiodat[i].timestamp = iio_get_time_ns(); - iio_push_to_buffers(iio, (unsigned char *)&(dd->iiodat[i])); } + /* + * For some reason, IIO knows we are sending an array, + * so all M4PAS_NUM_PASSIVE_BUFFERS indicies will be sent + * in this one call (it does not need to go in the for-loop). + */ + iio_push_to_buffers(iio, (unsigned char *)&(dd->iiodat[0])); + m4pas_isr_fail: if (err < 0) m4pas_err("%s: Failed with error code %d.\n", __func__, err); @@ -246,12 +284,14 @@ static ssize_t m4pas_iiodata_show(struct device *dev, buf[0] = '\0'; /* Start with NULL terminator for concatenation */; for (i = 0; i < M4PAS_NUM_PASSIVE_BUFFERS; i++) { size = snprintf(buf, PAGE_SIZE, - "%s%s%d\n%s%u\n%s%u\n%s%u\n%s%u\n", + "%s%s%d\n%s%u\n%s%hu\n%s%hu\n%s%hu\n%s%hhu\n%s%hhu\n", buf, "Buffer ", i, "passive_timestamp: ", dd->iiodat[i].passive_timestamp, "steps: ", dd->iiodat[i].steps, "calories: ", dd->iiodat[i].calories, - "floors_climbed: ", dd->iiodat[i].floors_climbed); + "heartrate: ", dd->iiodat[i].heartrate, + "hrconfidence: ", dd->iiodat[i].hrconfidence, + "healthy_minutes: ", dd->iiodat[i].healthy_minutes); } mutex_unlock(&(dd->mutex)); return size; diff --git a/drivers/misc/m4sensorhub_pedometer.c b/drivers/misc/m4sensorhub_pedometer.c index 68b2299e1ac..87fd15be3f3 100644 --- a/drivers/misc/m4sensorhub_pedometer.c +++ b/drivers/misc/m4sensorhub_pedometer.c @@ -74,8 +74,8 @@ static int m4ped_read_report_data(struct iio_dev *iio, } size = m4sensorhub_reg_getsize(dd->m4, - M4SH_REG_PEDOMETER_TOTATDISTANCE); - err = m4sensorhub_reg_read(dd->m4, M4SH_REG_PEDOMETER_TOTATDISTANCE, + M4SH_REG_PEDOMETER_TOTALDISTANCE); + err = m4sensorhub_reg_read(dd->m4, M4SH_REG_PEDOMETER_TOTALDISTANCE, (char *)&(dd->iiodat.total_distance)); if (err < 0) { m4ped_err("%s: Failed to read total_distance data.\n", @@ -115,17 +115,16 @@ static int m4ped_read_report_data(struct iio_dev *iio, goto m4ped_read_fail; } - size = m4sensorhub_reg_getsize(dd->m4, - M4SH_REG_PEDOMETER_FLOORSCLIMBED); - err = m4sensorhub_reg_read(dd->m4, M4SH_REG_PEDOMETER_FLOORSCLIMBED, - (char *)&(dd->iiodat.floors_climbed)); + size = m4sensorhub_reg_getsize(dd->m4, M4SH_REG_METS_HEALTHYMINUTES); + err = m4sensorhub_reg_read(dd->m4, M4SH_REG_METS_HEALTHYMINUTES, + (char *)&(dd->iiodat.healthy_minutes)); if (err < 0) { - m4ped_err("%s: Failed to read floors_climbed data.\n", + m4ped_err("%s: Failed to read healthy_minutes data.\n", __func__); goto m4ped_read_fail; } else if (err != size) { m4ped_err("%s: Read %d bytes instead of %d for %s.\n", - __func__, err, size, "floors_climbed"); + __func__, err, size, "healthy_minutes"); err = -EBADE; goto m4ped_read_fail; } @@ -301,12 +300,12 @@ static ssize_t m4ped_iiodata_show(struct device *dev, mutex_lock(&(dd->mutex)); size = snprintf(buf, PAGE_SIZE, - "%s%hhu\n%s%u\n%s%hu\n%s%u\n%s%hu\n%s%u\n", + "%s%hhu\n%s%u\n%s%u\n%s%hu\n%s%u\n%s%u\n", "ped_activity: ", dd->iiodat.ped_activity, "total_distance: ", dd->iiodat.total_distance, "total_steps: ", dd->iiodat.total_steps, "current_speed: ", dd->iiodat.current_speed, - "floors_climbed: ", dd->iiodat.floors_climbed, + "healthy_minutes: ", dd->iiodat.healthy_minutes, "calories: ", dd->iiodat.calories); mutex_unlock(&(dd->mutex)); return size; diff --git a/include/linux/iio/m4sensorhub/m4sensorhub_passive.h b/include/linux/iio/m4sensorhub/m4sensorhub_passive.h index 4663fc767d1..5b34b3a3222 100644 --- a/include/linux/iio/m4sensorhub/m4sensorhub_passive.h +++ b/include/linux/iio/m4sensorhub/m4sensorhub_passive.h @@ -25,9 +25,11 @@ struct m4sensorhub_passive_iio_data { uint32_t passive_timestamp; - uint32_t steps; - uint32_t calories; - uint32_t floors_climbed; + uint16_t steps; + uint16_t calories; + uint16_t heartrate; + uint8_t hrconfidence; + uint8_t healthy_minutes; long long timestamp; } __packed; diff --git a/include/linux/iio/m4sensorhub/m4sensorhub_pedometer.h b/include/linux/iio/m4sensorhub/m4sensorhub_pedometer.h index f462a393684..2e4d6cd9bec 100644 --- a/include/linux/iio/m4sensorhub/m4sensorhub_pedometer.h +++ b/include/linux/iio/m4sensorhub/m4sensorhub_pedometer.h @@ -26,9 +26,9 @@ struct m4sensorhub_pedometer_iio_data { uint8_t ped_activity; uint32_t total_distance; - uint16_t total_steps; - uint32_t current_speed; - uint16_t floors_climbed; + uint32_t total_steps; + uint16_t current_speed; + uint32_t healthy_minutes; uint32_t calories; long long timestamp; } __packed; diff --git a/include/linux/m4sensorhub/m4sensorhub_irqs.h b/include/linux/m4sensorhub/m4sensorhub_irqs.h index 562365e679e..597adf9dba6 100644 --- a/include/linux/m4sensorhub/m4sensorhub_irqs.h +++ b/include/linux/m4sensorhub/m4sensorhub_irqs.h @@ -81,6 +81,9 @@ enum m4sensorhub_irqs { /* INT2 0x02 : AP-RTC alarm expired */ M4SH_IRQ_AP_ALARM_EXPIRED, + /* INT2 0x04 : HR data ready */ + M4SH_IRQ_HEARTRATE_DATA_READY, + /* Number of allocated interrupts */ M4SH_IRQ__NUM }; diff --git a/include/linux/m4sensorhub/m4sensorhub_reg_enum.h b/include/linux/m4sensorhub/m4sensorhub_reg_enum.h index f50c11742bd..1e2fc6ac15b 100644 --- a/include/linux/m4sensorhub/m4sensorhub_reg_enum.h +++ b/include/linux/m4sensorhub/m4sensorhub_reg_enum.h @@ -64,11 +64,11 @@ enum m4sensorhub_reg { M4SH_REG_PEDOMETER_ACTIVITY, M4SH_REG_PEDOMETER_EQUIPMENTTYPE, M4SH_REG_PEDOMETER_TOTALSTEPS, - M4SH_REG_PEDOMETER_FLOORSCLIMBED, - M4SH_REG_PEDOMETER_TOTATDISTANCE, - M4SH_REG_PEDOMETER_CURRENTSPEED, M4SH_REG_PEDOMETER_REPORTEDDISTANCE, M4SH_REG_PEDOMETER_USERDISTANCE, + M4SH_REG_PEDOMETER_TOTALDISTANCE, + M4SH_REG_PEDOMETER_FLOORSCLIMBED, + M4SH_REG_PEDOMETER_CURRENTSPEED, M4SH_REG_TCMD_OPCODE, M4SH_REG_LOG_LOGENABLE, M4SH_REG_LOG_ISLOGIMMEDIATE, @@ -105,6 +105,7 @@ enum m4sensorhub_reg { M4SH_REG_METS_MSSAMPLETIME, M4SH_REG_METS_METS, M4SH_REG_METS_CALORIES, + M4SH_REG_METS_HEALTHYMINUTES, M4SH_REG_USERSETTINGS_VERSION, M4SH_REG_USERSETTINGS_USERAGE, M4SH_REG_USERSETTINGS_USERGENDER, @@ -158,11 +159,15 @@ enum m4sensorhub_reg { M4SH_REG_PASSIVE_TIMESTAMP, M4SH_REG_PASSIVE_STEPS, M4SH_REG_PASSIVE_CALORIES, - M4SH_REG_PASSIVE_FLOORSCLIMBED, + M4SH_REG_PASSIVE_HEARTRATE, + M4SH_REG_PASSIVE_HRCONFIDENCE, + M4SH_REG_PASSIVE_HEALTHYMINUTES, M4SH_REG_EMG_SIGNALCOUNT, M4SH_REG_EMG_DUMMY, M4SH_REG_EMG_SAMPLERATE, M4SH_REG_EMG_SIGNALS, + M4SH_REG_HEARTRATE_ENABLE, + M4SH_REG_HEARTRATE_APSAMPLERATE, M4SH_REG_HEARTRATE_HEARTRATE, M4SH_REG_HEARTRATE_CONFIDENCE, M4SH_REG_HRSENSOR_VERSION, |