306 lines
8.9 KiB
C
306 lines
8.9 KiB
C
/**
|
|
Msdc-Nvt Vendor
|
|
|
|
This system for PC control device(DSC) via MSDC. User can register callbacks
|
|
to respond PC command.
|
|
|
|
@file MsdcNvtApi.h
|
|
@ingroup mMSDCNVT
|
|
@note Suggest Task Stack Size is 8192. Suggest Task Priority is 10.
|
|
This library depends on Msdc and Strg lib.
|
|
|
|
Copyright Novatek Microelectronics Corp. 2012. All rights reserved.
|
|
*/
|
|
|
|
#ifndef _MSDCNVTAPI_H
|
|
#define _MSDCNVTAPI_H
|
|
|
|
#include <kwrap/task.h>
|
|
#include <strg_def.h>
|
|
|
|
/**
|
|
@addtogroup mMSDCNVT
|
|
*/
|
|
//@{
|
|
|
|
/**
|
|
API Version
|
|
*/
|
|
#define MSDCNVT_API_VERSION 0x16080511U
|
|
|
|
/**
|
|
The minimun stack size requirement for MsdcNvtTsk
|
|
*/
|
|
#if (MSDC_MIN_BUFFER_SIZE>0x240BC)
|
|
#define MSDCNVT_REQUIRE_MIN_SIZE MSDC_MIN_BUFFER_SIZE
|
|
#else
|
|
#define MSDCNVT_REQUIRE_MIN_SIZE 0x240BC
|
|
#endif
|
|
|
|
#define MSDCNVT_REQUIRE_MIN_SIZE_NO_USB 0x024100
|
|
|
|
|
|
/**
|
|
@name Macro Tools
|
|
*/
|
|
//@{
|
|
#define MSDCNVT_CAST(type,p_data) (type*)MsdcNvt_ChkParameters(p_data,sizeof(type)) ///< Check Begin Parameters from Host. Used in Bi-Direction functions.
|
|
//@}
|
|
|
|
/**
|
|
@name BiDirection function register
|
|
*/
|
|
//@{
|
|
#define MSDCNVT_REG_BI_BEGIN(tbl) static MSDCNVT_BI_CALL_UNIT (tbl)[]={ ///< declare bi-direction function table begin
|
|
#define MSDCNVT_REG_BI_ITEM(x) {#x,(x)}, ///< append a bi-direction function
|
|
#define MSDCNVT_REG_BI_END() {NULL,NULL}}; ///< bi-direction function table end
|
|
//@}
|
|
|
|
/**
|
|
Event
|
|
|
|
MsdcNvt reports some events
|
|
*/
|
|
typedef enum _MSDCNVT_EVENT {
|
|
MSDCNVT_EVENT_HOOK_DBG_MSG_ON, ///< turn on usb debug message
|
|
MSDCNVT_EVENT_HOOK_DBG_MSG_OFF, ///< turn off usb debug message
|
|
ENUM_DUMMY4WORD(MSDCNVT_EVENT)
|
|
} MSDCNVT_EVENT;
|
|
|
|
typedef void (*MSDCNVT_CB_EVENT)(MSDCNVT_EVENT event);
|
|
|
|
/**
|
|
Handler type
|
|
|
|
MsdcNvt allows to register following handler
|
|
*/
|
|
typedef enum _MSDCNVT_HANDLER_TYPE {
|
|
MSDCNVT_HANDLER_TYPE_UNKNOWN, ///< Reversed.
|
|
MSDCNVT_HANDLER_TYPE_VIRTUAL_MEM_MAP, ///< MSDCNVT_CB_VIRTUAL_MEM_READ, Handler that PC read memory 0xF0000000~0xFFFFFFFF via registered handler
|
|
ENUM_DUMMY4WORD(MSDCNVT_HANDLER_TYPE)
|
|
} MSDCNVT_HANDLER_TYPE;
|
|
|
|
typedef UINT32(*MSDCNVT_CB_VIRTUAL_MEM_READ)(UINT32 MemOffset, UINT32 MemSize);
|
|
|
|
/**
|
|
MsdcNvt configuration strucutre
|
|
|
|
Set working buffer, semaphore, task id for Msdc vendor system using via MsdcNvt_Init() before calling Msdc_Open()
|
|
*/
|
|
typedef struct _MSDCNVT_INIT {
|
|
UINT32 uiApiVer; ///< just assign to MSDCNVT_API_VERSION
|
|
UINT8 *pMemCache; ///< Cache-able Memory (MSDCNVT_REQUIRE_MIN_SIZE Bytes Requirement) Front-End:0x10000,Back-End:0x10000,Msg:0x4000,CBW:0x40
|
|
UINT8 *pMemCache_pa; ///< for linux, physical address of pMemCache is required.
|
|
UINT32 uiSizeCache; ///< n Bytes of Cache Memory
|
|
BOOL bHookDbgMsg; ///< Indicate use USB to seeing message and sending command
|
|
UINT32 uiUartIdx; ///< Select to 0:uart_putString or 1:uart2_putString to real uart output
|
|
MSDCNVT_CB_EVENT fpEvent; ///< export MsdcNvt events
|
|
MSDC_OBJ *pMsdc; ///< via USB 2.0 or USB 3.0
|
|
//net supporting
|
|
UINT32 uiPort; ///< TCP port (set 0 for default 1968)
|
|
UINT32 uiTos; ///< TCP tos value
|
|
UINT32 uiSndBufSize; ///< Send Socket Buffer Size (0: system default)
|
|
UINT32 uiRecvBufSize; ///< Recv Socket Buffer Size (0: system default)
|
|
} MSDCNVT_INIT, *PMSDCNVT_INIT;
|
|
|
|
/**
|
|
Null Lun
|
|
|
|
Msdc-Nvt provide a null lun for easy to setting msdc structure
|
|
*/
|
|
typedef struct _MSDCNVT_LUN {
|
|
MSDC_TYPE Type; ///< MsdcNvt provide suggest msdc type
|
|
STORAGE_OBJ *pStrg; ///< MsdcNvt provide suggest dx handle of storage
|
|
MSDC_StorageDet_CB fpStrgDetCb; ///< MsdcNvt provide suggest card detection callback
|
|
MSDC_StrgLockDet_CB fpStrgLockCb; ///< MsdcNvt provide suggest card lock detection callback
|
|
UINT32 uiLUNs; ///< MsdcNvt provide suggest the number of lun.
|
|
} MSDCNVT_LUN, *PMSDCNVT_LUN;
|
|
|
|
//Bi-Direction Call Function Unit
|
|
/**
|
|
Bi Unit
|
|
|
|
Msdc-Nvt Bi-Direction Call Function Unit
|
|
*/
|
|
typedef struct _MSDCNVT_BI_CALL_UNIT {
|
|
char *szName; ///< Function Name
|
|
void (*fp)(void *pData); ///< Handler Callback
|
|
} MSDCNVT_BI_CALL_UNIT;
|
|
|
|
/**
|
|
Msdc-Nvt vendor configuration
|
|
|
|
Configure Msdc-Nvt for system initial
|
|
|
|
@param[in] pInit Configuration strucutre
|
|
@return
|
|
- @b TRUE: configuration success.
|
|
- @b FALSE: configuration failed.
|
|
*/
|
|
extern BOOL MsdcNvt_Init(MSDCNVT_INIT *pInit);
|
|
|
|
/**
|
|
Msdc-Nvt vendor exit
|
|
|
|
Quit Msdc-Nvt
|
|
|
|
@return
|
|
- @b TRUE: exit success.
|
|
- @b FALSE: failed to exit.
|
|
*/
|
|
extern BOOL MsdcNvt_Exit(void);
|
|
|
|
/**
|
|
Msdc verify callback
|
|
|
|
A callback for plug-in USB_MSDC_INFO.msdc_check_cb
|
|
*/
|
|
extern BOOL MsdcNvt_Verify_Cb(UINT32 pCmdBuf, UINT32 *pDataBuf);
|
|
|
|
/**
|
|
Msdc verify callback
|
|
|
|
A callback for plug-in USB_MSDC_INFO.msdc_vendor_cb
|
|
*/
|
|
extern void MsdcNvt_Vendor_Cb(PMSDCVendorParam pBuf);
|
|
|
|
/**
|
|
Get host-device common data buffer address
|
|
|
|
Get data address for single directtion callback function
|
|
|
|
@return
|
|
- @b NULL: failed to get buffer address.
|
|
- @b NON-NULL: buffer address.
|
|
*/
|
|
extern UINT8 *MsdcNvt_GetDataBufferAddress(void);
|
|
|
|
/**
|
|
Get host-device common data buffer size (byte unit)
|
|
|
|
Get data size for single directtion callback function
|
|
|
|
@return
|
|
@return
|
|
- @b 0: failed to get buffer size.
|
|
- @b Non-Zero: buffer size.
|
|
*/
|
|
extern UINT32 MsdcNvt_GetDataBufferSize(void);
|
|
|
|
/**
|
|
Register bi-direction type callback function
|
|
|
|
PlugIn vendor function(bi-direction, form PC set then get automatic)
|
|
|
|
@param[in] pUnit the structure pointer that bi-direction needs
|
|
@return
|
|
- @b TRUE: success to register.
|
|
- @b FALSE: failed to register callback function.
|
|
*/
|
|
extern BOOL MsdcNvt_AddCallback_Bi(MSDCNVT_BI_CALL_UNIT *pUnit);
|
|
|
|
/**
|
|
Register single-direction type callback function
|
|
|
|
Plugin vendor function(single-direction,from PC-Get and PC-Set)
|
|
|
|
@param[in] fpTblGet function table for host get data
|
|
@param[in] nGets number of functions in fpTblGet table
|
|
@param[in] fpTblSet function table for host set data
|
|
@param[in] nSets number of functions in fpTblSet table
|
|
@return
|
|
- @b TRUE: success to register.
|
|
- @b FALSE: failed to register callback function.
|
|
*/
|
|
extern BOOL MsdcNvt_AddCallback_Si(FP *fpTblGet, UINT8 nGets, FP *fpTblSet, UINT8 nSets);
|
|
extern BOOL MsdcNvt_GetCallback_Si(FP **fpTblGet, UINT8 *nGets, FP **fpTblSet, UINT8 *nSets);
|
|
|
|
/**
|
|
Get transmitted data size
|
|
|
|
For MSDCVendorNVT_AddCallback_Si functions, get pc how many data is transmitted
|
|
|
|
@return data size (byte unit).
|
|
*/
|
|
extern UINT32 MsdcNvt_GetTransSize(void);
|
|
|
|
/**
|
|
Msdc-Nvt vendor main task
|
|
|
|
This task is used for do background command, currently.
|
|
*/
|
|
extern THREAD_DECLARE(MsdcNvtTsk, arglist);
|
|
|
|
/**
|
|
Msdc-Nvt Turn ON / OFF Net Service
|
|
|
|
After initiating, with CPU2 started, call it on for NET supporting.
|
|
before CPU2 closed, call it off for next NET supporting.
|
|
|
|
@param[in] bTurnOn Turn it ON / OFF
|
|
@return
|
|
- @b TRUE: success.
|
|
- @b FALSE: failed.
|
|
*/
|
|
extern BOOL MsdcNvt_Net(BOOL bTurnOn);
|
|
|
|
|
|
//------------------------------------------------------------
|
|
// Utility Functions
|
|
//------------------------------------------------------------
|
|
/**
|
|
Check Parameters
|
|
|
|
for all registered callback as MsdcNvtCb_xxxxx, to check data valid.
|
|
|
|
|
|
@param[in] pData the implemented callback input include tMSDCEXT_PARENT.
|
|
@param[in] uiSize the size of data that you except
|
|
@return
|
|
- @b Non-Zero: valid data
|
|
- @b NULL: invalid data
|
|
*/
|
|
void *MsdcNvt_ChkParameters(void *pData, UINT32 uiSize);
|
|
|
|
/**
|
|
NULL Lun
|
|
|
|
Due to attach MSDC application need plug-in a stroage, here provide a virtual
|
|
stroage for user plug-in.
|
|
|
|
@return
|
|
- @b virtual stroage information
|
|
*/
|
|
MSDCNVT_LUN *MsdcNvt_GetNullLun(void);
|
|
|
|
/**
|
|
Handler to read memory 0xF0000000 ~ 0xFFFFFFFF
|
|
|
|
@return
|
|
- @b TRUE: success.
|
|
- @b FALSE: failed.
|
|
*/
|
|
extern BOOL MsdcNvt_RegHandler(MSDCNVT_HANDLER_TYPE Type, void *pCb);
|
|
|
|
/**
|
|
Set Msdc Object for current use
|
|
|
|
@param[in] pMsdc Msdc Object
|
|
@return
|
|
- @b TRUE: success.
|
|
- @b FALSE: failed.
|
|
*/
|
|
extern BOOL MsdcNvt_SetMsdcObj(MSDC_OBJ *pMsdc);
|
|
|
|
/**
|
|
Get current Msdc Object
|
|
|
|
@param[in] pMsdc Msdc Object
|
|
@return
|
|
- @b Non-Zero: pointer to Msdc Object.
|
|
- @b NULL: failed.
|
|
*/
|
|
extern MSDC_OBJ *MsdcNvt_GetMsdcObj(void);
|
|
//@}
|
|
#endif
|