85 lines
1.8 KiB
C
Executable File
85 lines
1.8 KiB
C
Executable File
/*************************************************
|
|
File name : xbuf.h
|
|
Module :
|
|
Author : amir
|
|
Version : 0.1
|
|
Created on : 2024-04-27
|
|
Description : buf for protocol transmission
|
|
协议间传输
|
|
Modify History:
|
|
1. Date: Author: Modification:
|
|
*************************************************/
|
|
|
|
#ifndef __XBUF__
|
|
#define __XBUF__
|
|
#include <stdint.h>
|
|
#include "kpacket.h"
|
|
#include "iobuffer.h"
|
|
|
|
typedef struct{
|
|
uint16_t event;
|
|
uint32_t (*on_event)(const kpacket *packet);
|
|
}packet_event;
|
|
|
|
|
|
typedef struct{
|
|
|
|
/**
|
|
* @brief 当接收完整一包kpacket, 触发回调
|
|
*
|
|
* @param [in] box, box的地址.
|
|
*
|
|
*
|
|
*/
|
|
void (*on_packet)(const kpacket *packet);
|
|
|
|
packet_event *ev_list;
|
|
uint16_t ev_list_sz;
|
|
|
|
|
|
/* private data*/
|
|
iobuffer read_io;
|
|
/* 高阶应用
|
|
* 1. iobuffer_iobuffer_reserve(&read_io, 4096); // 设置iobuffer的缓冲大小
|
|
* 2. recv(read_io.iodata, read_io.capacity - read_io.size); xbuf_flush(); // 直接将数据读到iobuffer里,并尝试触发回调
|
|
**/
|
|
|
|
|
|
}xbuf_handler;
|
|
|
|
|
|
uint32_t xbuf_init(xbuf_handler *hdlr);
|
|
|
|
|
|
uint32_t xbuf_deinit(xbuf_handler *hdlr);
|
|
|
|
/**
|
|
* @brief 入数据处理, 满足包条件时触发on_packet回调
|
|
*
|
|
* @param [in] hdlr, 外部保存的xbuf_handler.
|
|
* @param [in] data, 入数.
|
|
* @param [in] sz, 入数长度.
|
|
* @note 成长返回OK, 返回NG内存不足--查一下read_io的capacity和size.
|
|
*
|
|
*/
|
|
|
|
uint32_t xbuf_put(xbuf_handler *hdlr, const char *data, const uint32_t sz);
|
|
|
|
|
|
/**
|
|
* @brief 尝试主动触发回调
|
|
*
|
|
* @param [in] hdlr, 外部保存的xbuf_handler.
|
|
* @note 成长返回OK, 返回NG内存不足--查一下read_io的capacity和size.
|
|
*
|
|
*/
|
|
|
|
uint32_t xbuf_flush(xbuf_handler *hdlr);
|
|
|
|
|
|
void xbuf_test();
|
|
|
|
|
|
#endif /* __XBUF__ */
|
|
|