// // Mantis BDA IOCTL(ksProperty) interface document // =========================================================================================================================== 1. DiSEqC & lnb setup parameters =========================================================================================================================== a. Interface: #define THBDA_IOCTL_SET_LNB_DATA CTL_CODE(THBDA_IO_INDEX, 128, METHOD_BUFFERED, FILE_ANY_ACCESS) b. Structure: typedef struct _LNB_DATA { UCHAR LNB_POWER; // 1:LNB POWER ON, 0:LNB POWER OFF UCHAR Tone_Data_Burst; // 0:Tone/Data burst OFF, Tone Burst ON, Data Burst ON ULONG ulLNBLOFLowBand; // LOF Low Band, in MHz ULONG ulLNBLOFHighBand; // LOF High Band, in MHz ULONG ulLNBLOFHiLoSW; // LOF High/Low Band Switch Freq, in MHz UCHAR f22K_Output; // 22KHz tone Control - 0:Set by High/Low band switch, 1:22K Off, 2: 22K On UCHAR DiSEqC_Port; // DiSEqC switch - 0:OFF, 1:DiSEqC_A, 2:DiSEqC_B, 3:DiSEqC_C, 4:DiSEqC_D } LNB_DATA, *P_LNB_DATA; c. Note: This interface is used to set parameters which can't be set through standard BDA interface, like Tone/Data burst, 22k output and DiSEqC. =========================================================================================================================== 2. Descrambling program =========================================================================================================================== a. Interface: #define THBDA_IOCTL_CI_SEND_PMT CTL_CODE(THBDA_IO_INDEX, 206, METHOD_BUFFERED, FILE_ANY_ACCESS) #define THBDA_IOCTL_CI_GET_PMT_REPLY CTL_CODE(THBDA_IO_INDEX, 210, METHOD_BUFFERED, FILE_ANY_ACCESS) b. Fitler THPsiParser.ax Please register THPsiParser.ax filter first. The PMT table is parsed by THPsiParser.ax filter. A raw TS stream (from demux) should be fed to the input of THPsiParser.ax while running. c. Compose CA_PMT table To start descrambling a program, we should get the corresponding CA_PMT table first. THPsiParser is responsible for composing CA_PMT table. The following parameters should be set to THPsiParser 1.The prorgam's PMT_PID (must) 2.The prorgam's SID (optional, set it to 0 for default) 3.CA_PMT List Management (must) The value could be, #define CA_PMT_LIST_MGT_MORE 0 #define CA_PMT_LIST_MGT_FIRST 1 #define CA_PMT_LIST_MGT_LAST 2 #define CA_PMT_LIST_MGT_ONLY 3 #define CA_PMT_LIST_MGT_ADD 4 #define CA_PMT_LIST_MGT_UPDATE 5 In general case, please set it to CA_PMT_LIST_MGT_ONLY. 4.CA_PMT Command ID (must) The value could be, #define CA_PMT_CMDID_Decrambleing 1 #define CA_PMT_CMDID_MMI 2 #define CA_PMT_CMDID_Query 3 #define CA_PMT_CMDID_NSelected 4 If you want to descramble the stream, please set CA_PMT_CMDID_Decrambleing. If you want to query the descrambling capability of the CAM with the stream, please set CA_PMT_CMDID_Query . 5.A/V PID list (optional) The A/V pid to be descrambed. If not specified, THPsiParser will retrieve the corresponding PID's from TS with PMT PID & SID. When the parameters are well set, call the interface GetPMTData() to get the composed CA_PMT table. d. To descramble or query If CA_PMT Command ID is set to CA_PMT_CMDID_Decrambleing, Send the CA_PMT table to the driver with "THBDA_IOCTL_CI_SEND_PMT" interface, then CAM will start to descrambling the corresponding program. If CA_PMT Command ID is set to CA_PMT_CMDID_Query, Send the CA_PMT table to the driver with THBDA_IOCTL_CI_GET_PMT_REPLY interface, and get the reply from CAM. Please refer to the sample program for details. =========================================================================================================================== 3. CI/MMI information =========================================================================================================================== a. Interfaces: #define THBDA_IOCTL_CI_GET_STATE CTL_CODE(THBDA_IO_INDEX, 200, METHOD_BUFFERED, FILE_ANY_ACCESS) #define THBDA_IOCTL_CI_INIT_MMI CTL_CODE(THBDA_IO_INDEX, 202, METHOD_BUFFERED, FILE_ANY_ACCESS) #define THBDA_IOCTL_CI_GET_MMI CTL_CODE(THBDA_IO_INDEX, 203, METHOD_BUFFERED, FILE_ANY_ACCESS) #define THBDA_IOCTL_CI_ANSWER CTL_CODE(THBDA_IO_INDEX, 204, METHOD_BUFFERED, FILE_ANY_ACCESS) #define THBDA_IOCTL_CI_CLOSE_MMI CTL_CODE(THBDA_IO_INDEX, 205, METHOD_BUFFERED, FILE_ANY_ACCESS) #define THBDA_IOCTL_CI_EVENT_CREATE CTL_CODE(THBDA_IO_INDEX, 208, METHOD_BUFFERED, FILE_ANY_ACCESS) #define THBDA_IOCTL_CI_EVENT_CLOSE CTL_CODE(THBDA_IO_INDEX, 209, METHOD_BUFFERED, FILE_ANY_ACCESS) b. Wait CI/MMI event Step 1: Send THBDA_IOCTL_CI_EVENT_CREATE to enable CI events. Step 2: Send THBDA_IOCTL_CI_INIT_MMI to initial MMI. Step 3: Wait the CI/MMI event Event types: enum CIMessage { // Old CI messages CI_STATUS_EMPTY_OLD = 0, // NON_CI_INFO 0 CI_STATUS_CAM_OK1_OLD, // ME0 1 CI_STATUS_CAM_OK2_OLD, // ME1 2 MMI_STATUS_GET_MENU_OK1_OLD, // MMI0 3 MMI_STATUS_GET_MENU_OK2_OLD, // MMI1 4 MMI_STATUS_GET_MENU_CLOSE1_OLD, // MMI0_ClOSE 5 MMI_STATUS_GET_MENU_CLOSE2_OLD, // MMI1_ClOSE 6 // New CI messages CI_STATUS_EMPTY = 10, // No CAM inserted CI_STATUS_INSERTED, // CAM is inserted CI_STATUS_CAM_OK, // Initila CAM OK CI_STATUS_CAM_UNKNOW, // Unkonw CAM type MMI_STATUS_ANSWER_SEND, // Communicating with CAM MMI_STATUS_GET_MENU_OK, // Get information from CAM MMI_STATUS_GET_MENU_FAIL, // Fail to get information from CAM MMI_STATUS_GET_MENU_INIT, // Init MMI MMI_STATUS_GET_MENU_CLOSE, // Close MMI MMI_STATUS_GET_MENU_CLOSED, // MMI Closed }; Step 4: Use THBDA_IOCTL_CI_GET_STATE to check which event that AP receives. "ulEventMessage" will show current event message. typedef struct { ULONG ulCIState; // CI/CAM status ULONG ulMMIState; // MMI status ULONG ulPMTState; ULONG ulEventMessage; // Current event status ULONG Reserved[2]; } THCIState, *PTHCIState; Step5: If the ulEventMessage = MMI_STATUS_GET_MENU_OK, we can use THBDA_IOCTL_CI_GET_MMI to get MMI informations. Step6: Send THBDA_IOCTL_CI_CLOSE_MMI to stop MMI. Step7: Send THBDA_IOCTL_CI_EVENT_CLOSE to close CI events. A polling mode for CI/MMI access is also supported, please refer to the attached sample program for further details. =========================================================================================================================== 4. DiSEqC & lnb setup parameters =========================================================================================================================== a. Interface: #define THBDA_IOCTL_CI_SEND_RAW_CMD CTL_CODE(THBDA_IO_INDEX, 211, METHOD_BUFFERED, FILE_ANY_ACCESS) #define THBDA_IOCTL_CI_GET_RAW_CMD_DATA CTL_CODE(THBDA_IO_INDEX, 212, METHOD_BUFFERED, FILE_ANY_ACCESS) b. Structure: enum RAWCMDSSTYPE { SESSION_TYPE_PROFILE = 0, // Profile session command SESSION_TYPE_APP, // Application session command SESSION_TYPE_CA, // CA session command SESSION_TYPE_MMI // MMI sesstion command }; typedef struct _RAW_CMD_INFO { DWORD dwSessionType; // Raw command session type PVOID pRawCmdBuff; // Raw command buffer DWORD dwRawCmdBuffSize; // Raw command buffer size DWORD Reserved[5]; } RAW_CMD_INFO, *PRAW_CMD_INFO; c. Send Raw command Step1: Fill the RAW_CMD_INFO structure. Step2: Use THBDA_IOCTL_CI_SEND_RAW_CMD interface to send raw command. Step3: Use THBDA_IOCTL_CI_GET_RAW_CMD_DATA interface to get the return information.Download Driver Pack
After your driver has been downloaded, follow these simple steps to install it.
Expand the archive file (if the download file is in zip or rar format).
If the expanded file has an .exe extension, double click it and follow the installation instructions.
Otherwise, open Device Manager by right-clicking the Start menu and selecting Device Manager.
Find the device and model you want to update in the device list.
Double-click on it to open the Properties dialog box.
From the Properties dialog box, select the Driver tab.
Click the Update Driver button, then follow the instructions.
Very important: You must reboot your system to ensure that any driver updates have taken effect.
For more help, visit our Driver Support section for step-by-step videos on how to install drivers for every file type.