嵌入式C/C++接口设计
自己总结的一些经验,做个笔记。
以下是设计的一个简单的例子,供参考。
/****************************************************************************** ** SPComm.so ****************************************************************************** * spcomm_app_interface * * * @file spcomm_app_interface.h * * @author guoyanh * @date 2012.12.25 * @version 0.0.1 2012.11.29 guoyanh Created * 0.0.2 2012.12.20 guoyanh Modify * 0.0.3 2012.12.25 guoyanh Modify ****************************************************************************** * All Right Reserved. Copyright(C) 2012.9.10 ******************************************************************************/ #ifndef SP_COMM_INTERFACE_H #define SP_COMM_INTERFACE_H #include <glib-object.h> #ifdef _cplusplus extern "C" { #endif /****************************************************************************** ************************* Parameter define *********************************** ******************************************************************************/ /****************************************************************************** * define function return valule * ******************************************************************************/ #define SPCOMM_SUCCESS (0) #define SPCOMM_FAILED (-1) /****************************************************************************** ************************* Callback function parm define ********************* ******************************************************************************/ /* * open_opt_ret define */ typedef enum { SPCOMM_APP_OPEN_SUCCESS, SPCOMM_APP_OPEN_FALIED, } OPEN_OPT_RET; /* * data_type define */ typedef enum { SPP_DATA, HID_DATA, } DATA_TYPE; /* * send_ret define */ typedef enum { SEND_SUCCESS, SEND_FAILED, } SEND_RET; /* * stream_opt_type define */ typedef enum { OPEN_A2DP_STREAM, STOP_A2DP_STREAM, } STREAM_OPT_TYPE; /* * stream_opt_ret */ typedef enum { OPEN_A2DP_STREAM_SUCCESS, OPEN_A2DP_STREAM_FAILED, STOP_A2DP_STREAM_SUCCESS, STOP_A2DP_STREAM_FAILED, } STREAM_OPT_RET; /* * link_state define */ typedef enum { SPCOMM_APP_CONNECT, SPCOMM_APP_DISCONNECT, } LINK_STATE; /****************************************************************************** ************************* Callback function define *************************** ******************************************************************************/ typedef void (*SPComm_cbFunc_open_cmp)(gint32 appid, OPEN_OPT_RET open_opt_ret); typedef void (*SPComm_cbFunc_SPP_recv)(gpointer spp_data, gint32 length); typedef void (*SPComm_cbFunc_send_cmp)(DATA_TYPE data_type, SEND_RET send_ret); typedef void (*SPComm_cbFunc_A2DP_stream_cmp)(STREAM_OPT_TYPE stream_opt_type, STREAM_OPT_RET stream_opt_ret); typedef void (*SPComm_cbFunc_link_state_notify)(gint32 appid, LINK_STATE link_state); /* * APP callback function struct define */ typedef struct _SPComm_APP_cbFuncs { SPComm_cbFunc_open_cmp open_event_handler; SPComm_cbFunc_link_state_notify state_handler; } SPComm_APP_cbFuncs; /* * SPP callback function struct define */ typedef struct _SPComm_SPP_cbFuncs { SPComm_cbFunc_SPP_recv recv_event_handler; SPComm_cbFunc_send_cmp send_cmp_event_handler; } SPComm_SPP_cbFuncs; /****************************************************************************** ************************* Application interface ****************************** ******************************************************************************/ /******************************************************************************/ /** SPComm_APP_Init gboolean SPComm_APP_Init(void); ****************************************************************************** * @param void (IN) * * * @retval gboolean * * @version 001 2012.11.29 guoyanh initial version * 002 2012.12.20 guoyanh Modify * 003 2012.12.25 guoyanh Modify * <function> * SPComm_APP_Init */ gboolean SPComm_APP_Init(void); /******************************************************************************/ /** SPComm_APP_cbRegister gboolean SPComm_APP_cbRegister( SPComm_APP_cbFuncs app_cbFuncs ); ****************************************************************************** * @param app_cbFuncs (IN) callback functions * * * @retval gboolean * * @version 001 2012.11.29 guoyanh initial version * 002 2012.12.20 guoyanh Modify * 003 2012.12.25 guoyanh Modify * <function> * APP callback function register */ gboolean SPComm_APP_cbRegister( SPComm_APP_cbFuncs app_cbFuncs ); /******************************************************************************/ /** SPComm_SPP_cbRegister gboolean SPComm_SPP_cbRegister( SPComm_SPP_cbFuncs spp_cbFuncs ); ****************************************************************************** * @param spp_cbFuncs (IN) callback functions * * * @retval gboolean * * @version 001 2012.11.29 guoyanh initial version * 002 2012.12.20 guoyanh Modify * 003 2012.12.25 guoyanh Modify * <function> * SPP callback function register */ gboolean SPComm_SPP_cbRegister( SPComm_SPP_cbFuncs spp_cbFuncs ); /******************************************************************************/ /** SPComm_HID_cbRegister gboolean SPComm_HID_cbRegister( SPComm_cbFunc_send_cmp hid_cbFunc ); ****************************************************************************** * @param hid_cbFunc (IN) callback function * * * @retval gboolean * * @version 001 2012.11.29 guoyanh initial version * 002 2012.12.20 guoyanh Modify * 003 2012.12.25 guoyanh Modify * <function> * HID callback function register */ gboolean SPComm_HID_cbRegister( SPComm_cbFunc_send_cmp hid_cbFunc ); /******************************************************************************/ /** SPComm_A2DP_cbRegister gboolean SPComm_A2DP_cbRegister ( SPComm_cbFunc_A2DP_stream_cmp a2dp_cbFunc ); ****************************************************************************** * @param a2dp_cbFunc (IN) callback function * * * @retval gboolean * * @version 001 2012.11.29 guoyanh initial version * 002 2012.12.20 guoyanh Modify * 003 2012.12.25 guoyanh Modify * <function> * A2DP callback function register */ gboolean SPComm_A2DP_cbRegister ( SPComm_cbFunc_A2DP_stream_cmp a2dp_cbFunc ); /******************************************************************************/ /** SPComm_APP_open gint32 SPComm_APP_open ( gint32 appid ); ****************************************************************************** * @param appid (IN) appid * * * @retval gint32 * * @version 001 2012.11.29 guoyanh initial version * 002 2012.12.20 guoyanh Modify * 003 2012.12.25 guoyanh Modify * <function> * APP open */ gint32 SPComm_APP_open( gint32 appid ); /******************************************************************************/ /** SPComm_APP_close gint32 SPComm_APP_close(void); ****************************************************************************** * @param void * * * @retval gint32 * * @version 001 2012.11.29 guoyanh initial version * 002 2012.12.20 guoyanh Modify * 003 2012.12.25 guoyanh Modify * <function> * APP link close */ gint32 SPComm_APP_close(void); /******************************************************************************/ /** SPComm_SPP_data_send gint32 SPComm_SPP_data_send( gpointer spp_data, gint32 length ); ****************************************************************************** * @param spp_data (IN) data pointer address length (IN) data length * * * @retval gint32 * * @version 001 2012.11.29 guoyanh initial version * 002 2012.12.20 guoyanh Modify * 003 2012.12.25 guoyanh Modify * <function> * send SPP data */ gint32 SPComm_SPP_data_send( gpointer spp_data, gint32 length ); /******************************************************************************/ /** SPComm_HID_data_send gint32 SPComm_HID_data_send( gpointer hid_data, gint32 length ); ****************************************************************************** * @param hid_data (IN) data pointer address length (IN) data length * * * @retval bool * * @version 001 2012.11.29 guoyanh initial version * 002 2012.12.20 guoyanh Modify * 003 2012.12.25 guoyanh Modify * <function> * send HID data */ gint32 SPComm_HID_data_send( gpointer hid_data, gint32 length ); /******************************************************************************/ /** SPComm_A2DP_startStream gint32 SPComm_A2DP_startStream(void); ****************************************************************************** * @param void * * * @retval gint32 * * @version 001 2012.11.29 guoyanh initial version * 002 2012.12.20 guoyanh Modify * 003 2012.12.25 guoyanh Modify * <function> * A2DP start stream */ gint32 SPComm_A2DP_startStream(void); /******************************************************************************/ /** SPComm_A2DP_stopStream gint32 SPComm_A2DP_stopStream(void); ****************************************************************************** * @param void * * * @retval gint32 * * @version 001 2012.11.29 guoyanh initial version * 002 2012.12.20 guoyanh Modify * 003 2012.12.25 guoyanh Modify * <function> * A2DP stop stream */ gint32 SPComm_A2DP_stopStream(void); #ifdef _cpluscplus } #endif #endif /* SP_COMM_INTERFACE_H */