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;