4 * Copyright (c) 2010-2013 Samsung Electronics Co., Ltd. All rights reserved.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
23 #include "location-satellite.h"
24 #include "location-log.h"
27 location_satellite_get_type(void)
29 static volatile gsize type_volatile = 0;
30 if (g_once_init_enter(&type_volatile)) {
31 GType type = g_boxed_type_register_static(g_intern_static_string("LocationSatellite"),
32 (GBoxedCopyFunc) location_satellite_copy, (GBoxedFreeFunc) location_satellite_free);
33 g_once_init_leave(&type_volatile, type);
39 update_num_of_used(LocationSatellite *satellite)
41 g_return_if_fail(satellite);
42 satellite->num_of_sat_used = 0;
43 if (satellite->num_of_sat_inview > 0 && satellite->sat_inview) {
45 for (i = 0 ; i < satellite->num_of_sat_inview ; i++)
46 if (satellite->sat_inview[i].used) (satellite->num_of_sat_used)++;
50 EXPORT_API LocationSatellite *
51 location_satellite_new(int num_of_sat_inview)
53 LocationSatellite *satellite = g_slice_new0(LocationSatellite);
54 g_return_val_if_fail(satellite, NULL);
56 satellite->num_of_sat_inview = num_of_sat_inview;
57 satellite->num_of_sat_used = 0;
58 satellite->sat_inview = g_new0(LocationSatelliteDetail, satellite->num_of_sat_inview);
63 location_satellite_free(LocationSatellite *satellite)
65 g_return_if_fail(satellite);
66 g_free(satellite->sat_inview);
67 g_slice_free(LocationSatellite, satellite);
70 EXPORT_API LocationSatellite *
71 location_satellite_copy(const LocationSatellite *satellite)
73 g_return_val_if_fail(satellite, NULL);
74 LocationSatellite *satellite_dup = location_satellite_new(satellite->num_of_sat_inview);
75 satellite_dup->timestamp = satellite->timestamp;
76 satellite_dup->num_of_sat_used = satellite->num_of_sat_used;
78 for (i = 0 ; i < satellite_dup->num_of_sat_inview ; i++)
79 location_satellite_set_satellite_details(satellite_dup, i,
80 satellite->sat_inview[i].prn,
81 satellite->sat_inview[i].used,
82 satellite->sat_inview[i].elevation,
83 satellite->sat_inview[i].azimuth,
84 satellite->sat_inview[i].snr);
89 location_satellite_get_satellite_details(const LocationSatellite *satellite,
90 guint index, guint *prn, gboolean *used, guint *elevation, guint *azimuth, gint *snr)
92 g_return_val_if_fail(satellite, FALSE);
93 g_return_val_if_fail(prn, FALSE);
94 g_return_val_if_fail(used, FALSE);
95 g_return_val_if_fail(elevation, FALSE);
96 g_return_val_if_fail(azimuth, FALSE);
97 g_return_val_if_fail(snr, FALSE);
98 g_return_val_if_fail(satellite->sat_inview, FALSE);
99 g_return_val_if_fail(index < satellite->num_of_sat_inview, FALSE);
101 *prn = satellite->sat_inview[index].prn;
102 *used = satellite->sat_inview[index].used;
103 *elevation = satellite->sat_inview[index].elevation;
104 *azimuth = satellite->sat_inview[index].azimuth;
105 *snr = satellite->sat_inview[index].snr;
111 location_satellite_set_satellite_details(LocationSatellite *satellite,
112 guint index, guint prn, gboolean used, guint elevation, guint azimuth, gint snr)
114 g_return_val_if_fail(satellite, FALSE);
115 g_return_val_if_fail(satellite->sat_inview, FALSE);
116 g_return_val_if_fail(index < satellite->num_of_sat_inview, FALSE);
118 satellite->sat_inview[index].prn = prn;
119 satellite->sat_inview[index].used = used;
120 satellite->sat_inview[index].elevation = elevation;
121 satellite->sat_inview[index].azimuth = azimuth;
122 satellite->sat_inview[index].snr = snr;
123 update_num_of_used(satellite);