0f07e550ac538c9bcad43b2943b8e28f20503aee
[framework/telephony/libtcore.git] / include / core_object.h
1 /*
2  * libtcore
3  *
4  * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Ja-young Gu <jygu@samsung.com>
7  *
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
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
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.
19  */
20
21 #ifndef __TCORE_CORE_OBJECT_H__
22 #define __TCORE_CORE_OBJECT_H__
23
24 __BEGIN_DECLS
25
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)
41
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
49 typedef void (*CoreObjectFreeHook)(CoreObject *co);
50 typedef void (*CoreObjectCloneHook)(CoreObject *src, CoreObject *dest);
51 typedef gboolean (*CoreObjectCallback)(CoreObject *co, const void *event_info, void *user_data);
52 typedef TReturn (*CoreObjectDispatcher)(CoreObject *co, UserRequest *ur);
53
54 CoreObject*      tcore_object_new(TcorePlugin *plugin, const char *name, TcoreHal *hal);
55 void             tcore_object_free(CoreObject *co);
56
57 TReturn          tcore_object_set_free_hook(CoreObject *co, CoreObjectFreeHook free_hook);
58 TReturn          tcore_object_set_clone_hook(CoreObject *co, CoreObjectCloneHook clone_hook);
59
60 CoreObject*      tcore_object_clone(CoreObject *src, TcorePlugin *new_parent, const char *new_name);
61
62 TReturn          tcore_object_set_name(CoreObject *co, const char *name);
63 const char*      tcore_object_ref_name(CoreObject *co);
64
65 TReturn          tcore_object_set_plugin(CoreObject *co, TcorePlugin *plugin);
66 TcorePlugin*     tcore_object_ref_plugin(CoreObject *co);
67
68 TReturn          tcore_object_link_object(CoreObject *co, void *object);
69 void*            tcore_object_ref_object(CoreObject *co);
70
71 TReturn          tcore_object_set_type(CoreObject *co, unsigned int type);
72 unsigned int     tcore_object_get_type(CoreObject *co);
73
74 TReturn          tcore_object_set_hal(CoreObject *co, TcoreHal *hal);
75 TcoreHal*        tcore_object_get_hal(CoreObject *co);
76
77 TReturn          tcore_object_link_user_data(CoreObject *co, void *user_data);
78 void*            tcore_object_ref_user_data(CoreObject *co);
79
80 TReturn          tcore_object_set_dispatcher(CoreObject *co, CoreObjectDispatcher func);
81 TReturn          tcore_object_dispatch_request(CoreObject *co, UserRequest *ur);
82
83 TReturn          tcore_object_add_callback(CoreObject *co, const char *event, CoreObjectCallback callback, void *user_data);
84 TReturn          tcore_object_del_callback(CoreObject *co, const char *event, CoreObjectCallback callback);
85 TReturn          tcore_object_emit_callback(CoreObject *co, const char *event, const void *event_info);
86
87 __END_DECLS
88
89 #endif