Hauppauge WinTV-CI
The Hauppauge WinTV-CI is a standalone CI-interface from Hauppauge.
Overview/features
The WinTV-CI is a bus-powered USB 2.0 device that provides a CI interface for PayTV.
According to Hauppauge, the Windows driver supports following CAMs:
- AlphaCrypt
- Conax
- Irdeto
- Mediaguard
- AstonCrypt
- CryptoWorks
- Viacess
Components used
The box contains a single PCB with two active components : an FX2 from Cypress (CY7C68013A) and a FPGA (Actel Proasic-plus, APA075-F)
Identification
dmesg output:
usb 1-7: new high speed USB device using ehci_hcd and address 2 usb 1-7: new device found, idVendor=2040, idProduct=1100 usb 1-7: new device strings: Mfr=0, Product=0, SerialNumber=0 usb 1-7: configuration #1 chosen from 1 choice
Making it work
Driver
There is a working driver which was successfully tested with VDR in conjunction with the ddci2-plugin.
Sources and instruction can be found on https://github.com/siricco/usb2ci.
See also the discussion in the german VDR forum https://www.vdr-portal.de/forum/index.php?thread/130720-wintv-ci-cinergy-usb-ci-und-ddci2
This is a log with the driver initialisation and the communication with vdr/ddci2:
usb 1-1: new high-speed USB device number 26 using ehci-pci wintv_usb2ci: Found USB-CI device 2040:1100 (Ver.2) in cold state wintv_usb2ci: located firmware wintvci_cb.fw, size 6424 bytes wintv_usb2ci: *** FW *** block-size 16, block-cnt 292, adr-low 0x0000, adr-top 0x0E06 wintv_usb2ci: * 291 firmware blocks written to internal RAM wintv_usb2ci: * EEPROM: Boot-Mode: C0, V:P:D: 2040:1100-2.00 cfg: 04 wintv_usb2ci: * EEPROM: Size 16 kB ( 16384 [0x4000] bytes ) wintv_usb2ci: * REVID [0xE60A]: Silicon Revision 0x01 wintv_usb2ci: * IFCONFIG [0xE601]=0x80 : FIFO/GPIF Clock 30 Mhz (internal) wintv_usb2ci: * USBCS [0xE680]=0x80 wintv_usb2ci: * CPUCS [0xE600]=0x02 : CPU clock-speed 12 Mhz (12|24|48) wintv_usb2ci: CI-firmware wintvci_r2.fw selected wintv_usb2ci: located firmware wintvci_r2.fw, size 13684 bytes wintv_usb2ci: *** FW *** block-size 16, block-cnt 622, adr-low 0x0000, adr-top 0x26C9 wintv_usb2ci: * 621 firmware blocks written to internal RAM wintv_usb2ci: probe succesfull usbcore: registered new interface driver wintv_usb2ci usb 1-1: USB disconnect, device number 26 wintv_usb2ci: wintv_usb_ci_disconnect wintv_usb2ci: wintv_usb_ci_delete wintv_usb2ci: USB wintv-ci #-1 now disconnected usb 1-1: new high-speed USB device number 27 using ehci-pci wintv_usb2ci: Found USB-CI device 2040:1100 (Ver.0) in warm state wintv_usb2ci: Product : WinTV-CI-USB2 wintv_usb2ci: Manufacturer : HAUPPAUGE wintv_usb2ci: EP 1 IN (INTR) Addr : 0x81, Maxp 64 Ival 9 wintv_usb2ci: EP 1 OUT (BULK) Addr : 0x01, Maxp 512 Ival 8 wintv_usb2ci: EP 2 IN (ISOC) Addr : 0x82, Maxp 752 Ival 1 wintv_usb2ci: EP 6 OUT (ISOC) Addr : 0x06, Maxp 752 Ival 1 wintv_usb2ci: Registering DVB Adapter dvbdev: DVB: registering new adapter (WinTV-CI) wintv_usb2ci: Attaching DVB CA Device wintv_usb2ci: ca_bulk_allocate : EP(01) init packet buffer: 512 bytes wintv_usb2ci: ca_intr_allocate : EP(81) init packet/message buffers: 64/255 bytes wintv_usb2ci: Attaching DVB CI Device wintv_usb2ci: ts_rb_alloc : EP(06) ringbuffer size 721920 bytes (8 x 480 / 3840 TS-packets) wintv_usb2ci: ci_isoc_allocate : EP(06) init 8 urbs (120 uframes / 480 TS-packets each urb) wintv_usb2ci: ci_isoc_setup : EP(06) initialize 8 urbs (DIR_OUT) wintv_usb2ci: ts_rb_alloc : EP(82) ringbuffer size 721920 bytes (8 x 480 / 3840 TS-packets) wintv_usb2ci: ci_isoc_allocate : EP(82) init 8 urbs (120 uframes / 480 TS-packets each urb) wintv_usb2ci: ci_isoc_setup : EP(82) initialize 8 urbs (DIR_IN) wintv_usb2ci: Reset CI Device wintv_usb2ci: ts_stop_streaming : stop streaming wintv_usb2ci: CI_send_CMD : [90] 0 wintv_usb2ci: CI_read_CMD_REPLY : [08] 20/20/0 wintv_usb2ci: * FW_Version(2.01) FPGA_Version(1.d) wintv_usb2ci: cam_state_set : 00 -> 01 wintv_usb2ci: probe succesfull Error: Driver 'wintv_usb2ci' is already registered, aborting... wintv_usb2ci: CI_send_CMD : [10] 1 wintv_usb2ci: CI_read_CMD_REPLY : [02] 0/0/0 wintv_usb2ci: CI_WriteExchange : [10/02] response after 2343 ms wintv_usb2ci: cam_state_set : 01 -> 03 wintv_usb2ci: Reset CI Device wintv_usb2ci: ts_stop_streaming : stop streaming wintv_usb2ci: CI_send_CMD : [40] 0 wintv_usb2ci: CI_read_CMD_REPLY : [03] 158/60/98 wintv_usb2ci: CI_read_CMD_REPLY : [03] 98/60/38 wintv_usb2ci: CI_read_CMD_REPLY : [03] 38/38/0 wintv_usb2ci: CI_WriteExchange : [40/03] response after 320 ms wintv_usb2ci: cam_state_set : 03 -> 04 wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 0: SMIT wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 1: DVB CA Module wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 2: $compatible[ciplus=1 ciprof=1]$ wintv_usb2ci: parse_cis : CFG_BASE: 0x220 (Cfg.Reg[0] in Attrib.Memory) wintv_usb2ci: parse_cis : CFG_REGS present [0-7] = 0x01 wintv_usb2ci: parse_cis : IF-CODE[0] 0x0241 'DVB_CI_V1.00' matched wintv_usb2ci: parse_cis : skip Interface description for IF-index 1 wintv_usb2ci: parse_cis : CFG-OPTIONS: 0xF wintv_usb2ci: DVB-CI-Module detected wintv_usb2ci: CI_send_CMD : [70] 5 wintv_usb2ci: CI_read_CMD_REPLY : [07] 0/0/0 wintv_usb2ci: CI_WriteExchange : [70/07] response after 290 ms wintv_usb2ci: cam_state_set : 04 -> 05 wintv_usb2ci: CI_send_CMD : [60] 2 wintv_usb2ci: CI_read_CMD_REPLY : [04] 2/2/0 wintv_usb2ci: CI_WriteExchange : [60/04] response after 160 ms wintv_usb2ci: cam_state_set : 05 -> 06 vdr[15587]: New default svdrp port 6419! wintv_usb2ci: ca_ioctl : CA_GET_CAP wintv_usb2ci: ca_ioctl : CA_RESET wintv_usb2ci: cam_state_set : 06 -> 01 wintv_usb2ci: *** CA-poll(104) [0]*** wintv_usb2ci: *** TS-poll(104) [0]*** vdr[15579]: [15579] DDCI-Inf: plugin version 1.0.5 initializing (compiled for VDR version 2.3.8) vdr[15579]: [15579] DDCI-Inf: found 1 DD CI adapter vdr[15579]: [15579] DDCI-Inf: Creating DdCiAdapter 0 (/dev/dvb/adapter1/ca0) vdr[15579]: [15579] DDCI-Inf: plugin started vdr[15579]: [15599] [vdr-sxfe] sxfe_display_open: failed to connect to X server (0.0) wintv_usb2ci: ca_ioctl : CA_GET_SLOT_INFO [0] : CAM NO_CAM wintv_usb2ci: *** CA-poll(104) [16]*** wintv_usb2ci: ca_ioctl : CA_GET_SLOT_INFO [0] : CAM NO_CAM wintv_usb2ci: CI_send_CMD : [10] 1 wintv_usb2ci: *** CA-poll(104) [16]*** wintv_usb2ci: ca_ioctl : CA_GET_SLOT_INFO [0] : CAM NO_CAM wintv_usb2ci: *** CA-poll(104) [16]*** wintv_usb2ci: ca_ioctl : CA_GET_SLOT_INFO [0] : CAM NO_CAM wintv_usb2ci: *** CA-poll(104) [16]*** wintv_usb2ci: ca_ioctl : CA_GET_SLOT_INFO [0] : CAM NO_CAM wintv_usb2ci: *** CA-poll(104) [16]*** wintv_usb2ci: ca_ioctl : CA_GET_SLOT_INFO [0] : CAM NO_CAM wintv_usb2ci: *** CA-poll(104) [16]*** wintv_usb2ci: ca_ioctl : CA_GET_SLOT_INFO [0] : CAM NO_CAM wintv_usb2ci: *** CA-poll(104) [16]*** wintv_usb2ci: CI_read_CMD_REPLY : [02] 0/0/0 wintv_usb2ci: CI_WriteExchange : [10/02] response after 2350 ms wintv_usb2ci: cam_state_set : 01 -> 03 wintv_usb2ci: Reset CI Device wintv_usb2ci: ts_stop_streaming : stop streaming wintv_usb2ci: CI_send_CMD : [40] 0 wintv_usb2ci: ca_ioctl : CA_GET_SLOT_INFO [0] : CAM PRESENT wintv_usb2ci: *** TS-poll(104) [0]*** wintv_usb2ci: *** CA-poll(104) [16]*** wintv_usb2ci: CI_read_CMD_REPLY : [03] 158/60/98 wintv_usb2ci: CI_read_CMD_REPLY : [03] 98/60/38 wintv_usb2ci: CI_read_CMD_REPLY : [03] 38/38/0 wintv_usb2ci: CI_WriteExchange : [40/03] response after 320 ms wintv_usb2ci: cam_state_set : 03 -> 04 wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 0: SMIT wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 1: DVB CA Module wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 2: $compatible[ciplus=1 ciprof=1]$ wintv_usb2ci: parse_cis : CFG_BASE: 0x220 (Cfg.Reg[0] in Attrib.Memory) wintv_usb2ci: parse_cis : CFG_REGS present [0-7] = 0x01 wintv_usb2ci: parse_cis : IF-CODE[0] 0x0241 'DVB_CI_V1.00' matched wintv_usb2ci: parse_cis : skip Interface description for IF-index 1 wintv_usb2ci: parse_cis : CFG-OPTIONS: 0xF wintv_usb2ci: DVB-CI-Module detected wintv_usb2ci: CI_send_CMD : [70] 5 wintv_usb2ci: ca_ioctl : CA_GET_SLOT_INFO [0] : CAM PRESENT wintv_usb2ci: *** CA-poll(104) [16]*** wintv_usb2ci: CI_read_CMD_REPLY : [07] 0/0/0 wintv_usb2ci: CI_WriteExchange : [70/07] response after 286 ms wintv_usb2ci: cam_state_set : 04 -> 05 wintv_usb2ci: CI_send_CMD : [60] 2 wintv_usb2ci: CI_read_CMD_REPLY : [04] 2/2/0 wintv_usb2ci: CI_WriteExchange : [60/04] response after 160 ms wintv_usb2ci: cam_state_set : 05 -> 06 wintv_usb2ci: *** CA-poll(104) [16]*** wintv_usb2ci: [HOST] rb_write_tpdu (0)(1)[ 5] *** (82) TT_CREATE_TC *** TPDU : 00000000: 82 01 01 ... wintv_usb2ci: [CAM ] rb_read_tpdu (0)(1)[ 9] *** (83) TT_CTC_REPLY *** TPDU : 00000000: 83 01 01 80 02 01 00 ....... wintv_usb2ci: [CAM ] rb_read_tpdu (0)(1)[15] *** (91) ST_OPEN_SESSION_REQU *** TPDU : 00000000: a0 07 01 91 04 00 01 00 41 80 02 01 00 ........A.... wintv_usb2ci: [HOST] rb_write_tpdu (0)(1)[14] *** (92) ST_OPEN_SESSION_RESP *** TPDU : 00000000: a0 0a 01 92 07 00 00 01 00 41 00 01 .........A.. wintv_usb2ci: [HOST] rb_write_tpdu (0)(1)[13] *** (1) AOT_PROFILE_ENQ *** TPDU : 00000000: a0 09 01 90 02 00 01 9f 80 10 00 ........... wintv_usb2ci: [CAM ] rb_read_tpdu (0)(1)[17] *** (1) AOT_PROFILE *** TPDU : 00000000: a0 09 01 90 02 00 01 9f 80 11 00 80 02 01 00 ............... wintv_usb2ci: [HOST] rb_write_tpdu (0)(1)[13] *** (1) AOT_PROFILE_CHANGE *** TPDU : 00000000: a0 09 01 90 02 00 01 9f 80 12 00 ........... wintv_usb2ci: [CAM ] rb_read_tpdu (0)(1)[17] *** (1) AOT_PROFILE_ENQ *** TPDU : 00000000: a0 09 01 90 02 00 01 9f 80 10 00 80 02 01 00 ............... wintv_usb2ci: [HOST] rb_write_tpdu (0)(1)[37] *** (1) AOT_PROFILE *** TPDU : 00000000: a0 21 01 90 02 00 01 9f 80 11 18 00 01 00 41 00 .!............A. TPDU : 00000010: 02 00 41 00 03 00 41 00 20 00 41 00 24 00 41 00 ..A...A. .A.$.A. wintv_usb2ci: [CAM ] rb_read_tpdu (0)(1)[15] *** (91) ST_OPEN_SESSION_REQU *** TPDU : 00000000: a0 07 01 91 04 00 02 00 41 80 02 01 00 ........A.... wintv_usb2ci: [HOST] rb_write_tpdu (0)(1)[14] *** (92) ST_OPEN_SESSION_RESP *** TPDU : 00000000: a0 0a 01 92 07 00 00 02 00 41 00 02 .........A.. wintv_usb2ci: [HOST] rb_write_tpdu (0)(1)[13] *** (2) AOT_APPLICATION_INFO_ENQ *** TPDU : 00000000: a0 09 01 90 02 00 02 9f 80 20 00 ......... . wintv_usb2ci: [CAM ] rb_read_tpdu (0)(1)[36] *** (2) AOT_APPLICATION_INFO *** TPDU : 00000000: a0 1c 01 90 02 00 02 9f 80 21 13 01 ca fe ba be .........!...... TPDU : 00000010: 0d 49 72 64 65 74 6f 20 41 63 63 65 73 73 80 02 .Irdeto Access.. wintv_usb2ci: [CAM ] rb_read_tpdu (0)(1)[15] *** (91) ST_OPEN_SESSION_REQU *** TPDU : 00000000: a0 07 01 91 04 00 03 00 41 80 02 01 00 ........A.... wintv_usb2ci: [HOST] rb_write_tpdu (0)(1)[14] *** (92) ST_OPEN_SESSION_RESP *** TPDU : 00000000: a0 0a 01 92 07 00 00 03 00 41 00 03 .........A.. wintv_usb2ci: [HOST] rb_write_tpdu (0)(1)[13] *** (3) AOT_CA_INFO_ENQ *** TPDU : 00000000: a0 09 01 90 02 00 03 9f 80 30 00 .........0. wintv_usb2ci: [CAM ] rb_read_tpdu (0)(1)[37] *** (3) AOT_CA_INFO *** TPDU : 00000000: a0 1d 01 90 02 00 03 9f 80 31 14 06 9c 00 00 00 .........1...... TPDU : 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 ................ wintv_usb2ci: [HOST] rb_write_tpdu (0)(1)[20] *** (3) AOT_CA_PMT *** TPDU : 00000000: a0 10 01 90 02 00 03 9f 80 32 07 03 00 00 01 00 .........2...... TPDU : 00000010: 01 03 .. wintv_usb2ci: [HOST] rb_write_tpdu (0)(1)[20] *** (3) AOT_CA_PMT *** TPDU : 00000000: a0 10 01 90 02 00 03 9f 80 32 07 03 00 00 01 00 .........2...... TPDU : 00000010: 01 03 .. wintv_usb2ci: [HOST] rb_write_tpdu (0)(1)[20] *** (3) AOT_CA_PMT *** TPDU : 00000000: a0 10 01 90 02 00 03 9f 80 32 07 03 00 00 01 00 .........2...... TPDU : 00000010: 01 03 .. wintv_usb2ci: [HOST] rb_write_tpdu (0)(1)[20] *** (3) AOT_CA_PMT *** TPDU : 00000000: a0 10 01 90 02 00 03 9f 80 32 07 03 00 00 01 00 .........2...... TPDU : 00000010: 01 03 .. wintv_usb2ci: *** TS-poll(104) [128]*** wintv_usb2ci: [HOST] rb_write_tpdu (0)(1)[20] *** (3) AOT_CA_PMT *** TPDU : 00000000: a0 10 01 90 02 00 03 9f 80 32 07 03 00 00 01 00 .........2...... TPDU : 00000010: 01 03 .. wintv_usb2ci: [HOST] rb_write_tpdu (0)(1)[20] *** (3) AOT_CA_PMT *** TPDU : 00000000: a0 10 01 90 02 00 03 9f 80 32 07 03 00 00 01 00 .........2...... TPDU : 00000010: 01 03 .. wintv_usb2ci: *** TS-poll(104) [128]*** wintv_usb2ci: *** TS-poll(104) [128]*** wintv_usb2ci: [HOST] rb_write_tpdu (0)(1)[26] *** (3) AOT_CA_PMT *** TPDU : 00000000: a0 16 01 90 02 00 03 9f 80 32 0d 03 37 15 01 00 .........2..7... TPDU : 00000010: 07 04 09 04 06 9c e3 fb ........ wintv_usb2ci: [HOST] rb_write_tpdu (0)(1)[41] *** (3) AOT_CA_PMT *** TPDU : 00000000: a0 25 01 90 02 00 03 9f 80 32 1c 03 37 15 01 00 .%.......2..7... TPDU : 00000010: 07 01 09 04 06 9c e3 fb 02 03 f2 00 00 06 03 f3 ................ wintv_usb2ci: +++ TS-BITRATE : 0.00 Mbit/s wintv_usb2ci: +++ TS-BITRATE : 6.13 Mbit/s wintv_usb2ci: +++ TS-BITRATE : 5.67 Mbit/s wintv_usb2ci: +++ TS-BITRATE : 5.50 Mbit/s wintv_usb2ci: +++ TS-BITRATE : 5.48 Mbit/s