Deprecated: Return type of Requests_Cookie_Jar::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/francisfisher/francisfisher.me.uk/problem/wp-includes/Requests/Cookie/Jar.php on line 63

Deprecated: Return type of Requests_Cookie_Jar::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/francisfisher/francisfisher.me.uk/problem/wp-includes/Requests/Cookie/Jar.php on line 73

Deprecated: Return type of Requests_Cookie_Jar::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/francisfisher/francisfisher.me.uk/problem/wp-includes/Requests/Cookie/Jar.php on line 89

Deprecated: Return type of Requests_Cookie_Jar::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/francisfisher/francisfisher.me.uk/problem/wp-includes/Requests/Cookie/Jar.php on line 102

Deprecated: Return type of Requests_Cookie_Jar::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/francisfisher/francisfisher.me.uk/problem/wp-includes/Requests/Cookie/Jar.php on line 111

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/francisfisher/francisfisher.me.uk/problem/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 40

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/francisfisher/francisfisher.me.uk/problem/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 51

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/francisfisher/francisfisher.me.uk/problem/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 68

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/francisfisher/francisfisher.me.uk/problem/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 82

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/francisfisher/francisfisher.me.uk/problem/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 91

Warning: Cannot modify header information - headers already sent by (output started at /home/francisfisher/francisfisher.me.uk/problem/wp-includes/Requests/Cookie/Jar.php:15) in /home/francisfisher/francisfisher.me.uk/problem/wp-includes/rest-api/class-wp-rest-server.php on line 1758

Warning: Cannot modify header information - headers already sent by (output started at /home/francisfisher/francisfisher.me.uk/problem/wp-includes/Requests/Cookie/Jar.php:15) in /home/francisfisher/francisfisher.me.uk/problem/wp-includes/rest-api/class-wp-rest-server.php on line 1758

Warning: Cannot modify header information - headers already sent by (output started at /home/francisfisher/francisfisher.me.uk/problem/wp-includes/Requests/Cookie/Jar.php:15) in /home/francisfisher/francisfisher.me.uk/problem/wp-includes/rest-api/class-wp-rest-server.php on line 1758

Warning: Cannot modify header information - headers already sent by (output started at /home/francisfisher/francisfisher.me.uk/problem/wp-includes/Requests/Cookie/Jar.php:15) in /home/francisfisher/francisfisher.me.uk/problem/wp-includes/rest-api/class-wp-rest-server.php on line 1758

Warning: Cannot modify header information - headers already sent by (output started at /home/francisfisher/francisfisher.me.uk/problem/wp-includes/Requests/Cookie/Jar.php:15) in /home/francisfisher/francisfisher.me.uk/problem/wp-includes/rest-api/class-wp-rest-server.php on line 1758

Warning: Cannot modify header information - headers already sent by (output started at /home/francisfisher/francisfisher.me.uk/problem/wp-includes/Requests/Cookie/Jar.php:15) in /home/francisfisher/francisfisher.me.uk/problem/wp-includes/rest-api/class-wp-rest-server.php on line 1758

Warning: Cannot modify header information - headers already sent by (output started at /home/francisfisher/francisfisher.me.uk/problem/wp-includes/Requests/Cookie/Jar.php:15) in /home/francisfisher/francisfisher.me.uk/problem/wp-includes/rest-api/class-wp-rest-server.php on line 1758

Warning: Cannot modify header information - headers already sent by (output started at /home/francisfisher/francisfisher.me.uk/problem/wp-includes/Requests/Cookie/Jar.php:15) in /home/francisfisher/francisfisher.me.uk/problem/wp-includes/rest-api/class-wp-rest-server.php on line 1758
{"id":100,"date":"2012-02-19T22:21:15","date_gmt":"2012-02-19T22:21:15","guid":{"rendered":"http:\/\/francisfisher.me.uk\/problem\/?p=100"},"modified":"2012-07-30T17:20:24","modified_gmt":"2012-07-30T17:20:24","slug":"using-the-kworld-pc160-2t-with-mythtv-on-ubuntu-linux-11-10","status":"publish","type":"post","link":"https:\/\/francisfisher.me.uk\/problem\/2012\/using-the-kworld-pc160-2t-with-mythtv-on-ubuntu-linux-11-10\/","title":{"rendered":"Using the KWorld PC160-2T with Mythtv on Ubuntu Linux 11.10"},"content":{"rendered":"

The PCI card is internally implemented as a USB interface connected to the two tuners over USB which is interesting to say the least. Presumably its cheaper to put an extra USB chip on a PCI card than to make a new design specifically for PCI.<\/p>\n

The first problem I had was that there was no firmware. I spotted this in the output from dmesg:<\/p>\n

[ 13.980942] dvb-usb: found a 'KWorld PlusTV Dual DVB-T PCI (DVB-T PC160-2T)' in cold state, will try to load a firmware\r\n[ 15.147767] dvb-usb: did not find the firmware file. (dvb-usb-af9015.fw) Please see linux\/Documentation\/dvb\/ for more details on firmware-problems. (-2)\r\n[ 15.147781] dvb_usb_af9015: probe of 3-1:1.0 failed with error -2\r\n<\/pre>\n

Although the documentation describes a method to obtain the firmware by running a script, it turns out that Ubuntu already has the firmware packaged. So I just needed to install linux-firmware-nonfree.<\/p>\n

sudo apt-get install linux-firmware-nonfree<\/pre>\n

Then I needed reinsert the modules so that the firmware could get downloaded:<\/p>\n

sudo rmmod dvb_usb_af9015\r\nsudo rmmod dvb-usb\r\nmodprobe\r\nmodprobe dvb-usb\r\nsudo modprobe dvb-usb\r\nsudo modprobe dvb_usb_af9015<\/pre>\n

Next time I ran dmesg, there were some much more promising lines:<\/p>\n

[   29.822162] dvb-usb: found a 'KWorld PlusTV Dual DVB-T PCI (DVB-T PC160-2T)' in cold state, will try to load a firmware\r\n[   29.967469] dvb-usb: downloading firmware from file 'dvb-usb-af9015.fw'\r\n[   30.037577] dvb-usb: found a 'KWorld PlusTV Dual DVB-T PCI (DVB-T PC160-2T)' in warm state.\r\n[   30.037783] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.\r\n[   30.038103] DVB: registering new adapter (KWorld PlusTV Dual DVB-T PCI (DVB-T PC160-2T))\r\n[   30.042065] af9013: firmware version:4.95.0.0\r\n[   30.046814] DVB: registering adapter 0 frontend 0 (Afatech AF9013 DVB-T)...\r\n[   30.048791] tda18271 0-00c0: creating new instance\r\n[   30.054815] TDA18271HD\/C2 detected @ 0-00c0\r\n[   30.324093] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.\r\n[   30.324505] DVB: registering new adapter (KWorld PlusTV Dual DVB-T PCI (DVB-T PC160-2T))\r\n[   30.596052] ADDRCONF(NETDEV_UP): wlan0: link is not ready\r\n[   31.040928] af9013: found a 'Afatech AF9013 DVB-T' in warm state.\r\n[   31.044418] af9013: firmware version:4.95.0.0\r\n[   31.058424] DVB: registering adapter 1 frontend 0 (Afatech AF9013 DVB-T)...\r\n[   31.058533] tda18271 0-00c0: attaching existing instance\r\n[   31.058541] Registered IR keymap rc-empty\r\n[   31.058604] input: IR-receiver inside an USB DVB receiver as \/devices\/pci0000:00\/0000:00:1e.0\/0000:05:01.2\/usb3\/3-1\/rc\/rc0\/input4\r\n[   31.058713] rc0: IR-receiver inside an USB DVB receiver as \/devices\/pci0000:00\/0000:00:1e.0\/0000:05:01.2\/usb3\/3-1\/rc\/rc0\r\n[   31.058716] dvb-usb: schedule remote query interval to 500 msecs.\r\n[   31.058720] dvb-usb: KWorld PlusTV Dual DVB-T PCI (DVB-T PC160-2T) successfully initialized and connected.\r\n[   31.076254] usbcore: registered new interface driver dvb_usb_af9015\r\n<\/pre>\n

I found http:\/\/parker1.co.uk\/mythtv_dvb.php<\/a> to have some useful information - it shows a method of verifying that the card is working by taking mythtv out of the equation.<\/p>\n

Now that I knew that the card was working, I configured it in mythtv. As there are two tuners I configured both in mythtv, making sure to increase the setting allowing multiple streams to be recorded from the same multiplex. (This is due to the way dvb-t\/freeview works - several stations are transmitted on the same channel). My biggest worry when I ordered the card was that it would not have this funtionality and that I would never be able to watch or record more than 2 channels simultaneously, but the following line in the output of dmesg reassured me:<\/p>\n

[   30.324093] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.<\/pre>\n

I was able to watch some TV on mythtv and caught the end of Gypsy Wedding...probably the only reality TV show that I can tolerate! I then set up some recordings to take place over the next few days unfortunately none of these worked. It turns out that there is currently a bug in the 3.0 and 3.2 kernels' drivers that handles the chip - the driver doesn't like switching between the two tuners. A symptom of the bug is i2c read errors such as this:<\/p>\n

[   38.379309] af9013: I2C read failed reg:d417<\/pre>\n

This bug causes both tuners to eventually stop working. I worked around this by disabling the second tuner in mythtv, and mythtv has been stable since. I will solve this later, but for now I need to get the remote working<\/a>!<\/p>\n","protected":false},"excerpt":{"rendered":"

The PCI card is internally implemented as a USB interface connected to the two tuners over USB which is interesting to say the least. Presumably its cheaper to put an extra USB chip on a PCI card than to make a new design specifically for PCI. The first problem I had was that there was […]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false},"categories":[3],"tags":[],"_links":{"self":[{"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/posts\/100"}],"collection":[{"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/comments?post=100"}],"version-history":[{"count":8,"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/posts\/100\/revisions"}],"predecessor-version":[{"id":118,"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/posts\/100\/revisions\/118"}],"wp:attachment":[{"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/media?parent=100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/categories?post=100"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/tags?post=100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}