306 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			306 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /**
 | |
|     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
 | 
