I am trying to use the PEDOMETER on Tizen wearable 5.5. I can get the sensor listener to work and return the data. But the data is aggregated to something I can't find documentation about. So then I found that I need to do the calculation of steps myself (and found a few samples in the Tizen forum and GitHub) but the behavior I am getting when using the recorder is quite weird.
I am running this on my Samsung Watch, not in the emulator.
Here is my code:
void get_initial_pedometer_data() {
// Check the sensor recorder is supported
bool recorderSupported;
sensor_recorder_is_supported(SENSOR_HUMAN_PEDOMETER, &recorderSupported);
if (!recorderSupported) {
dlog_print(DLOG_WARN, LOG_TAG, "Recorder not supported.");
return;
}
// Create the sensor recorder and query
sensor_recorder_create_option(&option);
sensor_recorder_option_set_int(option, SENSOR_RECORDER_OPTION_RETENTION_PERIOD, 24);
sensor_recorder_start(SENSOR_HUMAN_PEDOMETER, option);
sensor_recorder_query_h query;
if (sensor_recorder_create_query(&query) != SENSOR_ERROR_NONE) {
dlog_print(DLOG_WARN, LOG_TAG, "Cannot create query");
return;
}
// Calculate and set the FROM/TO times for the query
time_t nowTime, startTime;
nowTime = time(NULL);
struct tm *tmNow = localtime(&nowTime);
dlog_print(DLOG_INFO, LOG_TAG, "Query end time [%ld]: %d %dh%dm%ds",
nowTime, tmNow->tm_mday, tmNow->tm_hour, tmNow->tm_min,
tmNow->tm_sec);
startTime = nowTime - (tmNow->tm_hour * 3600) - (tmNow->tm_min * 60)
- (tmNow->tm_sec);
struct tm *tmStart = localtime(&startTime);
dlog_print(DLOG_INFO, LOG_TAG, "Query start time [%ld]: %d %dh%dm%ds",
startTime, tmStart->tm_mday, tmStart->tm_hour, tmStart->tm_min,
tmStart->tm_sec);
if (sensor_recorder_query_set_time(query, SENSOR_RECORDER_QUERY_START_TIME, startTime) != SENSOR_ERROR_NONE) {
dlog_print(DLOG_WARN, LOG_TAG, "Cannot set query START option: %ld.", startTime);
return;
}
if (sensor_recorder_query_set_time(query, SENSOR_RECORDER_QUERY_END_TIME, nowTime) != SENSOR_ERROR_NONE) {
dlog_print(DLOG_WARN, LOG_TAG, "Cannot set query END option: %ld.", nowTime);
return;
}
if (sensor_recorder_query_set_int(query, SENSOR_RECORDER_QUERY_TIME_INTERVAL, 24 * 60) != SENSOR_ERROR_NONE) {
dlog_print(DLOG_WARN, LOG_TAG, "Cannot set query INTERVAL option: %d.", 24 * 60);
return;
}
if (sensor_recorder_query_set_time(query, SENSOR_RECORDER_QUERY_ANCHOR_TIME, startTime) != SENSOR_ERROR_NONE) {
dlog_print(DLOG_WARN, LOG_TAG, "Cannot set query ANCHOR option: %ld.", startTime);
return;
}
// Query the data
int error = sensor_recorder_read_sync(SENSOR_HUMAN_PEDOMETER, query, sensor_pedometer_data_cb, NULL);
if (error != SENSOR_ERROR_NONE) {
dlog_print(DLOG_WARN, LOG_TAG, "Cannot read query: %d", error);
}
}
EDIT: I have fixed the code above with the correct values to query from 0.00 to current time.
Then the callback method is:
bool sensor_pedometer_data_cb(sensor_type_e type, sensor_recorder_data_h data, int remains, sensor_error_e error, void *user_data) {
if (type != SENSOR_HUMAN_PEDOMETER) {
return true;
}
if (error != SENSOR_ERROR_NONE) {
dlog_print(DLOG_WARN, LOG_TAG, "Sensor record callback error: %d", error);
return true;
}
int step;
time_t start;
time_t end;
// Get the data
sensor_recorder_data_get_time(data, &start, &end);
struct tm *tmStart = localtime(&start);
// Print the START/END time
dlog_print(DLOG_INFO, LOG_TAG, "Start time: %d %d:%d:%d", tmStart->tm_mday, tmStart->tm_hour, tmStart->tm_min, tmStart->tm_sec);
struct tm *tmEnd = localtime(&end);
dlog_print(DLOG_INFO, LOG_TAG, "End time: %d %d:%d:%d", tmEnd->tm_mday, tmEnd->tm_hour, tmEnd->tm_min, tmEnd->tm_sec);
sensor_recorder_data_get_int(data, SENSOR_RECORDER_DATA_STEPS, &step);
step_count += step;
if (remains == 0) {
total_steps = step_count;
step_count = 0;
int error = sensor_listener_start(listener);
if (error != SENSOR_ERROR_NONE) {
dlog_print(DLOG_WARN, LOG_TAG, "Cannot start listener. Error: %d", error);
}
}
dlog_print(DLOG_INFO, LOG_TAG, "Step count: %d", total_steps);
return true;
}
Now with the recorded data and the sensor data, I can't find how to calculate the number of step for the current day. Is there any document that can explain it?