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.
21 #ifndef __TCORE_CORE_OBJECT_H__
22 #define __TCORE_CORE_OBJECT_H__
26 #define CORE_OBJECT_TYPE_DEFAULT 0xB0000000
27 #define CORE_OBJECT_TYPE_MODEM (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_MODEM)
28 #define CORE_OBJECT_TYPE_CALL (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_CALL)
29 #define CORE_OBJECT_TYPE_SS (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_SS)
30 #define CORE_OBJECT_TYPE_NETWORK (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_NETWORK)
31 #define CORE_OBJECT_TYPE_PS (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_PS)
32 #define CORE_OBJECT_TYPE_PS_CONTEXT (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_PDP)
33 #define CORE_OBJECT_TYPE_SIM (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_SIM)
34 #define CORE_OBJECT_TYPE_SAT (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_SAT)
35 #define CORE_OBJECT_TYPE_SAP (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_SAP)
36 #define CORE_OBJECT_TYPE_SMS (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_SMS)
37 #define CORE_OBJECT_TYPE_PHONEBOOK (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_PHONEBOOK)
38 #define CORE_OBJECT_TYPE_SOUND (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_SOUND)
39 #define CORE_OBJECT_TYPE_CUSTOM (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_CUSTOM)
40 #define CORE_OBJECT_TYPE_GPS (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_GPS)
42 #define CORE_OBJECT_CHECK(o,t) \
43 if (!o) { warn("core_object is NULL"); return; } \
44 if (tcore_object_get_type(o) != t) { warn("type(0x%x != 0x%x) mismatch", tcore_object_get_type(o), t); return; }
45 #define CORE_OBJECT_CHECK_RETURN(o,t,r) \
46 if (!o) { warn("core_object is NULL"); return r; } \
47 if (tcore_object_get_type(o) != t) { warn("type(0x%x != 0x%x) mismatch", tcore_object_get_type(o), t); return r; }
48 typedef struct tcore_object_mapping_tbl object_mapping_table_t;
50 #define CORE_OBJECT_EVENT_PROPERTY_CHANGED "core_object_property_changed"
51 #define CORE_OBJECT_KEY_FIND(keys, k) g_slist_find_custom((keys), (k), (GCompareFunc)g_strcmp0)
53 typedef void (*CoreObjectFreeHook)(CoreObject *co);
54 typedef void (*CoreObjectCloneHook)(CoreObject *src, CoreObject *dest);
55 typedef gboolean (*CoreObjectCallback)(CoreObject *co, const void *event_info, void *user_data);
56 typedef gboolean (*tcore_object_callback)(CoreObject *co,
57 const void *event_info, void *user_data);
58 typedef TReturn (*CoreObjectDispatcher)(CoreObject *co, UserRequest *ur);
60 typedef gboolean (*tcore_object_init)(TcorePlugin *plugin, CoreObject *co);
61 typedef void (*tcore_object_deinit)(TcorePlugin *plugin, CoreObject *co);
63 /* Core Object Initializers */
64 struct object_initializer {
65 tcore_object_init modem_init;
66 tcore_object_init sim_init;
67 tcore_object_init sat_init;
68 tcore_object_init sap_init;
69 tcore_object_init network_init;
70 tcore_object_init ps_init;
71 tcore_object_init call_init;
72 tcore_object_init ss_init;
73 tcore_object_init sms_init;
74 tcore_object_init phonebook_init;
75 tcore_object_init gps_init;
76 /* To be updated based on New modules */
79 /* Core Object De-initializers */
80 struct object_deinitializer {
81 tcore_object_deinit modem_deinit;
82 tcore_object_deinit sim_deinit;
83 tcore_object_deinit sat_deinit;
84 tcore_object_deinit sap_deinit;
85 tcore_object_deinit network_deinit;
86 tcore_object_deinit ps_deinit;
87 tcore_object_deinit call_deinit;
88 tcore_object_deinit ss_deinit;
89 tcore_object_deinit sms_deinit;
90 tcore_object_deinit phonebook_deinit;
91 tcore_object_deinit gps_deinit;
92 /* To be updated based on New modules */
96 CoreObject* tcore_object_new(TcorePlugin *plugin, const char *name, TcoreHal *hal);
97 void tcore_object_free(CoreObject *co);
99 TReturn tcore_object_set_free_hook(CoreObject *co, CoreObjectFreeHook free_hook);
100 TReturn tcore_object_set_clone_hook(CoreObject *co, CoreObjectCloneHook clone_hook);
102 CoreObject* tcore_object_clone(CoreObject *src, TcorePlugin *new_parent);
104 TReturn tcore_object_set_name(CoreObject *co, const char *name);
105 const char* tcore_object_ref_name(CoreObject *co);
107 CoreObject *tcore_object_clone_template_object(TcorePlugin *p,
108 unsigned int co_type);
111 TReturn tcore_object_set_plugin(CoreObject *co, TcorePlugin *plugin);
112 TcorePlugin* tcore_object_ref_plugin(CoreObject *co);
114 TReturn tcore_object_link_object(CoreObject *co, void *object);
115 void* tcore_object_ref_object(CoreObject *co);
117 TReturn tcore_object_set_type(CoreObject *co, unsigned int type);
118 unsigned int tcore_object_get_type(CoreObject *co);
120 TReturn tcore_object_set_hal(CoreObject *co, TcoreHal *hal);
121 TcoreHal* tcore_object_get_hal(CoreObject *co);
123 TReturn tcore_object_link_user_data(CoreObject *co, void *user_data);
124 void* tcore_object_ref_user_data(CoreObject *co);
126 TReturn tcore_object_set_dispatcher(CoreObject *co, CoreObjectDispatcher func);
127 TReturn tcore_object_dispatch_request(CoreObject *co, UserRequest *ur);
129 TReturn tcore_object_add_callback(CoreObject *co, const char *event, CoreObjectCallback callback, void *user_data);
130 TReturn tcore_object_del_callback(CoreObject *co, const char *event, CoreObjectCallback callback);
131 TReturn tcore_object_override_callback(CoreObject *co, const char *event, CoreObjectCallback callback, void *user_data);
132 TReturn tcore_object_emit_callback(CoreObject *co, const char *event, const void *event_info);
134 #define tcore_object_set_property(co, ...) tcore_object_set_property_full(co, __VA_ARGS__, NULL, NULL)
135 TReturn tcore_object_set_property_full(CoreObject *co, const char *first_property, ...);
136 const char* tcore_object_ref_property(CoreObject *co, const char *key);
137 GHashTable* tcore_object_ref_property_hash(CoreObject *co);
138 void *tcore_object_add_mapping_tbl_entry(void *mapping_tbl,
139 unsigned int object_type, TcoreHal *hal);
140 void tcore_object_remove_mapping_tbl(void *mapping_tbl);
141 void *tcore_object_remove_mapping_tbl_entry(void *mapping_tbl, TcoreHal *hal);
142 void tcore_object_remove_mapping_tbl_entry_by_type(void *mapping_tbl,
143 unsigned int co_type);
145 void tcore_object_print_mapping_tbl(void *mapping_tbl);
147 TReturn tcore_object_init_objects(TcorePlugin *plugin,
148 struct object_initializer *initializer_list);
149 void tcore_object_deinit_objects(TcorePlugin *plugin,
150 struct object_deinitializer *deinitializer_list);