recpt1更新その2
先週の続き。
BSの周波数変更を取り込んだrecpt1、チェックしたらいきなりひっかかった。NHKBSプレミアムが映らない。
ぐぐっても周波数変更後にトラブった話が出てこないので、おま環?と久しぶりにPT1/2とPT3のドライバソース読んだりしたけど、最終的にrecpt1だった。。
というか、わたしのせいです。ごめんなさい。元のLinux chardev版がioctl制御だったのを、なんとなくsysctl制御に変えたせい。recpt1のFreeBSDパッチを作られた方が対応されてたのだけど、ioctlの引数(struct FREQUENCY {int freqno, int slot})を、sysctlの引数(int)にそのまま渡してるので、slotが消えちゃう。
ただ、これだとBSプレミアムは移動前から映ってなかったはずや。。とりあえず貼っときます。
diff --git a/recpt1/pt1_dev.h b/recpt1/pt1_dev.h index 4ec3902..46c6848 100644 --- a/recpt1/pt1_dev.h +++ b/recpt1/pt1_dev.h @@ -52,42 +52,34 @@ char *lnb_mib[NUM_BSDEV] = { ISDB_T_FREQ_CONV_TABLE isdb_t_conv_table[] = { { 0, CHTYPE_SATELLITE, 0, "151"}, /* 151ch:BS朝日 */ { 0, CHTYPE_SATELLITE, 1, "161"}, /* 161ch:BS-TBS */ - { 1, CHTYPE_SATELLITE, 0, "191"}, /* 191ch:WOWOW prime */ { 0, CHTYPE_SATELLITE, 2, "171"}, /* 171ch:BSジャパン */ + { 1, CHTYPE_SATELLITE, 0, "191"}, /* 191ch:WOWOW prime */ + { 1, CHTYPE_SATELLITE, 1, "103"}, /* 103ch:NHK-BSプレミアム*/ + { 1, CHTYPE_SATELLITE, 2, "256"}, /* 256ch:ディズニー・チャンネル */ { 2, CHTYPE_SATELLITE, 0, "192"}, /* 192ch:WOWOWライブ */ { 2, CHTYPE_SATELLITE, 1, "193"}, /* 193ch:WOWOWシネマ */ - { 7, CHTYPE_SATELLITE, 1, "201"}, /* 201ch:スター・チャンネル2 */ - { 7, CHTYPE_SATELLITE, 1, "202"}, /* 202ch:スター・チャンネル3 */ - { 6, CHTYPE_SATELLITE, 2, "236"}, /* 236ch:BSアニマックス */ - { 1, CHTYPE_SATELLITE, 2, "256"}, /* 256ch:ディズニー・チャンネル */ { 4, CHTYPE_SATELLITE, 0, "211"}, /* 211ch:BS11デジタル */ { 4, CHTYPE_SATELLITE, 1, "200"}, /* 200ch:スター・チャンネル1 */ { 4, CHTYPE_SATELLITE, 2, "222"}, /* 222ch:TwellV */ - { 5, CHTYPE_SATELLITE, 0, "238"}, /* 238ch:FOX bs238 */ - { 5, CHTYPE_SATELLITE, 1, "241"}, /* 241ch:BSスカパー! */ + { 5, CHTYPE_SATELLITE, 0, "241"}, /* 241ch:BSスカパー! */ + { 5, CHTYPE_SATELLITE, 1, "238"}, /* 238ch:FOX bs238 */ { 5, CHTYPE_SATELLITE, 2, "231"}, /* 231ch:放送大学テレビ1 */ { 5, CHTYPE_SATELLITE, 2, "232"}, /* 232ch:放送大学テレビ2 */ { 5, CHTYPE_SATELLITE, 2, "233"}, /* 233ch:放送大学テレビ3 */ { 5, CHTYPE_SATELLITE, 2, "531"}, /* 531ch:放送大学ラジオ */ { 6, CHTYPE_SATELLITE, 0, "141"}, /* 141ch:BS日テレ */ { 6, CHTYPE_SATELLITE, 1, "181"}, /* 181ch:BSフジ */ + { 6, CHTYPE_SATELLITE, 2, "236"}, /* 236ch:BSアニマックス */ { 7, CHTYPE_SATELLITE, 0, "101"}, /* 101ch:NHK-BS1 */ { 7, CHTYPE_SATELLITE, 0, "102"}, /* 102ch:NHK-BS1臨時 */ - { 1, CHTYPE_SATELLITE, 1, "103"}, /* 103ch:NHK-BSプレミアム*/ - { 7, CHTYPE_SATELLITE, 1, "910"}, /* 910ch:ウェザーニュース(WNI)*/ - { 8, CHTYPE_SATELLITE, 2, "291"}, /* 291ch:NHK総合テレビジョン(東京)*/ - { 8, CHTYPE_SATELLITE, 2, "292"}, /* 292ch:NHK教育テレビジョン(東京)*/ - { 8, CHTYPE_SATELLITE, 1, "294"}, /* 294ch:日本テレビ */ - { 8, CHTYPE_SATELLITE, 1, "295"}, /* 295ch:テレビ朝日 */ - { 8, CHTYPE_SATELLITE, 1, "296"}, /* 296ch:TBSテレビ */ - { 8, CHTYPE_SATELLITE, 1, "297"}, /* 297ch:テレビ東京 */ - { 8, CHTYPE_SATELLITE, 2, "298"}, /* 298ch:フジテレビ */ + { 7, CHTYPE_SATELLITE, 1, "201"}, /* 201ch:スター・チャンネル2 */ + { 7, CHTYPE_SATELLITE, 2, "202"}, /* 202ch:スター・チャンネル3 */ { 9, CHTYPE_SATELLITE, 0, "234"}, /* 234ch:グリーンチャンネル */ { 9, CHTYPE_SATELLITE, 1, "242"}, /* 242ch:J SPORTS 1 */ { 9, CHTYPE_SATELLITE, 2, "243"}, /* 243ch:J SPORTS 2 */ - { 10, CHTYPE_SATELLITE, 0, "252"}, /* 252ch:IMAGICA BS */ - { 10, CHTYPE_SATELLITE, 1, "244"}, /* 244ch:J SPORTS 3 */ - { 10, CHTYPE_SATELLITE, 2, "245"}, /* 245ch:J SPORTS 4 */ + { 10, CHTYPE_SATELLITE, 0, "252"}, /* 252ch:シネフィルWOWOW */ + { 10, CHTYPE_SATELLITE, 1, "245"}, /* 245ch:J SPORTS 4 */ + { 10, CHTYPE_SATELLITE, 2, "244"}, /* 244ch:J SPORTS 3 */ { 11, CHTYPE_SATELLITE, 0, "251"}, /* 251ch:BS釣りビジョン */ { 11, CHTYPE_SATELLITE, 1, "255"}, /* 255ch:日本映画専門チャンネル */ { 11, CHTYPE_SATELLITE, 2, "258"}, /* 258ch:D-Life */ diff --git a/recpt1/recpt1.c b/recpt1/recpt1.c index 956e411..b0a9c9e 100644 --- a/recpt1/recpt1.c +++ b/recpt1/recpt1.c @@ -114,6 +114,8 @@ mq_recv(void *t) .frequencyno = tdata->table->set_freq, .slot = tdata->table->add_freq, }; + int packed_freq = freq.frequencyno|(freq.slot << 16); + // if(ioctl(tdata->tfd, SET_CHANNEL, &freq) < 0) { // fprintf(stderr, "Cannot tune to the specified channel\n"); // goto CHECK_TIME_TO_ADD; @@ -125,7 +127,7 @@ mq_recv(void *t) } /* tune to specified channel */ sprintf(mib, "%s.freq", bsmib[tdata->dev_num]); - if (sysctlbyname(mib, NULL, NULL, &freq, sizeof(freq)) < 0) { + if (sysctlbyname(mib, NULL, NULL, &packed_freq, sizeof(packed_freq)) < 0) { close(tdata->tfd); fprintf(stderr, "Cannot tune to the specified channel\n"); goto CHECK_TIME_TO_ADD; @@ -133,7 +135,7 @@ mq_recv(void *t) } else { /* tune to specified channel */ sprintf(mib, "%s.freq", isdb_t_mib[tdata->dev_num]); - if (sysctlbyname(mib, NULL, NULL, &freq, sizeof(freq)) < 0) { + if (sysctlbyname(mib, NULL, NULL, &packed_freq, sizeof(packed_freq)) < 0) { close(tdata->tfd); fprintf(stderr, "Cannot tune to the specified channel\n"); goto CHECK_TIME_TO_ADD; diff --git a/recpt1/recpt1core.c b/recpt1/recpt1core.c index 82e9e82..bbd6e69 100644 --- a/recpt1/recpt1core.c +++ b/recpt1/recpt1core.c @@ -425,6 +425,7 @@ tune(char *channel, thread_data *tdata, char *device) int lp; FREQUENCY freq; char mib[32]; + int packed_freq; /* get channel */ tdata->table = searchrecoff(channel); @@ -435,6 +436,7 @@ tune(char *channel, thread_data *tdata, char *device) freq.frequencyno = tdata->table->set_freq; freq.slot = tdata->table->add_freq; + packed_freq = freq.frequencyno|(freq.slot <<16); /* open tuner */ /* case 1: specified tuner device */ @@ -456,7 +458,7 @@ tune(char *channel, thread_data *tdata, char *device) } /* tune to specified channel */ - while (sysctlbyname(mib, NULL, NULL, &freq, sizeof(freq)) < 0) { + while (sysctlbyname(mib, NULL, NULL, &packed_freq, sizeof(packed_freq)) < 0) { if(f_exit) { close_tuner(tdata); return 1; @@ -495,7 +497,7 @@ tune(char *channel, thread_data *tdata, char *device) /* tune to specified channel */ if(tdata->tune_persistent) { - while(sysctlbyname(mib, NULL, NULL, &freq, sizeof(freq)) < 0 && + while(sysctlbyname(mib, NULL, NULL, &packed_freq, sizeof(packed_freq)) < 0 && count < MAX_RETRY) { if(f_exit) { close_tuner(tdata); @@ -512,7 +514,7 @@ tune(char *channel, thread_data *tdata, char *device) } } /* tune_persistent */ else { - if(sysctlbyname(mib, NULL, NULL, &freq, sizeof(freq)) < 0) { + if(sysctlbyname(mib, NULL, NULL, &packed_freq, sizeof(packed_freq)) < 0) { close(tdata->tfd); tdata->tfd = -1; continue; @@ -551,7 +553,8 @@ tune(char *channel, thread_data *tdata, char *device) int lp; FREQUENCY freq; char mib[32]; - + int packed_freq; + /* get channel */ tdata->table = searchrecoff(channel); if(tdata->table == NULL) { @@ -561,6 +564,7 @@ tune(char *channel, thread_data *tdata, char *device) freq.frequencyno = tdata->table->set_freq; freq.slot = tdata->table->add_freq; + packed_freq = freq.frequencyno|(freq.slot <<16); /* open tuner */ /* case 1: specified tuner device */ @@ -577,7 +581,7 @@ tune(char *channel, thread_data *tdata, char *device) } /* tune to specified channel */ sprintf(mib, "%s.freq", bsmib[tdata->dev_num]); - if (sysctlbyname(mib, NULL, NULL, &freq, sizeof(freq)) < 0) { + if (sysctlbyname(mib, NULL, NULL, &packed_freq, sizeof(packed_freq)) < 0) { close(tdata->tfd); fprintf(stderr, "Cannot tune to the specified channel: %s\n", device); return 1; @@ -586,7 +590,7 @@ tune(char *channel, thread_data *tdata, char *device) else { /* tune to specified channel */ sprintf(mib, "%s.freq", isdb_t_mib[tdata->dev_num]); - if (sysctlbyname(mib, NULL, NULL, &freq, sizeof(freq)) < 0) { + if (sysctlbyname(mib, NULL, NULL, &packed_freq, sizeof(packed_freq)) < 0) { close(tdata->tfd); fprintf(stderr, "Cannot tune to the specified channel: %s\n", device); return 1; @@ -619,7 +623,7 @@ tune(char *channel, thread_data *tdata, char *device) } /* tune to specified channel */ - if (sysctlbyname(mib, NULL, NULL, &freq, sizeof(freq)) < 0) { + if (sysctlbyname(mib, NULL, NULL, &packed_freq, sizeof(packed_freq)) < 0) { close(tdata->tfd); tdata->tfd = -1; continue;