6 #include <systemd/sd-journal.h>
11 #define ADD_ACTION_STR(action, str) [action]=str
13 #define GET_ACTION_STR(table, action) table[action]
15 * If you want add action,
16 * you must add string of each action
17 * using ADD_ACTION_STR macro.
19 static const char *action_string[LOGD_ACTION_MAX] = {
20 ADD_ACTION_STR(LOGD_NONE_ACTION, "none"),
21 ADD_ACTION_STR(LOGD_ON, "on"),
22 ADD_ACTION_STR(LOGD_START, "start"),
23 ADD_ACTION_STR(LOGD_CONTINUE, "continue"),
24 ADD_ACTION_STR(LOGD_STOP, "stop"),
25 ADD_ACTION_STR(LOGD_OFF, "off"),
26 ADD_ACTION_STR(LOGD_CHANGED, "changed"),
29 static const char *get_value(enum logd_object object,
30 enum logd_action action, ...)
37 switch (object | LOGD_SHIFT_ACTION(action)) {
38 case LOGD_BATTERY_SOC | LOGD_SHIFT_ACTION(LOGD_CHANGED):
39 case LOGD_DISPLAY | LOGD_SHIFT_ACTION(LOGD_CHANGED):
40 case LOGD_POWER_MODE | LOGD_SHIFT_ACTION(LOGD_CHANGED):
41 if (vasprintf(&text, "%d", vl) < 0)
44 case LOGD_FOREGRD_APP | LOGD_SHIFT_ACTION(LOGD_CHANGED):
45 if (vasprintf(&text, "%s", vl) < 0)
50 * we already have defined the string of each action
51 * as it is initialized.
52 * we check avaliable of action and object here.
53 * GET_ACTION_STR will return the string
54 * which is proper of action.
56 if (action < LOGD_ACTION_MAX && object < LOGD_OBJECT_MAX) {
57 text = strdup(GET_ACTION_STR(action_string, action));
60 _E("invalid logd_object or logd_action: %d, %d", object, action);
71 API int logd_event(enum logd_object object, enum logd_action action, ...)
74 const char *message = NULL;
78 message = get_value(object, action);
81 return LOGD_ERROR_INVALID_PARAM;
85 ret = sd_journal_send("LOGD_EVENT_TYPE=%d",
86 object | LOGD_SHIFT_ACTION(action), "MESSAGE=%s", message, NULL);
87 free((void *) message);
89 return ret < 0 ? LOGD_ERROR_SDJOURNAL : LOGD_ERROR_OK;