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