Advertisement
Guest User

BonDriver_Bulldog_MOD.patch.20140126rev.txt

a guest
Jan 26th, 2014
735
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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; 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);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement