nt9856x/code/application/source/cardv/SrcCode/Dx/DxCommon.c
2023-03-28 15:07:53 +08:00

228 lines
5.0 KiB
C
Executable File

#include "Dx.h"
#include "DxCommon.h"
#include "DxApi.h"
#include "DxStorage.h"
///////////////////////////////////////////////////////////////////////////////
#define __MODULE__ DxComm
#define __DBGLVL__ 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
#define __DBGFLT__ "*" //*=All, [mark]=CustomClass
#include <kwrap/debug.h>
///////////////////////////////////////////////////////////////////////////////
#define IS_SIGN(x) ((x&DXFLAG_SIGN_MASK)==DXFLAG_SIGN)
// Get Capability Flag
UINT32 Dx_Getcaps(DX_HANDLE DxObject, UINT32 CapID, UINT32 Param1)
{
DX_OBJECT *pDX = (DX_OBJECT *)DxObject;
DBG_FUNC_BEGIN("\r\n");
DBG_MSG("CapID %08x\r\n", CapID);
if (!pDX || !IS_SIGN(pDX->sign)) {
DBG_ERR("DX_NULL_POINTER\r\n");
return 0;
}
if (!pDX->pfGetcaps) {
DBG_ERR("DX_NOT_SUPPORT Getcaps\r\n");
return 0;
}
//DX_ASSERT((pDX->sign & DXFLAG_SIGN_MASK) == DXFLAG_SIGN);
return pDX->pfGetcaps(CapID, Param1);
}
// Set Config Setting
UINT32 Dx_Setconfig(DX_HANDLE DxObject, UINT32 CfgID, UINT32 Param1)
{
DX_OBJECT *pDX = (DX_OBJECT *)DxObject;
DBG_FUNC_BEGIN("\r\n");
DBG_MSG("CfgID %08x\r\n", CfgID);
if (!pDX || !IS_SIGN(pDX->sign)) {
return DX_NULL_POINTER;
}
//DX_ASSERT((pDX->sign & DXFLAG_SIGN_MASK) == DXFLAG_SIGN);
if (!pDX->pfSetcfgs) {
return DX_NOT_SUPPORT;
}
return pDX->pfSetcfgs(CfgID, Param1);
}
// Set Init Parameters
UINT32 Dx_Init(DX_HANDLE DxObject, void *pInitParam, DX_CB pfCallback, UINT32 CurrVer)
{
DX_OBJECT *pDX = (DX_OBJECT *)DxObject;
DBG_FUNC_BEGIN("\r\n");
if (!pDX || !IS_SIGN(pDX->sign)) {
return DX_NULL_POINTER;
}
//DX_ASSERT((pDX->sign & DXFLAG_SIGN_MASK) == DXFLAG_SIGN);
if (pDX->sign & DXFLAG_OPEN) {
return DX_ALREADY_OPEN;
}
if (pDX->ver != CurrVer) {
return DX_VER_NOTMATCH;
}
if ((pDX->pfOpen == 0)
|| (pDX->pfClose == 0)) {
return DX_LACKOF_FUNC;
}
pDX->pfCallback = pfCallback;
if (!pDX->pfInit) {
return DX_NOT_SUPPORT;
}
//pDX->type = TYPE_NULL; //clear
//pDX->sign = 0; //clear
return pDX->pfInit(pInitParam);
}
// Common Constructor
UINT32 Dx_Open(DX_HANDLE DxObject)
{
UINT32 r;
DX_OBJECT *pDX = (DX_OBJECT *)DxObject;
DBG_FUNC_BEGIN("\r\n");
if (!pDX || !IS_SIGN(pDX->sign)) {
return DX_NULL_POINTER;
}
//DX_ASSERT((pDX->sign & DXFLAG_SIGN_MASK) == DXFLAG_SIGN);
if (pDX->sign & DXFLAG_OPEN) {
return DX_ALREADY_OPEN;
}
if (!pDX->pfOpen) {
return DX_NOT_SUPPORT;
}
r = pDX->pfOpen();
if (r == DX_OK) {
pDX->sign |= DXFLAG_OPEN;
}
return r;
}
// Common Destructor
UINT32 Dx_Close(DX_HANDLE DxObject)
{
UINT32 r;
DX_OBJECT *pDX = (DX_OBJECT *)DxObject;
DBG_FUNC_BEGIN("\r\n");
if (!pDX || !IS_SIGN(pDX->sign)) {
return DX_NULL_POINTER;
}
//DX_ASSERT((pDX->sign & DXFLAG_SIGN_MASK) == DXFLAG_SIGN);
if (!(pDX->sign & DXFLAG_OPEN)) {
return DX_NOT_OPEN;
}
if (!pDX->pfClose) {
return DX_NOT_SUPPORT;
}
r = pDX->pfClose();
pDX->sign &= ~DXFLAG_OPEN;
return r;
}
// General Properties
UINT32 Dx_GetState(DX_HANDLE DxObject, UINT32 StateID, UINT32 *pOut)
{
DX_OBJECT *pDX = (DX_OBJECT *)DxObject;
DBG_FUNC_BEGIN("\r\n");
if (!pDX || !IS_SIGN(pDX->sign)) {
return DX_NULL_POINTER;
}
//DX_ASSERT((pDX->sign & DXFLAG_SIGN_MASK) == DXFLAG_SIGN);
//if(!(pDX->sign & DXFLAG_OPEN))
// return DX_NOT_OPEN;
if (!pDX->pfState) {
return DX_NOT_SUPPORT;
}
*pOut = pDX->pfState(DXGET | StateID, 0);
return DX_OK;
}
// General Properties
UINT32 Dx_SetState(DX_HANDLE DxObject, UINT32 StateID, UINT32 Value)
{
DX_OBJECT *pDX = (DX_OBJECT *)DxObject;
DBG_FUNC_BEGIN("\r\n");
if (!pDX || !IS_SIGN(pDX->sign)) {
return DX_NULL_POINTER;
}
//DX_ASSERT((pDX->sign & DXFLAG_SIGN_MASK) == DXFLAG_SIGN);
if (!(pDX->sign & DXFLAG_OPEN)) {
return DX_NOT_OPEN;
}
if (!pDX->pfState) {
return DX_NOT_SUPPORT;
}
return pDX->pfState(DXSET | StateID, Value);
}
// General Methods
UINT32 Dx_Control(DX_HANDLE DxObject, UINT32 CmdID, UINT32 Param1, UINT32 Param2)
{
DX_OBJECT *pDX = (DX_OBJECT *)DxObject;
DBG_FUNC_BEGIN("\r\n");
if (!pDX || !IS_SIGN(pDX->sign)) {
return DX_NULL_POINTER;
}
//DX_ASSERT((pDX->sign & DXFLAG_SIGN_MASK) == DXFLAG_SIGN);
if (!(pDX->sign & DXFLAG_OPEN)) {
return DX_NOT_OPEN;
}
if (!pDX->pfControl) {
return DX_NOT_SUPPORT;
}
return pDX->pfControl(CmdID, Param1, Param2);
}
// General Command Console
BOOL Dx_Command(DX_HANDLE DxObject, CHAR *pcCmdStr)
{
DX_OBJECT *pDX = (DX_OBJECT *)DxObject;
DBG_FUNC_BEGIN("\r\n");
if (!pDX || !IS_SIGN(pDX->sign)) {
return DX_NULL_POINTER;
}
//DX_ASSERT((pDX->sign & DXFLAG_SIGN_MASK) == DXFLAG_SIGN);
//if(!(pDX->sign & DXFLAG_OPEN))
// return DX_NOT_OPEN;
if (!pDX->pfCommand) {
return DX_NOT_SUPPORT;
}
return pDX->pfCommand(pcCmdStr);
}
UINT32 Dx_GetInfo(DX_HANDLE DxObject, DX_INFO InfoID, void *pOut)
{
DX_OBJECT *pDX = (DX_OBJECT *)DxObject;
DBG_FUNC_BEGIN("\r\n");
if (!pDX || !IS_SIGN(pDX->sign)) {
return DX_NULL_POINTER;
}
switch (InfoID) {
case DX_INFO_CLASS:
*(UINT32 *)pOut = pDX->type;
break;
case DX_INFO_NAME:
*(char **)pOut = pDX->name;
break;
default:
return DX_NOT_SUPPORT;
}
return DX_OK;
}