88 lines
3.1 KiB
C
88 lines
3.1 KiB
C
#ifndef CSR_MSGCONV_H__
|
|
#define CSR_MSGCONV_H__
|
|
|
|
/*****************************************************************************
|
|
|
|
(c) Cambridge Silicon Radio Limited 2010
|
|
All rights reserved and confidential information of CSR
|
|
|
|
Refer to LICENSE.txt included with this source for details
|
|
on the license terms.
|
|
|
|
*****************************************************************************/
|
|
|
|
#include <linux/types.h>
|
|
#include "csr_prim_defs.h"
|
|
#include "csr_sched.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef size_t (CsrMsgSizeofFunc)(void *msg);
|
|
typedef u8 *(CsrMsgSerializeFunc)(u8 *buffer, size_t *length, void *msg);
|
|
typedef void (CsrMsgFreeFunc)(void *msg);
|
|
typedef void *(CsrMsgDeserializeFunc)(u8 *buffer, size_t length);
|
|
|
|
/* Converter entry for one message type */
|
|
typedef struct CsrMsgConvMsgEntry
|
|
{
|
|
u16 msgType;
|
|
CsrMsgSizeofFunc *sizeofFunc;
|
|
CsrMsgSerializeFunc *serFunc;
|
|
CsrMsgDeserializeFunc *deserFunc;
|
|
CsrMsgFreeFunc *freeFunc;
|
|
} CsrMsgConvMsgEntry;
|
|
|
|
/* Optional lookup function */
|
|
typedef CsrMsgConvMsgEntry *(CsrMsgCustomLookupFunc)(CsrMsgConvMsgEntry *ce, u16 msgType);
|
|
|
|
/* All converter entries for one specific primitive */
|
|
typedef struct CsrMsgConvPrimEntry
|
|
{
|
|
u16 primType;
|
|
const CsrMsgConvMsgEntry *conv;
|
|
CsrMsgCustomLookupFunc *lookupFunc;
|
|
struct CsrMsgConvPrimEntry *next;
|
|
} CsrMsgConvPrimEntry;
|
|
|
|
typedef struct
|
|
{
|
|
CsrMsgConvPrimEntry *profile_converters;
|
|
void *(*deserialize_data)(u16 primType, size_t length, u8 * data);
|
|
u8 (*free_message)(u16 primType, u8 *data);
|
|
size_t (*sizeof_message)(u16 primType, void *msg);
|
|
u8 *(*serialize_message)(u16 primType, void *msg,
|
|
size_t * length,
|
|
u8 * buffer);
|
|
} CsrMsgConvEntry;
|
|
|
|
size_t CsrMsgConvSizeof(u16 primType, void *msg);
|
|
u8 *CsrMsgConvSerialize(u8 *buffer, size_t maxBufferOffset, size_t *offset, u16 primType, void *msg);
|
|
void CsrMsgConvCustomLookupRegister(u16 primType, CsrMsgCustomLookupFunc *lookupFunc);
|
|
void CsrMsgConvInsert(u16 primType, const CsrMsgConvMsgEntry *ce);
|
|
CsrMsgConvPrimEntry *CsrMsgConvFind(u16 primType);
|
|
CsrMsgConvMsgEntry *CsrMsgConvFindEntry(u16 primType, u16 msgType);
|
|
CsrMsgConvMsgEntry *CsrMsgConvFindEntryByMsg(u16 primType, const void *msg);
|
|
CsrMsgConvEntry *CsrMsgConvInit(void);
|
|
|
|
/* Prototypes for primitive type serializers */
|
|
void CsrUint8Ser(u8 *buffer, size_t *offset, u8 value);
|
|
void CsrUint16Ser(u8 *buffer, size_t *offset, u16 value);
|
|
void CsrUint32Ser(u8 *buffer, size_t *offset, u32 value);
|
|
void CsrMemCpySer(u8 *buffer, size_t *offset, const void *value, size_t length);
|
|
void CsrCharStringSer(u8 *buffer, size_t *offset, const char *value);
|
|
|
|
void CsrUint8Des(u8 *value, u8 *buffer, size_t *offset);
|
|
void CsrUint16Des(u16 *value, u8 *buffer, size_t *offset);
|
|
void CsrUint32Des(u32 *value, u8 *buffer, size_t *offset);
|
|
void CsrMemCpyDes(void *value, u8 *buffer, size_t *offset, size_t length);
|
|
void CsrCharStringDes(char **value, u8 *buffer, size_t *offset);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|