4 * Copyright (c) 2010-2013 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Youngae Kang <youngae.kang@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
7 * Genie Kim <daejins.kim@samsung.com>
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
26 #include "location-satellite.h"
27 #include "location-log.h"
30 location_satellite_get_type(void)
32 static volatile gsize type_volatile = 0;
33 if (g_once_init_enter(&type_volatile)) {
34 GType type = g_boxed_type_register_static(g_intern_static_string("LocationSatellite"),
35 (GBoxedCopyFunc) location_satellite_copy, (GBoxedFreeFunc) location_satellite_free);
36 g_once_init_leave(&type_volatile, type);
42 update_num_of_used(LocationSatellite *satellite)
44 g_return_if_fail(satellite);
45 satellite->num_of_sat_used = 0;
46 if (satellite->num_of_sat_inview > 0 && satellite->sat_inview) {
48 for (i = 0 ; i < satellite->num_of_sat_inview ; i++)
49 if (satellite->sat_inview[i].used) (satellite->num_of_sat_used)++;
53 EXPORT_API LocationSatellite *
54 location_satellite_new(int num_of_sat_inview)
56 LocationSatellite *satellite = g_slice_new0(LocationSatellite);
57 g_return_val_if_fail(satellite, NULL);
59 satellite->num_of_sat_inview = num_of_sat_inview;
60 satellite->num_of_sat_used = 0;
61 satellite->sat_inview = g_new0(LocationSatelliteDetail, satellite->num_of_sat_inview);
66 location_satellite_free(LocationSatellite *satellite)
68 g_return_if_fail(satellite);
69 g_free(satellite->sat_inview);
70 g_slice_free(LocationSatellite, satellite);
73 EXPORT_API LocationSatellite *
74 location_satellite_copy(const LocationSatellite *satellite)
76 g_return_val_if_fail(satellite, NULL);
77 LocationSatellite *satellite_dup = location_satellite_new(satellite->num_of_sat_inview);
78 satellite_dup->timestamp = satellite->timestamp;
79 satellite_dup->num_of_sat_used = satellite->num_of_sat_used;
81 for (i = 0 ; i < satellite_dup->num_of_sat_inview ; i++)
82 location_satellite_set_satellite_details(satellite_dup, i,
83 satellite->sat_inview[i].prn,
84 satellite->sat_inview[i].used,
85 satellite->sat_inview[i].elevation,
86 satellite->sat_inview[i].azimuth,
87 satellite->sat_inview[i].snr);
92 location_satellite_get_satellite_details(const LocationSatellite *satellite,
93 guint index, guint *prn, gboolean *used, guint *elevation, guint *azimuth, gint *snr)
95 g_return_val_if_fail(satellite, FALSE);
96 g_return_val_if_fail(prn, FALSE);
97 g_return_val_if_fail(used, FALSE);
98 g_return_val_if_fail(elevation, FALSE);
99 g_return_val_if_fail(azimuth, FALSE);
100 g_return_val_if_fail(snr, FALSE);
101 g_return_val_if_fail(satellite->sat_inview, FALSE);
102 g_return_val_if_fail(index < satellite->num_of_sat_inview, FALSE);
104 *prn = satellite->sat_inview[index].prn;
105 *used = satellite->sat_inview[index].used;
106 *elevation = satellite->sat_inview[index].elevation;
107 *azimuth = satellite->sat_inview[index].azimuth;
108 *snr = satellite->sat_inview[index].snr;
114 location_satellite_set_satellite_details(LocationSatellite *satellite,
115 guint index, guint prn, gboolean used, guint elevation, guint azimuth, gint snr)
117 g_return_val_if_fail(satellite, FALSE);
118 g_return_val_if_fail(satellite->sat_inview, FALSE);
119 g_return_val_if_fail(index < satellite->num_of_sat_inview, FALSE);
121 satellite->sat_inview[index].prn = prn;
122 satellite->sat_inview[index].used = used;
123 satellite->sat_inview[index].elevation = elevation;
124 satellite->sat_inview[index].azimuth = azimuth;
125 satellite->sat_inview[index].snr = snr;
126 update_num_of_used(satellite);