Merge "[GyroCal/OTC-Gyro] Algorithm Sync for MR1" into oc-mr1-dev
diff --git a/firmware/os/core/sensors.c b/firmware/os/core/sensors.c
index d96fdc6..307b897 100644
--- a/firmware/os/core/sensors.c
+++ b/firmware/os/core/sensors.c
@@ -526,6 +526,7 @@
     if (s && s->currentRate != SENSOR_RATE_OFF && s->currentRate < SENSOR_RATE_POWERING_ON) {
         s->currentRate = evt->value1;
         s->currentLatency = evt->value2;
+        sensorReconfig(s, sensorCalcHwRate(s, 0, 0), sensorCalcHwLatency(s));
         osEnqueueEvtOrFree(sensorGetMyCfgEventType(s->si->sensorType), evt, sensorInternalEvtFreeF);
     } else {
         slabAllocatorFree(mInternalEvents, evt);
diff --git a/sensorhal/hubconnection.cpp b/sensorhal/hubconnection.cpp
index 01b95df..0025b40 100644
--- a/sensorhal/hubconnection.cpp
+++ b/sensorhal/hubconnection.cpp
@@ -1438,9 +1438,6 @@
                 ev.sensor = 0;
                 ev.meta_data.what = META_DATA_FLUSH_COMPLETE;
                 ev.meta_data.sensor = flush.handle;
-                if (mSensorState[flush.handle].enable) {
-                    updateSampleRate(flush.handle, CONFIG_CMD_FLUSH);
-                }
 
                 if (flush.internal) {
                     if (flush.handle == COMMS_SENSOR_ACCEL_WRIST_AWARE)
@@ -1756,12 +1753,14 @@
         initConfigCmd(&cmd, handle);
 
         ret = TEMP_FAILURE_RETRY(::write(mFd, &cmd, sizeof(cmd)));
-        if (ret == sizeof(cmd))
+        if (ret == sizeof(cmd)) {
+            updateSampleRate(handle, CONFIG_CMD_ENABLE); // batch uses CONFIG_CMD_ENABLE command
             ALOGV("queueBatch: sensor=%d, handle=%d, period=%" PRId64 ", latency=%" PRId64,
                     cmd.sensorType, handle, sampling_period_ns, max_report_latency_ns);
-        else
+        } else {
             ALOGW("queueBatch: failed to send command: sensor=%d, handle=%d, period=%" PRId64 ", latency=%" PRId64,
                     cmd.sensorType, handle, sampling_period_ns, max_report_latency_ns);
+        }
     } else {
         ALOGV("queueBatch: unhandled handle=%d, period=%" PRId64 ", latency=%" PRId64,
                 handle, sampling_period_ns, max_report_latency_ns);
@@ -2208,13 +2207,7 @@
     }
 
     switch (reason) {
-        case CONFIG_CMD_ENABLE:
-            // filter out duplicated enable
-            if (mSensorState[handle].desiredTSample != INT64_MAX) {
-                break;
-            }
-            // fall through
-        case CONFIG_CMD_FLUSH: {
+        case CONFIG_CMD_ENABLE: {
             constexpr uint64_t PERIOD_800HZ = 1250000;
             uint64_t period_multiplier =
                     (frequency_q10_to_period_ns(mSensorState[handle].rate) + PERIOD_800HZ / 2)