Git init
[framework/location/libslp-location.git] / location / location-satellite.c
1 /*
2  * libslp-location
3  *
4  * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
7  *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.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/location-satellite.h"
27 #include "location/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 (
35                         g_intern_static_string ("LocationSatellite"),
36                         (GBoxedCopyFunc) location_satellite_copy,
37                         (GBoxedFreeFunc) location_satellite_free);
38                 g_once_init_leave(&type_volatile, type);
39         }
40         return type_volatile;
41 }
42
43 static void
44 update_num_of_used (LocationSatellite *satellite)
45 {
46         g_return_if_fail(satellite);
47         satellite->num_of_sat_used = 0;
48         if (satellite->num_of_sat_inview > 0 && satellite->sat_inview) {
49                 int i = 0;
50                 for (i = 0 ; i < satellite->num_of_sat_inview ; i++)
51                         if(satellite->sat_inview[i].used) (satellite->num_of_sat_used)++;
52         }
53 }
54
55 EXPORT_API LocationSatellite*
56 location_satellite_new (int num_of_sat_inview)
57 {
58         LocationSatellite* satellite = g_slice_new0(LocationSatellite);
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->num_of_sat_used = satellite->num_of_sat_used;
79         int i = 0;
80         for (i = 0 ; i < satellite_dup->num_of_sat_inview ; i++)
81                 location_satellite_set_satellite_details(satellite_dup, i,
82                                                                                                 satellite->sat_inview[i].prn,
83                                                                                                 satellite->sat_inview[i].used,
84                                                                                                 satellite->sat_inview[i].elevation,
85                                                                                                 satellite->sat_inview[i].azimuth,
86                                                                                                 satellite->sat_inview[i].snr);
87         return satellite_dup;
88 }
89
90 EXPORT_API gboolean
91 location_satellite_get_satellite_details (const LocationSatellite *satellite,
92         guint index,
93         guint* prn,
94         gboolean* used,
95         guint* elevation,
96         guint* azimuth,
97         gint* snr)
98 {
99         g_return_val_if_fail(satellite, FALSE);
100         g_return_val_if_fail(prn, FALSE);
101         g_return_val_if_fail(used, FALSE);
102         g_return_val_if_fail(elevation, FALSE);
103         g_return_val_if_fail(azimuth, FALSE);
104         g_return_val_if_fail(snr, FALSE);
105         g_return_val_if_fail(satellite->sat_inview, FALSE);
106         g_return_val_if_fail(index < satellite->num_of_sat_inview, FALSE);
107
108         *prn = satellite->sat_inview[index].prn;
109         *used = satellite->sat_inview[index].used;
110         *elevation = satellite->sat_inview[index].elevation;
111         *azimuth = satellite->sat_inview[index].azimuth;
112         *snr = satellite->sat_inview[index].snr;
113
114         return TRUE;
115 }
116
117 EXPORT_API gboolean
118 location_satellite_set_satellite_details (LocationSatellite *satellite,
119         guint index,
120         guint prn,
121         gboolean used,
122         guint elevation,
123         guint azimuth,
124         gint snr)
125 {
126         g_return_val_if_fail(satellite, FALSE);
127         g_return_val_if_fail(satellite->sat_inview, FALSE);
128         g_return_val_if_fail(index < satellite->num_of_sat_inview, FALSE);
129
130         satellite->sat_inview[index].prn= prn;
131         satellite->sat_inview[index].used= used;
132         satellite->sat_inview[index].elevation= elevation;
133         satellite->sat_inview[index].azimuth= azimuth;
134         satellite->sat_inview[index].snr= snr;
135         update_num_of_used (satellite);
136
137         return TRUE;
138 }