/* * ===================================================================================== * * Filename: notif.h * * Description: * * Version: 1.0 * Created: 10/03/24 12:02:16 PM IST * Revision: none * Compiler: gcc * * Author: YOUR NAME (), * Organization: * * ===================================================================================== */ #ifndef __NOTIF_CHAIN_ #define __NOTIF_CHAIN_ #include /* for size_t */ #include "glthread/glthread.h" #include #include #define MAX_NOTIF_KEY_SIZE 64 typedef enum{ NFC_UNKNOWN, NFC_SUB, NFC_ADD, NFC_MOD, NFC_DEL, } nfc_op_t; static inline char * nfc_get_str_op_code(nfc_op_t nfc_op_code) { static char op_code_str[16]; switch(nfc_op_code) { case NFC_UNKNOWN: return "NFC_UNKNOWN"; case NFC_SUB: return "NFC_SUB"; case NFC_ADD: return "NFC_ADD"; case NFC_MOD: return "NFC_MOD"; case NFC_DEL: return "NFC_DEL"; default: return NULL; } } typedef void (*nfc_app_cb)(void *, size_t, nfc_op_t, uint32_t); typedef struct notif_chain_elem_{ char key[MAX_NOTIF_KEY_SIZE]; size_t key_size; uint32_t subs_id; bool is_key_set; nfc_app_cb app_cb; glthread_t glue; } notif_chain_elem_t; GLTHREAD_TO_STRUCT(glthread_glue_to_notif_chain_elem, notif_chain_elem_t, glue); typedef struct notif_chain_ { char nfc_name[64]; glthread_t notif_chain_head; } notif_chain_t; notif_chain_t * nfc_create_new_notif_chain(char *notif_chain_name); void nfc_delete_all_nfce(notif_chain_t *nfc); void nfc_register_notif_chain(notif_chain_t *nfc, notif_chain_elem_t *nfce); void nfc_invoke_notif_chain(notif_chain_t *nfc, void *arg, size_t arg_size, char *key, size_t key_size, nfc_op_t nfc_op_code); #endif /* __NOTIF_CHAIN_ */