Logging macros; tested code.
CC_LOG_ERROR will abort the program. Use with caution. For most errors, use CRITICAL level.

Example:
main(int argc, char **argv)
{

    if((argc == 2) && (!g_strcmp0("-v", argv[1]))) {
        CC_LOG_ENABLE_DEBUGS();
    }

    CC_LOG_WARNING("%s(%d): Warning 1", __FUNCTION__, __LINE__);
    CC_LOG_DEBUG("%s(%d): Debug 2", __FUNCTION__, __LINE__);
    CC_LOG_CRITICAL("%s(%d): Critical 3", __FUNCTION__, __LINE__);
    CC_LOG_INFO("%s(%d): Info 4", __FUNCTION__, __LINE__);
    CC_LOG_ERROR("%s(%d): Error 5", __FUNCTION__, __LINE__);

    return 0;
}

Output:
eusjgala176:test edeedhu$ ./test

(process:24862): cc_onf_driver_lib-WARNING **: main(39): Warning 1

(process:24862): cc_onf_driver_lib-CRITICAL **: main(41): Critical 3

(process:24862): cc_onf_driver_lib-ERROR **: main(43): Error 5
Trace/BPT trap: 5

eusjgala176:test edeedhu$ ./test -v

(process:24866): cc_onf_driver_lib-WARNING **: main(39): Warning 1
(process:24866): cc_onf_driver_lib-DEBUG: main(40): Debug 2

(process:24866): cc_onf_driver_lib-CRITICAL **: main(41): Critical 3
cc_onf_driver_lib-INFO: main(42): Info 4

(process:24866): cc_onf_driver_lib-ERROR **: main(43): Error 5
Trace/BPT trap: 5
Cleaned up design and updated header files
Fixed a bug
Final high level design for review