嵌入式C/C++接口设计

嵌入式C/C++接口设计

自己总结的一些经验,微笑做个笔记。

  1. 首先需要分析本模块的功能,书写书IF式样书。
  2. 使用#ifndef #define #endif 避免重复包含。
  3. 尽量不要依赖不可移植的语言原始类型。
  4. 有限参数通过枚举定义,方便测试。
  5. 对于本模块的各种成功和失败有统一的错误返回码。
  6. 注意函数接口是设计为C++类型还是C类型。
  7. 设计的每个函数要功能单一,明确,完备和简单,让使用者一看就会使用,并添加参数说明和使用说明。

以下是设计的一个简单的例子,供参考。


 
 
/******************************************************************************
 ** 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 */



你可能感兴趣的:(嵌入式C/C++接口设计)