vsi.h
来自「是一个手机功能的模拟程序」· C头文件 代码 · 共 548 行 · 第 1/2 页
H
548 行
int vsi_o_itrace (T_HANDLE Caller, ULONG TraceClass, ULONG index, const char * const format, ... );
int vsi_o_ptrace (T_HANDLE Caller, ULONG opc, UBYTE dir );
int vsi_o_strace (T_HANDLE Caller, const char *const machine,
const char *const curstate,
const char *const newstate);
int vsi_o_assert (T_HANDLE Caller, USHORT cause, const char *file, int line, const char * const format, ...);
int vsi_settracemask (T_HANDLE Caller, T_HANDLE Handle, ULONG Mask );
int vsi_gettracemask (T_HANDLE Caller, T_HANDLE Handle, ULONG *Mask );
int vsi_trcsuspend (T_HANDLE Caller, T_HANDLE Handle, ULONG Suspend );
int vsi_trc_free (T_HANDLE Caller, T_VOID_STRUCT **Msg);
void vsi_ppm_new (T_HANDLE Caller, ULONG Size, T_PRIM_HEADER *prim, const char* file, int line );
void vsi_ppm_rec (T_HANDLE Caller, T_PRIM_HEADER *prim, const char* file, int line );
void vsi_ppm_access (T_HANDLE Caller, T_PRIM_HEADER *prim, const char* file, int line );
void vsi_ppm_store (T_HANDLE Caller, T_PRIM_HEADER *prim, const char* file, int line );
void vsi_ppm_send (T_HANDLE Caller, T_HANDLE rcv, T_PRIM_HEADER *prim, const char* file, int line );
void vsi_ppm_reuse (T_HANDLE Caller, T_PRIM_HEADER *prim, const char* file, int line );
void vsi_ppm_free (T_HANDLE Caller, T_PRIM_HEADER *prim, const char* file, int line );
void vsi_ppm_setend (T_PRIM_HEADER *Prim, ULONG Size );
int vsi_gettaskname (T_HANDLE Caller, T_HANDLE Handle, char *Name);
T_HANDLE vsi_gettaskhandle (T_HANDLE Caller, char *Name);
int vsi_e_name (T_HANDLE Caller, T_HANDLE Handle, char *Name);
T_HANDLE vsi_e_handle (T_HANDLE Caller, char *Name);
int vsi_gettaskflags (T_HANDLE Caller, T_HANDLE Handle, ULONG *Flags);
int vsi_t_time (T_HANDLE Caller, T_TIME *Value);
int vsi_t_sleep (T_HANDLE Caller, T_TIME Value);
int vsi_object_info (T_HANDLE caller, USHORT Id, USHORT Index, char *Buffer, USHORT Size);
void vsi_d_callback (T_DRV_SIGNAL *Signal );
int vsi_d_create (T_HANDLE Caller, T_TST_DRV_ENTRY *drv_info );
int vsi_d_init (T_HANDLE Caller );
int vsi_d_exit (T_HANDLE Caller, T_HANDLE DrvHandle );
int vsi_d_open (T_HANDLE Caller, char *Name );
int vsi_d_close (T_HANDLE Caller, T_HANDLE DrvHandle );
int vsi_d_read (T_HANDLE Caller, T_HANDLE DrvHandle, void *Buffer, ULONG *Size );
int vsi_d_write (T_HANDLE Caller, T_HANDLE DrvHandle, void *Buffer, ULONG Size );
int vsi_d_flush (T_HANDLE Caller, T_HANDLE DrvHandle );
int vsi_d_setsignal (T_HANDLE Caller, T_HANDLE DrvHandle, USHORT SignalType );
int vsi_d_resetsignal (T_HANDLE Caller, T_HANDLE DrvHandle, USHORT SignalType );
int vsi_d_setconfig (T_HANDLE Caller, T_HANDLE DrvHandle, char *Config );
int vsi_d_getconfig (T_HANDLE Caller, T_HANDLE DrvHandle, char *Config );
/*==== MACROS ================================================================*/
#define ConfigTimer _vsi_t_config
#ifdef MEMORY_SUPERVISION
#define VSI_PPM_REC(B,F,L)
#define VSI_PPM_RCV(B) vsi_ppm_rec (VSI_CALLER ((T_PRIM_HEADER*)(B)),__FILE__, __LINE__);
#define VSI_PPM_NEW(B,S) vsi_ppm_new (VSI_CALLER S,((T_PRIM_HEADER*)(B)),__FILE__, __LINE__);
#define VSI_PPM_FREE(B) vsi_ppm_free (VSI_CALLER ((T_PRIM_HEADER*)(B)),__FILE__, __LINE__);
#define VSI_PPM_REUSE(B) vsi_ppm_reuse (VSI_CALLER (T_PRIM_HEADER*)B,__FILE__,__LINE__);
#define VSI_PPM_ACCESS(B) vsi_ppm_access (VSI_CALLER (T_PRIM_HEADER*)B,__FILE__,__LINE__);
#define VSI_PPM_SEND(B,D) vsi_ppm_send (VSI_CALLER D,(T_PRIM_HEADER*)B,__FILE__,__LINE__);
#else
#define VSI_PPM_REC(B,F,L)
#define VSI_PPM_RCV(B)
#define VSI_PPM_NEW(B)
#define VSI_PPM_FREE(B)
#define VSI_PPM_REUSE(B)
#define VSI_PPM_ACCESS(B)
#define VSI_PPM_SEND(B,D)
#endif /* MEMORY_SUPERVISION */
#define ALIGN(S) (((S)+3)&~0x03)
#define S_ALLOC_SIZE(S) (ALIGN((S)+sizeof(T_PRIM_HEADER)+sizeof(T_S_HEADER)))
#define S_HDR_OFFSET(S) (ALIGN(S)>>2)
#define D_ALLOC_SIZE(S) (ALIGN((S)+sizeof(T_PRIM_HEADER)+sizeof(T_DP_HEADER)))
#define D_HDR_OFFSET(S) (ALIGN((S)-sizeof(T_DP_HEADER))>>2)
#define P2D(P) ((T_PRIM_HEADER*)(P)+1)
#define D2P(D) ((T_PRIM_HEADER*)(D)-1)
#define P2D_AC(P,T) P2D(P)
#define P_OPC(P) (((T_PRIM_HEADER*)(P))->opc)
#define P_OPC2(P) (((T_PRIM_HEADER*)(P))->opc2)
#define P_LEN(P) (((T_PRIM_HEADER*)(P))->len)
#define P_TID(P) (((T_PRIM_HEADER*)(P))->tid)
#define P_SDU(P) (((T_PRIM_HEADER*)(P))->sdu)
#define P_CNT(P) (((T_PRIM_HEADER*)(P))->use_cnt)
#define P_IDX(P) (*(ULONG*)(P))
#define P_PNR(P) (*((ULONG*)(P)-1) & 0xffff)
#define P_PGR(P) ((*((ULONG*)(P)-1) >> 16) & 0xffff)
#define P_SHDR(P) ((T_S_HEADER*)((ULONG*)(P)+((T_PRIM_HEADER*)(P))->sh_offset))
#define P_RCV(P) (((T_S_HEADER*)P_SHDR(P))->rcv)
#define P_SND(P) (((T_S_HEADER*)P_SHDR(P))->snd)
#define P_TIME(P) (((T_S_HEADER*)P_SHDR(P))->time)
#define P_SHO(P) (((T_PRIM_HEADER*)(P))->sh_offset)
#define P_DPHO(P) (((T_PRIM_HEADER*)(P))->dph_offset)
#define D_OPC(D) P_OPC(D2P(D))
#define D_OPC2(D) P_OPC2(D2P(D))
#define D_LEN(D) P_LEN(D2P(D))
#define D_CNT(D) P_CNT(D2P(D))
#define D_TID(D) P_TID(D2P(D))
#define D_SDU(D) P_SDU(D2P(D))
#define D_SDU_LEN(D) (D_SDU(D)->l_buf)
#define D_SDU_OFF(D) (D_SDU(D)->o_buf)
#define BITS_PER_BYTE 8
#define BYTELEN(BITLEN) ((BITLEN)<=0?0:((((BITLEN)-1)/BITS_PER_BYTE)+1))
#define BYTELEN_POS(BITLEN) (((BITLEN)+7)/BITS_PER_BYTE)
#define SDU_TRAIL ((char*)(((T_sdu*)0)+1)-(char*)(((T_sdu*)0)->buf))
#define PSIZE(D) D_LEN(D)
#define SIZ(T) ((ULONG)(sizeof(T_PRIM_HEADER)+sizeof(T)))
#define SIZ_SDU(T,M) ((ULONG)(SIZ(T)+BYTELEN((M)+ENCODE_OFFSET)-SDU_TRAIL))
/* NOTE : received SDUs may have a different ENCODE_OFFSET */
#ifndef ADD_BSIZE
#define ADD_BSIZE 0
#endif
#define NO_SDU 0xffff
#define DRPO_ALLOC(T,G) (T_##T*)vsi_drpo_new(sizeof(T_##T),T,G FILE_LINE_MACRO)
#define DRP_ALLOC(S,G) (T_VOID_STRUCT*)vsi_drp_new(S,G FILE_LINE_MACRO)
#define DP_ALLOC(S,P,G) (T_VOID_STRUCT*)vsi_dp_new(S,(T_VOID_STRUCT*)P,G FILE_LINE_MACRO)
#define FREE(D) { T_VOID_STRUCT *z=(T_VOID_STRUCT*)D;\
vsi_free((T_VOID_STRUCT **)&z FILE_LINE_MACRO);}
#define MALLOC(P,S) P = (void*)vsi_m_cnew(S,PRIM_POOL_PARTITION FILE_LINE_MACRO);
#define M_ALLOC(S) (void*)vsi_m_cnew(S,PRIM_POOL_PARTITION FILE_LINE_MACRO);
#define MATTACH(M) vsi_m_attach((T_VOID_STRUCT*)M FILE_LINE_MACRO);
#define M_ATTACH(M) vsi_m_attach((T_VOID_STRUCT*)M FILE_LINE_MACRO);
#define DMALLOC(P,S) P = (void*)vsi_m_new(S,DMEM_POOL_PARTITION FILE_LINE_MACRO);
#define D_ALLOC(S) (void*)vsi_m_new(S,DMEM_POOL_PARTITION FILE_LINE_MACRO);
#define PALLOC(D,T) T_##T *D = (T_##T*)vsi_c_pnew(SIZ(T_##T),T FILE_LINE_MACRO );
#define P_ALLOC(T) (T_##T*)vsi_c_pnew(SIZ(T_##T),T FILE_LINE_MACRO );
#define PALLOC_MSG(D,T,M) T_##T *D = (T_##T*)vsi_c_new_sdu(SIZ(T_##T),T,BSIZE_##M+ADD_BSIZE,offsetof(T_##T,sdu),ENCODE_OFFSET FILE_LINE_MACRO);
#define P_ALLOC_MSG(T,M) (T_##T*)vsi_c_new_sdu(SIZ(T_##T),T,BSIZE_##M+ADD_BSIZE,offsetof(T_##T,sdu),ENCODE_OFFSET FILE_LINE_MACRO);
#define PALLOC_SDU(D,T,N) T_##T *D = (T_##T*)vsi_c_new_sdu(SIZ(T_##T),T,N,offsetof(T_##T,sdu),ENCODE_OFFSET FILE_LINE_MACRO);
#define P_ALLOC_SDU(T,N) (T_##T*)vsi_c_new_sdu(SIZ(T_##T),T,N,offsetof(T_##T,sdu),ENCODE_OFFSET FILE_LINE_MACRO);
#ifdef MEMORY_SUPERVISION
#define PALLOC_DESC(D,T) T_##T *D = (T_##T*)vsi_c_pnew(SIZ(T_##T),T FILE_LINE_MACRO);\
((T_PRIM_HEADER*)D2P(D))->dph_offset = (ULONG)(((offsetof(T_##T,desc_list)+sizeof(T_PRIM_HEADER))>>2));
#define PALLOC_DESC2(D,T) T_##T *D = (T_##T*)vsi_c_pnew(SIZ(T_##T),T FILE_LINE_MACRO);\
((T_PRIM_HEADER*)D2P(D))->dph_offset = (ULONG)(((offsetof(T_##T,desc_list2)+sizeof(T_PRIM_HEADER))>>2));
#else
#define PALLOC_DESC(D,T) T_##T *D = (T_##T*)vsi_c_pnew(SIZ(T_##T),T FILE_LINE_MACRO);
#define PALLOC_DESC2(D,T) T_##T *D = (T_##T*)vsi_c_pnew(SIZ(T_##T),T FILE_LINE_MACRO);
#endif /* MEMORY_SUPERVISION */
#define PREUSE(D0,D,T) T_##T *D = (T_##T*)vsi_c_reuse((T_PRIM_HEADER*)D0,SIZ(T_##T),T,0,NO_SDU,0 FILE_LINE_MACRO);
#define P_REUSE(D0,T) (T_##T*)vsi_c_reuse((T_PRIM_HEADER*)D0,SIZ(T_##T),T,0,NO_SDU,0 FILE_LINE_MACRO);
#define PREUSE_MSG(D,T,M) T_##T *D = (T_##T*)vsi_c_reuse(D0,SIZ(T_##T),T,BSIZE_##M+ADD_BSIZE,offsetof(T_##T,sdu),ENCODE_OFFSET FILE_LINE_MACRO);
#define P_REUSE_MSG(T,M) (T_##T*)vsi_c_reuse(D0,SIZ(T_##T),T,BSIZE_##M+ADD_BSIZE,offsetof(T_##T,sdu),ENCODE_OFFSET FILE_LINE_MACRO);
#define PREUSE_SDU(D,T,N) T_##T *D = (T_##T*)vsi_c_reuse(D0,SIZ(T_##T),T,N,offsetof(T_##T,sdu),ENCODE_OFFSET FILE_LINE_MACRO);
#define P_REUSE_SDU(T,N) (T_##T*)vsi_c_reuse(D0,SIZ(T_##T),T,N,offsetof(T_##T,sdu),ENCODE_OFFSET FILE_LINE_MACRO);
#define PSEND(E,D) vsi_c_psend ( E ,(T_VOID_STRUCT*)D FILE_LINE_MACRO );
#define P_SEND(E,D) vsi_c_psend ( E ,(T_VOID_STRUCT*)D FILE_LINE_MACRO );
#define PSIGNAL(E,O,D) vsi_c_ssend ( E ,O,(T_VOID_STRUCT*)D,SIZ(T_##O) FILE_LINE_MACRO );
#define P_SIGNAL(E,O,D) vsi_c_ssend ( E ,O,(T_VOID_STRUCT*)D,SIZ(T_##O) FILE_LINE_MACRO );
#define PFREE(D) { T_VOID_STRUCT *z=(T_VOID_STRUCT*)D;\
vsi_c_pfree((T_VOID_STRUCT **)&z FILE_LINE_MACRO);}
#define P_FREE(D) { T_VOID_STRUCT *z=(T_VOID_STRUCT*)D;\
vsi_c_pfree((T_VOID_STRUCT **)&z FILE_LINE_MACRO);}
#define PPASS(D0,D,T) T_##T *D = (T_##T*)vsi_c_ppass ( (T_VOID_STRUCT*)D0, T FILE_LINE_MACRO );
#define P_PASS(D0,D,T) T_##T *D = (T_##T*)vsi_c_ppass ( (T_VOID_STRUCT*)D0, T FILE_LINE_MACRO );
#define PACCESS(D) VSI_PPM_ACCESS(D2P(D))
#define P_ACCESS(D) VSI_PPM_ACCESS(D2P(D))
#define PSTORE(D) vsi_c_pstore ((T_VOID_STRUCT*)D FILE_LINE_MACRO);
#define P_STORE(D) vsi_c_pstore ((T_VOID_STRUCT*)D FILE_LINE_MACRO);
#define MFREE(P) vsi_m_cfree((T_VOID_STRUCT **)&P FILE_LINE_MACRO);
#define M_FREE(P) vsi_m_cfree((T_VOID_STRUCT **)&P FILE_LINE_MACRO);
#define D_FREE(P) vsi_m_free((T_VOID_STRUCT **)&P FILE_LINE_MACRO);
#ifdef TRACE_FUNC
#define TRACE_FUNCTION(a) vsi_o_func_ttrace( a);
#else
#define TRACE_FUNCTION(a)
#endif
#ifdef TRACE_EVE
#define TRACE_EVENT(a) vsi_o_event_ttrace( a);
#define TRACE_EVENT_P1(f,a1) vsi_o_event_ttrace( f,a1);
#define TRACE_EVENT_P2(f,a1,a2) vsi_o_event_ttrace( f,a1,a2);
#define TRACE_EVENT_P3(f,a1,a2,a3) vsi_o_event_ttrace( f,a1,a2,a3);
#define TRACE_EVENT_P4(f,a1,a2,a3,a4) vsi_o_event_ttrace( f,a1,a2,a3,a4);
#define TRACE_EVENT_P5(f,a1,a2,a3,a4,a5) vsi_o_event_ttrace( f,a1,a2,a3,a4,a5);
#define TRACE_EVENT_P6(f,a1,a2,a3,a4,a5,a6) vsi_o_event_ttrace( f,a1,a2,a3,a4,a5,a6);
#define TRACE_EVENT_P7(f,a1,a2,a3,a4,a5,a6,a7) vsi_o_event_ttrace( f,a1,a2,a3,a4,a5,a6,a7);
#define TRACE_EVENT_P8(f,a1,a2,a3,a4,a5,a6,a7,a8) vsi_o_event_ttrace( f,a1,a2,a3,a4,a5,a6,a7,a8);
#define TRACE_EVENT_P9(f,a1,a2,a3,a4,a5,a6,a7,a8,a9) vsi_o_event_ttrace( f,a1,a2,a3,a4,a5,a6,a7,a8,a9);
#else
#define TRACE_EVENT(a)
#define TRACE_EVENT(a)
#define TRACE_EVENT_P1(f,a1)
#define TRACE_EVENT_P2(f,a1,a2)
#define TRACE_EVENT_P3(f,a1,a2,a3)
#define TRACE_EVENT_P4(f,a1,a2,a3,a4)
#define TRACE_EVENT_P5(f,a1,a2,a3,a4,a5)
#define TRACE_EVENT_P6(f,a1,a2,a3,a4,a5,a6)
#define TRACE_EVENT_P7(f,a1,a2,a3,a4,a5,a6,a7)
#define TRACE_EVENT_P8(f,a1,a2,a3,a4,a5,a6,a7,a8)
#define TRACE_EVENT_P9(f,a1,a2,a3,a4,a5,a6,a7,a8,a9)
#endif
#ifdef TRACE_ERR
#ifndef __VSI_TRC_C__
extern char EntityNameBuf[];
#endif
#define TRACE_ERROR(a) vsi_o_error_ttrace(a);
#else
#define TRACE_ERROR(a)
#endif
#ifdef TRACE_IS /* entity internal signals */
#define TRACE_ISIG(a) _vsi_o_ttrace( TC_ISIG,a);
#else
#define TRACE_ISIG(a)
#endif
#ifdef TRACE_STATE
#define SET_STATE(PROCESS,STATE)\
{ vsi_o_state_ttrace ( #PROCESS ":%s -> " #STATE,\
PROCESS##_NAME [ ENTITY_DATA->state[PROCESS] ]);\
ENTITY_DATA->state[PROCESS] = STATE;}
#define GET_STATE(PROCESS)\
(vsi_o_state_ttrace (#PROCESS ":%s",\
PROCESS##_NAME [ ENTITY_DATA->state[PROCESS] ]),\
ENTITY_DATA->state[PROCESS] )
#else
#define SET_STATE(PROCESS,STATE) ENTITY_DATA->state[PROCESS] = STATE
#define GET_STATE(PROCESS) ENTITY_DATA->state[PROCESS]
#endif
#ifdef TRACE_PRIM
#define PTRACE_IN(OPC) vsi_o_ptrace (VSI_CALLER OPC, 0)
#define PTRACE_OUT(OPC) vsi_o_ptrace (VSI_CALLER OPC, 1)
#else
#define PTRACE_IN(OPC)
#define PTRACE_OUT(OPC)
#endif
#undef TRACE_ASSERT
#if defined NDEBUG
#define TRACE_ASSERT(e) ((void)0)
#else
#define TRACE_ASSERT(e) ((void)((e)?0:vsi_o_assert(0,0x8000,__FILE__,__LINE__,#e)))
#define _TRACE_ASSERT(e) ((void)((e)?0:vsi_o_assert(0,0x8000,__FILE__,__LINE__,"Assertion failed:" #e)))
#endif
#ifdef assert
#undef assert
#endif
#define assert TRACE_ASSERT
#endif /* VSI_H */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?