EVGA inDtube: Difference between revisions

From LinuxTVWiki
Jump to navigation Jump to search
 
(24 intermediate revisions by the same user not shown)
Line 9: Line 9:


==Components used:==
==Components used:==
* Samsung S5H1409 QAM/8VSB Frontend
* (tuner & analog demodulator)
Xceive XC3028L
* (digital demodulator)
* (digital demodulator)
* (video decoder)
* (video decoder)
Line 15: Line 16:


===Identification===
===Identification===
The device identifies itself as a "eMPIA Technology, Inc" and the subsystem information provided by lsusb -v is ebla:2883.
The device identifies itself as a "eMPIA Technology, Inc" and the subsystem information provided by lsusb -v is ebla:2883.



==Making it Work==
==Making it Work==
Line 22: Line 22:
This tuner is very difficult to get to find channels when scanning OTA ATSC. There is a thread about getting it to work which assuming you are familiar with the concept of frequency lists, as defined in /usr/share/dvb/atsc is very helpful at http://www.digitalhome.ca/forum/showthread.php?t=134023
This tuner is very difficult to get to find channels when scanning OTA ATSC. There is a thread about getting it to work which assuming you are familiar with the concept of frequency lists, as defined in /usr/share/dvb/atsc is very helpful at http://www.digitalhome.ca/forum/showthread.php?t=134023


Making it work is pretty simple, below is a simple modification to the standard ATSC frequency list which has the wrong center frequencies for this tuner.
You will need to modify the standard ATSC frequency list which has the wrong center frequencies for this tuner.
Using vim or your favorite text editor modify the center frequencies in the intial-tuning-data contained in the text file /usr/share/dvb/us-ATSC-center-frequencies-8VSB and save it in /usr/share/dvb/atsc as my-ATSC. You need to subtract roughly 400 Khz from each center frequency.
Using vim or your favorite text editor modify the center frequencies in the intial-tuning-data contained in the text file /usr/share/dvb/us-ATSC-center-frequencies-8VSB and save it in /usr/share/dvb/atsc as my-ATSC. You need to subtract roughly 400 Khz from each center frequency.
I subtracted 403615 Hz from each frequency so it falls in the exact center of what the InDtube Tuner can lock. From then on be sure to specify this file when scanning for channels with scan:
I subtracted 403615 Hz from each frequency so it falls in the exact center of what the InDtube Tuner can lock. From then on be sure to specify this file when scanning for channels with scan:


Scanning for channels.
head us-ATSC-center-frequencies-8VSB
# US ATSC center frequencies, use if in doubt


scan -a 1 /usr/share/dvb/atsc/my-ATSC -o zap mychannels.conf

example initial-tuning-data modificaton

<pre>
from:
/usr/share/dvb/atsc$ head us-ATSC-center-frequencies-8VSB
# US ATSC center frequencies, use if in doubt
A 57028615 8VSB
A 57028615 8VSB
A 63028615 8VSB
A 63028615 8VSB
Line 38: Line 45:
A 189028615 8VSB
A 189028615 8VSB


to:
head my-ATSC
/usr/share/dvb/atsc$ head my-ATSC
# MY ATSC center frequencies, use for inDtube ATSC Tuner
# MY ATSC center frequencies, use for inDtube ATSC Tuner
A 56625000 8VSB
A 56625000 8VSB
Line 49: Line 57:
A 188625000 8VSB
A 188625000 8VSB
A 194625000 8VSB
A 194625000 8VSB
</pre>

Scanning for channels.
scan -a 1 /usr/share/dvb/atsc/my-ATSC -o zap mychannels.conf






===Firmware===
===Firmware===
type: xc2028 firmware, ver 3.6


[http://steventoth.net/linux/hvr1400/xc3028L-v36.fw xc3028L-v36.fw]



===Drivers===
===Drivers===
Line 66: Line 73:


===Sample kernel output===
===Sample kernel output===
After you plug-in the device on a USB port, you should see something like this on dmesg:

<pre>
usb 1-3: new high speed USB device using ehci_hcd and address 3
em28xx: New device EVGA inDtube @ 480 Mbps (eb1a:2883, interface 0, class 0)
em28xx #0: chip ID is em2882/em2883
em28xx #0: i2c eeprom 00: 1a eb 67 95 1a eb 83 28 d0 12 65 03 6a 1c 86 10
em28xx #0: i2c eeprom 10: 00 00 24 57 4e 07 01 00 00 00 00 00 00 00 00 00
em28xx #0: i2c eeprom 20: 46 00 01 00 f0 10 01 00 b8 00 00 00 5b 32 00 00
em28xx #0: i2c eeprom 30: 00 00 20 40 20 80 02 20 01 01 00 00 00 00 00 00
em28xx #0: i2c eeprom 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
em28xx #0: i2c eeprom 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
em28xx #0: i2c eeprom 60: 00 00 00 00 00 00 00 00 00 00 1c 03 45 00 56 00
em28xx #0: i2c eeprom 70: 47 00 41 00 20 00 69 00 6e 00 44 00 74 00 75 00
em28xx #0: i2c eeprom 80: 62 00 65 00 00 00 10 03 44 00 54 00 30 00 30 00
em28xx #0: i2c eeprom 90: 30 00 31 00 00 00 00 00 00 00 00 00 38 00 39 00
em28xx #0: i2c eeprom a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
em28xx #0: i2c eeprom b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
em28xx #0: i2c eeprom c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
em28xx #0: i2c eeprom d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
em28xx #0: i2c eeprom e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
em28xx #0: i2c eeprom f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
em28xx #0: EEPROM ID= 0x9567eb1a, EEPROM hash = 0xcee44a99
em28xx #0: EEPROM info:
em28xx #0: AC97 audio (5 sample rates)
em28xx #0: 500mA max power
em28xx #0: Table at 0x24, strings=0x1c6a, 0x1086, 0x0000
em28xx #0: Identified as Unknown EM2750/28xx video grabber (card=1)
em28xx #0: Your board has no unique USB ID.
em28xx #0: A hint were successfully done, based on eeprom hash.
em28xx #0: This method is not 100% failproof.
em28xx #0: If the board were missdetected, please email this log to:
em28xx #0: V4L Mailing List <linux-media@vger.kernel.org>
em28xx #0: Board detected as Evga inDtube
tvp5150 0-005c: chip found @ 0xb8 (em28xx #0)
tuner 0-0061: chip found @ 0xc2 (em28xx #0)
xc2028 0-0061: creating new instance
xc2028 0-0061: type set to XCeive xc2028/xc3028 tuner
xc2028 0-0061: Loading 81 firmware images from xc3028L-v36.fw, type: xc2028 firmware, ver 3.6
xc2028 0-0061: Loading firmware for type=BASE MTS (5), id 0000000000000000.
xc2028 0-0061: Loading firmware for type=MTS (4), id 000000000000b700.
xc2028 0-0061: Loading SCODE for type=MTS LCD NOGD MONO IF SCODE HAS_IF_4500 (6002b004), id 000000000000b700.
Registered IR keymap rc-evga-indtube
input: em28xx IR (em28xx #0) as /devices/pci0000:00/0000:00:1a.7/usb1/1-3/rc/rc0/input9
rc0: em28xx IR (em28xx #0) as /devices/pci0000:00/0000:00:1a.7/usb1/1-3/rc/rc0
em28xx #0: Config register raw data: 0xd0
em28xx #0: AC97 vendor ID = 0xffffffff
em28xx #0: AC97 features = 0x6a90
em28xx #0: Empia 202 AC97 audio processor detected
tvp5150 0-005c: tvp5150am1 detected.
em28xx #0: v4l2 driver version 0.1.2
em28xx #0: V4L2 video device registered as video0
em28xx #0: V4L2 VBI device registered as vbi0
em28xx-audio.c: probing for em28x1 non standard usbaudio
em28xx-audio.c: Copyright (C) 2006 Markus Rechberger
</pre>


===Remote Control Support===
===Remote Control Support===

Managed to create this lirc.conf for the indtube. http://pastebin.com/PUC5H1PM


===MythTV Recognition===
===MythTV Recognition===
No issues noted in MythTV so far recognising the device, however you may wish to apply the below modifications to MythTV source prior to compiling in order to
use the built in channel scanning function within MythTV, and to printout the correct values for the signal quality or SNR in the OSD.

<pre>
//modification to frequencytables.cpp to allow the InDtube tuner to lock during channel scan

#else // if !DEBUG_DVB_OFFSETS
// USA Terrestrial (center frequency, subtract 1.75 MHz for visual carrier)
// VHF 2-4
fmap["atsc_vsb8_us0"] = new FrequencyTable(
// "ATSC Channel %1", 2, 57000000, 69000000, 6000000,
"ATSC Channel %1", 2, 56625000, 68625000, 6000000,
DTVModulation::kModulation8VSB);
// VHF 5-6
fmap["atsc_vsb8_us1"] = new FrequencyTable(
// "ATSC Channel %1", 5, 79000000, 85000000, 6000000,
"ATSC Channel %1", 5, 78625000, 84625000, 6000000,
DTVModulation::kModulation8VSB);
// VHF 7-13
fmap["atsc_vsb8_us2"] = new FrequencyTable(
// "ATSC Channel %1", 7, 177000000, 213000000, 6000000,
"ATSC Channel %1", 7, 176625000, 212625000, 6000000,
DTVModulation::kModulation8VSB);
// UHF 14-69
fmap["atsc_vsb8_us3"] = new FrequencyTable(
// "ATSC Channel %1", 14, 473000000, 803000000, 6000000,
"ATSC Channel %1", 14, 472625000, 802625000, 6000000,
DTVModulation::kModulation8VSB);
#endif // !DEBUG_DVB_OFFSETS
</pre>

<pre>
//modification to tvplay.cpp to printout the signal quality or SNR correctly

QString sigMsg = allGood ? tr("Lock") : lockMsg;

QString sigDesc = tr("Signal %1\%").arg(sig,2);
// Begin hack //
// if (snr > 0.0f)
// sigDesc += " | " + tr("S/N %1dB").arg(log10f(snr), 3, 'f', 1);
if (snr > 0.0f)
sigDesc += " | " + tr("S/N %1dB").arg((snr / 10 + .1), 3, 'f', 1);
// End Hack //
if (ber != 0xffffffff)
sigDesc += " | " + tr("BE %1", "Bit Errors").arg(ber, 2);
</pre>

Alternatively, in the xc2028 driver we can remove this if() and recompile the kernel modules.
This allows the inDtube tuner to use the correct offset so center frequencies are normalised the same as all
other ATSC devices. This is the best fix I could come up with, as now no user land apps require any modification
to get this device to tune/lock properly. I've been using this fix for a couple years now with no issues.

<pre>
diff --git a/drivers/media/tuners/tuner-xc2028.c b/drivers/media/tuners/tuner-xc2028.c
index 878d2c4..0f65b48 100644
--- a/drivers/media/tuners/tuner-xc2028.c
+++ b/drivers/media/tuners/tuner-xc2028.c
@@ -1074,7 +1074,6 @@ static int generic_set_freq(struct dvb_frontend *fe, u32 freq /* in HZ */,
* Robert Lowery <rglowery@exemail.com.au>
*/
-#if 0
/*
* Still need tests for XC3028L (firmware 3.2 or upper)
* So, for now, let's just comment the per-firmware
@@ -1091,7 +1090,6 @@ static int generic_set_freq(struct dvb_frontend *fe, u32 freq /* in HZ */,
else if (type != ATSC) /* DVB @6MHz, DTV 8 and DTV 7/8 */
offset += 200000;
}
-#endif
}
div = (freq - offset + DIV / 2) / DIV;
</pre>


==External Links==
==External Links==

Latest revision as of 00:42, 13 July 2014


A hybrid ATSC USB 2.0 device by Evga.


Overview/Features

This device supports ATSC (i.e. OTA Digital TV) and analog NTSC. The package includes a small telescoping monopole antenna and a short USB extension cable, a remote control, and a connector to svideo or composite video inputs.

Components used:

  • Samsung S5H1409 QAM/8VSB Frontend

Xceive XC3028L

  • (digital demodulator)
  • (video decoder)
  • Empiatech em2883 (USB bridge and analog audio)

Identification

The device identifies itself as a "eMPIA Technology, Inc" and the subsystem information provided by lsusb -v is ebla:2883.

Making it Work

This tuner is very difficult to get to find channels when scanning OTA ATSC. There is a thread about getting it to work which assuming you are familiar with the concept of frequency lists, as defined in /usr/share/dvb/atsc is very helpful at http://www.digitalhome.ca/forum/showthread.php?t=134023

You will need to modify the standard ATSC frequency list which has the wrong center frequencies for this tuner. Using vim or your favorite text editor modify the center frequencies in the intial-tuning-data contained in the text file /usr/share/dvb/us-ATSC-center-frequencies-8VSB and save it in /usr/share/dvb/atsc as my-ATSC. You need to subtract roughly 400 Khz from each center frequency. I subtracted 403615 Hz from each frequency so it falls in the exact center of what the InDtube Tuner can lock. From then on be sure to specify this file when scanning for channels with scan:

Scanning for channels.

scan -a 1 /usr/share/dvb/atsc/my-ATSC -o zap mychannels.conf

example initial-tuning-data modificaton

from:
/usr/share/dvb/atsc$ head us-ATSC-center-frequencies-8VSB
# US ATSC center frequencies, use if in doubt
A  57028615 8VSB
A  63028615 8VSB
A  69028615 8VSB
A  79028615 8VSB
A  85028615 8VSB
A 177028615 8VSB
A 183028615 8VSB
A 189028615 8VSB

to:
/usr/share/dvb/atsc$ head my-ATSC
# MY ATSC center frequencies, use for inDtube ATSC Tuner
A 56625000 8VSB
A 62625000 8VSB
A 68625000 8VSB
A 78625000 8VSB
A 84625000 8VSB
A 176625000 8VSB
A 182625000 8VSB
A 188625000 8VSB
A 194625000 8VSB


Firmware

type: xc2028 firmware, ver 3.6

xc3028L-v36.fw

Drivers

Analog Audio Issue

Sample kernel output

After you plug-in the device on a USB port, you should see something like this on dmesg:

usb 1-3: new high speed USB device using ehci_hcd and address 3
em28xx: New device EVGA inDtube @ 480 Mbps (eb1a:2883, interface 0, class 0)
em28xx #0: chip ID is em2882/em2883
em28xx #0: i2c eeprom 00: 1a eb 67 95 1a eb 83 28 d0 12 65 03 6a 1c 86 10
em28xx #0: i2c eeprom 10: 00 00 24 57 4e 07 01 00 00 00 00 00 00 00 00 00
em28xx #0: i2c eeprom 20: 46 00 01 00 f0 10 01 00 b8 00 00 00 5b 32 00 00
em28xx #0: i2c eeprom 30: 00 00 20 40 20 80 02 20 01 01 00 00 00 00 00 00
em28xx #0: i2c eeprom 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
em28xx #0: i2c eeprom 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
em28xx #0: i2c eeprom 60: 00 00 00 00 00 00 00 00 00 00 1c 03 45 00 56 00
em28xx #0: i2c eeprom 70: 47 00 41 00 20 00 69 00 6e 00 44 00 74 00 75 00
em28xx #0: i2c eeprom 80: 62 00 65 00 00 00 10 03 44 00 54 00 30 00 30 00
em28xx #0: i2c eeprom 90: 30 00 31 00 00 00 00 00 00 00 00 00 38 00 39 00
em28xx #0: i2c eeprom a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
em28xx #0: i2c eeprom b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
em28xx #0: i2c eeprom c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
em28xx #0: i2c eeprom d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
em28xx #0: i2c eeprom e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
em28xx #0: i2c eeprom f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
em28xx #0: EEPROM ID= 0x9567eb1a, EEPROM hash = 0xcee44a99
em28xx #0: EEPROM info:
em28xx #0:       AC97 audio (5 sample rates)
em28xx #0:       500mA max power
em28xx #0:       Table at 0x24, strings=0x1c6a, 0x1086, 0x0000
em28xx #0: Identified as Unknown EM2750/28xx video grabber (card=1)
em28xx #0: Your board has no unique USB ID.
em28xx #0: A hint were successfully done, based on eeprom hash.
em28xx #0: This method is not 100% failproof.
em28xx #0: If the board were missdetected, please email this log to:
em28xx #0:       V4L Mailing List  <linux-media@vger.kernel.org>
em28xx #0: Board detected as Evga inDtube
tvp5150 0-005c: chip found @ 0xb8 (em28xx #0)
tuner 0-0061: chip found @ 0xc2 (em28xx #0)
xc2028 0-0061: creating new instance
xc2028 0-0061: type set to XCeive xc2028/xc3028 tuner
xc2028 0-0061: Loading 81 firmware images from xc3028L-v36.fw, type: xc2028 firmware, ver 3.6
xc2028 0-0061: Loading firmware for type=BASE MTS (5), id 0000000000000000.
xc2028 0-0061: Loading firmware for type=MTS (4), id 000000000000b700.
xc2028 0-0061: Loading SCODE for type=MTS LCD NOGD MONO IF SCODE HAS_IF_4500 (6002b004), id 000000000000b700.
Registered IR keymap rc-evga-indtube
input: em28xx IR (em28xx #0) as /devices/pci0000:00/0000:00:1a.7/usb1/1-3/rc/rc0/input9
 rc0: em28xx IR (em28xx #0) as /devices/pci0000:00/0000:00:1a.7/usb1/1-3/rc/rc0
em28xx #0: Config register raw data: 0xd0
em28xx #0: AC97 vendor ID = 0xffffffff
em28xx #0: AC97 features = 0x6a90
em28xx #0: Empia 202 AC97 audio processor detected
tvp5150 0-005c: tvp5150am1 detected.
em28xx #0: v4l2 driver version 0.1.2
em28xx #0: V4L2 video device registered as video0
em28xx #0: V4L2 VBI device registered as vbi0
em28xx-audio.c: probing for em28x1 non standard usbaudio
em28xx-audio.c: Copyright (C) 2006 Markus Rechberger

Remote Control Support

Managed to create this lirc.conf for the indtube. http://pastebin.com/PUC5H1PM

MythTV Recognition

No issues noted in MythTV so far recognising the device, however you may wish to apply the below modifications to MythTV source prior to compiling in order to use the built in channel scanning function within MythTV, and to printout the correct values for the signal quality or SNR in the OSD.

//modification to frequencytables.cpp to allow the InDtube tuner to lock during channel scan

#else // if !DEBUG_DVB_OFFSETS
    // USA Terrestrial (center frequency, subtract 1.75 MHz for visual carrier)
    // VHF 2-4
    fmap["atsc_vsb8_us0"] = new FrequencyTable(
    //  "ATSC Channel %1",  2,  57000000,  69000000, 6000000,
        "ATSC Channel %1",  2,  56625000,  68625000, 6000000,
        DTVModulation::kModulation8VSB);
    // VHF 5-6
    fmap["atsc_vsb8_us1"] = new FrequencyTable(
    //  "ATSC Channel %1",  5,  79000000,  85000000, 6000000,
	"ATSC Channel %1",  5,  78625000,  84625000, 6000000,
        DTVModulation::kModulation8VSB);
    // VHF 7-13
    fmap["atsc_vsb8_us2"] = new FrequencyTable(
     // "ATSC Channel %1",  7, 177000000, 213000000, 6000000,
	"ATSC Channel %1",  7, 176625000, 212625000, 6000000,
        DTVModulation::kModulation8VSB);
    // UHF 14-69
    fmap["atsc_vsb8_us3"] = new FrequencyTable(
    //  "ATSC Channel %1", 14, 473000000, 803000000, 6000000,
        "ATSC Channel %1", 14, 472625000, 802625000, 6000000,	
        DTVModulation::kModulation8VSB);
#endif // !DEBUG_DVB_OFFSETS
//modification to tvplay.cpp to printout the signal quality or SNR correctly

QString sigMsg  = allGood ? tr("Lock") : lockMsg;

    QString sigDesc = tr("Signal %1\%").arg(sig,2);
    
// 		Begin hack 		//    
//    if (snr > 0.0f)
//        sigDesc += " | " + tr("S/N %1dB").arg(log10f(snr), 3, 'f', 1);
    if (snr > 0.0f)
        sigDesc += " | " + tr("S/N %1dB").arg((snr / 10 + .1), 3, 'f', 1);
// 		End Hack 		//
    if (ber != 0xffffffff)
        sigDesc += " | " + tr("BE %1", "Bit Errors").arg(ber, 2);

Alternatively, in the xc2028 driver we can remove this if() and recompile the kernel modules. This allows the inDtube tuner to use the correct offset so center frequencies are normalised the same as all other ATSC devices. This is the best fix I could come up with, as now no user land apps require any modification to get this device to tune/lock properly. I've been using this fix for a couple years now with no issues.

diff --git a/drivers/media/tuners/tuner-xc2028.c b/drivers/media/tuners/tuner-xc2028.c
index 878d2c4..0f65b48 100644
--- a/drivers/media/tuners/tuner-xc2028.c
+++ b/drivers/media/tuners/tuner-xc2028.c
@@ -1074,7 +1074,6 @@ static int generic_set_freq(struct dvb_frontend *fe, u32 freq /* in HZ */,
                 * Robert Lowery <rglowery@exemail.com.au>
                 */
 
-#if 0
                /*
                 * Still need tests for XC3028L (firmware 3.2 or upper)
                 * So, for now, let's just comment the per-firmware
@@ -1091,7 +1090,6 @@ static int generic_set_freq(struct dvb_frontend *fe, u32 freq /* in HZ */,
                        else if (type != ATSC) /* DVB @6MHz, DTV 8 and DTV 7/8 */
                                offset += 200000;
                }
-#endif
        }
 
        div = (freq - offset + DIV / 2) / DIV;

External Links

ATSC USB Devices