pos->latitude, pos->longitude, pos->altitude, pos->speed, pos->bearing, 0.0, accuracy);
}
-static void gps_update_batch_cb(batch_data_t *batch, void *user_data)
+static void gps_update_batch_cb(batch_data_t *bat, void *user_data)
{
lbs_server_s *lbs_server = (lbs_server_s *)(user_data);
- memcpy(&lbs_server->batch, batch, sizeof(batch_data_t));
+
+ int idx;
+ GVariant *batch_info = NULL;
+ GVariantBuilder *batch_builder = NULL;
+ memcpy(&lbs_server->batch, bat, sizeof(batch_data_t));
if (lbs_server->status != LBS_STATUS_AVAILABLE) {
lbs_server_emit_status_changed(lbs_server->lbs_dbus_server, LBS_SERVER_METHOD_GPS, LBS_STATUS_AVAILABLE);
lbs_server->status = LBS_STATUS_AVAILABLE;
}
- lbs_server_emit_batch_changed(lbs_server->lbs_dbus_server, batch->num_of_location);
+ batch_builder = g_variant_builder_new(G_VARIANT_TYPE("a(iddddddd)"));
+ for (idx = 0; idx < bat->num_of_location; idx++) {
+ g_variant_builder_add(batch_builder, "(iddddddd)", bat->data[idx].timestamp,
+ bat->data[idx].latitude, bat->data[idx].longitude, bat->data[idx].altitude,
+ bat->data[idx].speed, bat->data[idx].bearing,
+ bat->data[idx].hor_accuracy, bat->data[idx].ver_accuracy);
+ }
+
+ batch_info = g_variant_builder_end(batch_builder);
+
+ lbs_server_emit_batch_changed(lbs_server->lbs_dbus_server, bat->num_of_location, batch_info);
}
static void gps_update_satellite_cb(sv_data_t *sv, void *user_data)
static void batch_callback(GVariant *param, void *user_data)
{
- MOD_LOGD("batch_callback");
GpsManagerData *module = (GpsManagerData *)user_data;
g_return_if_fail(module);
g_return_if_fail(module->batch_cb);
- int num_of_location = 0;
- g_variant_get(param, "(i)", &num_of_location);
+ guint idx;
+ int num_of_location = 0, timestamp = 0;
+ double lat = 0.0, lon = 0.0, alt = 0.0, speed = 0.0, direction = 0.0, horizontal = 0.0, vertical = 0.0;
+
+ LocationBatch *batch = NULL;
+ GVariant *batch_data = NULL;
+ GVariantIter *batch_iter = NULL;
+
+ g_variant_get(param, "(i@a(iddddddd))", &num_of_location, &batch_data);
+ g_variant_get(batch_data, "a(iddddddd)", &batch_iter);
+ MOD_LOGD("batch_callback - batch size [%d]", num_of_location);
+
+ batch = location_batch_new(num_of_location);
+ batch->num_of_location = num_of_location;
+
+ GVariant *tmp_var = NULL;
+ for (idx = 0; idx < num_of_location; idx++) {
+ tmp_var = g_variant_iter_next_value(batch_iter);
+ g_variant_get(tmp_var, "(iddddddd)", ×tamp, &lat, &lon, &alt, &speed, &direction, &horizontal, &vertical);
+
+ MOD_LOGD("idx[%d] %d, %lf, %lf, %lf ", idx, timestamp, lat, lon, alt);
+ location_set_batch_details(batch, idx, lat, lon, alt, speed, direction, horizontal, vertical, timestamp);
+ g_variant_unref(tmp_var);
+ }
- module->batch_cb(TRUE, num_of_location, module->userdata);
+ module->batch_cb(TRUE, num_of_location, batch, module->userdata);
+ location_batch_free(batch);
+ g_variant_iter_free(batch_iter);
+ g_variant_unref(batch_data);
}
static void on_signal_batch_callback(const gchar *sig, GVariant *param, gpointer user_data)