1. Change tag style for error log
[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  * Contact: Youngae Kang <youngae.kang@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
7  *          Genie Kim <daejins.kim@samsung.com>
8  *
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
12  *
13  * http://www.apache.org/licenses/LICENSE-2.0
14  *
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.
20  */
21
22 #ifdef HAVE_CONFIG_H
23 #include "config.h"
24 #endif
25
26 #include "location-satellite.h"
27 #include "location-log.h"
28
29 GType
30 location_satellite_get_type(void)
31 {
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);
37         }
38         return type_volatile;
39 }
40
41 static void
42 update_num_of_used(LocationSatellite *satellite)
43 {
44         g_return_if_fail(satellite);
45         satellite->num_of_sat_used = 0;
46         if (satellite->num_of_sat_inview > 0 && satellite->sat_inview) {
47                 int i = 0;
48                 for (i = 0 ; i < satellite->num_of_sat_inview ; i++)
49                         if (satellite->sat_inview[i].used) (satellite->num_of_sat_used)++;
50         }
51 }
52
53 EXPORT_API LocationSatellite *
54 location_satellite_new(int num_of_sat_inview)
55 {
56         LocationSatellite *satellite = g_slice_new0(LocationSatellite);
57         g_return_val_if_fail(satellite, NULL);
58
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);
62         return satellite;
63 }
64
65 EXPORT_API void
66 location_satellite_free(LocationSatellite *satellite)
67 {
68         g_return_if_fail(satellite);
69         g_free(satellite->sat_inview);
70         g_slice_free(LocationSatellite, satellite);
71 }
72
73 EXPORT_API LocationSatellite *
74 location_satellite_copy(const LocationSatellite *satellite)
75 {
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;
80         int i = 0;
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);
88         return satellite_dup;
89 }
90
91 EXPORT_API gboolean
92 location_satellite_get_satellite_details(const LocationSatellite *satellite,
93                                                                                 guint index, guint *prn, gboolean *used, guint *elevation, guint *azimuth, gint *snr)
94 {
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);
103
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;
109
110         return TRUE;
111 }
112
113 EXPORT_API gboolean
114 location_satellite_set_satellite_details(LocationSatellite *satellite,
115                                                                                 guint index, guint prn, gboolean used, guint elevation, guint azimuth, gint snr)
116 {
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);
120
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);
127
128         return TRUE;
129 }