4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Ja-young Gu <jygu@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
29 #include "user_request.h"
32 struct private_object_data {
33 struct tcore_gps_operations *ops;
36 static void _free_hook(CoreObject *o)
38 struct private_object_data *po = NULL;
40 po = tcore_object_ref_object(o);
43 tcore_object_link_object(o, NULL);
47 static void _clone_hook(CoreObject *src, CoreObject *dest)
49 struct private_object_data *src_po = NULL;
50 struct private_object_data *dest_po = NULL;
55 dest_po = calloc(1, sizeof(struct private_object_data));
57 tcore_object_link_object(dest, NULL);
61 src_po = tcore_object_ref_object(src);
62 dest_po->ops = src_po->ops;
64 tcore_object_link_object(dest, dest_po);
67 static TReturn _dispatcher(CoreObject *o, UserRequest *ur)
69 enum tcore_request_command command;
70 struct private_object_data *po = NULL;
73 return TCORE_RETURN_EINVAL;
75 po = tcore_object_ref_object(o);
77 return TCORE_RETURN_ENOSYS;
79 command = tcore_user_request_get_command(ur);
81 case TREQ_GPS_CONFIRM_MEASURE_POS:
82 dbg("TREQ_GPS_CONFIRM_MEASURE_POS");
83 if (!po->ops->confirm_measure_pos)
84 return TCORE_RETURN_ENOSYS;
86 return po->ops->confirm_measure_pos(o, ur);
88 case TREQ_GPS_SET_FREQUENCY_AIDING:
89 dbg("TREQ_GPS_SET_FREQUENCY_AIDING");
90 if (!po->ops->set_frequency_aiding)
91 return TCORE_RETURN_ENOSYS;
93 return po->ops->set_frequency_aiding(o, ur);
95 case TREQ_ENABLE_SMART_ASSISTANT:
96 dbg("TREQ_ENABLE_SMART_ASSISTANT");
97 if (!po->ops->enable_smart_assistant)
98 return TCORE_RETURN_ENOSYS;
100 return po->ops->enable_smart_assistant(o, ur);
102 case TREQ_DISABLE_SMART_ASSISTANT:
103 dbg("TREQ_DISABLE_SMART_ASSISTANT");
104 if (!po->ops->disable_smart_assistant)
105 return TCORE_RETURN_ENOSYS;
107 return po->ops->disable_smart_assistant(o, ur);
109 case TREQ_SYNC_SMART_ASSISTANT_AREA_LIST:
110 dbg("TREQ_SYNC_SMART_ASSISTANT_AREA_LIST");
111 if (!po->ops->sync_smart_assistant_area_list)
112 return TCORE_RETURN_ENOSYS;
114 return po->ops->sync_smart_assistant_area_list(o, ur);
116 case TREQ_DEL_SMART_ASSISTANT_AREA_LIST:
117 dbg("TREQ_DEL_SMART_ASSISTANT_AREA_LIST");
118 if (!po->ops->del_smart_assistant_area_list)
119 return TCORE_RETURN_ENOSYS;
121 return po->ops->del_smart_assistant_area_list(o, ur);
123 case TREQ_ADD_SMART_ASSISTANT_AREA:
124 dbg("TREQ_ADD_SMART_ASSISTANT_AREA");
125 if (!po->ops->add_smart_assistant_area)
126 return TCORE_RETURN_ENOSYS;
128 return po->ops->add_smart_assistant_area(o, ur);
130 case TREQ_MODIFY_SMART_ASSISTANT_AREA:
131 dbg("TREQ_MODIFY_SMART_ASSISTANT_AREA");
132 if (!po->ops->modify_smart_assistant_area)
133 return TCORE_RETURN_ENOSYS;
135 return po->ops->modify_smart_assistant_area(o, ur);
137 case TREQ_SET_SMART_ASSISTANT_INFO:
138 dbg("TREQ_SET_SMART_ASSISTANT_INFO");
139 if (!po->ops->set_smart_assistant_info)
140 return TCORE_RETURN_ENOSYS;
142 return po->ops->set_smart_assistant_info(o, ur);
145 dbg("not supported cmd");
148 return TCORE_RETURN_SUCCESS;
151 CoreObject *tcore_gps_new(TcorePlugin *p, const char *name,
152 struct tcore_gps_operations *ops, TcoreHal *hal)
154 CoreObject *o = NULL;
155 struct private_object_data *po = NULL;
160 o = tcore_object_new(p, name, hal);
164 po = calloc(1, sizeof(struct private_object_data));
166 tcore_object_free(o);
172 tcore_object_set_type(o, CORE_OBJECT_TYPE_GPS);
173 tcore_object_link_object(o, po);
174 tcore_object_set_dispatcher(o, _dispatcher);
175 tcore_object_set_free_hook(o, _free_hook);
176 tcore_object_set_clone_hook(o, _clone_hook);
181 void tcore_gps_free(CoreObject *o)
183 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_GPS);
185 tcore_object_free(o);
188 void tcore_gps_set_ops(CoreObject *o, struct tcore_gps_operations *ops)
190 struct private_object_data *po = NULL;
192 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_GPS);
194 po = (struct private_object_data *)tcore_object_ref_object(o);