4 * Copyright (c) 2013 Samsung Electronics Co. Ltd. All rights reserved.
5 * Copyright (c) 2013 Intel Corporation. All rights reserved.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
33 static void _po_free_hook(CoreObject *co)
35 PrivateObject *po = tcore_object_ref_object(co);
36 tcore_check_return(po != NULL);
40 tcore_object_link_object(co, NULL);
43 static void _po_clone_hook(CoreObject *src, CoreObject *dest)
45 PrivateObject *dest_po = NULL;
46 PrivateObject *src_po = tcore_object_ref_object(src);
48 tcore_check_return_assert(src_po != NULL);
49 tcore_check_return_assert(src_po->ops != NULL);
51 dest_po = tcore_malloc0(sizeof(PrivateObject));
52 dest_po->ops = tcore_memdup(src_po->ops, sizeof(TcoreModemOps));
53 tcore_object_link_object(dest, dest_po);
56 static TelReturn _dispatcher(CoreObject *co,
57 TcoreCommand command, const void *request,
58 TcoreObjectResponseCallback cb, const void *user_data)
60 TcoreModemOps *modem = NULL;
61 PrivateObject *po = tcore_object_ref_object(co);
62 tcore_check_return_value_assert(po != NULL, TEL_RETURN_INVALID_PARAMETER);
63 tcore_check_return_value_assert(po->ops != NULL, TEL_RETURN_INVALID_PARAMETER);
67 case TCORE_COMMAND_MODEM_SET_POWER_STATUS:
68 if (modem->set_power_status)
69 return modem->set_power_status(co,
70 *((TelModemPowerStatus *)request),
71 cb, (void *)user_data);
74 case TCORE_COMMAND_MODEM_SET_FLIGHTMODE:
75 if (modem->set_flight_mode)
76 return modem->set_flight_mode(co,
78 cb, (void *)user_data);
81 case TCORE_COMMAND_MODEM_GET_IMEI:
83 return modem->get_imei(co, cb, (void *)user_data);
86 case TCORE_COMMAND_MODEM_GET_VERSION:
87 if (modem->get_version)
88 return modem->get_version(co, cb, (void *)user_data);
91 case TCORE_COMMAND_MODEM_GET_FLIGHTMODE:
92 if (modem->get_flight_mode)
93 return modem->get_flight_mode(co, cb, (void *)user_data);
97 err("Unsupported Command [0x%x]", command);
100 err("Operation NOT Supported");
101 return TEL_RETURN_OPERATION_NOT_SUPPORTED;
104 void tcore_modem_override_ops(CoreObject *co, TcoreModemOps *ops)
106 PrivateObject *po = tcore_object_ref_object(co);
108 tcore_check_return_assert(po != NULL);
109 tcore_check_return_assert(po->ops != NULL);
110 tcore_check_return_assert(ops != NULL);
112 if (ops->set_power_status)
113 po->ops->set_power_status = ops->set_power_status;
114 if (ops->set_flight_mode)
115 po->ops->set_flight_mode = ops->set_flight_mode;
117 po->ops->get_imei = ops->get_imei;
118 if (ops->get_version)
119 po->ops->get_version = ops->get_version;
120 if (ops->get_flight_mode)
121 po->ops->get_flight_mode = ops->get_flight_mode;
124 gboolean tcore_modem_set_ops(CoreObject *co, TcoreModemOps *ops)
127 tcore_check_return_value(co != NULL, FALSE);
129 po = tcore_object_ref_object(co);
130 tcore_check_return_value_assert(po != NULL, FALSE);
132 if (po->ops != NULL) {
138 po->ops = tcore_memdup((gconstpointer)ops, sizeof(TcoreModemOps));
143 CoreObject *tcore_modem_new(TcorePlugin *p,
144 TcoreModemOps *ops, TcoreHal *hal)
146 CoreObject *co = NULL;
147 PrivateObject *po = NULL;
148 tcore_check_return_value_assert(p != NULL, NULL);
150 co = tcore_object_new(p, hal);
151 tcore_check_return_value_assert(co != NULL, NULL);
153 po = tcore_malloc0(sizeof(PrivateObject));
156 po->ops = tcore_memdup(ops, sizeof(TcoreModemOps));
158 tcore_object_set_type(co, CORE_OBJECT_TYPE_MODEM);
159 tcore_object_link_object(co, po);
160 tcore_object_set_free_hook(co, _po_free_hook);
161 tcore_object_set_clone_hook(co, _po_clone_hook);
162 tcore_object_set_dispatcher(co, _dispatcher);
166 void tcore_modem_free(CoreObject *co)
168 CORE_OBJECT_CHECK(co, CORE_OBJECT_TYPE_MODEM);
169 tcore_object_free(co);
172 gboolean tcore_modem_set_flight_mode_state(CoreObject *co, gboolean state)
174 PrivateObject *po = tcore_object_ref_object(co);
175 tcore_check_return_value_assert(po != NULL, FALSE);
177 po->flight_mode = state;
181 gboolean tcore_modem_get_flight_mode_state(CoreObject *co, gboolean *state)
183 PrivateObject *po = tcore_object_ref_object(co);
184 tcore_check_return_value_assert(po != NULL, FALSE);
186 *state = po->flight_mode;
190 gboolean tcore_modem_set_powered(CoreObject *co, gboolean pwr)
192 PrivateObject *po = tcore_object_ref_object(co);
193 tcore_check_return_value_assert(po != NULL, FALSE);
199 gboolean tcore_modem_get_powered(CoreObject *co, gboolean *pwr)
201 PrivateObject *po = tcore_object_ref_object(co);
202 tcore_check_return_value_assert(po != NULL, FALSE);