View difference between Paste ID: NJTFG8tW and 0vaRLFm2
SHOW: | | - or go back to the newest paste.
1
diff -uPrb Org/readme_mod.txt Mod/readme_mod.txt
2
--- Org/readme_mod.txt	1970-01-01 09:00:00.000000000 +0900
3
+++ Mod/readme_mod.txt	2014-01-26 18:19:53.000000000 +0900
4
@@ -0,0 +1,32 @@
5
+Bulldog チューナー用 BonDriver 改変パッチ当てMODソース @ 2014/1/26
6
+
7
+  以下の2ファイルを BonDriver_Bulldog.dll と同じ場所において使用する。
8
+
9
+  BonDriver_Bulldog.ini     ; 設定ファル
10
+  BonDriver_Bulldog.ch.txt  ; チャンネル定義ファイル
11
+
12
+  オプティマイズで配布しているカメレオンUSBFX2のID書きツール(FX2WRID)を
13
+  利用すると大量のBulldogチューナーを同時利用することもできる筈だが未検証。
14
+
15
+  <例> ID=0 のチューナー
16
+    BonDriver_Bulldog_0.dll     ; BonDriver_Bulldog.dll を複製したもの
17
+    BonDriver_Bulldog_0.ini     ; BonDriver_Bulldog.ini を複製したもの
18
+    BonDriver_Bulldog_0.ch.txt  ; BonDriver_Bulldog.ch.txt を複製したもの
19
+
20
+  <例> ID=1 のチューナー
21
+    BonDriver_Bulldog_1.dll     ; BonDriver_Bulldog.dll を複製したもの
22
+    BonDriver_Bulldog_1.ini     ; BonDriver_Bulldog.ini を複製したもの
23
+    BonDriver_Bulldog_1.ch.txt  ; BonDriver_Bulldog.ch.txt を複製したもの
24
+
25
+  <例> ID=2 のチューナー
26
+    BonDriver_Bulldog_2.dll     ; BonDriver_Bulldog.dll を複製したもの
27
+    BonDriver_Bulldog_2.ini     ; BonDriver_Bulldog.ini を複製したもの
28
+    BonDriver_Bulldog_2.ch.txt  ; BonDriver_Bulldog.ch.txt を複製したもの
29
+
30
+2013/12/28 からの修正内容
31
+
32
+    ・チューナーを開いた時に発生するUSB抜き差し音の除去(OpenDriver)
33
+    ・チャンネル定義ファイルのスペースの配置を書換えた場合に意図しない受信
34
+      レベルが表示される問題の修正(GetCN/BER)
35
+    ・Spinel用TSバッファ待機最適化(WaitTsStream)
36
+
37
diff -uPrb Org/BonDriver_Bulldog.ch.txt Mod/BonDriver_Bulldog.ch.txt
38
--- Org/BonDriver_Bulldog.ch.txt	1970-01-01 09:00:00.000000000 +0900
39
+++ Mod/BonDriver_Bulldog.ch.txt	2013-12-29 03:12:37.000000000 +0900
40
@@ -0,0 +1,206 @@
41
+; Bulldog 用 チャンネルファイル (2013/12/28)
42
+;
43
+;       チャンネル情報を変更する場合は、このファイルを編集して
44
+;       プレフィックスが同じ名前のドライバと同ディレクトリに
45
+;       拡張子 .ch.txt としてこのファイルを置くこと。
46
+;
47
+;       ※ スペースの名前と順番は間違えてはいけないと思います。
48
+;
49
+; スペース名, サービスID, 物理チャンネル番号or周波数MHz, TSID, チャンネル名
50
+
51
+  ; VHF
52
+
53
+VHF, 0, 1,0x0000, 1
54
+VHF, 0, 2,0x0000, 2
55
+VHF, 0, 3,0x0000, 3
56
+VHF, 0, 4,0x0000, 4
57
+VHF, 0, 5,0x0000, 5
58
+VHF, 0, 6,0x0000, 6
59
+VHF, 0, 7,0x0000, 7
60
+VHF, 0, 8,0x0000, 8
61
+VHF, 0, 9,0x0000, 9
62
+VHF, 0,10,0x0000,10
63
+VHF, 0,11,0x0000,11
64
+VHF, 0,12,0x0000,12
65
+
66
+  ; UHF
67
+
68
+UHF, 0,13,0x0000,13
69
+UHF, 0,14,0x0000,14
70
+UHF, 0,15,0x0000,15
71
+UHF, 0,16,0x0000,16
72
+UHF, 0,17,0x0000,17
73
+UHF, 0,18,0x0000,18
74
+UHF, 0,19,0x0000,19
75
+UHF, 0,20,0x0000,20
76
+UHF, 0,21,0x0000,21
77
+UHF, 0,22,0x0000,22
78
+UHF, 0,23,0x0000,23
79
+UHF, 0,24,0x0000,24
80
+UHF, 0,25,0x0000,25
81
+UHF, 0,26,0x0000,26
82
+UHF, 0,27,0x0000,27
83
+UHF, 0,28,0x0000,28
84
+UHF, 0,29,0x0000,29
85
+UHF, 0,30,0x0000,30
86
+UHF, 0,31,0x0000,31
87
+UHF, 0,32,0x0000,32
88
+UHF, 0,33,0x0000,33
89
+UHF, 0,34,0x0000,34
90
+UHF, 0,35,0x0000,35
91
+UHF, 0,36,0x0000,36
92
+UHF, 0,37,0x0000,37
93
+UHF, 0,38,0x0000,38
94
+UHF, 0,39,0x0000,39
95
+UHF, 0,40,0x0000,40
96
+UHF, 0,41,0x0000,41
97
+UHF, 0,42,0x0000,42
98
+UHF, 0,43,0x0000,43
99
+UHF, 0,44,0x0000,44
100
+UHF, 0,45,0x0000,45
101
+UHF, 0,46,0x0000,46
102
+UHF, 0,47,0x0000,47
103
+UHF, 0,48,0x0000,48
104
+UHF, 0,49,0x0000,49
105
+UHF, 0,50,0x0000,50
106
+UHF, 0,51,0x0000,51
107
+UHF, 0,52,0x0000,52
108
+UHF, 0,53,0x0000,53
109
+UHF, 0,54,0x0000,54
110
+UHF, 0,55,0x0000,55
111
+UHF, 0,56,0x0000,56
112
+UHF, 0,57,0x0000,57
113
+UHF, 0,58,0x0000,58
114
+UHF, 0,59,0x0000,59
115
+UHF, 0,60,0x0000,60
116
+UHF, 0,61,0x0000,61
117
+UHF, 0,62,0x0000,62
118
+
119
+  ; CATV
120
+
121
+CATV, 0,113,0x0000,C13
122
+CATV, 0,114,0x0000,C14
123
+CATV, 0,115,0x0000,C15
124
+CATV, 0,116,0x0000,C16
125
+CATV, 0,117,0x0000,C17
126
+CATV, 0,118,0x0000,C18
127
+CATV, 0,119,0x0000,C19
128
+CATV, 0,120,0x0000,C20
129
+CATV, 0,121,0x0000,C21
130
+CATV, 0,122,0x0000,C22
131
+CATV, 0,123,0x0000,C23
132
+CATV, 0,124,0x0000,C24
133
+CATV, 0,125,0x0000,C25
134
+CATV, 0,126,0x0000,C26
135
+CATV, 0,127,0x0000,C27
136
+CATV, 0,128,0x0000,C28
137
+CATV, 0,129,0x0000,C29
138
+CATV, 0,130,0x0000,C30
139
+CATV, 0,131,0x0000,C31
140
+CATV, 0,132,0x0000,C32
141
+CATV, 0,133,0x0000,C33
142
+CATV, 0,134,0x0000,C34
143
+CATV, 0,135,0x0000,C35
144
+CATV, 0,136,0x0000,C36
145
+CATV, 0,137,0x0000,C37
146
+CATV, 0,138,0x0000,C38
147
+CATV, 0,139,0x0000,C39
148
+CATV, 0,140,0x0000,C40
149
+CATV, 0,141,0x0000,C41
150
+CATV, 0,142,0x0000,C42
151
+CATV, 0,143,0x0000,C43
152
+CATV, 0,144,0x0000,C44
153
+CATV, 0,145,0x0000,C45
154
+CATV, 0,146,0x0000,C46
155
+CATV, 0,147,0x0000,C47
156
+CATV, 0,148,0x0000,C48
157
+CATV, 0,149,0x0000,C49
158
+CATV, 0,150,0x0000,C50
159
+CATV, 0,151,0x0000,C51
160
+CATV, 0,152,0x0000,C52
161
+CATV, 0,153,0x0000,C53
162
+CATV, 0,154,0x0000,C54
163
+CATV, 0,155,0x0000,C55
164
+CATV, 0,156,0x0000,C56
165
+CATV, 0,157,0x0000,C57
166
+CATV, 0,158,0x0000,C58
167
+CATV, 0,159,0x0000,C59
168
+CATV, 0,160,0x0000,C60
169
+CATV, 0,161,0x0000,C61
170
+CATV, 0,162,0x0000,C62
171
+CATV, 0,163,0x0000,C63
172
+
173
+  ; BS (ストリームが重複するチャンネルはコメントアウトしている)
174
+
175
+BS, 151, 1,0x4010,BS1/TS0 ;BS朝日
176
+BS, 161, 1,0x4011,BS1/TS1 ;BS-TBS
177
+BS, 191, 3,0x4030,BS3/TS0 ;WOWOWプライム
178
+;BS, 791,17,0x4030,BS3/TS0 ;navi
179
+BS, 171, 3,0x4031,BS3/TS1 ;BSジャパン
180
+BS, 192, 5,0x4450,BS5/TS0 ;WOWOWライブ
181
+BS, 193, 5,0x4451,BS5/TS1 ;WOWOWシネマ
182
+BS, 201, 7,0x4470,BS7/TS0 ;スター・チャンネル2
183
+;BS, 202, 7,0x4470,BS7/TS0 ;スター・チャンネル3
184
+BS, 236, 7,0x4671,BS7/TS1 ;BSアニマックス
185
+BS, 256, 7,0x4672,BS7/TS2 ;ディズニー・チャンネル
186
+BS, 211, 9,0x4090,BS9/TS0 ;BS11
187
+BS, 200, 9,0x4091,BS9/TS1 ;スター・チャンネル1
188
+BS, 222, 9,0x4092,BS9/TS2 ;TwellV
189
+BS, 238,11,0x46B0,BS11/TS0 ;FOX bs238
190
+BS, 241,11,0x46B1,BS11/TS1 ;BSスカパー!
191
+BS, 231,11,0x46B2,BS11/TS2 ;放送大学BS1
192
+;BS, 232,11,0x46B2,BS11/TS2 ;放送大学BS2
193
+;BS, 233,11,0x46B2,BS11/TS2 ;放送大学BS3
194
+BS, 141,13,0x40D0,BS13/TS0 ;BS日テレ
195
+BS, 181,13,0x40D1,BS13/TS1 ;BSフジ
196
+BS, 101,15,0x40F1,BS15/TS1 ;NHKBS1
197
+BS, 103,15,0x40F2,BS15/TS2 ;NHKBSプレミアム
198
+;BS, 910,17,0x40F2,BS15/TS2 ;WNI・910
199
+BS, 291,17,0x4310,BS17/TS1 ;NHK総合・東京
200
+;BS, 292,17,0x4310,BS17/TS1 ;NHKEテレ東京
201
+BS, 294,17,0x4311,BS17/TS2 ;日テレ
202
+;BS, 295,17,0x4311,BS17/TS2 ;テレビ朝日
203
+;BS, 296,17,0x4311,BS17/TS2 ;TBS
204
+;BS, 297,17,0x4311,BS17/TS2 ;テレビ東京
205
+;BS, 298,17,0x4310,BS17/TS1 ;フジテレビ
206
+;BS, 531,17,0x46B2,BS11/TS2 放送大学ラジオ
207
+BS, 234,19,0x4730,BS19/TS0 ;グリーンチャンネル
208
+BS, 242,19,0x4731,BS19/TS1 ;J SPORTS 1
209
+BS, 243,19,0x4732,BS19/TS2 ;J SPORTS 2
210
+BS, 252,21,0x4750,BS21/TS0 ;IMAGICA BS
211
+BS, 244,21,0x4751,BS21/TS1 ;J SPORTS 3
212
+BS, 245,21,0x4752,BS21/TS2 ;J SPORTS 4
213
+BS, 251,23,0x4770,BS23/TS0 ;BS釣りビジョン
214
+BS, 255,23,0x4771,BS23/TS1 ;日本映画専門チャンネル
215
+BS, 258,23,0x4772,BS23/TS2 ;D-Life
216
+
217
+  ; CS110
218
+
219
+CS110, 0, 2,0x6020,ND2
220
+CS110, 0, 4,0x7040,ND4
221
+CS110, 0, 6,0x7060,ND6
222
+CS110, 0, 8,0x6080,ND8
223
+CS110, 0,10,0x60A0,ND10
224
+CS110, 0,12,0x70C0,ND12
225
+CS110, 0,14,0x70E0,ND14
226
+CS110, 0,16,0x7100,ND16
227
+CS110, 0,18,0x7120,ND18
228
+CS110, 0,20,0x7140,ND20
229
+CS110, 0,22,0x7160,ND22
230
+CS110, 0,24,0x7180,ND24
231
+
232
+  ; CS110 ( MHz で記述する場合の例 )
233
+
234
+;CS110, 0, 1613.0MHz, 0x6020, ND2
235
+;CS110, 0, 1653.0MHz, 0x7040, ND4
236
+;CS110, 0, 1693.0MHz, 0x7060, ND6
237
+;CS110, 0, 1733.0MHz, 0x6080, ND8
238
+;CS110, 0, 1773.0MHz, 0x60A0, ND10
239
+;CS110, 0, 1813.0MHz, 0x70C0, ND12
240
+;CS110, 0, 1853.0MHz, 0x70E0, ND14
241
+;CS110, 0, 1893.0MHz, 0x7100, ND16
242
+;CS110, 0, 1933.0MHz, 0x7120, ND18
243
+;CS110, 0, 1973.0MHz, 0x7140, ND20
244
+;CS110, 0, 2013.0MHz, 0x7160, ND22
245
+;CS110, 0, 2053.0MHz, 0x7180, ND24
246
+
247
diff -uPrb Org/BonDriver_Bulldog.ini Mod/BonDriver_Bulldog.ini
248
--- Org/BonDriver_Bulldog.ini	2012-03-17 13:01:48.000000000 +0900
249
+++ Mod/BonDriver_Bulldog.ini	2014-01-26 07:01:23.000000000 +0900
250
@@ -1,205 +1,15 @@
251
-[BonDriverAKB02]
252
-
253
-
254
-//Channel=ServiceID,PhysicalChannel,TSID,Name
255
-[VHF]
256
-0=  0, 1,0x0000,1
257
-1=  0, 2,0x0000,2
258
-2=  0, 3,0x0000,3
259
-3=  0, 4,0x0000,4
260
-4=  0, 5,0x0000,5
261
-5=  0, 6,0x0000,6
262
-6=  0, 7,0x0000,7
263
-7=  0, 8,0x0000,8
264
-8=  0, 9,0x0000,9
265
-9=  0,10,0x0000,10
266
-10= 0,11,0x0000,11
267
-11= 0,12,0x0000,12
268
-
269
-[UHF]
270
-0=  0,13,0x0000,13
271
-1=  0,14,0x0000,14
272
-2=  0,15,0x0000,15
273
-3=  0,16,0x0000,16
274
-4=  0,17,0x0000,17
275
-5=  0,18,0x0000,18
276
-6=  0,19,0x0000,19
277
-7=  0,20,0x0000,20
278
-8=  0,21,0x0000,21
279
-9=  0,22,0x0000,22
280
-10= 0,23,0x0000,23
281
-11= 0,24,0x0000,24
282
-12= 0,25,0x0000,25
283
-13= 0,26,0x0000,26
284
-14= 0,27,0x0000,27
285
-15= 0,28,0x0000,28
286
-16= 0,29,0x0000,29
287
-17= 0,30,0x0000,30
288
-18= 0,31,0x0000,31
289
-19= 0,32,0x0000,32
290
-20= 0,33,0x0000,33
291
-21= 0,34,0x0000,34
292
-22= 0,35,0x0000,35
293
-23= 0,36,0x0000,36
294
-24= 0,37,0x0000,37
295
-25= 0,38,0x0000,38
296
-26= 0,39,0x0000,39
297
-27= 0,40,0x0000,40
298
-28= 0,41,0x0000,41
299
-29= 0,42,0x0000,42
300
-30= 0,43,0x0000,43
301
-31= 0,44,0x0000,44
302
-32= 0,45,0x0000,45
303
-33= 0,46,0x0000,46
304
-34= 0,47,0x0000,47
305
-35= 0,48,0x0000,48
306
-36= 0,49,0x0000,49
307
-37= 0,50,0x0000,50
308
-38= 0,51,0x0000,51
309
-39= 0,52,0x0000,52
310
-40= 0,53,0x0000,53
311
-41= 0,54,0x0000,54
312
-42= 0,55,0x0000,55
313
-43= 0,56,0x0000,56
314
-44= 0,57,0x0000,57
315
-45= 0,58,0x0000,58
316
-46= 0,59,0x0000,59
317
-47= 0,60,0x0000,60
318
-48= 0,61,0x0000,61
319
-49= 0,62,0x0000,62
320
-
321
-[CATV]
322
-0=  0,113,0x0000,C13
323
-1=  0,114,0x0000,C14
324
-2=  0,115,0x0000,C15
325
-3=  0,116,0x0000,C16
326
-4=  0,117,0x0000,C17
327
-5=  0,118,0x0000,C18
328
-6=  0,119,0x0000,C19
329
-7=  0,120,0x0000,C20
330
-8=  0,121,0x0000,C21
331
-9=  0,122,0x0000,C22
332
-10= 0,123,0x0000,C23
333
-11= 0,124,0x0000,C24
334
-12= 0,125,0x0000,C25
335
-13= 0,126,0x0000,C26
336
-14= 0,127,0x0000,C27
337
-15= 0,128,0x0000,C28
338
-16= 0,129,0x0000,C29
339
-17= 0,130,0x0000,C30
340
-18= 0,131,0x0000,C31
341
-19= 0,132,0x0000,C32
342
-20= 0,123,0x0000,C33
343
-21= 0,124,0x0000,C34
344
-22= 0,125,0x0000,C35
345
-23= 0,126,0x0000,C36
346
-24= 0,127,0x0000,C37
347
-25= 0,128,0x0000,C38
348
-26= 0,129,0x0000,C39
349
-27= 0,130,0x0000,C40
350
-28= 0,131,0x0000,C41
351
-29= 0,132,0x0000,C42
352
-30= 0,123,0x0000,C43
353
-31= 0,124,0x0000,C44
354
-32= 0,125,0x0000,C45
355
-33= 0,126,0x0000,C46
356
-34= 0,127,0x0000,C47
357
-35= 0,128,0x0000,C48
358
-36= 0,129,0x0000,C49
359
-37= 0,130,0x0000,C50
360
-38= 0,131,0x0000,C51
361
-39= 0,132,0x0000,C52
362
-40= 0,123,0x0000,C53
363
-41= 0,124,0x0000,C54
364
-42= 0,125,0x0000,C55
365
-43= 0,126,0x0000,C56
366
-44= 0,127,0x0000,C57
367
-45= 0,128,0x0000,C58
368
-46= 0,129,0x0000,C59
369
-47= 0,130,0x0000,C60
370
-48= 0,131,0x0000,C61
371
-49= 0,132,0x0000,C62
372
-50= 0,123,0x0000,C63
373
-
374
-[BS]
375
-0= 151, 1,0x4010,BS1/TS0 BS朝日
376
-1= 161, 1,0x4011,BS1/TS1 BS-TBS
377
-2= 191, 3,0x4030,BS3/TS0 WOWOWプライム
378
-3= 791,17,0x4030,BS3/TS0 navi
379
-4= 171, 3,0x4031,BS3/TS1 BSジャパン
380
-5= 192, 5,0x4450,BS5/TS0 WOWOWライブ
381
-6= 193, 5,0x4451,BS5/TS1 WOWOWシネマ
382
-7= 201, 7,0x4470,BS7/TS0 スター・チャンネル2
383
-8= 202, 7,0x4470,BS7/TS0 スター・チャンネル3
384
-9= 236, 7,0x4671,BS7/TS1 BSアニマックス
385
-10=256, 7,0x4672,BS7/TS2 ディズニー・チャンネル
386
-11=211, 9,0x4090,BS9/TS0 BS11
387
-12=200, 9,0x4091,BS9/TS1 スター・チャンネル1
388
-13=222, 9,0x4092,BS9/TS2 TwellV
389
-14=238,11,0x46B0,BS11/TS0 FOX bs238
390
-15=241,11,0x46B1,BS11/TS1 BSスカパー!
391
-16=231,11,0x46B2,BS11/TS2 放送大学BS1
392
-17=232,11,0x46B2,BS11/TS2 放送大学BS2
393
-18=233,11,0x46B2,BS11/TS2 放送大学BS3
394
-19=141,13,0x40D0,BS13/TS0 BS日テレ
395
-20=181,13,0x40D1,BS13/TS1 BSフジ
396
-21=101,15,0x40F1,BS15/TS1 NHKBS1
397
-22=103,15,0x40F2,BS15/TS2 NHKBSプレミアム
398
-23=910,17,0x40F2,BS15/TS2 WNI・910
399
-24=291,17,0x4310,BS17/TS1 NHK総合・東京
400
-25=292,17,0x4310,BS17/TS1 NHKEテレ東京
401
-26=294,17,0x4311,BS17/TS2 日テレ
402
-27=295,17,0x4311,BS17/TS2 テレビ朝日
403
-28=296,17,0x4311,BS17/TS2 TBS
404
-29=297,17,0x4311,BS17/TS2 テレビ東京
405
-30=298,17,0x4310,BS17/TS1 フジテレビ
406
-31=531,17,0x46B2,BS11/TS2 放送大学ラジオ
407
-32=234,19,0x4730,BS19/TS0 グリーンチャンネル
408
-33=242,19,0x4731,BS19/TS1 J SPORTS 1
409
-34=243,19,0x4732,BS19/TS2 J SPORTS 2
410
-35=252,21,0x4750,BS21/TS0 IMAGICA BS
411
-36=244,21,0x4751,BS21/TS1 J SPORTS 3
412
-37=245,21,0x4752,BS21/TS2 J SPORTS 4
413
-38=251,23,0x4770,BS23/TS0 BS釣りビジョン
414
-39=255,23,0x4771,BS23/TS1 日本映画専門チャンネル
415
-40=258,23,0x4772,BS23/TS2 D-Life
416
-
417
-
418
-0= 101,15,0x40F1,NHKBS1
419
-1= 102,15,0x40F1,NHK BS2
420
-2= 103,15,0x40F2,NHK BSプレミアム
421
-3= 141,13,0x40D0,BS日テレ
422
-4= 151, 1,0x4010,BS朝日1
423
-5= 161, 1,0x4011,BS-TBS
424
-6= 171, 3,0x4031,BSジャパン
425
-7= 181,13,0x40D1,BSフジ・181
426
-8= 191, 3,0x4030,WOWOWプライム
427
-9= 200, 9,0x4470,スター・チャンネル1,
428
-10=211, 9,0x4090,BS11
429
-11=222, 9,0x4092,TwellV
430
-12=192, 5,0x4030,WOWOWライブ
431
-13=193, 5,0x4030,WOWOWシネマ
432
-14=201, 7,0x4470,スター・チャンネル2
433
-15=202, 7,0x4470,スター・チャンネル3
434
-16=231,11,0x46B2,放送大学テレビ
435
-17=234,19,0x4730,グリーンチャンネル
436
-18=236, 7,0x4671,BSアニマックス
437
-19=238,11,0x46B0,FOX bs238
438
-20=241,11,0x46B1,BSスカパー!
439
-21=242,19,0x4731,J SPORTS 1
440
-22=243,19,0x4732,J SPORTS 2
441
-
442
-[CS110]
443
-0= 0, 2,0x6020,ND2
444
-1= 0, 4,0x7040,ND4
445
-2= 0, 6,0x7060,ND6
446
-3= 0, 8,0x6080,ND8
447
-4= 0,10,0x60A0,ND10
448
-5= 0,12,0x70C0,ND12
449
-6= 0,14,0x70E0,ND14
450
-7= 0,16,0x7100,ND16
451
-8= 0,18,0x7120,ND18
452
-9= 0,20,0x7140,ND20
453
-10=0,22,0x7160,ND22
454
-11=0,24,0x7180,ND24
455
+[BonTuner]
456
+TSDataSize=65536
457
+TSQueueNum=16
458
+ASyncTSQueueNum=512
459
+
460
+; Windows7以降の新OS用の推奨設定
461
+;TSDataSize=196608
462
+;TSQueueNum=24
463
+;ASyncTSQueueNum=768
464
+
465
+ISDBTCommandSendTimes=2
466
+ISDBTCommandSendWait=100
467
+ISDBSCommandSendTimes=2
468
+ISDBSCommandSendWait=100
469
 
470
diff -uPrb Org/BonTuner.cpp Mod/BonTuner.cpp
471
--- Org/BonTuner.cpp	2012-04-07 16:37:52.000000000 +0900
472
+++ Mod/BonTuner.cpp	2014-01-26 19:07:47.000000000 +0900
473
@@ -20,15 +20,18 @@
474
 // 定数定義
475
 //////////////////////////////////////////////////////////////////////
476
 
477
-// ミューテックス名
478
-#define MUTEX_NAME			TEXT("BonDriver Bulldog")
479
-
480
 // 受信サイズ
481
-#define TSDATASIZE			65536UL										// TSデータのサイズ
482
+DWORD TSDATASIZE        =   65536UL ;       // TSデータのサイズ
483
+DWORD TSQUEUENUM        =   16UL    ;       // TSデータの環状ストック数
484
 
485
 // FIFOバッファ設定
486
-#define ASYNCBUFFTIME		4UL											// バッファ長 = 4秒
487
-#define ASYNCBUFFSIZE		( 0x400000 / TSDATASIZE * ASYNCBUFFTIME )	// 平均32Mbpsとする
488
+DWORD ASYNCTSQUEUENUM   =   256UL   ;       // 非同期TSデータの環状ストック数
489
+
490
+// ウェイト
491
+DWORD ISDBTCOMMANDSENDTIMES = 2 ;
492
+DWORD ISDBTCOMMANDSENDWAIT  = 100 ;
493
+DWORD ISDBSCOMMANDSENDTIMES = 2 ;
494
+DWORD ISDBSCOMMANDSENDWAIT  = 100 ;
495
 
496
 // エンドポイントインデックス
497
 #define EPINDEX_IN			0UL
498
@@ -75,12 +78,12 @@
499
 _T("151, 1,0x4010,BS1/TS0 BS朝日"),
500
 _T("161, 1,0x4011,BS1/TS1 BS-TBS"),
501
 _T("191, 3,0x4030,BS3/TS0 WOWOWプライム"),
502
-_T("791,17,0x4030,BS3/TS0 navi"),
503
+//_T("791,17,0x4030,BS3/TS0 navi"),
504
 _T("171, 3,0x4031,BS3/TS1 BSジャパン"),
505
 _T("192, 5,0x4450,BS5/TS0 WOWOWライブ"),
506
 _T("193, 5,0x4451,BS5/TS1 WOWOWシネマ"),
507
 _T("201, 7,0x4470,BS7/TS0 スター・チャンネル2"),
508
-_T("202, 7,0x4470,BS7/TS0 スター・チャンネル3"),
509
+//_T("202, 7,0x4470,BS7/TS0 スター・チャンネル3"),
510
 _T("236, 7,0x4671,BS7/TS1 BSアニマックス"),
511
 _T("256, 7,0x4672,BS7/TS2 ディズニー・チャンネル"),
512
 _T("211, 9,0x4090,BS9/TS0 BS11"),
513
@@ -89,21 +92,21 @@
514
 _T("238,11,0x46B0,BS11/TS0 FOX bs238"),
515
 _T("241,11,0x46B1,BS11/TS1 BSスカパー!"),
516
 _T("231,11,0x46B2,BS11/TS2 放送大学BS1"),
517
-_T("232,11,0x46B2,BS11/TS2 放送大学BS2"),
518
-_T("233,11,0x46B2,BS11/TS2 放送大学BS3"),
519
+//_T("232,11,0x46B2,BS11/TS2 放送大学BS2"),
520
+//_T("233,11,0x46B2,BS11/TS2 放送大学BS3"),
521
 _T("141,13,0x40D0,BS13/TS0 BS日テレ"),
522
 _T("181,13,0x40D1,BS13/TS1 BSフジ"),
523
 _T("101,15,0x40F1,BS15/TS1 NHKBS1"),
524
 _T("103,15,0x40F2,BS15/TS2 NHKBSプレミアム"),
525
-_T("910,17,0x40F2,BS15/TS2 WNI・910"),
526
+//_T("910,17,0x40F2,BS15/TS2 WNI・910"),
527
 _T("291,17,0x4310,BS17/TS1 NHK総合・東京"),
528
-_T("292,17,0x4310,BS17/TS1 NHKEテレ東京"),
529
+//_T("292,17,0x4310,BS17/TS1 NHKEテレ東京"),
530
 _T("294,17,0x4311,BS17/TS2 日テレ"),
531
-_T("295,17,0x4311,BS17/TS2 テレビ朝日"),
532
-_T("296,17,0x4311,BS17/TS2 TBS"),
533
-_T("297,17,0x4311,BS17/TS2 テレビ東京"),
534
-_T("298,17,0x4310,BS17/TS1 フジテレビ"),
535
-_T("531,17,0x46B2,BS11/TS2 放送大学ラジオ"),
536
+//_T("295,17,0x4311,BS17/TS2 テレビ朝日"),
537
+//_T("296,17,0x4311,BS17/TS2 TBS"),
538
+//_T("297,17,0x4311,BS17/TS2 テレビ東京"),
539
+//_T("298,17,0x4310,BS17/TS1 フジテレビ"),
540
+//_T("531,17,0x46B2,BS11/TS2 放送大学ラジオ"),
541
 _T("234,19,0x4730,BS19/TS0 グリーンチャンネル"),
542
 _T("242,19,0x4731,BS19/TS1 J SPORTS 1"),
543
 _T("243,19,0x4732,BS19/TS2 J SPORTS 2"),
544
@@ -134,6 +137,7 @@
545
 NULL
546
 };
547
 
548
+using namespace std ;
549
 
550
 //////////////////////////////////////////////////////////////////////
551
 // インスタンス生成メソッド
552
@@ -151,6 +155,41 @@
553
 
554
 
555
 //////////////////////////////////////////////////////////////////////
556
+// ユーティリティ
557
+//////////////////////////////////////////////////////////////////////
558
+
559
+template<class String> String inline trim(const String &str)
560
+{
561
+  String str2 ; str2.clear() ;
562
+  for(typename String::size_type i=0;i<str.size();i++) {
563
+    if(unsigned(str[i])>0x20UL) {
564
+      str2 = str.substr(i,str.size()-i) ;
565
+      break ;
566
+    }
567
+  }
568
+  if(str2.empty()) return str2 ;
569
+  for(typename String::size_type i=str2.size();i>0;i--) {
570
+    if(unsigned(str2[i-1])>0x20UL) {
571
+      return str2.substr(0,i) ;
572
+    }
573
+  }
574
+  str2.clear() ;
575
+  return str2 ;
576
+}
577
+
578
+static wstring mbcs2wcs(string src)
579
+{
580
+    if(src.empty()) return wstring(L"") ;
581
+    wchar_t *wcs = new wchar_t[src.length()*2 + 2];
582
+    size_t wLen = 0;
583
+    setlocale(LC_ALL,"japanese");
584
+    mbstowcs_s(&wLen, wcs, src.length()*2+1 , src.c_str(), _TRUNCATE);
585
+    wstring result = wcs ;
586
+    delete [] wcs;
587
+    return result ;
588
+}
589
+
590
+//////////////////////////////////////////////////////////////////////
591
 // 構築/消滅
592
 //////////////////////////////////////////////////////////////////////
593
 
594
@@ -164,14 +203,16 @@
595
 	: m_pUsbFx2Driver(NULL)
596
 	, m_hOnStreamEvent(NULL)
597
 	, m_hMutex(NULL)
598
+	, is_channel_valid(FALSE)
599
 {
600
-	char	bf[256];
601
-	char	key[8];
602
+	//char	bf[256];
603
+	//char	key[8];
604
 
605
 	m_pThis = this;
606
 	fOpened=false;
607
 
608
-	LoadIni();
609
+    m_yFx2Id = 0 ;
610
+	InitTunerProperty();
611
 }
612
 
613
 //*****	Destructor	*****
614
@@ -204,6 +245,9 @@
615
 	m_pUsbFx2Driver = new CUsbFx2Driver(this);
616
 	if(!m_pUsbFx2Driver)return false;
617
 	
618
+    // ストリーム一時停止
619
+    is_channel_valid = FALSE ;
620
+
621
 	// FX2の初期化シーケンス
622
 	try{
623
 		// FIFOバッファ確保
624
@@ -215,6 +259,7 @@
625
 		sz=sizeof(DefBulldogFW);
626
 		memcpy(BulldogFirmWare,DefBulldogFW,sz);
627
 
628
+		#ifdef _DEBUG
629
 		fopen_s(&fp, "Bulldog.fw","rb");
630
 		if (fp)
631
 		{
632
@@ -227,9 +272,10 @@
633
 			}
634
 			fclose(fp);
635
 		}
636
+		#endif
637
 
638
 		// ドライバオープン
639
-		if(!m_pUsbFx2Driver->OpenDriver(0x00U, BulldogFirmWare, sz,"Bulldog_FIFO"))throw (const DWORD)__LINE__;				//xxxxx
640
+		if(!m_pUsbFx2Driver->OpenDriver(m_yFx2Id, BulldogFirmWare, sz,/*"Bulldog_FIFO"*/"FX2_FIFO"))throw (const DWORD)__LINE__;				//xxxxx
641
 
642
 		// エンドポイント追加
643
 		if(!m_pUsbFx2Driver->AddEndPoint(0x81U))throw (const DWORD)__LINE__;	// EPINDEX_IN
644
@@ -241,14 +287,14 @@
645
 		if(!m_pUsbFx2Driver->TransmitFormatedData(EPINDEX_OUT, 6UL, CMD_PORT_CFG, 0x00U, PIO_START, CMD_MODE_IDLE, CMD_IFCONFIG, 0xE3U))throw (const DWORD)__LINE__;
646
 
647
 		// スレッド起動
648
-		if(!m_pUsbFx2Driver->CreateFifoThread(0x86U, NULL, TSDATASIZE))throw (const DWORD)__LINE__;
649
+		if(!m_pUsbFx2Driver->CreateFifoThread(0x86U, &m_dwFifoThreadIndex, TSDATASIZE, TSQUEUENUM))throw (const DWORD)__LINE__;
650
 
651
 		// 開始コマンド送信
652
 //		if(!m_pUsbFx2Driver->TransmitFormatedData(EPINDEX_OUT, 3UL, CMD_EP6IN_START, CMD_PORT_WRITE, PIO_START | PIO_IR_OUT | PIO_TS_BACK))throw (const DWORD)__LINE__;
653
 		if(!m_pUsbFx2Driver->TransmitFormatedData(EPINDEX_OUT, 3UL, CMD_EP6IN_START, CMD_PORT_WRITE, PIO_START))throw (const DWORD)__LINE__;
654
 
655
 		// ミューテックス作成
656
-		if(!(m_hMutex = ::CreateMutex(NULL, TRUE, MUTEX_NAME)))throw (const DWORD)__LINE__;
657
+		if(!(m_hMutex = ::CreateMutex(NULL, TRUE, m_szTunerName)))throw (const DWORD)__LINE__;
658
 
659
 		// 成功
660
 	}
661
@@ -316,11 +362,14 @@
662
 	ch:13-62	UHF
663
 	ch:113-163	ケーブルTV
664
 */
665
-void	CBonTuner::SetISDBTChannel(int ch)
666
+void	CBonTuner::SetISDBTChannel(int ch,float MegaHz)
667
 {
668
-	SetMxl5007(ch);
669
-	SetTC90502(ISDB_T);
670
-	Sleep(100);
671
+	for(DWORD i=0;i<ISDBTCOMMANDSENDTIMES;i++) {
672
+	  //if(i) Sleep(100) ;
673
+      SetMxl5007(ch,MegaHz);
674
+	  if(TC90502_OK==SetTC90502(ISDB_T)) ; //break ;
675
+  	  Sleep(ISDBTCOMMANDSENDWAIT);
676
+    }
677
 }
678
 
679
 //*****	Set ISDB-S Channel	*****
680
@@ -329,14 +378,16 @@
681
 	ch:1-23 (奇数)	BS
682
 	ch:2-24 (偶数)	CS
683
 */
684
-void	CBonTuner::SetISDBSChannel(int ch,int tsid)
685
+void	CBonTuner::SetISDBSChannel(int ch,int tsid,float MegaHz)
686
 {
687
-	SetStv6110a(ch);
688
+	for(DWORD i=0;i<ISDBSCOMMANDSENDTIMES;i++) {
689
+      SetStv6110a(ch,MegaHz);
690
 	SetTC90502(ISDB_S);
691
 	SetTSID(tsid);
692
 
693
 	WriteReg(DEMODSADRS,0x03,0x01);							//同期シーケンス開始
694
-	Sleep(100);
695
+      Sleep(ISDBSCOMMANDSENDWAIT);
696
+    }
697
 /*
698
 	DWORD	tm=GetTickCount()+3000;
699
 
700
@@ -384,10 +435,12 @@
701
 
702
 CLockStatus	CBonTuner::IsLock(void)
703
 {
704
-	if (m_dwCurSpace<3)
705
+	DWORD ch = GetCurSerialChannel() ;
706
+	if (m_Channels[ch].isISDBT())
707
 		return(IsLockISDBT());
708
-
709
+	else if (m_Channels[ch].isISDBS())
710
 	return(IsLockISDBS());
711
+	return stUnknown ;
712
 }
713
 
714
 //*****	Get C/N	*****
715
@@ -399,10 +452,12 @@
716
 	double			cn;
717
 	double			p,p2,p3,p4;
718
 
719
-	if (fOpened==false)
720
+	if (!fOpened||!is_channel_valid)
721
 		return(0);
722
 
723
-	if (m_dwCurSpace<3)														//ISDB-T
724
+	DWORD ch = GetCurSerialChannel() ;
725
+
726
+	if (m_Channels[ch].isISDBT())														//ISDB-T
727
 	{
728
 		I2CRead(DEMODTADRS,0x8B,3,Data);
729
 		cndata=(Data[0]<<16) | (Data[1]<<8) | Data[2];
730
@@ -412,7 +467,7 @@
731
 		p4=p3*p;
732
 		cn=(double)0.000024*p4-0.0016*p3+0.0398*p2+0.5491*p+3.0965;
733
 	}
734
-	else {																	//BS/CS
735
+	else if(m_Channels[ch].isISDBS()) {																	//BS/CS
736
 		I2CRead(DEMODSADRS,0xBC,2,Data);
737
 		cndata=(Data[0]<<8) | Data[1];
738
 		if (cndata>=3000)
739
@@ -423,6 +478,8 @@
740
 		else {
741
 			cn=0;
742
 		}
743
+	}else {
744
+      cn = 0 ;
745
 	}
746
 
747
 	if ((cn<0) || (cndata==0))
748
@@ -439,14 +496,18 @@
749
 	int		berdata,packetcycle;
750
 	double	ber;
751
 
752
-	if (m_dwCurSpace<3)
753
+	DWORD ch = GetCurSerialChannel() ;
754
+
755
+	if (m_Channels[ch].isISDBT())														//ISDB-T
756
 	{
757
 		I2CRead(DEMODTADRS,0xA0,3,darray);
758
 		I2CRead(DEMODTADRS,0xA6,2,carray);
759
 	}
760
-	else {
761
+	else if(m_Channels[ch].isISDBS()) {																	//BS/CS
762
 		I2CRead(DEMODTADRS+1,0xEB,3,darray);
763
 		I2CRead(DEMODTADRS+1,0xEE,2,carray);
764
+	}else {
765
+		return 0.0 ;
766
 	}
767
 
768
 	packetcycle=(carray[0]<<8) | carray[1];
769
@@ -459,22 +520,59 @@
770
 	return(ber);
771
 }
772
 
773
+
774
+//*****	SetChannelSub	*****
775
+
776
+const BOOL CBonTuner::SetChannelSub(const DWORD dwCh)
777
+{
778
+    //ストリーム一時停止
779
+    is_channel_valid = FALSE;
780
+
781
+    // 撮り溜めたTSストリームの破棄
782
+    PurgeTsStream();
783
+
784
+    if(dwCh >= m_Channels.size()){
785
+        return FALSE;
786
+    }
787
+
788
+    //チューニング
789
+    if(m_Channels[dwCh].isISDBT()) {  // 地上波
790
+      SetISDBTChannel(m_Channels[dwCh].Channel,m_Channels[dwCh].MegaHz) ;
791
+    }else if(m_Channels[dwCh].isISDBS()) { // BS/CS
792
+      SetISDBSChannel(m_Channels[dwCh].Channel,
793
+        m_Channels[dwCh].TSID,m_Channels[dwCh].MegaHz) ;
794
+    }else {
795
+      return FALSE ;
796
+    }
797
+
798
+    //ストリーム再開
799
+    is_channel_valid = TRUE;
800
+
801
+    return TRUE ;
802
+}
803
+
804
+
805
 //*****	Set Channel	*****
806
 
807
 const BOOL CBonTuner::SetChannel(const BYTE ch)
808
 {
809
-	if (ch<12)
810
-		m_dwCurSpace = 0;
811
-	else if (ch<63)
812
-		m_dwCurSpace = 1;
813
-	else if (ch<200)
814
-		m_dwCurSpace = 2;
815
-
816
-	m_dwCurChannel = ch;
817
+    if(!SetChannelSub(ch)) return FALSE ;
818
 
819
-	SetISDBTChannel(ch);
820
+    // チャンネル情報を更新
821
+    m_dwCurSpace=0;
822
+    m_dwCurChannel=0;
823
+    wstring space;
824
+    for(int i=0;i<ch;i++) {
825
+      if(!i) space = m_Channels[ch].Space ;
826
+      else if (m_Channels[ch].Space!=space) {
827
+        space = m_Channels[ch].Space ;
828
+        m_dwCurSpace++,m_dwCurChannel=0 ;
829
+        continue ;
830
+      }
831
+      m_dwCurChannel++;
832
+    }
833
 
834
-	return TRUE;
835
+    return TRUE ;
836
 }
837
 
838
 //*****	Get Signal Level	*****
839
@@ -486,7 +584,7 @@
840
 	return((float)d);
841
 /*
842
 	// FIFOバッファのFullnessを返す
843
-	return ((float)m_FifoBuffer.size() / (float)ASYNCBUFFSIZE * 100.0f);
844
+	return ((float)m_FifoBuffer.size() / (float)ASYNCTSQUEUENUM * 100.0f);
845
 */
846
 }
847
 
848
@@ -495,11 +593,14 @@
849
 const DWORD CBonTuner::WaitTsStream(const DWORD dwTimeOut)
850
 {
851
 //	OutputDebugString(_T("WaitTsStream\n"));
852
-	return 0UL;
853
+//	return 0UL;
854
 
855
 	// 終了チェック
856
 	if(!m_pUsbFx2Driver)return WAIT_ABANDONED;
857
 
858
+	// バッファ済みの場合は無駄に待機せずに制御を戻す @ 2014/01/26(Sun)
859
+	if(!m_FifoBuffer.empty()) return WAIT_OBJECT_0;
860
+
861
 	// イベントがシグナル状態になるのを待つ
862
 	const DWORD dwRet = ::WaitForSingleObject(m_hOnStreamEvent, (dwTimeOut)? dwTimeOut : INFINITE);
863
 
864
@@ -542,7 +643,7 @@
865
 	{
866
 		if(*pdwSize)
867
 		{
868
-			::CopyMemory(pDst, pSrc, *pdwSize);
869
+			CopyMemory(pDst, pSrc, *pdwSize);
870
 		}
871
 		
872
 		return TRUE;
873
@@ -564,20 +665,19 @@
874
 		return FALSE;
875
 
876
 	// TSデータをバッファから取り出す
877
-	if(m_FifoBuffer.size())
878
-	{
879
+    if(m_FifoBuffer.size()){
880
 		// データコピー
881
-		if(pdwSize)*pdwSize = TSDATASIZE;
882
-		if(ppDst)*ppDst = m_FifoBuffer.front();
883
+        *pdwSize = m_FifoBuffer.front().second; // TSDATASIZE;
884
+        *ppDst = m_FifoBuffer.front().first;
885
 		m_FifoBuffer.pop();
886
-		if(pdwRemain)
887
-			*pdwRemain = m_FifoBuffer.size();
888
+        *pdwRemain = m_FifoBuffer.size() ;
889
+
890
 		return TRUE;
891
 	}
892
 	else{
893
 		// 取り出し可能なデータがない
894
-		if(pdwSize)*pdwSize = 0UL;
895
-		if(pdwRemain)*pdwRemain = 0UL;
896
+        *pdwSize = 0;
897
+        *pdwRemain = 0;
898
 
899
 		return TRUE;
900
 	}
901
@@ -602,15 +702,16 @@
902
 LPCTSTR CBonTuner::GetTunerName(void)
903
 {
904
 	// チューナ名を返す
905
-	return TEXT("Bulldog");
906
+	return m_szTunerName ;
907
 }
908
 
909
 //*****	Is Tuner Opening	*****
910
 
911
 const BOOL CBonTuner::IsTunerOpening(void)
912
 {
913
+#if 1
914
 	// チューナの使用中の有無を返す(全プロセスを通して)
915
-	HANDLE hMutex = ::OpenMutex(MUTEX_ALL_ACCESS, FALSE, MUTEX_NAME);
916
+	HANDLE hMutex = ::OpenMutex(MUTEX_ALL_ACCESS, FALSE, m_szTunerName);
917
 	
918
 	if(hMutex)
919
 	{
920
@@ -622,95 +723,72 @@
921
 		// チューナは開かれていない
922
 		return FALSE;
923
 	}
924
+#else
925
+    return fOpened ? TRUE : FALSE ;
926
+#endif
927
 }
928
 
929
 //*****	Enum Tuning Space	*****
930
 
931
 LPCTSTR CBonTuner::EnumTuningSpace(const DWORD dwSpace)
932
 {
933
-	// 使用可能なチューニング空間を返す
934
-	switch(dwSpace)
935
-	{
936
-		case 0UL :	return TEXT("VHF");
937
-		case 1UL :	return TEXT("UHF");
938
-		case 2UL :	return TEXT("CATV");
939
-		case 3UL :	return TEXT("BS");
940
-		case 4UL :	return TEXT("CS110");
941
-		default  :	return NULL;		
942
+    // 0は最初の空間を返す
943
+    if ( dwSpace == 0 ) return m_Channels[0].Space.c_str() ;
944
+    // 次の空間名を探す
945
+    DWORD dwSpcIdx = 0 ;
946
+    int nIdx0 = 0 ;
947
+    for ( CHANNELS::size_type nIdx = 0 ; nIdx < m_Channels.size() ; nIdx++ ) {
948
+        if ( m_Channels[nIdx0].Space == m_Channels[nIdx].Space ) continue ;
949
+        nIdx0 = nIdx ;
950
+        dwSpcIdx++ ;
951
+        if ( dwSpace == dwSpcIdx ) return m_Channels[nIdx].Space.c_str() ;
952
 	}
953
+    return NULL ;
954
 }
955
 
956
 //*****	Enum Channel Name	*****
957
 
958
 LPCTSTR CBonTuner::EnumChannelName(const DWORD dwSpace, const DWORD dwChannel)
959
 {
960
-	// 使用可能なチャンネルを返す
961
-	switch(dwSpace)
962
-	{
963
-		case 0UL :								//VHF
964
-			if (dwChannel>=VHFNumChannel)
965
-				return(NULL);
966
-			return((LPCTSTR)VHFChInfo[dwChannel].Name);
967
-		case 1UL :								//UHF
968
-			if (dwChannel>=UHFNumChannel)
969
-				return(NULL);
970
-			return((LPCTSTR)UHFChInfo[dwChannel].Name);
971
-		case 2UL :								//CATV
972
-			if (dwChannel>=CATVNumChannel)
973
-				return(NULL);
974
-			return((LPCTSTR)CATVChInfo[dwChannel].Name);
975
-		case 3UL :								//BS
976
-			if (dwChannel>=BSNumChannel)
977
-				return(NULL);
978
-			return((LPCTSTR)BSChInfo[dwChannel].Name);
979
-		case 4UL :								//CS110
980
-			if (dwChannel>=CSNumChannel)
981
-				return(NULL);
982
-			return((LPCTSTR)CSChInfo[dwChannel].Name);
983
-		default  :
984
-			// 非対応のチューニング空間
985
-			return NULL;
986
+    // 空間名を取得する
987
+    LPCTSTR pszSpace = EnumTuningSpace( dwSpace ) ;
988
+    if ( !pszSpace ) return NULL ;
989
+    wstring space = wstring(pszSpace) ;
990
+    // 空間名の一致するチャンネルを探す
991
+    DWORD dwChIdx = 0 ;
992
+    for ( CHANNELS::size_type nIdx = 0 ; nIdx < m_Channels.size() ; nIdx++ ) {
993
+        if ( space != m_Channels[nIdx].Space ) continue ;
994
+        if ( dwChIdx == dwChannel ) return m_Channels[nIdx].Name.c_str() ;
995
+        dwChIdx++ ;
996
 	}
997
+    return NULL ;
998
 }
999
 
1000
 //*****	Set Channel	*****
1001
 
1002
 const BOOL CBonTuner::SetChannel(const DWORD dwSpace, const DWORD dwChannel)
1003
 {
1004
-	switch(dwSpace)
1005
-	{
1006
-	case 0:											//VHF
1007
-		if (dwChannel>=VHFNumChannel)
1008
-			return(FALSE);
1009
-		SetISDBTChannel(VHFChInfo[dwChannel].Channel);
1010
-		break;
1011
-	case 1:											//UHF
1012
-		if (dwChannel>=UHFNumChannel)
1013
-			return(FALSE);
1014
-		SetISDBTChannel(UHFChInfo[dwChannel].Channel);
1015
-		break;
1016
-	case 2:											//CATV
1017
-		if (dwChannel>=CATVNumChannel)
1018
-			return(FALSE);
1019
-		SetISDBTChannel(CATVChInfo[dwChannel].Channel);
1020
-		break;
1021
-	case 3:											//BS
1022
-		if (dwChannel>=CATVNumChannel)
1023
-			return(FALSE);
1024
-		SetISDBSChannel(BSChInfo[dwChannel].Channel,BSChInfo[dwChannel].TSID);
1025
-		break;
1026
-	case 4:											//CS
1027
-		if (dwChannel>=CATVNumChannel)
1028
-			return(FALSE);
1029
-		SetISDBSChannel(CSChInfo[dwChannel].Channel,CSChInfo[dwChannel].TSID);
1030
-		break;
1031
-	default:
1032
-		return(FALSE);
1033
-	}
1034
+    // 空間名を取得する
1035
+    LPCTSTR pszSpace = EnumTuningSpace( dwSpace ) ;
1036
+    if ( !pszSpace ) return FALSE ;
1037
+    wstring space = wstring(pszSpace) ;
1038
+    // 空間名の一致するチャンネルを探す
1039
+    DWORD dwChIdx = 0 ;
1040
+    for ( CHANNELS::size_type nIdx = 0 ; nIdx < m_Channels.size() ; nIdx++ ) {
1041
+        if ( space != m_Channels[nIdx].Space ) continue ;
1042
+        if ( dwChIdx == dwChannel ) {
1043
+            // チャンネルを設定する
1044
+            if( SetChannelSub(nIdx) ){
1045
 	m_dwCurSpace = dwSpace;
1046
 	m_dwCurChannel = dwChannel;
1047
-
1048
 	return TRUE;
1049
+            }else{
1050
+                return FALSE;
1051
+            }
1052
+        }
1053
+        dwChIdx++ ;
1054
+    }
1055
+    return FALSE ;
1056
 }
1057
 
1058
 //*****	Get Current Space	*****
1059
@@ -729,6 +807,26 @@
1060
 	return m_dwCurChannel;
1061
 }
1062
 
1063
+//*****	Get Cur Serial Channel	*****
1064
+
1065
+DWORD CBonTuner::GetCurSerialChannel()
1066
+{
1067
+  wstring wsSpace ;
1068
+  DWORD dwSpace,dwChannel ;
1069
+  for(DWORD ch=0;ch<m_Channels.size();ch++) {
1070
+    if(!ch) {
1071
+      wsSpace = m_Channels[ch].Space ;
1072
+      dwSpace = dwChannel = 0 ;
1073
+    }else if(wsSpace!=m_Channels[ch].Space) {
1074-
+      dwSpace++; dwChannel=0;
1074+
+      dwSpace++; dwChannel=0; wsSpace=m_Channels[ch].Space
1075
+    }else
1076
+      dwChannel++;
1077
+    if(dwSpace==m_dwCurSpace&&dwChannel==m_dwCurChannel)
1078
+      return ch ;
1079
+  }
1080
+  return 0 ;
1081
+}
1082
+
1083
 //*****	Release	*****
1084
 
1085
 void CBonTuner::Release()
1086
@@ -741,13 +839,16 @@
1087
 
1088
 const bool CBonTuner::OnRecvFifoData(const DWORD dwThreadIndex, const BYTE *pData, const DWORD dwLen, CUsbFx2Driver *pDriver)
1089
 {
1090
+    if (dwThreadIndex == m_dwFifoThreadIndex) {
1091
 	CBlockLock Lock(&m_CriticalLock);
1092
-
1093
+        //有効なチャンネルが選択されている時に限って
1094
+        if(is_channel_valid){
1095
 	// FIFOバッファにプッシュ
1096
 	PushFifoBuff(pData,dwLen);
1097
-	
1098
+        }
1099
 	// イベントセット
1100
 	::SetEvent(m_hOnStreamEvent);
1101
+    }
1102
 
1103
 	return(true);
1104
 }
1105
@@ -760,9 +861,9 @@
1106
 	PurgeTsStream();
1107
 
1108
 	// バッファプールを確保する
1109
-	m_BufferPool.resize(ASYNCBUFFSIZE);
1110
+    m_BufferPool.resize(ASYNCTSQUEUENUM);
1111
 
1112
-	for(DWORD dwPos = 0UL ; dwPos < ASYNCBUFFSIZE ; dwPos++){
1113
+    for(DWORD dwPos = 0UL ; dwPos < ASYNCTSQUEUENUM ; dwPos++){
1114
 		m_BufferPool[dwPos].resize(TSDATASIZE);
1115
 		}
1116
 		
1117
@@ -782,170 +883,175 @@
1118
 
1119
 //*****	Push Fifo Buffer	*****
1120
 
1121
-void CBonTuner::PushFifoBuff(const BYTE *pData,DWORD len)
1122
+void CBonTuner::PushFifoBuff(const BYTE *pData,DWORD dwLen)
1123
 {
1124
 	// バッファプールの最大数を超える場合は最後尾を切り捨てる
1125
-	while(m_FifoBuffer.size() >= ASYNCBUFFSIZE)
1126
-	{
1127
+    while(m_FifoBuffer.size() >= ASYNCTSQUEUENUM){
1128
 		m_FifoBuffer.pop();
1129
 	}
1130
 
1131
 	// バッファプールにデータコピー
1132
-	BYTE *pWritePointer = &m_BufferPool[m_dwEmptyFifoPos][0];
1133
-	::CopyMemory(pWritePointer, pData, len/*TSDATASIZE*/);
1134
+    m_BufferPool[m_dwEmptyFifoPos].resize(dwLen) ;
1135
+    BYTE *pWritePointer = static_cast<BYTE*>(m_BufferPool[m_dwEmptyFifoPos].top()) ;
1136
+    CopyMemory(pWritePointer, pData, dwLen );
1137
 
1138
 	// FIFOバッファにプッシュ
1139
-	m_FifoBuffer.push(pWritePointer);
1140
+    m_FifoBuffer.push(make_pair(pWritePointer,dwLen));
1141
 
1142
 	// バッファプール位置更新
1143
-	if(++m_dwEmptyFifoPos >= ASYNCBUFFSIZE)m_dwEmptyFifoPos = 0UL;
1144
+    if(++m_dwEmptyFifoPos >= ASYNCTSQUEUENUM)m_dwEmptyFifoPos = 0UL;
1145
 }
1146
 
1147
-//*****	Load Ini File	*****
1148
 
1149
-void	CBonTuner::LoadIni(void)
1150
+//***** Init Tuner Property *****
1151
+
1152
+void CBonTuner::InitTunerProperty()
1153
 {
1154
-	_TCHAR	IniName[256];
1155
-	_TCHAR	bf[256];
1156
-	_TCHAR	key[32];
1157
-	_TCHAR	*p;
1158
-	int		i;
1159
+    //自分の名前を取得
1160
+    char szMyPath[_MAX_PATH] ;
1161
+    GetModuleFileNameA( m_hModule, szMyPath, _MAX_PATH ) ;
1162
+    char szMyDrive[_MAX_FNAME] ;
1163
+    char szMyDir[_MAX_FNAME] ;
1164
+    char szMyName[_MAX_FNAME] ;
1165
+    _splitpath_s( szMyPath, szMyDrive, _MAX_FNAME,szMyDir, _MAX_FNAME, szMyName, _MAX_FNAME, NULL, 0 ) ;
1166
+    _strupr_s( szMyName, sizeof(szMyName) ) ;
1167
 
1168
-	memset(VHFChInfo,0x00,sizeof(TChannelInfo)*VHFMAXCHANNELS);
1169
-	memset(UHFChInfo,0x00,sizeof(TChannelInfo)*UHFMAXCHANNELS);
1170
-	memset(CATVChInfo,0x00,sizeof(TChannelInfo)*CATVMAXCHANNELS);
1171
-	memset(BSChInfo,0x00,sizeof(TChannelInfo)*BSMAXCHANNELS);
1172
-	memset(CSChInfo,0x00,sizeof(TChannelInfo)*CSMAXCHANNELS);
1173
-	VHFNumChannel=0;
1174
-	UHFNumChannel=0;
1175
-	CATVNumChannel=0;
1176
-	BSNumChannel=0;
1177
-	CSNumChannel=0;
1178
-
1179
-	GetModuleFileName(NULL, IniName, MAX_PATH);
1180
-	p=_tcsrchr(IniName, _T('\\'));
1181
-	if (p)
1182
-		*p=0;
1183
-	_tcscat(IniName,_T("\\BonDriver_Bulldog.ini"));
1184
+    // Fx2 の ID を決定
1185
+    int nFx2Id=0 ;
1186
+    sscanf_s( szMyName, "BONDRIVER_BULLDOG_%1d", &nFx2Id ) ;
1187
+    m_yFx2Id = BYTE(nFx2Id) ;
1188
 
1189
-	if (GetFileAttributes(IniName)==-1)
1190
-	{
1191
-		for(i=1;	i<=12;	i++)
1192
-		{
1193
-			_stprintf(bf,_T("0,%d,0x0000,%d"),i,i);
1194
-			GetChannelInfo(bf,&VHFChInfo[i-1]);
1195
-		}
1196
-		VHFNumChannel=i-1;
1197
-		for(i=13;	i<=62;	i++)
1198
-		{
1199
-			_stprintf(bf,_T("0,%d,0x0000,%d"),i,i);
1200
-			GetChannelInfo(bf,&UHFChInfo[i-13]);
1201
-		}
1202
-		UHFNumChannel=i-13;
1203
-		for(i=13;	i<=63;	i++)
1204
-		{
1205
-			_stprintf(bf,_T("0,%d,0x0000,C%d"),i+100,i);
1206
-			GetChannelInfo(bf,&CATVChInfo[i-13]);
1207
-		}
1208
-		CATVNumChannel=i-13;
1209
-		for(i=0;	DefBSChInfo[i] != NULL;	i++)
1210
-		{
1211
-			GetChannelInfo(DefBSChInfo[i],&BSChInfo[i]);
1212
-		}
1213
-		BSNumChannel=i;
1214
-		for(i=0;	DefCSChInfo[i] != NULL;	i++)
1215
-		{
1216
-			GetChannelInfo(DefCSChInfo[i],&CSChInfo[i]);
1217
-		}
1218
-		CSNumChannel=i;
1219
+    //チューナー名を決定
1220
+    _stprintf_s( m_szTunerName, 100, TEXT("%s(ID=%d)"), TEXT("ブルドッグ"), nFx2Id ) ;
1221
+
1222
+    // Ini ファイルをロード
1223
+    LoadIniFile(string(szMyDrive)+string(szMyDir)+"BonDriver_Bulldog.ini") ;
1224
+    LoadIniFile(string(szMyDrive)+string(szMyDir)+string(szMyName)+".ini") ;
1225
 
1226
-		return;
1227
+    // Channel ファイルをロード
1228
+    if(!LoadChannelFile(string(szMyDrive)+string(szMyDir)+string(szMyName)+".ch.txt")) {
1229
+       if(!LoadChannelFile(string(szMyDrive)+string(szMyDir)+"BonDriver_Bulldog.ch.txt"))
1230
+         InitChannelToDefault() ;
1231
 	}
1232
+}
1233
 
1234
-//Channel=ServiceID,PhysicalChannel,TSID,Name
1235
+//*****	Laod Ini File *****
1236
 
1237
-	for(i=0;	i<VHFMAXCHANNELS;	i++)
1238
-	{
1239
-		_stprintf(key,_T("%d"),i);
1240
-		GetPrivateProfileString(_T("VHF"),key,_T(""),bf,256,IniName);
1241
-		if (bf[0]==0)
1242
-			break;
1243
+bool    CBonTuner::LoadIniFile(std::string strIniFileName)
1244
+{
1245
+  if(GetFileAttributesA(strIniFileName.c_str())==-1) return false ;
1246
+  #define LOADINT(key) do { \
1247
+      key = GetPrivateProfileIntA("BonTuner",#key, \
1248
+        key,strIniFileName.c_str()) ; \
1249
+    }while(0)
1250
+  LOADINT(TSDATASIZE) ;
1251
+  LOADINT(TSQUEUENUM) ;
1252
+  LOADINT(ASYNCTSQUEUENUM) ;
1253
+  LOADINT(ISDBTCOMMANDSENDTIMES) ;
1254
+  LOADINT(ISDBTCOMMANDSENDWAIT) ;
1255
+  LOADINT(ISDBSCOMMANDSENDTIMES) ;
1256
+  LOADINT(ISDBSCOMMANDSENDWAIT) ;
1257
+  #undef LOADINT
1258
+  return true ;
1259
+}
1260
 
1261
-		GetChannelInfo(bf,&VHFChInfo[i]);
1262
-	}
1263
-	VHFNumChannel=i;
1264
+//*****	Load Channel File *****
1265
 
1266
-	for(i=0;	i<UHFMAXCHANNELS;	i++)
1267
-	{
1268
-		_stprintf(key,_T("%d"),i);
1269
-		GetPrivateProfileString(_T("UHF"),key,_T(""),bf,256,IniName);
1270
-		if (bf[0]==0)
1271
-			break;
1272
+bool	CBonTuner::LoadChannelFile(std::string strChannelFileName)
1273
+{
1274
+    FILE *st=NULL ;
1275
+    fopen_s(&st,strChannelFileName.c_str(),"rt") ;
1276
+    if(!st) return false;
1277
+    char s[512] ;
1278
 
1279
-		GetChannelInfo(bf,&UHFChInfo[i]);
1280
+    m_Channels.clear() ;
1281
+    while(!feof(st)) {
1282
+      s[0]='\0' ;
1283
+      fgets(s,512,st) ;
1284
+      string strLine = trim(string(s)) ;
1285
+      wstring wstrLine = mbcs2wcs(strLine) ;
1286
+      AddChannel(wstrLine) ;
1287
+      //DBGOUT("%s",s) ;
1288
 	}
1289
-	UHFNumChannel=i;
1290
 
1291
-	for(i=0;	i<CATVMAXCHANNELS;	i++)
1292
-	{
1293
-		_stprintf(key,_T("%d"),i);
1294
-		GetPrivateProfileString(_T("CATV"),key,_T(""),bf,256,IniName);
1295
-		if (bf[0]==0)
1296
-			break;
1297
+    fclose(st) ;
1298
+
1299
+    return true ;
1300
+
1301
+}
1302
+
1303
+//*****	Init Channel To Default	*****
1304
+
1305
+void    CBonTuner::InitChannelToDefault()
1306
+{
1307
+    _TCHAR	bf[256];
1308
+
1309
+    m_Channels.clear() ;
1310
 
1311
-		GetChannelInfo(bf,&CATVChInfo[i]);
1312
+    for(int i=1;	i<=12;	i++)
1313
+    {
1314
+        _stprintf(bf,_T("VHF,0,%d,0x0000,%d"),i,i);
1315
+        AddChannel(bf);
1316
 	}
1317
-	CATVNumChannel=i;
1318
 
1319
-	for(i=0;	i<BSMAXCHANNELS;	i++)
1320
+    for(int i=13;	i<=62;	i++)
1321
 	{
1322
-		_stprintf(key,_T("%d"),i);
1323
-		GetPrivateProfileString(_T("BS"),key,_T(""),bf,256,IniName);
1324
-		if (bf[0]==0)
1325
-			break;
1326
+        _stprintf(bf,_T("UHF,0,%d,0x0000,%d"),i,i);
1327
+        AddChannel(bf);
1328
+    }
1329
 
1330
-		GetChannelInfo(bf,&BSChInfo[i]);
1331
+    for(int i=13;	i<=63;	i++)
1332
+    {
1333
+        _stprintf(bf,_T("CATV,0,%d,0x0000,C%d"),i+100,i);
1334
+        AddChannel(bf);
1335
 	}
1336
-	BSNumChannel=i;
1337
 
1338
-	for(i=0;	i<CSMAXCHANNELS;	i++)
1339
+    for(int i=0;	DefBSChInfo[i] != NULL;	i++)
1340
 	{
1341
-		_stprintf(key,_T("%d"),i);
1342
-		GetPrivateProfileString(_T("CS110"),key,_T(""),bf,256,IniName);
1343
-		if (bf[0]==0)
1344
-			break;
1345
+        _stprintf(bf,_T("BS,%s"),DefBSChInfo[i]);
1346
+        AddChannel(bf);
1347
+    }
1348
 
1349
-		GetChannelInfo(bf,&CSChInfo[i]);
1350
+    for(int i=0;	DefCSChInfo[i] != NULL;	i++)
1351
+    {
1352
+        _stprintf(bf,_T("CS110,%s"),DefCSChInfo[i]);
1353
+        AddChannel(bf);
1354
 	}
1355
-	CSNumChannel=i;
1356
-}
1357
 
1358
-//*****	Get Channel Info	*****
1359
+}
1360
 
1361
-//Channel=ServiceID,PhysicalChannel,TSID,Name
1362
+//*****	Add Channel	*****
1363
 
1364
-void	CBonTuner::GetChannelInfo(_TCHAR *bf,TChannelInfo *ChInfo)
1365
+bool CBonTuner::AddChannel(std::wstring wstrLine)
1366
 {
1367
-	_TCHAR	*p,*q;
1368
-
1369
-	memset(ChInfo,0x00,sizeof(TChannelInfo));
1370
-
1371
-	ChInfo->ServiceID=_tcstol(bf,&q,10);
1372
-	if ((q) && (*q==_T(',')))
1373
-	{
1374
-		p=q+1;
1375
-		ChInfo->Channel=_tcstol(p,&q,10);
1376
-		if ((q) && (*q==_T(',')))
1377
-		{
1378
-			p=q+1;
1379
-			ChInfo->TSID=_tcstol(p,&q,16);
1380
-			if ((q) && (*q==_T(',')))
1381
-			{
1382
-				p=q+1;
1383
-				_tcsncpy(ChInfo->Name,p,256);
1384
+    int t=0 ;
1385
+    wstring params[5] ;
1386
+    params[0] = params[1] = params[2] = params[3] = params[4] = L"" ;
1387
+    for(int i=0;i<wstrLine.length();i++) {
1388
+      if(wstrLine[i]==L';') break ;
1389
+      else if(wstrLine[i]==L',') {
1390
+        t++ ; if(t==5) break ;
1391
+      }else params[t] += wstrLine[i] ;
1392
 			}
1393
+    if(t>=4) {
1394
+      for(int i=0;i<5;i++) params[i] = trim(params[i]) ;
1395
+      int ServiceID = 0 ;
1396
+      int Channel = 0 ;
1397
+      float MegaHz = 0.f ;
1398
+      int TSID = 0 ;
1399
+      swscanf(params[1].c_str(),L"%i",&ServiceID) ;
1400
+      if( params[2].length()>3&&
1401
+          params[2].substr(params[2].length()-3)==L"MHz" ) {
1402
+        swscanf(params[2].c_str(),L"%fMHz",&MegaHz) ;
1403
+      }else {
1404
+        swscanf(params[2].c_str(),L"%i",&Channel) ;
1405
 		}
1406
+      swscanf(params[3].c_str(),L"%i",&TSID) ;
1407
+      m_Channels.push_back(
1408
+        CHANNEL(params[0],ServiceID,Channel,TSID,params[4],MegaHz)) ;
1409
+      return true ;
1410
 	}
1411
+    return false ;
1412
 }
1413
 
1414
 //*****	I2C Write	*****
1415
@@ -981,7 +1087,7 @@
1416
 {
1417
 	BYTE	cmd[64];
1418
 	DWORD	cmd_len=0;
1419
-	int		i;
1420
+	//int		i;
1421
 
1422
 	cmd[cmd_len++]=CMD_I2C_READ;
1423
 	cmd[cmd_len++]=adrs;
1424
@@ -1004,7 +1110,7 @@
1425
 {
1426
 	BYTE	cmd[64];
1427
 	DWORD	cmd_len=0;
1428
-	int		i;
1429
+	//int		i;
1430
 
1431
 	cmd[cmd_len++]=CMD_I2C_WRITE;
1432
 	cmd[cmd_len++]=adrs;
1433
@@ -1032,7 +1138,7 @@
1434
 {
1435
 	BYTE	cmd[64];
1436
 	DWORD	cmd_len=0;
1437
-	int		i;
1438
+	//int		i;
1439
 
1440
 	cmd[cmd_len++]=CMD_I2C_WRITE;
1441
 	cmd[cmd_len++]=adrs;
1442
diff -uPrb Org/BonTuner.h Mod/BonTuner.h
1443
--- Org/BonTuner.h	2012-02-22 16:36:04.000000000 +0900
1444
+++ Mod/BonTuner.h	2014-01-26 07:44:09.000000000 +0900
1445
@@ -10,29 +10,92 @@
1446
 #include "UsbFx2Driver.h"
1447
 #include <vector>
1448
 #include <queue>
1449
-
1450
-using std::vector;
1451
-using std::queue;
1452
-
1453
-#define	VHFMAXCHANNELS	12
1454
-#define	UHFMAXCHANNELS	50
1455
-#define	CATVMAXCHANNELS	51
1456
-#define	BSMAXCHANNELS	64
1457
-#define	CSMAXCHANNELS	256
1458
-
1459
-
1460
-typedef	struct {
1461
-	WORD	ServiceID;
1462
-	int		Channel;
1463
-	WORD	TSID;
1464
-	_TCHAR	Name[256];
1465
-}	TChannelInfo;
1466
+#include <string>
1467
 
1468
 typedef enum	CLockStatus	{stLock, stLostLock, stNoSignal, stUnknown };
1469
 
1470
 class CBonTuner :	public IBonDriver2,
1471
 			protected IUsbFx2DriverHost
1472
 {
1473
+private:
1474
+    // CHANNEL/CHANNELS
1475
+    struct CHANNEL {
1476
+        std::wstring Space ;
1477
+        WORD	    ServiceID;
1478
+        int		    Channel;
1479
+        float       MegaHz ;
1480
+        WORD	    TSID;
1481
+        std::wstring	Name ;
1482
+        bool isISDBT() { return TSID==0 ; }
1483
+        bool isISDBS() { return !isISDBT() ; }
1484
+        bool isChannelTuning() { return Channel!=0 ; }
1485
+        bool isMegaHzTuning() { return !isChannelTuning() ; }
1486
+        CHANNEL(std::wstring _Space, WORD _ServiceID,int _Channel,WORD _TSID,
1487
+          std::wstring _Name, float _MegaHz=0.f) {
1488
+            Space = _Space ;
1489
+            ServiceID = _ServiceID ;
1490
+            Channel = _Channel ;
1491
+            TSID = _TSID ;
1492
+            Name = _Name ;
1493
+            MegaHz = _MegaHz ;
1494
+        }
1495
+        CHANNEL(const CHANNEL &_Src) {
1496
+            Space = _Src.Space ;
1497
+            ServiceID = _Src.ServiceID ;
1498
+            Channel = _Src.Channel ;
1499
+            TSID = _Src.TSID ;
1500
+            Name = _Src.Name ;
1501
+            MegaHz = _Src.MegaHz ;
1502
+        }
1503
+    } ;
1504
+    typedef std::vector<CHANNEL> CHANNELS ;
1505
+    // BUFFER/BUFFERPOOL
1506
+    struct BUFFER {
1507
+        BUFFER() : _buffer(NULL), _size(0UL) {}
1508
+        BUFFER(const BUFFER &src )
1509
+         : _buffer(NULL), _size(0UL) {
1510
+          *this = src ;
1511
+        }
1512
+        BUFFER(const void *buffer, size_t size)
1513
+         : _buffer(NULL), _size(0UL) {
1514
+          resize(size) ;
1515
+          if(_buffer&&_size==size)
1516
+            CopyMemory(_buffer,buffer,size) ;
1517
+        }
1518
+        ~BUFFER() {
1519
+          if(_buffer) std::free(_buffer) ;
1520
+        }
1521
+        BUFFER &operator =(const BUFFER &src) {
1522
+          resize(src._size) ;
1523
+          if(_buffer&&_size==src._size)
1524
+            CopyMemory(_buffer,src._buffer,src._size) ;
1525
+          return *this ;
1526
+        }
1527
+        void resize(size_t size) {
1528
+          if(_size!=size) {
1529
+            if(!size) {
1530
+              if(_buffer) {
1531
+                free(_buffer) ;
1532
+                _buffer=NULL ;
1533
+              }
1534
+            }else {
1535
+              if(_buffer) {
1536
+                _buffer = std::realloc(_buffer,size) ;
1537
+              }else {
1538
+                _buffer = std::malloc(size) ;
1539
+              }
1540
+            }
1541
+            if(_buffer) _size = size ;
1542
+            else _size = 0UL ;
1543
+          }
1544
+        }
1545
+        void *top() const { return _buffer ; }
1546
+        size_t size() const { return _size ; }
1547
+    private:
1548
+        void *_buffer ;
1549
+        size_t _size ;
1550
+    };
1551
+    typedef std::vector<BUFFER> BUFFERPOOL ;
1552
 public:
1553
 	CBonTuner();
1554
 	virtual ~CBonTuner();
1555
@@ -42,8 +105,8 @@
1556
 	int I2CRead(unsigned char adrs,unsigned char reg,int len,unsigned char *data);
1557
 	int I2CRead(unsigned char adrs,unsigned tadrs,unsigned char reg,int len,unsigned char *data);
1558
 	void	SetTSID(int tsid);
1559
-	void	SetISDBTChannel(int ch);
1560
-	void	SetISDBSChannel(int ch,int tsid);
1561
+	void	SetISDBTChannel(int ch,float MegaHz=0.f);
1562
+	void	SetISDBSChannel(int ch,int tsid,float MegaHz=0.f);
1563
 	CLockStatus	IsLockISDBT(void);
1564
 	CLockStatus	IsLockISDBS(void);
1565
 	CLockStatus	IsLock(void);
1566
@@ -88,34 +151,36 @@
1567
 	void AllocFifoBuff(void);
1568
 	void FreeFifoBuff(void);
1569
 
1570
-	inline void PushFifoBuff(const BYTE *pData,DWORD len);
1571
+	inline void PushFifoBuff(const BYTE *pData,DWORD dwLen);
1572
 
1573
-	void	LoadIni(void);
1574
-	void	GetChannelInfo(_TCHAR *bf,TChannelInfo *ChInfo);
1575
+    void	InitTunerProperty() ;
1576
+	bool	LoadIniFile(std::string strIniFileName);
1577
+	bool    LoadChannelFile(std::string strChannelFileName);
1578
+	void    InitChannelToDefault() ;
1579
+	bool    AddChannel(std::wstring wstrLine) ;
1580
+    const BOOL SetChannelSub(const DWORD dwCh) ;
1581
 
1582
 	CUsbFx2Driver	*m_pUsbFx2Driver;
1583
 	CCriticalLock	m_CriticalLock;
1584
 	HANDLE			m_hOnStreamEvent;
1585
 
1586
-	queue<BYTE *>	m_FifoBuffer;
1587
-	vector<vector<BYTE>>	m_BufferPool;
1588
+    std::queue< std::pair<BYTE *,size_t> > m_FifoBuffer;
1589
+    BUFFERPOOL m_BufferPool ;
1590
 	DWORD			m_dwEmptyFifoPos;
1591
+	DWORD			m_dwFifoThreadIndex;
1592
 	
1593
 	bool			fOpened;
1594
 	HANDLE			m_hMutex;
1595
 
1596
 	DWORD			m_dwCurSpace;
1597
 	DWORD			m_dwCurChannel;
1598
+	DWORD			GetCurSerialChannel() ;
1599
+
1600
+    // チューナーのプロパティ
1601
+    BYTE m_yFx2Id ;
1602
+    TCHAR m_szTunerName[100] ;
1603
+    CHANNELS m_Channels ;
1604
+
1605
+    BOOL is_channel_valid ;
1606
 
1607
-	TChannelInfo	VHFChInfo[VHFMAXCHANNELS];
1608
-	TChannelInfo	UHFChInfo[UHFMAXCHANNELS];
1609
-	TChannelInfo	CATVChInfo[CATVMAXCHANNELS];
1610
-	TChannelInfo	BSChInfo[BSMAXCHANNELS];
1611
-	TChannelInfo	CSChInfo[CSMAXCHANNELS];
1612
-
1613
-	int				VHFNumChannel;
1614
-	int				UHFNumChannel;
1615
-	int				CATVNumChannel;
1616
-	int				BSNumChannel;
1617
-	int				CSNumChannel;
1618
 };
1619
diff -uPrb Org/Cusb2/cusb2.cpp Mod/Cusb2/cusb2.cpp
1620
--- Org/Cusb2/cusb2.cpp	2012-02-22 15:36:26.000000000 +0900
1621
+++ Mod/Cusb2/cusb2.cpp	2014-01-26 07:43:49.000000000 +0900
1622
@@ -65,6 +65,8 @@
1623
 			wchar_t wcs[64];
1624
 			size_t n;
1625
 			mbstowcs_s(&n, wcs, 64, (char *)string1, 64);
1626
+			TRACE(L"fwload: Manufacturer=\"%s\", Compare=\"%s\"\r\n"
1627
+			  ,USBDevice->Manufacturer,wcs) ;
1628
 			if(wcscmp(USBDevice->Manufacturer, wcs) == 0)
1629
 				return true;
1630
 		}
1631
diff -uPrb Org/Cusb2/UsbFx2Dirver.cpp Mod/Cusb2/UsbFx2Dirver.cpp
1632
--- Org/Cusb2/UsbFx2Dirver.cpp	2012-02-22 15:50:18.000000000 +0900
1633
+++ Mod/Cusb2/UsbFx2Dirver.cpp	2013-12-24 18:00:05.000000000 +0900
1634
@@ -43,7 +43,11 @@
1635
 	::CopyMemory(abyFirmBuffer, pFirmWare, size);
1636
 	
1637
 	// ファームウェアのダウンロードを行う
1638
-	return fwload(byDeviceID, abyFirmBuffer, (BYTE *)lpszFirmName);
1639
+	bool result = fwload(byDeviceID, abyFirmBuffer, (BYTE *)lpszFirmName);
1640
+
1641
+	delete [] abyFirmBuffer ;
1642
+
1643
+	return result ;
1644
 }
1645
 
1646
 void CUsbFx2Driver::CloseDriver(void)
1647
diff -uPrb Org/stdafx.cpp Mod/stdafx.cpp
1648
--- Org/stdafx.cpp	2008-02-12 01:10:02.000000000 +0900
1649
+++ Mod/stdafx.cpp	2014-01-26 13:55:10.000000000 +0900
1650
@@ -3,7 +3,11 @@
1651
 // stdafx.obj にはプリコンパイル済み型情報が含まれます。
1652
 
1653
 #include "stdafx.h"
1654
-#include <Stdio.h>
1655
+#include <cstring>
1656
+#include <cstdio>
1657
+#include <cstdlib>
1658
+#include <cstdarg>
1659
+#include <clocale>
1660
 
1661
 // TODO: このファイルではなく、STDAFX.H で必要な
1662
 // 追加ヘッダーを参照してください。
1663
@@ -18,6 +22,44 @@
1664
 		::wvsprintf(szTempStr, szFormat, Args);
1665
 		va_end(Args);
1666
 
1667
-		::OutputDebugString(szTempStr);
1668
+        #ifndef DEBUG_TO_X_DRIVE
1669
+        ::OutputDebugString(szTempStr) ;
1670
+        #else
1671
+        FILE *fp = NULL ;
1672
+        fopen_s(&fp,"X:\\Debug.txt","a+t") ;
1673
+        if(fp) {
1674
+          size_t ln = wcslen(szTempStr) ;
1675
+          if(ln) {
1676
+            char *mbcs = new char[ln*2 + 2] ;
1677
+            size_t mbLen = 0 ;
1678
+            setlocale(LC_ALL,"japanese");
1679
+            wcstombs_s(&mbLen, mbcs, ln*2+1, szTempStr, _TRUNCATE);
1680
+            std::fputs(mbcs,fp) ;
1681
+            delete [] mbcs; 
1682
+          }
1683
+          std::fclose(fp) ;
1684
+        }
1685
+        #endif
1686
+	}
1687
+#endif
1688
+
1689
+#ifdef _DEBUG
1690
+    void DBGOUT( const char* pszFormat,... )
1691
+    {
1692
+        std::va_list marker ;
1693
+        char edit_str[1024] ;
1694
+        va_start( marker, pszFormat ) ;
1695
+        vsprintf_s( edit_str, sizeof(edit_str), pszFormat, marker ) ;
1696
+        va_end( marker ) ;
1697
+        #ifndef DEBUG_TO_X_DRIVE
1698
+        OutputDebugStringA(edit_str) ;
1699
+        #else
1700
+        FILE *fp = NULL ;
1701
+        fopen_s(&fp,"X:\\Debug.txt","a+t") ;
1702
+        if(fp) {
1703
+          std::fputs(edit_str,fp) ;
1704
+          std::fclose(fp) ;
1705
+        }
1706
+        #endif
1707
 	}
1708
 #endif
1709
diff -uPrb Org/stdafx.h Mod/stdafx.h
1710
--- Org/stdafx.h	2008-02-12 01:09:46.000000000 +0900
1711
+++ Mod/stdafx.h	2014-01-26 13:30:32.000000000 +0900
1712
@@ -20,6 +20,21 @@
1713
 #define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
1714
 #endif
1715
 
1716
+#ifndef __BORLANDC__
1717
+  #ifdef _MSC_VER
1718
+    #if _MSC_VER <= 1200 // VC++ 6.0 以下
1719
+      //色々と問題が多いコンパイラなので、場合分け用のフラグを設定しておく
1720
+      #define __MSVC_1200__
1721
+      //VC++ for構文のインライン変数除去マクロ
1722
+      #define for if(0) ; else for
1723
+    #endif
1724
+    // C4786 警告を除去
1725
+    #pragma warning (disable : 4786)
1726
+  #endif
1727
+#endif
1728
+
1729
+#define DEBUG_TO_X_DRIVE
1730
+
1731
 // トレース出力
1732
 #ifdef _DEBUG
1733
 	#define TRACE MYTARACEFUNC
1734
@@ -27,3 +42,11 @@
1735
 #else
1736
 	#define TRACE __noop
1737
 #endif
1738
+
1739
+// DBGOUT
1740
+#ifdef _DEBUG
1741
+    void DBGOUT( const char* pszFormat,... ) ;
1742
+#else
1743
+    #define DBGOUT __noop
1744
+#endif
1745
+
1746
diff -uPrb Org/TC90532/tc90532.cpp Mod/TC90532/tc90532.cpp
1747
--- Org/TC90532/tc90532.cpp	2012-02-18 11:44:48.000000000 +0900
1748
+++ Mod/TC90532/tc90532.cpp	2013-12-29 17:41:54.000000000 +0900
1749
@@ -13,8 +13,6 @@
1750
 #include "MxL5007.h"
1751
 #include "tc90532.h"
1752
 
1753
-#define TC90502_OK              0
1754
-#define TC90502_ERR             1
1755
 
1756
 #define	CH_MAX					62//-13			//The Ch maximum number
1757
 
1758
@@ -91,7 +89,7 @@
1759
 	2053		//CH 24
1760
 };
1761
 
1762
-UINT8 SetMxl5007(UINT8 CH)
1763
+UINT8 SetMxl5007(UINT8 CH, float MegaHz)
1764
 {
1765
     UINT32 freq, x;
1766
     MxL_ERR_MSG Status = MxL_OK;
1767
@@ -101,6 +99,9 @@
1768
     unsigned long rf;
1769
     unsigned char bw;
1770
 
1771
+	if(!CH) {
1772
+	  rf = UINT32(MegaHz * 1000000.f) ;
1773
+	}else {
1774
     x = CH;
1775
 
1776
     if(CH < 4)          freq =  93000 + (x - 1) * 6000;
1777
@@ -112,6 +113,7 @@
1778
 	else				freq = 303143 + (x - 136) * 6000;
1779
 
1780
     rf = freq * 1000UL;
1781
+	}
1782
     bw = 6;
1783
 
1784
 	myTuner.DemodAddr = DEMODTADRS;
1785
@@ -162,7 +164,7 @@
1786
     return 0;
1787
 }
1788
 
1789
-UINT8 SetStv6110a(UINT8 BSCh)
1790
+UINT8 SetStv6110a(UINT8 BSCh,float MegaHz)
1791
 {
1792
 	UINT8 STB6110A[8] = {0x07,0x13,0xdc,0x85,0x17,0x01,0xe6,0x1e};
1793
 	UINT8 K;
1794
@@ -177,10 +179,14 @@
1795
 	float RF;
1796
 	float symb = 28.86;
1797
 
1798
+	if(!BSCh) {
1799
+	  RF = MegaHz ;
1800
+	}else {
1801
 	if (BSCh & 1)
1802
 		RF = BS_table[BSCh/2];
1803
 	else
1804
 		RF = CS_table[BSCh/2-1];
1805
+	}
1806
 
1807
 	for(i=0; i<8; i++)
1808
 	{
1809
@@ -231,7 +237,7 @@
1810
 
1811
 	divider = (UINT16)(((RF * (float)r * pow(2.0,(double)(P+1)) * 10.0 / (float)XTAL) + 5.0) / 10.0) ;
1812
 	STB6110A[2] = divider & 0x00ff;
1813
-	STB6110A[3] = ((rDivOpt & 0x3) << 6) | (Presc << 5) | (P << 4) | ((divider & 0x700) >> 8);
1814
+	STB6110A[3] = ((rDivOpt & 0x3) << 6) | (Presc << 5) | (P << 4) | ((divider & 0xF00) >> 8);
1815
 
1816
 	if(WriteTuner(DemodAddress+1,0xC6,0x02,STB6110A[2]) != 0)
1817
 		return 1;
1818
diff -uPrb Org/TC90532/tc90532.h Mod/TC90532/tc90532.h
1819
--- Org/TC90532/tc90532.h	2012-02-07 20:05:32.000000000 +0900
1820
+++ Mod/TC90532/tc90532.h	2013-12-28 20:17:10.000000000 +0900
1821
@@ -2,6 +2,9 @@
1822
 #ifndef TC90532_H
1823
 #define TC90532_H
1824
 
1825
+#define TC90502_OK              0
1826
+#define TC90502_ERR             1
1827
+
1828
 #define DemodAddress            0x10
1829
 
1830
 #define	DEMODTADRS				0x10
1831
@@ -14,8 +17,8 @@
1832
 #define ISDB_S					2
1833
 
1834
 
1835
-UINT8 SetMxl5007(UINT8 CH);
1836
-UINT8 SetStv6110a(UINT8 BSCh);
1837
+UINT8 SetMxl5007(UINT8 CH,float MegaHz=0);
1838
+UINT8 SetStv6110a(UINT8 BSCh,float MegaHz=0);
1839
 UINT8 SetTC90502(UINT8 TS);