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"
33 struct private_object_data {
34 struct tcore_modem_operations *ops;
40 static void _free_hook(CoreObject *o)
42 struct private_object_data *po = NULL;
44 po = tcore_object_ref_object(o);
47 tcore_object_link_object(o, NULL);
51 static void _clone_hook(CoreObject *src, CoreObject *dest)
53 struct private_object_data *src_po = NULL;
54 struct private_object_data *dest_po = NULL;
59 dest_po = calloc(1, sizeof(struct private_object_data));
61 tcore_object_link_object(dest, NULL);
65 src_po = tcore_object_ref_object(src);
66 dest_po->ops = src_po->ops;
68 tcore_object_link_object(dest, dest_po);
71 static TReturn _dispatcher(CoreObject *o, UserRequest *ur)
73 enum tcore_request_command command;
74 struct private_object_data *po = NULL;
76 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_MODEM, TCORE_RETURN_EINVAL);
78 po = tcore_object_ref_object(o);
80 return TCORE_RETURN_ENOSYS;
82 command = tcore_user_request_get_command(ur);
84 case TREQ_MODEM_POWER_ON:
85 if (!po->ops->power_on)
86 return TCORE_RETURN_ENOSYS;
88 return po->ops->power_on(o, ur);
91 case TREQ_MODEM_POWER_OFF:
92 if (!po->ops->power_off)
93 return TCORE_RETURN_ENOSYS;
95 return po->ops->power_off(o, ur);
98 case TREQ_MODEM_POWER_RESET:
99 if (!po->ops->power_reset)
100 return TCORE_RETURN_ENOSYS;
102 return po->ops->power_reset(o, ur);
105 case TREQ_MODEM_POWER_LOW:
106 if (!po->ops->power_low)
107 return TCORE_RETURN_ENOSYS;
109 return po->ops->power_low(o, ur);
112 case TREQ_MODEM_SET_FLIGHTMODE:
113 if (!po->ops->set_flight_mode)
114 return TCORE_RETURN_ENOSYS;
116 return po->ops->set_flight_mode(o, ur);
119 case TREQ_MODEM_GET_IMEI:
120 if (!po->ops->get_imei)
121 return TCORE_RETURN_ENOSYS;
123 return po->ops->get_imei(o, ur);
126 case TREQ_MODEM_GET_VERSION:
127 if (!po->ops->get_version)
128 return TCORE_RETURN_ENOSYS;
130 return po->ops->get_version(o, ur);
133 case TREQ_MODEM_GET_SN:
134 if (!po->ops->get_sn)
135 return TCORE_RETURN_ENOSYS;
137 return po->ops->get_sn(o, ur);
140 case TREQ_MODEM_SET_DUN_PIN_CONTROL:
141 if (!po->ops->dun_pin_ctrl)
142 return TCORE_RETURN_ENOSYS;
144 return po->ops->dun_pin_ctrl(o, ur);
147 case TREQ_MODEM_GET_FLIGHTMODE:
148 if (!po->ops->get_flight_mode)
149 return TCORE_RETURN_ENOSYS;
151 return po->ops->get_flight_mode(o, ur);
155 return TCORE_RETURN_EINVAL;
158 return TCORE_RETURN_SUCCESS;
161 CoreObject *tcore_modem_new(TcorePlugin *p, const char *name,
162 struct tcore_modem_operations *ops, TcoreHal *hal)
164 CoreObject *o = NULL;
165 struct private_object_data *po = NULL;
170 o = tcore_object_new(p, name, hal);
174 po = calloc(1, sizeof(struct private_object_data));
176 tcore_object_free(o);
182 tcore_object_set_type(o, CORE_OBJECT_TYPE_MODEM);
183 tcore_object_link_object(o, po);
184 tcore_object_set_free_hook(o, _free_hook);
185 tcore_object_set_clone_hook(o, _clone_hook);
186 tcore_object_set_dispatcher(o, _dispatcher);
191 void tcore_modem_free(CoreObject *o)
193 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_MODEM);
194 tcore_object_free(o);
197 void tcore_modem_set_ops(CoreObject *o, struct tcore_modem_operations *ops)
199 struct private_object_data *po = NULL;
201 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_MODEM);
203 po = (struct private_object_data *)tcore_object_ref_object(o);
211 TReturn tcore_modem_set_flight_mode_state(CoreObject *o, gboolean flag)
213 struct private_object_data *po = NULL;
215 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_MODEM, TCORE_RETURN_EINVAL);
217 po = tcore_object_ref_object(o);
219 return TCORE_RETURN_EINVAL;
221 po->flight_mode = flag;
223 return TCORE_RETURN_SUCCESS;
226 gboolean tcore_modem_get_flight_mode_state(CoreObject *o)
228 struct private_object_data *po = NULL;
230 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_MODEM, FALSE);
232 po = tcore_object_ref_object(o);
236 return po->flight_mode;
239 TReturn tcore_modem_set_powered(CoreObject *o, gboolean pwr)
243 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_MODEM, TCORE_RETURN_EINVAL);
245 h = tcore_object_get_hal(o);
247 return TCORE_RETURN_FAILURE;
249 tcore_hal_set_power_state(h, pwr);
251 return TCORE_RETURN_SUCCESS;
254 gboolean tcore_modem_get_powered(CoreObject *o)
258 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_MODEM, FALSE);
260 h = tcore_object_get_hal(o);
264 return tcore_hal_get_power_state(h);