uart-packet-dle.h 1.99 KB
/**    
    @file     uart-packet-dle.h
    @date     2010-09-17
    @author   오재경 freefrug@falinux.com
    @brief    uart 통신형태를 분석하고 관리한다.
              
              dle / stx / data(crc16) / dle / etx

    @modify   
    @todo    
    @bug     
    @remark   
    
    @warning 
*/
//
//  저작권    에프에이리눅스(주)
//            외부공개 금지
//
//----------------------------------------------------------------------------

#ifndef _UART_PACKET_DKE_H_
#define _UART_PACKET_DKE_H_

#define UART_PACKET_MAX_SIZE    4096

enum { ANSEQ_FIND_STX=0, ANSEQ_FIND_ETX };
enum { ANERR_NONE=0, ANERR_CRC };

typedef  void(*on_uart_packet_t)( poll_obj_t *obj, char *buf, int count, int error );


/// 시리얼패켓 분석용 구조체
typedef struct 
{
	// 사용자 변경변수
	int   stx;
	int   etx;
	int   dle;
	unsigned short (*make_crc16)(char *buf, int count );  // 기본적인 crc 함수가 매치된다.

	// 사용자 변경불가
	poll_obj_t *obj;
	
	int     an_seq;
	int     an_cnt;
	int     dle_flag;
	int     data_cnt;
	int     error;
	char    data_buf[UART_PACKET_MAX_SIZE];
	on_uart_packet_t  on_packet;
	
} uart_packet_analysis_t;


#ifdef __cplusplus 
extern "C" { 
#endif 	

/// @{
/// @brief  외부에서 사용할수 있는 객체함수 리스트 

extern void  upacket_dle_create( poll_obj_t *obj, on_uart_packet_t callback );              /// uart 패켓 관린 객체 생성
extern void  upacket_dle_free( poll_obj_t *obj );                                            /// uart 패켓 관린 객체 해제
extern void  upacket_dle_clear( uart_packet_analysis_t *up );                                /// uart 패켓분석 클리어
extern int   upacket_dle_read_from_uart( poll_obj_t *obj, on_uart_packet_t callback );      /// uart 에서 데이타를 읽어 패켓을 분석한 후 패켓이 만들어지면  등록된 콜백함수를 호출한다.
extern int   upacket_dle_write_to_uart( poll_obj_t *obj, const char *data_buf, int count  ); /// uart 에 패켓을 만들어 전송한다.




/// @}

#ifdef __cplusplus 
}
#endif 

#endif