Astrometa DVB-T2

webcamd経由で使えるみたいだったのでdx.comで買ってみた。
とりあえずデバイスは生えるものの、使いたいMN88473が生えてこない。

root@pt2:/usr/ports/multimedia/webcamd # webcamd -d ugen0.4 -B
Attached to ugen0.4[0]
root@pt2:/usr/ports/multimedia/webcamd # w_scan
w_scan version 20120415 (compiled for DVB API 5.10)
guessing country 'JP', use -c  to override
using settings for JAPAN
Country identifier JP not defined. Using defaults.
scan type TERRESTRIAL, channellist 4
output format vdr-1.6
output charset 'UTF-8', use -C  to override
Info: using DVB adapter auto detection.
        /dev/dvb/adapter0/frontend0 -> TERRESTRIAL "Realtek RTL2832 (DVB-T)": good :-)
Using TERRESTRIAL frontend (adapter /dev/dvb/adapter0/frontend0)
Using DVB API 5.a
frontend 'Realtek RTL2832 (DVB-T)' supports

linuxでは

[24669756.552777] usb 1-1.4: DVB: registering adapter 0 frontend 0 (Realtek RTL2832 (DVB-T))...
[24669756.553206] usb 1-1.4: DVB: registering adapter 0 frontend 1 (Panasonic MN88473)...

みたいにfrontend1が生えてくるのだが。

root@pt2:/usr/ports/multimedia/webcamd # ls -l /dev/dvb/adapter0/
total 0
crw-rw----  1 webcamd  webcamd  0xa3  4月 16 13:16 demux0
crw-rw----  1 webcamd  webcamd  0xa4  4月 16 13:16 dvr0
crw-rw----  1 webcamd  webcamd  0xa5  4月 16 13:16 frontend0

むぅ。

得意のprintfデバッグで追いかけたところどうもdummyデバイスがないためのダメっぽい。
でっち上げてみる。

diff --git a/linux_i2c.c b/linux_i2c.c
index c2c71e7..441a3e9 100644
--- a/linux_i2c.c
+++ b/linux_i2c.c
@@ -35,6 +35,27 @@ struct device_type i2c_client_type;
 #define        I2C_ADDR_OFFSET_TEN_BIT 0xa000
 #define        I2C_ADDR_OFFSET_SLAVE   0x1000

+static const struct i2c_device_id dummy_id[] = {
+        { "dummy", 0 },
+        { },
+};
+
+static int dummy_probe(struct i2c_client *client,
+                       const struct i2c_device_id *id)
+{
+        return 0;
+}
+
+static int dummy_remove(struct i2c_client *client)
+{
+        return 0;
+}
+static struct i2c_driver dummy_driver = {
+        .driver.name    = "dummy",
+        .probe          = dummy_probe,
+        .remove         = dummy_remove,
+        .id_table       = dummy_id,
+};
 int
 i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
 {
@@ -241,7 +262,12 @@ i2c_new_dummy(struct i2c_adapter *adapter, u16 address)
                I2C_BOARD_INFO("dummy", address),
        };

-       return (i2c_new_device(adapter, &info));
+       struct i2c_client *p;
+        p=i2c_new_device(adapter, &info);
+       if (p==NULL) {
+                i2c_register_driver(NULL,&dummy_driver);
+                return i2c_new_device(adapter, &info);
+       }
+       return p;
 }

 struct i2c_client *

ダメっぽいな・・・(´・ω・`)
あ、出てきた。なんか不安定だな・・・

root@pt2:/usr/ports/multimedia/webcamd # w_scan -fc
w_scan version 20120415 (compiled for DVB API 5.10)
guessing country 'JP', use -c <country> to override
using settings for JAPAN
Country identifier JP not defined. Using defaults.
scan type CABLE, channellist 4
output format vdr-1.6
output charset 'UTF-8', use -C <charset> to override
Info: using DVB adapter auto detection.
        /dev/dvb/adapter0/frontend0 -> "Realtek RTL2832 (DVB-T)" doesnt support CABLE -> SEARCH NEXT ONE.
        /dev/dvb/adapter0/frontend1 -> CABLE "Panasonic MN88473": very good :-))

Using CABLE frontend (adapter /dev/dvb/adapter0/frontend1)
Using DVB API 5.a
frontend 'Panasonic MN88473' supports
INVERSION_AUTO
QAM_AUTO
FEC_AUTO
FREQ (42.00MHz ... 1002.00MHz)
SRATE (1.000MSym/s ... 7.200MSym/s)
474000: sr6900 (time: 00:02) ^C
ERROR: interrupted by SIGINT, dumping partial result...
dumping lists (0 services)

アンテナをつながないといけないけどコネクタがPAL型みたいなので変換用のを取得予定。