ASSERT_TRUE(ret);
return true;
+}
+
+TESTCASE(skip_sensor_provider, mysensor_get_data)
+{
+ int err;
+ bool ret;
+ int handle;
+ sensor_t sensor;
+ sensor_type_t type;
+
+ called = false;
+
+ err = sensord_get_default_sensor_by_uri(MYSENSOR_BATCH_URI, &sensor);
+ ASSERT_EQ(err, 0);
+
+ handle = sensord_connect(sensor);
+
+ sensord_get_type(sensor, &type);
+ ASSERT_EQ(err, 0);
+
+ ret = sensord_start(handle, 0);
+ ASSERT_TRUE(ret);
+
+ sensor_data_t data ;
+ unsigned int data_id = type << SENSOR_SHIFT_TYPE | 0x1;
+
+ ret = sensord_get_data(handle, data_id, &data);
+ ASSERT_TRUE(ret);
+
+ _I("[%llu]", data.timestamp);
+ for (int j = 0; j < data.value_count; j++)
+ _I(" %f", data.values[j]);
+ _I("\n");
+
+ ret = sensord_stop(handle);
+ ASSERT_TRUE(ret);
+
+ ret = sensord_unregister_events(handle, 1);
+ ASSERT_TRUE(ret);
+
+ ret = sensord_disconnect(handle);
+ ASSERT_TRUE(ret);
+
+ return true;
}
\ No newline at end of file
sensor_handler::sensor_handler(const sensor_info &info)
: m_info(info)
-, m_last_data(NULL)
-, m_last_data_size(0)
{
const char *priv = sensor::utils::get_privilege(m_info.get_uri());
m_info.set_privilege(priv);
void sensor_handler::set_cache(sensor_data_t *data, int size)
{
- if (m_last_data_size != size) {
- m_last_data_size = size;
- if (m_last_data) {
- free(m_last_data);
- }
- m_last_data = (sensor_data_t*)malloc(m_last_data_size);
- retm_if(m_last_data == NULL, "Memory allocation failed");
- }
+ char* p = (char*) data;
- m_last_data_size = size;
- memcpy(m_last_data, data, size);
+ try {
+ m_sensor_data_cache.reserve(size);
+ } catch (...) {
+ _E("Memory allocation failed");
+ return;
+ }
+ m_sensor_data_cache.clear();
+ m_sensor_data_cache.insert(m_sensor_data_cache.begin(), p, p + size);
}
int sensor_handler::get_cache(sensor_data_t **data, int *len)
{
- retv_if(m_last_data == NULL, -ENODATA);
+ auto size = m_sensor_data_cache.size();
+ retv_if(size == 0, -ENODATA);
- *data = (sensor_data_t *)malloc(m_last_data_size);
- retvm_if(*data == NULL, -ENOMEM, "Memory allocation failed");
+ char* temp = (char *)malloc(size);
+ retvm_if(temp == NULL, -ENOMEM, "Memory allocation failed");
+ std::copy(m_sensor_data_cache.begin(), m_sensor_data_cache.end(), temp);
- memcpy(*data, m_last_data, m_last_data_size);
- *len = m_last_data_size;
+ *len = size;
+ *data = (sensor_data_t *)temp;
return 0;
}