removed wrong contacts, added authors
[platform/core/location/lbs-location.git] / location / manager / location-satellite.c
1 /*
2  * libslp-location
3  *
4  * Copyright (c) 2010-2013 Samsung Electronics Co., Ltd. All rights reserved.
5  *
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
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  */
18
19 #ifdef HAVE_CONFIG_H
20 #include "config.h"
21 #endif
22
23 #include "location-satellite.h"
24 #include "location-log.h"
25
26 GType
27 location_satellite_get_type(void)
28 {
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);
34         }
35         return type_volatile;
36 }
37
38 static void
39 update_num_of_used(LocationSatellite *satellite)
40 {
41         g_return_if_fail(satellite);
42         satellite->num_of_sat_used = 0;
43         if (satellite->num_of_sat_inview > 0 && satellite->sat_inview) {
44                 int i = 0;
45                 for (i = 0 ; i < satellite->num_of_sat_inview ; i++)
46                         if (satellite->sat_inview[i].used) (satellite->num_of_sat_used)++;
47         }
48 }
49
50 EXPORT_API LocationSatellite *
51 location_satellite_new(int num_of_sat_inview)
52 {
53         LocationSatellite *satellite = g_slice_new0(LocationSatellite);
54         g_return_val_if_fail(satellite, NULL);
55
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);
59         return satellite;
60 }
61
62 EXPORT_API void
63 location_satellite_free(LocationSatellite *satellite)
64 {
65         g_return_if_fail(satellite);
66         g_free(satellite->sat_inview);
67         g_slice_free(LocationSatellite, satellite);
68 }
69
70 EXPORT_API LocationSatellite *
71 location_satellite_copy(const LocationSatellite *satellite)
72 {
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;
77         int i = 0;
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);
85         return satellite_dup;
86 }
87
88 EXPORT_API gboolean
89 location_satellite_get_satellite_details(const LocationSatellite *satellite,
90                                                                                 guint index, guint *prn, gboolean *used, guint *elevation, guint *azimuth, gint *snr)
91 {
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);
100
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;
106
107         return TRUE;
108 }
109
110 EXPORT_API gboolean
111 location_satellite_set_satellite_details(LocationSatellite *satellite,
112                                                                                 guint index, guint prn, gboolean used, guint elevation, guint azimuth, gint snr)
113 {
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);
117
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);
124
125         return TRUE;
126 }