Advertisement
Guest User

BonDriver_Bulldog_MOD.patch.20141114.src.txt

a guest
Nov 13th, 2014
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 80.93 KB | None | 0 0
  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-11-14 00:07:37.000000000 +0900
  4. @@ -0,0 +1,56 @@
  5. +Bulldog チューナー用 BonDriver 改変パッチ当てMODソース @ 2014/11/14
  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. +2014/10/24 からの修正内容
  31. +
  32. +    ・FX2側のバッファ待機処理にマルチスレッドレベルで最適化できる処理を追加
  33. +     ( ドロップが稀に発生する環境で効果を発揮 )
  34. +
  35. +       ini に TSDualThreading = 1 と書くことで有効化
  36. +       (※非力PCでは 0 かコメントアウト推奨)
  37. +
  38. +    ・FX2側のバッファ待機限界秒数を500msから1000msに初期値を変更
  39. +     ( ini に TSThreadWait=2000 などと書くことによって待機時間を別途変更可能 )
  40. +    ・FX2側の待機スレッドの優先順位を変えることのできるパラメータを ini に追加
  41. +
  42. +       TSThreadPriority = -15 ~ 15
  43. +                              15 : TimeCritical(最高)
  44. +                               2 : Highest(高い) ※デフォルト
  45. +                               1 : Higher(やや高い)
  46. +                               0 : Normal(普通)
  47. +                              -1 : Lower(やや低い)
  48. +                              -2 : Lowest(低い)
  49. +                             -15 : Idle(最低)
  50. +
  51. +2014/1/26 からの修正内容
  52. +
  53. +    ・CATV C22 チャンネル周波数修正
  54. +
  55. +2013/12/28 からの修正内容
  56. +
  57. +    ・チューナーを開いた時に発生するUSB抜き差し音の除去(OpenDriver)
  58. +    ・チャンネルファイルを書換えた場合の受信レベル表示修正(GetCN/GetBER)
  59. +    ・Spinel用バッファ待機最適化(WaitTsStream)
  60. +
  61. diff -uPrb Org/BonDriver_Bulldog.ch - MHz.txt Mod/BonDriver_Bulldog.ch - MHz.txt
  62. --- Org/BonDriver_Bulldog.ch - MHz.txt  1970-01-01 09:00:00.000000000 +0900
  63. +++ Mod/BonDriver_Bulldog.ch - MHz.txt  2014-10-24 09:39:38.000000000 +0900
  64. @@ -0,0 +1,191 @@
  65. +; Bulldog 用 チャンネルファイル 周波数MHz表記修正版rev3 (2014/10/24)
  66. +;
  67. +;       チャンネル情報を変更する場合は、このファイルを編集して
  68. +;       プレフィックスが同じ名前のドライバと同ディレクトリに
  69. +;       拡張子 .ch.txt としてこのファイルを置くこと。
  70. +;
  71. +;       ※ スペースの名前と順番は間違えてはいけないと思います。
  72. +;
  73. +; スペース名, サービスID, 物理チャンネル番号or周波数MHz, TSID, チャンネル名
  74. +
  75. +  ; VHF
  76. +
  77. +VHF, 0, 93.143MHz,0x0000, 1
  78. +VHF, 0, 99.143MHz,0x0000, 2
  79. +VHF, 0,105.143MHz,0x0000, 3
  80. +VHF, 0,173.143MHz,0x0000, 4
  81. +VHF, 0,179.143MHz,0x0000, 5
  82. +VHF, 0,185.143MHz,0x0000, 6
  83. +VHF, 0,191.143MHz,0x0000, 7
  84. +VHF, 0,195.143MHz,0x0000, 8
  85. +VHF, 0,201.143MHz,0x0000, 9
  86. +VHF, 0,207.143MHz,0x0000,10
  87. +VHF, 0,213.143MHz,0x0000,11
  88. +VHF, 0,219.143MHz,0x0000,12
  89. +
  90. +  ; UHF
  91. +
  92. +UHF, 0,473.143MHz,0x0000,13
  93. +UHF, 0,479.143MHz,0x0000,14
  94. +UHF, 0,485.143MHz,0x0000,15
  95. +UHF, 0,491.143MHz,0x0000,16
  96. +UHF, 0,497.143MHz,0x0000,17
  97. +UHF, 0,503.143MHz,0x0000,18
  98. +UHF, 0,509.143MHz,0x0000,19
  99. +UHF, 0,515.143MHz,0x0000,20
  100. +UHF, 0,521.143MHz,0x0000,21
  101. +UHF, 0,527.143MHz,0x0000,22
  102. +UHF, 0,533.143MHz,0x0000,23
  103. +UHF, 0,539.143MHz,0x0000,24
  104. +UHF, 0,545.143MHz,0x0000,25
  105. +UHF, 0,551.143MHz,0x0000,26
  106. +UHF, 0,557.143MHz,0x0000,27
  107. +UHF, 0,563.143MHz,0x0000,28
  108. +UHF, 0,569.143MHz,0x0000,29
  109. +UHF, 0,575.143MHz,0x0000,30
  110. +UHF, 0,581.143MHz,0x0000,31
  111. +UHF, 0,587.143MHz,0x0000,32
  112. +UHF, 0,593.143MHz,0x0000,33
  113. +UHF, 0,599.143MHz,0x0000,34
  114. +UHF, 0,605.143MHz,0x0000,35
  115. +UHF, 0,611.143MHz,0x0000,36
  116. +UHF, 0,617.143MHz,0x0000,37
  117. +UHF, 0,623.143MHz,0x0000,38
  118. +UHF, 0,629.143MHz,0x0000,39
  119. +UHF, 0,635.143MHz,0x0000,40
  120. +UHF, 0,641.143MHz,0x0000,41
  121. +UHF, 0,647.143MHz,0x0000,42
  122. +UHF, 0,653.143MHz,0x0000,43
  123. +UHF, 0,659.143MHz,0x0000,44
  124. +UHF, 0,665.143MHz,0x0000,45
  125. +UHF, 0,671.143MHz,0x0000,46
  126. +UHF, 0,677.143MHz,0x0000,47
  127. +UHF, 0,683.143MHz,0x0000,48
  128. +UHF, 0,689.143MHz,0x0000,49
  129. +UHF, 0,695.143MHz,0x0000,50
  130. +UHF, 0,701.143MHz,0x0000,51
  131. +UHF, 0,707.143MHz,0x0000,52
  132. +UHF, 0,713.143MHz,0x0000,53
  133. +UHF, 0,719.143MHz,0x0000,54
  134. +UHF, 0,725.143MHz,0x0000,55
  135. +UHF, 0,731.143MHz,0x0000,56
  136. +UHF, 0,737.143MHz,0x0000,57
  137. +UHF, 0,743.143MHz,0x0000,58
  138. +UHF, 0,749.143MHz,0x0000,59
  139. +UHF, 0,755.143MHz,0x0000,60
  140. +UHF, 0,761.143MHz,0x0000,61
  141. +UHF, 0,767.143MHz,0x0000,62
  142. +
  143. +  ; CATV
  144. +
  145. +CATV, 0,111.143MHz,0x0000,C13
  146. +CATV, 0,117.143MHz,0x0000,C14
  147. +CATV, 0,123.143MHz,0x0000,C15
  148. +CATV, 0,129.143MHz,0x0000,C16
  149. +CATV, 0,135.143MHz,0x0000,C17
  150. +CATV, 0,141.143MHz,0x0000,C18
  151. +CATV, 0,147.143MHz,0x0000,C19
  152. +CATV, 0,153.143MHz,0x0000,C20
  153. +CATV, 0,159.143MHz,0x0000,C21
  154. +CATV, 0,167.143MHz,0x0000,C22
  155. +CATV, 0,225.143MHz,0x0000,C23
  156. +CATV, 0,231.143MHz,0x0000,C24
  157. +CATV, 0,237.143MHz,0x0000,C25
  158. +CATV, 0,243.143MHz,0x0000,C26
  159. +CATV, 0,249.143MHz,0x0000,C27
  160. +CATV, 0,255.143MHz,0x0000,C28
  161. +CATV, 0,261.143MHz,0x0000,C29
  162. +CATV, 0,267.143MHz,0x0000,C30
  163. +CATV, 0,273.143MHz,0x0000,C31
  164. +CATV, 0,279.143MHz,0x0000,C32
  165. +CATV, 0,285.143MHz,0x0000,C33
  166. +CATV, 0,291.143MHz,0x0000,C34
  167. +CATV, 0,297.143MHz,0x0000,C35
  168. +CATV, 0,303.143MHz,0x0000,C36
  169. +CATV, 0,309.143MHz,0x0000,C37
  170. +CATV, 0,315.143MHz,0x0000,C38
  171. +CATV, 0,321.143MHz,0x0000,C39
  172. +CATV, 0,327.143MHz,0x0000,C40
  173. +CATV, 0,333.143MHz,0x0000,C41
  174. +CATV, 0,339.143MHz,0x0000,C42
  175. +CATV, 0,345.143MHz,0x0000,C43
  176. +CATV, 0,351.143MHz,0x0000,C44
  177. +CATV, 0,357.143MHz,0x0000,C45
  178. +CATV, 0,363.143MHz,0x0000,C46
  179. +CATV, 0,369.143MHz,0x0000,C47
  180. +CATV, 0,375.143MHz,0x0000,C48
  181. +CATV, 0,381.143MHz,0x0000,C49
  182. +CATV, 0,387.143MHz,0x0000,C50
  183. +CATV, 0,393.143MHz,0x0000,C51
  184. +CATV, 0,399.143MHz,0x0000,C52
  185. +CATV, 0,405.143MHz,0x0000,C53
  186. +CATV, 0,411.143MHz,0x0000,C54
  187. +CATV, 0,417.143MHz,0x0000,C55
  188. +CATV, 0,423.143MHz,0x0000,C56
  189. +CATV, 0,429.143MHz,0x0000,C57
  190. +CATV, 0,435.143MHz,0x0000,C58
  191. +CATV, 0,441.143MHz,0x0000,C59
  192. +CATV, 0,447.143MHz,0x0000,C60
  193. +CATV, 0,453.143MHz,0x0000,C61
  194. +CATV, 0,459.143MHz,0x0000,C62
  195. +CATV, 0,465.143MHz,0x0000,C63
  196. +
  197. +  ; BS (ストリームが重複するチャンネルはコメントアウトしている)
  198. +
  199. +BS, 151, 1049.48MHz,0x4010,BS1/TS0 ;BS朝日
  200. +BS, 161, 1049.48MHz,0x4011,BS1/TS1 ;BS-TBS
  201. +BS, 191, 1087.84MHz,0x4030,BS3/TS0 ;WOWOWプライム
  202. +;BS, 791, 1356.36MHz,0x4030,BS3/TS0 ;navi
  203. +BS, 171, 1087.84MHz,0x4031,BS3/TS1 ;BSジャパン
  204. +BS, 192, 1126.20MHz,0x4450,BS5/TS0 ;WOWOWライブ
  205. +BS, 193, 1126.20MHz,0x4451,BS5/TS1 ;WOWOWシネマ
  206. +BS, 201, 1164.56MHz,0x4470,BS7/TS0 ;スター・チャンネル2
  207. +;BS, 202, 1164.56MHz,0x4470,BS7/TS0 ;スター・チャンネル3
  208. +BS, 236, 1164.56MHz,0x4671,BS7/TS1 ;BSアニマックス
  209. +BS, 256, 1164.56MHz,0x4672,BS7/TS2 ;ディズニー・チャンネル
  210. +BS, 211, 1202.92MHz,0x4090,BS9/TS0 ;BS11
  211. +BS, 200, 1202.92MHz,0x4091,BS9/TS1 ;スター・チャンネル1
  212. +BS, 222, 1202.92MHz,0x4092,BS9/TS2 ;TwellV
  213. +BS, 238, 1241.28MHz,0x46B0,BS11/TS0 ;FOX bs238
  214. +BS, 241, 1241.28MHz,0x46B1,BS11/TS1 ;BSスカパー!
  215. +BS, 231, 1241.28MHz,0x46B2,BS11/TS2 ;放送大学BS1
  216. +;BS, 232, 1241.28MHz,0x46B2,BS11/TS2 ;放送大学BS2
  217. +;BS, 233, 1241.28MHz,0x46B2,BS11/TS2 ;放送大学BS3
  218. +BS, 141, 1279.64MHz,0x40D0,BS13/TS0 ;BS日テレ
  219. +BS, 181, 1279.64MHz,0x40D1,BS13/TS1 ;BSフジ
  220. +BS, 101, 1318.00MHz,0x40F1,BS15/TS1 ;NHKBS1
  221. +BS, 103, 1318.00MHz,0x40F2,BS15/TS2 ;NHKBSプレミアム
  222. +;BS, 910, 1356.36MHz,0x40F2,BS15/TS2 ;WNI・910
  223. +BS, 291, 1356.36MHz,0x4310,BS17/TS1 ;NHK総合・東京
  224. +;BS, 292, 1356.36MHz,0x4310,BS17/TS1 ;NHKEテレ東京
  225. +BS, 294, 1356.36MHz,0x4311,BS17/TS2 ;日テレ
  226. +;BS, 295, 1356.36MHz,0x4311,BS17/TS2 ;テレビ朝日
  227. +;BS, 296, 1356.36MHz,0x4311,BS17/TS2 ;TBS
  228. +;BS, 297, 1356.36MHz,0x4311,BS17/TS2 ;テレビ東京
  229. +;BS, 298, 1356.36MHz,0x4310,BS17/TS1 ;フジテレビ
  230. +;BS, 531, 1356.36MHz,0x46B2,BS11/TS2 放送大学ラジオ
  231. +BS, 234, 1394.72MHz,0x4730,BS19/TS0 ;グリーンチャンネル
  232. +BS, 242, 1394.72MHz,0x4731,BS19/TS1 ;J SPORTS 1
  233. +BS, 243, 1394.72MHz,0x4732,BS19/TS2 ;J SPORTS 2
  234. +BS, 252, 1433.08MHz,0x4750,BS21/TS0 ;IMAGICA BS
  235. +BS, 244, 1433.08MHz,0x4751,BS21/TS1 ;J SPORTS 3
  236. +BS, 245, 1433.08MHz,0x4752,BS21/TS2 ;J SPORTS 4
  237. +BS, 251, 1471.44MHz,0x4770,BS23/TS0 ;BS釣りビジョン
  238. +BS, 255, 1471.44MHz,0x4771,BS23/TS1 ;日本映画専門チャンネル
  239. +BS, 258, 1471.44MHz,0x4772,BS23/TS2 ;D-Life
  240. +
  241. +  ; CS110
  242. +
  243. +CS110, 0, 1613.0MHz, 0x6020, ND2
  244. +CS110, 0, 1653.0MHz, 0x7040, ND4
  245. +CS110, 0, 1693.0MHz, 0x7060, ND6
  246. +CS110, 0, 1733.0MHz, 0x6080, ND8
  247. +CS110, 0, 1773.0MHz, 0x60A0, ND10
  248. +CS110, 0, 1813.0MHz, 0x70C0, ND12
  249. +CS110, 0, 1853.0MHz, 0x70E0, ND14
  250. +CS110, 0, 1893.0MHz, 0x7100, ND16
  251. +CS110, 0, 1933.0MHz, 0x7120, ND18
  252. +CS110, 0, 1973.0MHz, 0x7140, ND20
  253. +CS110, 0, 2013.0MHz, 0x7160, ND22
  254. +CS110, 0, 2053.0MHz, 0x7180, ND24
  255. +
  256. diff -uPrb Org/BonDriver_Bulldog.ch.txt Mod/BonDriver_Bulldog.ch.txt
  257. --- Org/BonDriver_Bulldog.ch.txt    1970-01-01 09:00:00.000000000 +0900
  258. +++ Mod/BonDriver_Bulldog.ch.txt    2013-12-29 03:12:37.000000000 +0900
  259. @@ -0,0 +1,206 @@
  260. +; Bulldog 用 チャンネルファイル (2013/12/28)
  261. +;
  262. +;       チャンネル情報を変更する場合は、このファイルを編集して
  263. +;       プレフィックスが同じ名前のドライバと同ディレクトリに
  264. +;       拡張子 .ch.txt としてこのファイルを置くこと。
  265. +;
  266. +;       ※ スペースの名前と順番は間違えてはいけないと思います。
  267. +;
  268. +; スペース名, サービスID, 物理チャンネル番号or周波数MHz, TSID, チャンネル名
  269. +
  270. +  ; VHF
  271. +
  272. +VHF, 0, 1,0x0000, 1
  273. +VHF, 0, 2,0x0000, 2
  274. +VHF, 0, 3,0x0000, 3
  275. +VHF, 0, 4,0x0000, 4
  276. +VHF, 0, 5,0x0000, 5
  277. +VHF, 0, 6,0x0000, 6
  278. +VHF, 0, 7,0x0000, 7
  279. +VHF, 0, 8,0x0000, 8
  280. +VHF, 0, 9,0x0000, 9
  281. +VHF, 0,10,0x0000,10
  282. +VHF, 0,11,0x0000,11
  283. +VHF, 0,12,0x0000,12
  284. +
  285. +  ; UHF
  286. +
  287. +UHF, 0,13,0x0000,13
  288. +UHF, 0,14,0x0000,14
  289. +UHF, 0,15,0x0000,15
  290. +UHF, 0,16,0x0000,16
  291. +UHF, 0,17,0x0000,17
  292. +UHF, 0,18,0x0000,18
  293. +UHF, 0,19,0x0000,19
  294. +UHF, 0,20,0x0000,20
  295. +UHF, 0,21,0x0000,21
  296. +UHF, 0,22,0x0000,22
  297. +UHF, 0,23,0x0000,23
  298. +UHF, 0,24,0x0000,24
  299. +UHF, 0,25,0x0000,25
  300. +UHF, 0,26,0x0000,26
  301. +UHF, 0,27,0x0000,27
  302. +UHF, 0,28,0x0000,28
  303. +UHF, 0,29,0x0000,29
  304. +UHF, 0,30,0x0000,30
  305. +UHF, 0,31,0x0000,31
  306. +UHF, 0,32,0x0000,32
  307. +UHF, 0,33,0x0000,33
  308. +UHF, 0,34,0x0000,34
  309. +UHF, 0,35,0x0000,35
  310. +UHF, 0,36,0x0000,36
  311. +UHF, 0,37,0x0000,37
  312. +UHF, 0,38,0x0000,38
  313. +UHF, 0,39,0x0000,39
  314. +UHF, 0,40,0x0000,40
  315. +UHF, 0,41,0x0000,41
  316. +UHF, 0,42,0x0000,42
  317. +UHF, 0,43,0x0000,43
  318. +UHF, 0,44,0x0000,44
  319. +UHF, 0,45,0x0000,45
  320. +UHF, 0,46,0x0000,46
  321. +UHF, 0,47,0x0000,47
  322. +UHF, 0,48,0x0000,48
  323. +UHF, 0,49,0x0000,49
  324. +UHF, 0,50,0x0000,50
  325. +UHF, 0,51,0x0000,51
  326. +UHF, 0,52,0x0000,52
  327. +UHF, 0,53,0x0000,53
  328. +UHF, 0,54,0x0000,54
  329. +UHF, 0,55,0x0000,55
  330. +UHF, 0,56,0x0000,56
  331. +UHF, 0,57,0x0000,57
  332. +UHF, 0,58,0x0000,58
  333. +UHF, 0,59,0x0000,59
  334. +UHF, 0,60,0x0000,60
  335. +UHF, 0,61,0x0000,61
  336. +UHF, 0,62,0x0000,62
  337. +
  338. +  ; CATV
  339. +
  340. +CATV, 0,113,0x0000,C13
  341. +CATV, 0,114,0x0000,C14
  342. +CATV, 0,115,0x0000,C15
  343. +CATV, 0,116,0x0000,C16
  344. +CATV, 0,117,0x0000,C17
  345. +CATV, 0,118,0x0000,C18
  346. +CATV, 0,119,0x0000,C19
  347. +CATV, 0,120,0x0000,C20
  348. +CATV, 0,121,0x0000,C21
  349. +CATV, 0,122,0x0000,C22
  350. +CATV, 0,123,0x0000,C23
  351. +CATV, 0,124,0x0000,C24
  352. +CATV, 0,125,0x0000,C25
  353. +CATV, 0,126,0x0000,C26
  354. +CATV, 0,127,0x0000,C27
  355. +CATV, 0,128,0x0000,C28
  356. +CATV, 0,129,0x0000,C29
  357. +CATV, 0,130,0x0000,C30
  358. +CATV, 0,131,0x0000,C31
  359. +CATV, 0,132,0x0000,C32
  360. +CATV, 0,133,0x0000,C33
  361. +CATV, 0,134,0x0000,C34
  362. +CATV, 0,135,0x0000,C35
  363. +CATV, 0,136,0x0000,C36
  364. +CATV, 0,137,0x0000,C37
  365. +CATV, 0,138,0x0000,C38
  366. +CATV, 0,139,0x0000,C39
  367. +CATV, 0,140,0x0000,C40
  368. +CATV, 0,141,0x0000,C41
  369. +CATV, 0,142,0x0000,C42
  370. +CATV, 0,143,0x0000,C43
  371. +CATV, 0,144,0x0000,C44
  372. +CATV, 0,145,0x0000,C45
  373. +CATV, 0,146,0x0000,C46
  374. +CATV, 0,147,0x0000,C47
  375. +CATV, 0,148,0x0000,C48
  376. +CATV, 0,149,0x0000,C49
  377. +CATV, 0,150,0x0000,C50
  378. +CATV, 0,151,0x0000,C51
  379. +CATV, 0,152,0x0000,C52
  380. +CATV, 0,153,0x0000,C53
  381. +CATV, 0,154,0x0000,C54
  382. +CATV, 0,155,0x0000,C55
  383. +CATV, 0,156,0x0000,C56
  384. +CATV, 0,157,0x0000,C57
  385. +CATV, 0,158,0x0000,C58
  386. +CATV, 0,159,0x0000,C59
  387. +CATV, 0,160,0x0000,C60
  388. +CATV, 0,161,0x0000,C61
  389. +CATV, 0,162,0x0000,C62
  390. +CATV, 0,163,0x0000,C63
  391. +
  392. +  ; BS (ストリームが重複するチャンネルはコメントアウトしている)
  393. +
  394. +BS, 151, 1,0x4010,BS1/TS0 ;BS朝日
  395. +BS, 161, 1,0x4011,BS1/TS1 ;BS-TBS
  396. +BS, 191, 3,0x4030,BS3/TS0 ;WOWOWプライム
  397. +;BS, 791,17,0x4030,BS3/TS0 ;navi
  398. +BS, 171, 3,0x4031,BS3/TS1 ;BSジャパン
  399. +BS, 192, 5,0x4450,BS5/TS0 ;WOWOWライブ
  400. +BS, 193, 5,0x4451,BS5/TS1 ;WOWOWシネマ
  401. +BS, 201, 7,0x4470,BS7/TS0 ;スター・チャンネル2
  402. +;BS, 202, 7,0x4470,BS7/TS0 ;スター・チャンネル3
  403. +BS, 236, 7,0x4671,BS7/TS1 ;BSアニマックス
  404. +BS, 256, 7,0x4672,BS7/TS2 ;ディズニー・チャンネル
  405. +BS, 211, 9,0x4090,BS9/TS0 ;BS11
  406. +BS, 200, 9,0x4091,BS9/TS1 ;スター・チャンネル1
  407. +BS, 222, 9,0x4092,BS9/TS2 ;TwellV
  408. +BS, 238,11,0x46B0,BS11/TS0 ;FOX bs238
  409. +BS, 241,11,0x46B1,BS11/TS1 ;BSスカパー!
  410. +BS, 231,11,0x46B2,BS11/TS2 ;放送大学BS1
  411. +;BS, 232,11,0x46B2,BS11/TS2 ;放送大学BS2
  412. +;BS, 233,11,0x46B2,BS11/TS2 ;放送大学BS3
  413. +BS, 141,13,0x40D0,BS13/TS0 ;BS日テレ
  414. +BS, 181,13,0x40D1,BS13/TS1 ;BSフジ
  415. +BS, 101,15,0x40F1,BS15/TS1 ;NHKBS1
  416. +BS, 103,15,0x40F2,BS15/TS2 ;NHKBSプレミアム
  417. +;BS, 910,17,0x40F2,BS15/TS2 ;WNI・910
  418. +BS, 291,17,0x4310,BS17/TS1 ;NHK総合・東京
  419. +;BS, 292,17,0x4310,BS17/TS1 ;NHKEテレ東京
  420. +BS, 294,17,0x4311,BS17/TS2 ;日テレ
  421. +;BS, 295,17,0x4311,BS17/TS2 ;テレビ朝日
  422. +;BS, 296,17,0x4311,BS17/TS2 ;TBS
  423. +;BS, 297,17,0x4311,BS17/TS2 ;テレビ東京
  424. +;BS, 298,17,0x4310,BS17/TS1 ;フジテレビ
  425. +;BS, 531,17,0x46B2,BS11/TS2 放送大学ラジオ
  426. +BS, 234,19,0x4730,BS19/TS0 ;グリーンチャンネル
  427. +BS, 242,19,0x4731,BS19/TS1 ;J SPORTS 1
  428. +BS, 243,19,0x4732,BS19/TS2 ;J SPORTS 2
  429. +BS, 252,21,0x4750,BS21/TS0 ;IMAGICA BS
  430. +BS, 244,21,0x4751,BS21/TS1 ;J SPORTS 3
  431. +BS, 245,21,0x4752,BS21/TS2 ;J SPORTS 4
  432. +BS, 251,23,0x4770,BS23/TS0 ;BS釣りビジョン
  433. +BS, 255,23,0x4771,BS23/TS1 ;日本映画専門チャンネル
  434. +BS, 258,23,0x4772,BS23/TS2 ;D-Life
  435. +
  436. +  ; CS110
  437. +
  438. +CS110, 0, 2,0x6020,ND2
  439. +CS110, 0, 4,0x7040,ND4
  440. +CS110, 0, 6,0x7060,ND6
  441. +CS110, 0, 8,0x6080,ND8
  442. +CS110, 0,10,0x60A0,ND10
  443. +CS110, 0,12,0x70C0,ND12
  444. +CS110, 0,14,0x70E0,ND14
  445. +CS110, 0,16,0x7100,ND16
  446. +CS110, 0,18,0x7120,ND18
  447. +CS110, 0,20,0x7140,ND20
  448. +CS110, 0,22,0x7160,ND22
  449. +CS110, 0,24,0x7180,ND24
  450. +
  451. +  ; CS110 ( MHz で記述する場合の例 )
  452. +
  453. +;CS110, 0, 1613.0MHz, 0x6020, ND2
  454. +;CS110, 0, 1653.0MHz, 0x7040, ND4
  455. +;CS110, 0, 1693.0MHz, 0x7060, ND6
  456. +;CS110, 0, 1733.0MHz, 0x6080, ND8
  457. +;CS110, 0, 1773.0MHz, 0x60A0, ND10
  458. +;CS110, 0, 1813.0MHz, 0x70C0, ND12
  459. +;CS110, 0, 1853.0MHz, 0x70E0, ND14
  460. +;CS110, 0, 1893.0MHz, 0x7100, ND16
  461. +;CS110, 0, 1933.0MHz, 0x7120, ND18
  462. +;CS110, 0, 1973.0MHz, 0x7140, ND20
  463. +;CS110, 0, 2013.0MHz, 0x7160, ND22
  464. +;CS110, 0, 2053.0MHz, 0x7180, ND24
  465. +
  466. diff -uPrb Org/BonDriver_Bulldog.ini Mod/BonDriver_Bulldog.ini
  467. --- Org/BonDriver_Bulldog.ini   2012-03-17 13:01:48.000000000 +0900
  468. +++ Mod/BonDriver_Bulldog.ini   2014-11-13 19:02:01.000000000 +0900
  469. @@ -1,205 +1,21 @@
  470. -[BonDriverAKB02]
  471. -
  472. -
  473. -//Channel=ServiceID,PhysicalChannel,TSID,Name
  474. -[VHF]
  475. -0=  0, 1,0x0000,1
  476. -1=  0, 2,0x0000,2
  477. -2=  0, 3,0x0000,3
  478. -3=  0, 4,0x0000,4
  479. -4=  0, 5,0x0000,5
  480. -5=  0, 6,0x0000,6
  481. -6=  0, 7,0x0000,7
  482. -7=  0, 8,0x0000,8
  483. -8=  0, 9,0x0000,9
  484. -9=  0,10,0x0000,10
  485. -10= 0,11,0x0000,11
  486. -11= 0,12,0x0000,12
  487. -
  488. -[UHF]
  489. -0=  0,13,0x0000,13
  490. -1=  0,14,0x0000,14
  491. -2=  0,15,0x0000,15
  492. -3=  0,16,0x0000,16
  493. -4=  0,17,0x0000,17
  494. -5=  0,18,0x0000,18
  495. -6=  0,19,0x0000,19
  496. -7=  0,20,0x0000,20
  497. -8=  0,21,0x0000,21
  498. -9=  0,22,0x0000,22
  499. -10= 0,23,0x0000,23
  500. -11= 0,24,0x0000,24
  501. -12= 0,25,0x0000,25
  502. -13= 0,26,0x0000,26
  503. -14= 0,27,0x0000,27
  504. -15= 0,28,0x0000,28
  505. -16= 0,29,0x0000,29
  506. -17= 0,30,0x0000,30
  507. -18= 0,31,0x0000,31
  508. -19= 0,32,0x0000,32
  509. -20= 0,33,0x0000,33
  510. -21= 0,34,0x0000,34
  511. -22= 0,35,0x0000,35
  512. -23= 0,36,0x0000,36
  513. -24= 0,37,0x0000,37
  514. -25= 0,38,0x0000,38
  515. -26= 0,39,0x0000,39
  516. -27= 0,40,0x0000,40
  517. -28= 0,41,0x0000,41
  518. -29= 0,42,0x0000,42
  519. -30= 0,43,0x0000,43
  520. -31= 0,44,0x0000,44
  521. -32= 0,45,0x0000,45
  522. -33= 0,46,0x0000,46
  523. -34= 0,47,0x0000,47
  524. -35= 0,48,0x0000,48
  525. -36= 0,49,0x0000,49
  526. -37= 0,50,0x0000,50
  527. -38= 0,51,0x0000,51
  528. -39= 0,52,0x0000,52
  529. -40= 0,53,0x0000,53
  530. -41= 0,54,0x0000,54
  531. -42= 0,55,0x0000,55
  532. -43= 0,56,0x0000,56
  533. -44= 0,57,0x0000,57
  534. -45= 0,58,0x0000,58
  535. -46= 0,59,0x0000,59
  536. -47= 0,60,0x0000,60
  537. -48= 0,61,0x0000,61
  538. -49= 0,62,0x0000,62
  539. -
  540. -[CATV]
  541. -0=  0,113,0x0000,C13
  542. -1=  0,114,0x0000,C14
  543. -2=  0,115,0x0000,C15
  544. -3=  0,116,0x0000,C16
  545. -4=  0,117,0x0000,C17
  546. -5=  0,118,0x0000,C18
  547. -6=  0,119,0x0000,C19
  548. -7=  0,120,0x0000,C20
  549. -8=  0,121,0x0000,C21
  550. -9=  0,122,0x0000,C22
  551. -10= 0,123,0x0000,C23
  552. -11= 0,124,0x0000,C24
  553. -12= 0,125,0x0000,C25
  554. -13= 0,126,0x0000,C26
  555. -14= 0,127,0x0000,C27
  556. -15= 0,128,0x0000,C28
  557. -16= 0,129,0x0000,C29
  558. -17= 0,130,0x0000,C30
  559. -18= 0,131,0x0000,C31
  560. -19= 0,132,0x0000,C32
  561. -20= 0,123,0x0000,C33
  562. -21= 0,124,0x0000,C34
  563. -22= 0,125,0x0000,C35
  564. -23= 0,126,0x0000,C36
  565. -24= 0,127,0x0000,C37
  566. -25= 0,128,0x0000,C38
  567. -26= 0,129,0x0000,C39
  568. -27= 0,130,0x0000,C40
  569. -28= 0,131,0x0000,C41
  570. -29= 0,132,0x0000,C42
  571. -30= 0,123,0x0000,C43
  572. -31= 0,124,0x0000,C44
  573. -32= 0,125,0x0000,C45
  574. -33= 0,126,0x0000,C46
  575. -34= 0,127,0x0000,C47
  576. -35= 0,128,0x0000,C48
  577. -36= 0,129,0x0000,C49
  578. -37= 0,130,0x0000,C50
  579. -38= 0,131,0x0000,C51
  580. -39= 0,132,0x0000,C52
  581. -40= 0,123,0x0000,C53
  582. -41= 0,124,0x0000,C54
  583. -42= 0,125,0x0000,C55
  584. -43= 0,126,0x0000,C56
  585. -44= 0,127,0x0000,C57
  586. -45= 0,128,0x0000,C58
  587. -46= 0,129,0x0000,C59
  588. -47= 0,130,0x0000,C60
  589. -48= 0,131,0x0000,C61
  590. -49= 0,132,0x0000,C62
  591. -50= 0,123,0x0000,C63
  592. -
  593. -[BS]
  594. -0= 151, 1,0x4010,BS1/TS0 BS朝日
  595. -1= 161, 1,0x4011,BS1/TS1 BS-TBS
  596. -2= 191, 3,0x4030,BS3/TS0 WOWOWプライム
  597. -3= 791,17,0x4030,BS3/TS0 navi
  598. -4= 171, 3,0x4031,BS3/TS1 BSジャパン
  599. -5= 192, 5,0x4450,BS5/TS0 WOWOWライブ
  600. -6= 193, 5,0x4451,BS5/TS1 WOWOWシネマ
  601. -7= 201, 7,0x4470,BS7/TS0 スター・チャンネル2
  602. -8= 202, 7,0x4470,BS7/TS0 スター・チャンネル3
  603. -9= 236, 7,0x4671,BS7/TS1 BSアニマックス
  604. -10=256, 7,0x4672,BS7/TS2 ディズニー・チャンネル
  605. -11=211, 9,0x4090,BS9/TS0 BS11
  606. -12=200, 9,0x4091,BS9/TS1 スター・チャンネル1
  607. -13=222, 9,0x4092,BS9/TS2 TwellV
  608. -14=238,11,0x46B0,BS11/TS0 FOX bs238
  609. -15=241,11,0x46B1,BS11/TS1 BSスカパー!
  610. -16=231,11,0x46B2,BS11/TS2 放送大学BS1
  611. -17=232,11,0x46B2,BS11/TS2 放送大学BS2
  612. -18=233,11,0x46B2,BS11/TS2 放送大学BS3
  613. -19=141,13,0x40D0,BS13/TS0 BS日テレ
  614. -20=181,13,0x40D1,BS13/TS1 BSフジ
  615. -21=101,15,0x40F1,BS15/TS1 NHKBS1
  616. -22=103,15,0x40F2,BS15/TS2 NHKBSプレミアム
  617. -23=910,17,0x40F2,BS15/TS2 WNI・910
  618. -24=291,17,0x4310,BS17/TS1 NHK総合・東京
  619. -25=292,17,0x4310,BS17/TS1 NHKEテレ東京
  620. -26=294,17,0x4311,BS17/TS2 日テレ
  621. -27=295,17,0x4311,BS17/TS2 テレビ朝日
  622. -28=296,17,0x4311,BS17/TS2 TBS
  623. -29=297,17,0x4311,BS17/TS2 テレビ東京
  624. -30=298,17,0x4310,BS17/TS1 フジテレビ
  625. -31=531,17,0x46B2,BS11/TS2 放送大学ラジオ
  626. -32=234,19,0x4730,BS19/TS0 グリーンチャンネル
  627. -33=242,19,0x4731,BS19/TS1 J SPORTS 1
  628. -34=243,19,0x4732,BS19/TS2 J SPORTS 2
  629. -35=252,21,0x4750,BS21/TS0 IMAGICA BS
  630. -36=244,21,0x4751,BS21/TS1 J SPORTS 3
  631. -37=245,21,0x4752,BS21/TS2 J SPORTS 4
  632. -38=251,23,0x4770,BS23/TS0 BS釣りビジョン
  633. -39=255,23,0x4771,BS23/TS1 日本映画専門チャンネル
  634. -40=258,23,0x4772,BS23/TS2 D-Life
  635. -
  636. -
  637. -0= 101,15,0x40F1,NHKBS1
  638. -1= 102,15,0x40F1,NHK BS2
  639. -2= 103,15,0x40F2,NHK BSプレミアム
  640. -3= 141,13,0x40D0,BS日テレ
  641. -4= 151, 1,0x4010,BS朝日1
  642. -5= 161, 1,0x4011,BS-TBS
  643. -6= 171, 3,0x4031,BSジャパン
  644. -7= 181,13,0x40D1,BSフジ・181
  645. -8= 191, 3,0x4030,WOWOWプライム
  646. -9= 200, 9,0x4470,スター・チャンネル1,
  647. -10=211, 9,0x4090,BS11
  648. -11=222, 9,0x4092,TwellV
  649. -12=192, 5,0x4030,WOWOWライブ
  650. -13=193, 5,0x4030,WOWOWシネマ
  651. -14=201, 7,0x4470,スター・チャンネル2
  652. -15=202, 7,0x4470,スター・チャンネル3
  653. -16=231,11,0x46B2,放送大学テレビ
  654. -17=234,19,0x4730,グリーンチャンネル
  655. -18=236, 7,0x4671,BSアニマックス
  656. -19=238,11,0x46B0,FOX bs238
  657. -20=241,11,0x46B1,BSスカパー!
  658. -21=242,19,0x4731,J SPORTS 1
  659. -22=243,19,0x4732,J SPORTS 2
  660. -
  661. -[CS110]
  662. -0= 0, 2,0x6020,ND2
  663. -1= 0, 4,0x7040,ND4
  664. -2= 0, 6,0x7060,ND6
  665. -3= 0, 8,0x6080,ND8
  666. -4= 0,10,0x60A0,ND10
  667. -5= 0,12,0x70C0,ND12
  668. -6= 0,14,0x70E0,ND14
  669. -7= 0,16,0x7100,ND16
  670. -8= 0,18,0x7120,ND18
  671. -9= 0,20,0x7140,ND20
  672. -10=0,22,0x7160,ND22
  673. -11=0,24,0x7180,ND24
  674. +[BonTuner]
  675. +TSDataSize=65536
  676. +TSQueueNum=16
  677. +ASyncTSQueueNum=512
  678. +TSThreadWait=750
  679. +
  680. +; Windows7以降の新OS用の推奨設定
  681. +;TSDataSize=131072
  682. +;TSQueueNum=64
  683. +;ASyncTSQueueNum=1024
  684. +;TSThreadWait=1000
  685. +
  686. +; TSバッファリング処理を複数のスレッドを利用して効率化するかどうか
  687. +; ( シングルCPU環境や非力PC環境の場合はコメントアウト推奨 )
  688. +TSDualThreading=1
  689. +
  690. +ISDBTCommandSendTimes=2
  691. +ISDBTCommandSendWait=100
  692. +ISDBSCommandSendTimes=2
  693. +ISDBSCommandSendWait=100
  694.  
  695. diff -uPrb Org/BonTuner.cpp Mod/BonTuner.cpp
  696. --- Org/BonTuner.cpp    2012-04-07 16:37:52.000000000 +0900
  697. +++ Mod/BonTuner.cpp    2014-11-14 00:03:42.000000000 +0900
  698. @@ -20,15 +20,23 @@
  699.  // 定数定義
  700.  //////////////////////////////////////////////////////////////////////
  701.  
  702. -// ミューテックス名
  703. -#define MUTEX_NAME         TEXT("BonDriver Bulldog")
  704. -
  705.  // 受信サイズ
  706. -#define TSDATASIZE         65536UL                                     // TSデータのサイズ
  707. +DWORD TSDATASIZE        =   65536UL ;       // TSデータのサイズ
  708. +DWORD TSQUEUENUM        =   16UL    ;       // TSデータの環状ストック数
  709. +DWORD TSTHREADWAIT      =   1000UL  ;       // TSスレッドキュー毎に待つ最大時間
  710. +int   TSTHREADPRIORITY  =   THREAD_PRIORITY_HIGHEST ; // TSスレッドの優先度
  711. +BOOL  TSDUALTHREADING   =   FALSE   ;       // TSスレッドキュー待ちのマルチスレッド効率化
  712. +
  713. +
  714.  
  715.  // FIFOバッファ設定
  716. -#define ASYNCBUFFTIME      4UL                                         // バッファ長 = 4秒
  717. -#define ASYNCBUFFSIZE      ( 0x400000 / TSDATASIZE * ASYNCBUFFTIME )   // 平均32Mbpsとする
  718. +DWORD ASYNCTSQUEUENUM   =   256UL   ;       // 非同期TSデータの環状ストック数
  719. +
  720. +// ウェイト
  721. +DWORD ISDBTCOMMANDSENDTIMES = 2 ;
  722. +DWORD ISDBTCOMMANDSENDWAIT  = 100 ;
  723. +DWORD ISDBSCOMMANDSENDTIMES = 2 ;
  724. +DWORD ISDBSCOMMANDSENDWAIT  = 100 ;
  725.  
  726.  // エンドポイントインデックス
  727.  #define EPINDEX_IN         0UL
  728. @@ -75,12 +83,12 @@
  729.  _T("151, 1,0x4010,BS1/TS0 BS朝日"),
  730.  _T("161, 1,0x4011,BS1/TS1 BS-TBS"),
  731.  _T("191, 3,0x4030,BS3/TS0 WOWOWプライム"),
  732. -_T("791,17,0x4030,BS3/TS0 navi"),
  733. +//_T("791,17,0x4030,BS3/TS0 navi"),
  734.  _T("171, 3,0x4031,BS3/TS1 BSジャパン"),
  735.  _T("192, 5,0x4450,BS5/TS0 WOWOWライブ"),
  736.  _T("193, 5,0x4451,BS5/TS1 WOWOWシネマ"),
  737.  _T("201, 7,0x4470,BS7/TS0 スター・チャンネル2"),
  738. -_T("202, 7,0x4470,BS7/TS0 スター・チャンネル3"),
  739. +//_T("202, 7,0x4470,BS7/TS0 スター・チャンネル3"),
  740.  _T("236, 7,0x4671,BS7/TS1 BSアニマックス"),
  741.  _T("256, 7,0x4672,BS7/TS2 ディズニー・チャンネル"),
  742.  _T("211, 9,0x4090,BS9/TS0 BS11"),
  743. @@ -89,21 +97,21 @@
  744.  _T("238,11,0x46B0,BS11/TS0 FOX bs238"),
  745.  _T("241,11,0x46B1,BS11/TS1 BSスカパー!"),
  746.  _T("231,11,0x46B2,BS11/TS2 放送大学BS1"),
  747. -_T("232,11,0x46B2,BS11/TS2 放送大学BS2"),
  748. -_T("233,11,0x46B2,BS11/TS2 放送大学BS3"),
  749. +//_T("232,11,0x46B2,BS11/TS2 放送大学BS2"),
  750. +//_T("233,11,0x46B2,BS11/TS2 放送大学BS3"),
  751.  _T("141,13,0x40D0,BS13/TS0 BS日テレ"),
  752.  _T("181,13,0x40D1,BS13/TS1 BSフジ"),
  753.  _T("101,15,0x40F1,BS15/TS1 NHKBS1"),
  754.  _T("103,15,0x40F2,BS15/TS2 NHKBSプレミアム"),
  755. -_T("910,17,0x40F2,BS15/TS2 WNI・910"),
  756. +//_T("910,17,0x40F2,BS15/TS2 WNI・910"),
  757.  _T("291,17,0x4310,BS17/TS1 NHK総合・東京"),
  758. -_T("292,17,0x4310,BS17/TS1 NHKEテレ東京"),
  759. +//_T("292,17,0x4310,BS17/TS1 NHKEテレ東京"),
  760.  _T("294,17,0x4311,BS17/TS2 日テレ"),
  761. -_T("295,17,0x4311,BS17/TS2 テレビ朝日"),
  762. -_T("296,17,0x4311,BS17/TS2 TBS"),
  763. -_T("297,17,0x4311,BS17/TS2 テレビ東京"),
  764. -_T("298,17,0x4310,BS17/TS1 フジテレビ"),
  765. -_T("531,17,0x46B2,BS11/TS2 放送大学ラジオ"),
  766. +//_T("295,17,0x4311,BS17/TS2 テレビ朝日"),
  767. +//_T("296,17,0x4311,BS17/TS2 TBS"),
  768. +//_T("297,17,0x4311,BS17/TS2 テレビ東京"),
  769. +//_T("298,17,0x4310,BS17/TS1 フジテレビ"),
  770. +//_T("531,17,0x46B2,BS11/TS2 放送大学ラジオ"),
  771.  _T("234,19,0x4730,BS19/TS0 グリーンチャンネル"),
  772.  _T("242,19,0x4731,BS19/TS1 J SPORTS 1"),
  773.  _T("243,19,0x4732,BS19/TS2 J SPORTS 2"),
  774. @@ -134,6 +142,7 @@
  775.  NULL
  776.  };
  777.  
  778. +using namespace std ;
  779.  
  780.  //////////////////////////////////////////////////////////////////////
  781.  // インスタンス生成メソッド
  782. @@ -151,6 +160,41 @@
  783.  
  784.  
  785.  //////////////////////////////////////////////////////////////////////
  786. +// ユーティリティ
  787. +//////////////////////////////////////////////////////////////////////
  788. +
  789. +template<class String> String inline trim(const String &str)
  790. +{
  791. +  String str2 ; str2.clear() ;
  792. +  for(typename String::size_type i=0;i<str.size();i++) {
  793. +    if(unsigned(str[i])>0x20UL) {
  794. +      str2 = str.substr(i,str.size()-i) ;
  795. +      break ;
  796. +    }
  797. +  }
  798. +  if(str2.empty()) return str2 ;
  799. +  for(typename String::size_type i=str2.size();i>0;i--) {
  800. +    if(unsigned(str2[i-1])>0x20UL) {
  801. +      return str2.substr(0,i) ;
  802. +    }
  803. +  }
  804. +  str2.clear() ;
  805. +  return str2 ;
  806. +}
  807. +
  808. +static wstring mbcs2wcs(string src)
  809. +{
  810. +    if(src.empty()) return wstring(L"") ;
  811. +    wchar_t *wcs = new wchar_t[src.length()*2 + 2];
  812. +    size_t wLen = 0;
  813. +    setlocale(LC_ALL,"japanese");
  814. +    mbstowcs_s(&wLen, wcs, src.length()*2+1 , src.c_str(), _TRUNCATE);
  815. +    wstring result = wcs ;
  816. +    delete [] wcs;
  817. +    return result ;
  818. +}
  819. +
  820. +//////////////////////////////////////////////////////////////////////
  821.  // 構築/消滅
  822.  //////////////////////////////////////////////////////////////////////
  823.  
  824. @@ -164,14 +208,16 @@
  825.     : m_pUsbFx2Driver(NULL)
  826.     , m_hOnStreamEvent(NULL)
  827.     , m_hMutex(NULL)
  828. +   , is_channel_valid(FALSE)
  829.  {
  830. -   char    bf[256];
  831. -   char    key[8];
  832. +   //char  bf[256];
  833. +   //char  key[8];
  834.  
  835.     m_pThis = this;
  836.     fOpened=false;
  837.  
  838. -   LoadIni();
  839. +    m_yFx2Id = 0 ;
  840. +   InitTunerProperty();
  841.  }
  842.  
  843.  //*****    Destructor  *****
  844. @@ -192,7 +238,6 @@
  845.  
  846.  const BOOL CBonTuner::OpenTuner()
  847.  {
  848. -   FILE    *fp;
  849.     int     sz;
  850.  
  851.  // OutputDebugString(_T("OpenTuner\n"));
  852. @@ -204,6 +249,9 @@
  853.     m_pUsbFx2Driver = new CUsbFx2Driver(this);
  854.     if(!m_pUsbFx2Driver)return false;
  855.    
  856. +    // ストリーム一時停止
  857. +    is_channel_valid = FALSE ;
  858. +
  859.     // FX2の初期化シーケンス
  860.     try{
  861.         // FIFOバッファ確保
  862. @@ -215,6 +263,8 @@
  863.         sz=sizeof(DefBulldogFW);
  864.         memcpy(BulldogFirmWare,DefBulldogFW,sz);
  865.  
  866. +       #ifdef _DEBUG
  867. +       FILE    *fp;
  868.         fopen_s(&fp, "Bulldog.fw","rb");
  869.         if (fp)
  870.         {
  871. @@ -227,9 +277,10 @@
  872.             }
  873.             fclose(fp);
  874.         }
  875. +       #endif
  876.  
  877.         // ドライバオープン
  878. -       if(!m_pUsbFx2Driver->OpenDriver(0x00U, BulldogFirmWare, sz,"Bulldog_FIFO"))throw (const DWORD)__LINE__;             //xxxxx
  879. +       if(!m_pUsbFx2Driver->OpenDriver(m_yFx2Id, BulldogFirmWare, sz,/*"Bulldog_FIFO"*/"FX2_FIFO"))throw (const DWORD)__LINE__;                //xxxxx
  880.  
  881.         // エンドポイント追加
  882.         if(!m_pUsbFx2Driver->AddEndPoint(0x81U))throw (const DWORD)__LINE__;    // EPINDEX_IN
  883. @@ -241,14 +292,14 @@
  884.         if(!m_pUsbFx2Driver->TransmitFormatedData(EPINDEX_OUT, 6UL, CMD_PORT_CFG, 0x00U, PIO_START, CMD_MODE_IDLE, CMD_IFCONFIG, 0xE3U))throw (const DWORD)__LINE__;
  885.  
  886.         // スレッド起動
  887. -       if(!m_pUsbFx2Driver->CreateFifoThread(0x86U, NULL, TSDATASIZE))throw (const DWORD)__LINE__;
  888. +       if(!m_pUsbFx2Driver->CreateFifoThread(0x86U, &m_dwFifoThreadIndex, TSDATASIZE, TSQUEUENUM, TSTHREADWAIT, TSTHREADPRIORITY, TSDUALTHREADING))throw (const DWORD)__LINE__;
  889.  
  890.         // 開始コマンド送信
  891.  //     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__;
  892.         if(!m_pUsbFx2Driver->TransmitFormatedData(EPINDEX_OUT, 3UL, CMD_EP6IN_START, CMD_PORT_WRITE, PIO_START))throw (const DWORD)__LINE__;
  893.  
  894.         // ミューテックス作成
  895. -       if(!(m_hMutex = ::CreateMutex(NULL, TRUE, MUTEX_NAME)))throw (const DWORD)__LINE__;
  896. +       if(!(m_hMutex = ::CreateMutex(NULL, TRUE, m_szTunerName)))throw (const DWORD)__LINE__;
  897.  
  898.         // 成功
  899.     }
  900. @@ -316,11 +367,14 @@
  901.     ch:13-62    UHF
  902.     ch:113-163  ケーブルTV
  903.  */
  904. -void   CBonTuner::SetISDBTChannel(int ch)
  905. +void   CBonTuner::SetISDBTChannel(int ch,float MegaHz)
  906.  {
  907. -   SetMxl5007(ch);
  908. -   SetTC90502(ISDB_T);
  909. -   Sleep(100);
  910. +   for(DWORD i=0;i<ISDBTCOMMANDSENDTIMES;i++) {
  911. +     //if(i) Sleep(100) ;
  912. +      SetMxl5007(ch,MegaHz);
  913. +     //if(TC90502_OK==SetTC90502(ISDB_T)) break ;
  914. +     Sleep(ISDBTCOMMANDSENDWAIT);
  915. +    }
  916.  }
  917.  
  918.  //*****    Set ISDB-S Channel  *****
  919. @@ -329,14 +383,16 @@
  920.     ch:1-23 (奇数)    BS
  921.     ch:2-24 (偶数)    CS
  922.  */
  923. -void   CBonTuner::SetISDBSChannel(int ch,int tsid)
  924. +void   CBonTuner::SetISDBSChannel(int ch,int tsid,float MegaHz)
  925.  {
  926. -   SetStv6110a(ch);
  927. +   for(DWORD i=0;i<ISDBSCOMMANDSENDTIMES;i++) {
  928. +      SetStv6110a(ch,MegaHz);
  929.     SetTC90502(ISDB_S);
  930.     SetTSID(tsid);
  931.  
  932.     WriteReg(DEMODSADRS,0x03,0x01);                         //同期シーケンス開始
  933. -   Sleep(100);
  934. +      Sleep(ISDBSCOMMANDSENDWAIT);
  935. +    }
  936.  /*
  937.     DWORD   tm=GetTickCount()+3000;
  938.  
  939. @@ -384,10 +440,12 @@
  940.  
  941.  CLockStatus    CBonTuner::IsLock(void)
  942.  {
  943. -   if (m_dwCurSpace<3)
  944. +   DWORD ch = GetCurSerialChannel() ;
  945. +   if (m_Channels[ch].isISDBT())
  946.         return(IsLockISDBT());
  947. -
  948. +   else if (m_Channels[ch].isISDBS())
  949.     return(IsLockISDBS());
  950. +   return stUnknown ;
  951.  }
  952.  
  953.  //*****    Get C/N *****
  954. @@ -399,10 +457,12 @@
  955.     double          cn;
  956.     double          p,p2,p3,p4;
  957.  
  958. -   if (fOpened==false)
  959. +   if (!fOpened||!is_channel_valid)
  960.         return(0);
  961.  
  962. -   if (m_dwCurSpace<3)                                                     //ISDB-T
  963. +   DWORD ch = GetCurSerialChannel() ;
  964. +
  965. +   if (m_Channels[ch].isISDBT())                                                       //ISDB-T
  966.     {
  967.         I2CRead(DEMODTADRS,0x8B,3,Data);
  968.         cndata=(Data[0]<<16) | (Data[1]<<8) | Data[2];
  969. @@ -412,7 +472,7 @@
  970.         p4=p3*p;
  971.         cn=(double)0.000024*p4-0.0016*p3+0.0398*p2+0.5491*p+3.0965;
  972.     }
  973. -   else {                                                                  //BS/CS
  974. +   else if(m_Channels[ch].isISDBS()) {                                                                 //BS/CS
  975.         I2CRead(DEMODSADRS,0xBC,2,Data);
  976.         cndata=(Data[0]<<8) | Data[1];
  977.         if (cndata>=3000)
  978. @@ -423,6 +483,8 @@
  979.         else {
  980.             cn=0;
  981.         }
  982. +   }else {
  983. +      cn = 0 ;
  984.     }
  985.  
  986.     if ((cn<0) || (cndata==0))
  987. @@ -439,14 +501,18 @@
  988.     int     berdata,packetcycle;
  989.     double  ber;
  990.  
  991. -   if (m_dwCurSpace<3)
  992. +   DWORD ch = GetCurSerialChannel() ;
  993. +
  994. +   if (m_Channels[ch].isISDBT())                                                       //ISDB-T
  995.     {
  996.         I2CRead(DEMODTADRS,0xA0,3,darray);
  997.         I2CRead(DEMODTADRS,0xA6,2,carray);
  998.     }
  999. -   else {
  1000. +   else if(m_Channels[ch].isISDBS()) {                                                                 //BS/CS
  1001.         I2CRead(DEMODTADRS+1,0xEB,3,darray);
  1002.         I2CRead(DEMODTADRS+1,0xEE,2,carray);
  1003. +   }else {
  1004. +       return 0.0 ;
  1005.     }
  1006.  
  1007.     packetcycle=(carray[0]<<8) | carray[1];
  1008. @@ -459,22 +525,59 @@
  1009.     return(ber);
  1010.  }
  1011.  
  1012. +
  1013. +//*****    SetChannelSub   *****
  1014. +
  1015. +const BOOL CBonTuner::SetChannelSub(const DWORD dwCh)
  1016. +{
  1017. +    //ストリーム一時停止
  1018. +    is_channel_valid = FALSE;
  1019. +
  1020. +    // 撮り溜めたTSストリームの破棄
  1021. +    PurgeTsStream();
  1022. +
  1023. +    if(dwCh >= m_Channels.size()){
  1024. +        return FALSE;
  1025. +    }
  1026. +
  1027. +    //チューニング
  1028. +    if(m_Channels[dwCh].isISDBT()) {  // 地上波
  1029. +      SetISDBTChannel(m_Channels[dwCh].Channel,m_Channels[dwCh].MegaHz) ;
  1030. +    }else if(m_Channels[dwCh].isISDBS()) { // BS/CS
  1031. +      SetISDBSChannel(m_Channels[dwCh].Channel,
  1032. +        m_Channels[dwCh].TSID,m_Channels[dwCh].MegaHz) ;
  1033. +    }else {
  1034. +      return FALSE ;
  1035. +    }
  1036. +
  1037. +    //ストリーム再開
  1038. +    is_channel_valid = TRUE;
  1039. +
  1040. +    return TRUE ;
  1041. +}
  1042. +
  1043. +
  1044.  //*****    Set Channel *****
  1045.  
  1046.  const BOOL CBonTuner::SetChannel(const BYTE ch)
  1047.  {
  1048. -   if (ch<12)
  1049. -       m_dwCurSpace = 0;
  1050. -   else if (ch<63)
  1051. -       m_dwCurSpace = 1;
  1052. -   else if (ch<200)
  1053. -       m_dwCurSpace = 2;
  1054. +    if(!SetChannelSub(ch)) return FALSE ;
  1055.  
  1056. -   m_dwCurChannel = ch;
  1057. -
  1058. -   SetISDBTChannel(ch);
  1059. +    // チャンネル情報を更新
  1060. +    m_dwCurSpace=0;
  1061. +    m_dwCurChannel=0;
  1062. +    wstring space;
  1063. +    for(int i=0;i<ch;i++) {
  1064. +      if(!i) space = m_Channels[ch].Space ;
  1065. +      else if (m_Channels[ch].Space!=space) {
  1066. +        space = m_Channels[ch].Space ;
  1067. +        m_dwCurSpace++,m_dwCurChannel=0 ;
  1068. +        continue ;
  1069. +      }
  1070. +      m_dwCurChannel++;
  1071. +    }
  1072.  
  1073. -   return TRUE;
  1074. +    return TRUE ;
  1075.  }
  1076.  
  1077.  //*****    Get Signal Level    *****
  1078. @@ -486,7 +589,7 @@
  1079.     return((float)d);
  1080.  /*
  1081.     // FIFOバッファのFullnessを返す
  1082. -   return ((float)m_FifoBuffer.size() / (float)ASYNCBUFFSIZE * 100.0f);
  1083. +   return ((float)m_FifoBuffer.size() / (float)ASYNCTSQUEUENUM * 100.0f);
  1084.  */
  1085.  }
  1086.  
  1087. @@ -495,11 +598,14 @@
  1088.  const DWORD CBonTuner::WaitTsStream(const DWORD dwTimeOut)
  1089.  {
  1090.  // OutputDebugString(_T("WaitTsStream\n"));
  1091. -   return 0UL;
  1092. +// return 0UL;
  1093.  
  1094.     // 終了チェック
  1095.     if(!m_pUsbFx2Driver)return WAIT_ABANDONED;
  1096.  
  1097. +   // バッファ済みの場合は無駄に待機せずに制御を戻す @ 2014/01/26(Sun)
  1098. +   if(!m_FifoBuffer.empty()) return WAIT_OBJECT_0;
  1099. +
  1100.     // イベントがシグナル状態になるのを待つ
  1101.     const DWORD dwRet = ::WaitForSingleObject(m_hOnStreamEvent, (dwTimeOut)? dwTimeOut : INFINITE);
  1102.  
  1103. @@ -542,7 +648,7 @@
  1104.     {
  1105.         if(*pdwSize)
  1106.         {
  1107. -           ::CopyMemory(pDst, pSrc, *pdwSize);
  1108. +           CopyMemory(pDst, pSrc, *pdwSize);
  1109.         }
  1110.        
  1111.         return TRUE;
  1112. @@ -564,20 +670,19 @@
  1113.         return FALSE;
  1114.  
  1115.     // TSデータをバッファから取り出す
  1116. -   if(m_FifoBuffer.size())
  1117. -   {
  1118. +    if(m_FifoBuffer.size()){
  1119.         // データコピー
  1120. -       if(pdwSize)*pdwSize = TSDATASIZE;
  1121. -       if(ppDst)*ppDst = m_FifoBuffer.front();
  1122. +        *pdwSize = m_FifoBuffer.front().second; // TSDATASIZE;
  1123. +        *ppDst = m_FifoBuffer.front().first;
  1124.         m_FifoBuffer.pop();
  1125. -       if(pdwRemain)
  1126. -           *pdwRemain = m_FifoBuffer.size();
  1127. +        *pdwRemain = m_FifoBuffer.size() ;
  1128. +
  1129.         return TRUE;
  1130.     }
  1131.     else{
  1132.         // 取り出し可能なデータがない
  1133. -       if(pdwSize)*pdwSize = 0UL;
  1134. -       if(pdwRemain)*pdwRemain = 0UL;
  1135. +        *pdwSize = 0;
  1136. +        *pdwRemain = 0;
  1137.  
  1138.         return TRUE;
  1139.     }
  1140. @@ -602,15 +707,16 @@
  1141.  LPCTSTR CBonTuner::GetTunerName(void)
  1142.  {
  1143.     // チューナ名を返す
  1144. -   return TEXT("Bulldog");
  1145. +   return m_szTunerName ;
  1146.  }
  1147.  
  1148.  //*****    Is Tuner Opening    *****
  1149.  
  1150.  const BOOL CBonTuner::IsTunerOpening(void)
  1151.  {
  1152. +#if 1
  1153.     // チューナの使用中の有無を返す(全プロセスを通して)
  1154. -   HANDLE hMutex = ::OpenMutex(MUTEX_ALL_ACCESS, FALSE, MUTEX_NAME);
  1155. +   HANDLE hMutex = ::OpenMutex(MUTEX_ALL_ACCESS, FALSE, m_szTunerName);
  1156.    
  1157.     if(hMutex)
  1158.     {
  1159. @@ -622,95 +728,72 @@
  1160.         // チューナは開かれていない
  1161.         return FALSE;
  1162.     }
  1163. +#else
  1164. +    return fOpened ? TRUE : FALSE ;
  1165. +#endif
  1166.  }
  1167.  
  1168.  //*****    Enum Tuning Space   *****
  1169.  
  1170.  LPCTSTR CBonTuner::EnumTuningSpace(const DWORD dwSpace)
  1171.  {
  1172. -   // 使用可能なチューニング空間を返す
  1173. -   switch(dwSpace)
  1174. -   {
  1175. -       case 0UL :  return TEXT("VHF");
  1176. -       case 1UL :  return TEXT("UHF");
  1177. -       case 2UL :  return TEXT("CATV");
  1178. -       case 3UL :  return TEXT("BS");
  1179. -       case 4UL :  return TEXT("CS110");
  1180. -       default  :  return NULL;       
  1181. +    // 0は最初の空間を返す
  1182. +    if ( dwSpace == 0 ) return m_Channels[0].Space.c_str() ;
  1183. +    // 次の空間名を探す
  1184. +    DWORD dwSpcIdx = 0 ;
  1185. +    int nIdx0 = 0 ;
  1186. +    for ( CHANNELS::size_type nIdx = 0 ; nIdx < m_Channels.size() ; nIdx++ ) {
  1187. +        if ( m_Channels[nIdx0].Space == m_Channels[nIdx].Space ) continue ;
  1188. +        nIdx0 = nIdx ;
  1189. +        dwSpcIdx++ ;
  1190. +        if ( dwSpace == dwSpcIdx ) return m_Channels[nIdx].Space.c_str() ;
  1191.     }
  1192. +    return NULL ;
  1193.  }
  1194.  
  1195.  //*****    Enum Channel Name   *****
  1196.  
  1197.  LPCTSTR CBonTuner::EnumChannelName(const DWORD dwSpace, const DWORD dwChannel)
  1198.  {
  1199. -   // 使用可能なチャンネルを返す
  1200. -   switch(dwSpace)
  1201. -   {
  1202. -       case 0UL :                              //VHF
  1203. -           if (dwChannel>=VHFNumChannel)
  1204. -               return(NULL);
  1205. -           return((LPCTSTR)VHFChInfo[dwChannel].Name);
  1206. -       case 1UL :                              //UHF
  1207. -           if (dwChannel>=UHFNumChannel)
  1208. -               return(NULL);
  1209. -           return((LPCTSTR)UHFChInfo[dwChannel].Name);
  1210. -       case 2UL :                              //CATV
  1211. -           if (dwChannel>=CATVNumChannel)
  1212. -               return(NULL);
  1213. -           return((LPCTSTR)CATVChInfo[dwChannel].Name);
  1214. -       case 3UL :                              //BS
  1215. -           if (dwChannel>=BSNumChannel)
  1216. -               return(NULL);
  1217. -           return((LPCTSTR)BSChInfo[dwChannel].Name);
  1218. -       case 4UL :                              //CS110
  1219. -           if (dwChannel>=CSNumChannel)
  1220. -               return(NULL);
  1221. -           return((LPCTSTR)CSChInfo[dwChannel].Name);
  1222. -       default  :
  1223. -           // 非対応のチューニング空間
  1224. -           return NULL;
  1225. +    // 空間名を取得する
  1226. +    LPCTSTR pszSpace = EnumTuningSpace( dwSpace ) ;
  1227. +    if ( !pszSpace ) return NULL ;
  1228. +    wstring space = wstring(pszSpace) ;
  1229. +    // 空間名の一致するチャンネルを探す
  1230. +    DWORD dwChIdx = 0 ;
  1231. +    for ( CHANNELS::size_type nIdx = 0 ; nIdx < m_Channels.size() ; nIdx++ ) {
  1232. +        if ( space != m_Channels[nIdx].Space ) continue ;
  1233. +        if ( dwChIdx == dwChannel ) return m_Channels[nIdx].Name.c_str() ;
  1234. +        dwChIdx++ ;
  1235.     }
  1236. +    return NULL ;
  1237.  }
  1238.  
  1239.  //*****    Set Channel *****
  1240.  
  1241.  const BOOL CBonTuner::SetChannel(const DWORD dwSpace, const DWORD dwChannel)
  1242.  {
  1243. -   switch(dwSpace)
  1244. -   {
  1245. -   case 0:                                         //VHF
  1246. -       if (dwChannel>=VHFNumChannel)
  1247. -           return(FALSE);
  1248. -       SetISDBTChannel(VHFChInfo[dwChannel].Channel);
  1249. -       break;
  1250. -   case 1:                                         //UHF
  1251. -       if (dwChannel>=UHFNumChannel)
  1252. -           return(FALSE);
  1253. -       SetISDBTChannel(UHFChInfo[dwChannel].Channel);
  1254. -       break;
  1255. -   case 2:                                         //CATV
  1256. -       if (dwChannel>=CATVNumChannel)
  1257. -           return(FALSE);
  1258. -       SetISDBTChannel(CATVChInfo[dwChannel].Channel);
  1259. -       break;
  1260. -   case 3:                                         //BS
  1261. -       if (dwChannel>=CATVNumChannel)
  1262. -           return(FALSE);
  1263. -       SetISDBSChannel(BSChInfo[dwChannel].Channel,BSChInfo[dwChannel].TSID);
  1264. -       break;
  1265. -   case 4:                                         //CS
  1266. -       if (dwChannel>=CATVNumChannel)
  1267. -           return(FALSE);
  1268. -       SetISDBSChannel(CSChInfo[dwChannel].Channel,CSChInfo[dwChannel].TSID);
  1269. -       break;
  1270. -   default:
  1271. -       return(FALSE);
  1272. -   }
  1273. +    // 空間名を取得する
  1274. +    LPCTSTR pszSpace = EnumTuningSpace( dwSpace ) ;
  1275. +    if ( !pszSpace ) return FALSE ;
  1276. +    wstring space = wstring(pszSpace) ;
  1277. +    // 空間名の一致するチャンネルを探す
  1278. +    DWORD dwChIdx = 0 ;
  1279. +    for ( CHANNELS::size_type nIdx = 0 ; nIdx < m_Channels.size() ; nIdx++ ) {
  1280. +        if ( space != m_Channels[nIdx].Space ) continue ;
  1281. +        if ( dwChIdx == dwChannel ) {
  1282. +            // チャンネルを設定する
  1283. +            if( SetChannelSub(nIdx) ){
  1284.     m_dwCurSpace = dwSpace;
  1285.     m_dwCurChannel = dwChannel;
  1286. -
  1287.     return TRUE;
  1288. +            }else{
  1289. +                return FALSE;
  1290. +            }
  1291. +        }
  1292. +        dwChIdx++ ;
  1293. +    }
  1294. +    return FALSE ;
  1295.  }
  1296.  
  1297.  //*****    Get Current Space   *****
  1298. @@ -729,6 +812,26 @@
  1299.     return m_dwCurChannel;
  1300.  }
  1301.  
  1302. +//*****    Get Cur Serial Channel  *****
  1303. +
  1304. +DWORD CBonTuner::GetCurSerialChannel()
  1305. +{
  1306. +  wstring wsSpace ;
  1307. +  DWORD dwSpace,dwChannel ;
  1308. +  for(CHANNELS::size_type ch=0;ch<m_Channels.size();ch++) {
  1309. +    if(!ch) {
  1310. +      wsSpace = m_Channels[ch].Space ;
  1311. +      dwSpace = dwChannel = 0 ;
  1312. +    }else if(wsSpace!=m_Channels[ch].Space) {
  1313. +      dwSpace++; dwChannel=0; wsSpace=m_Channels[ch].Space;
  1314. +    }else
  1315. +      dwChannel++;
  1316. +    if(dwSpace==m_dwCurSpace&&dwChannel==m_dwCurChannel)
  1317. +      return ch ;
  1318. +  }
  1319. +  return 0 ;
  1320. +}
  1321. +
  1322.  //*****    Release *****
  1323.  
  1324.  void CBonTuner::Release()
  1325. @@ -741,13 +844,16 @@
  1326.  
  1327.  const bool CBonTuner::OnRecvFifoData(const DWORD dwThreadIndex, const BYTE *pData, const DWORD dwLen, CUsbFx2Driver *pDriver)
  1328.  {
  1329. +    if (dwThreadIndex == m_dwFifoThreadIndex) {
  1330.     CBlockLock Lock(&m_CriticalLock);
  1331. -
  1332. +        //有効なチャンネルが選択されている時に限って
  1333. +        if(is_channel_valid){
  1334.     // FIFOバッファにプッシュ
  1335.     PushFifoBuff(pData,dwLen);
  1336. -  
  1337. +        }
  1338.     // イベントセット
  1339.     ::SetEvent(m_hOnStreamEvent);
  1340. +    }
  1341.  
  1342.     return(true);
  1343.  }
  1344. @@ -760,9 +866,9 @@
  1345.     PurgeTsStream();
  1346.  
  1347.     // バッファプールを確保する
  1348. -   m_BufferPool.resize(ASYNCBUFFSIZE);
  1349. +    m_BufferPool.resize(ASYNCTSQUEUENUM);
  1350.  
  1351. -   for(DWORD dwPos = 0UL ; dwPos < ASYNCBUFFSIZE ; dwPos++){
  1352. +    for(DWORD dwPos = 0UL ; dwPos < ASYNCTSQUEUENUM ; dwPos++){
  1353.         m_BufferPool[dwPos].resize(TSDATASIZE);
  1354.         }
  1355.        
  1356. @@ -782,170 +888,178 @@
  1357.  
  1358.  //*****    Push Fifo Buffer    *****
  1359.  
  1360. -void CBonTuner::PushFifoBuff(const BYTE *pData,DWORD len)
  1361. +void CBonTuner::PushFifoBuff(const BYTE *pData,DWORD dwLen)
  1362.  {
  1363.     // バッファプールの最大数を超える場合は最後尾を切り捨てる
  1364. -   while(m_FifoBuffer.size() >= ASYNCBUFFSIZE)
  1365. -   {
  1366. +    while(m_FifoBuffer.size() >= ASYNCTSQUEUENUM){
  1367.         m_FifoBuffer.pop();
  1368.     }
  1369.  
  1370.     // バッファプールにデータコピー
  1371. -   BYTE *pWritePointer = &m_BufferPool[m_dwEmptyFifoPos][0];
  1372. -   ::CopyMemory(pWritePointer, pData, len/*TSDATASIZE*/);
  1373. +    m_BufferPool[m_dwEmptyFifoPos].resize(dwLen) ;
  1374. +    BYTE *pWritePointer = static_cast<BYTE*>(m_BufferPool[m_dwEmptyFifoPos].top()) ;
  1375. +    CopyMemory(pWritePointer, pData, dwLen );
  1376.  
  1377.     // FIFOバッファにプッシュ
  1378. -   m_FifoBuffer.push(pWritePointer);
  1379. +    m_FifoBuffer.push(make_pair(pWritePointer,dwLen));
  1380.  
  1381.     // バッファプール位置更新
  1382. -   if(++m_dwEmptyFifoPos >= ASYNCBUFFSIZE)m_dwEmptyFifoPos = 0UL;
  1383. +    if(++m_dwEmptyFifoPos >= ASYNCTSQUEUENUM)m_dwEmptyFifoPos = 0UL;
  1384.  }
  1385.  
  1386. -//*****    Load Ini File   *****
  1387.  
  1388. -void   CBonTuner::LoadIni(void)
  1389. +//***** Init Tuner Property *****
  1390. +
  1391. +void CBonTuner::InitTunerProperty()
  1392.  {
  1393. -   _TCHAR  IniName[256];
  1394. -   _TCHAR  bf[256];
  1395. -   _TCHAR  key[32];
  1396. -   _TCHAR  *p;
  1397. -   int     i;
  1398. +    //自分の名前を取得
  1399. +    char szMyPath[_MAX_PATH] ;
  1400. +    GetModuleFileNameA( m_hModule, szMyPath, _MAX_PATH ) ;
  1401. +    char szMyDrive[_MAX_FNAME] ;
  1402. +    char szMyDir[_MAX_FNAME] ;
  1403. +    char szMyName[_MAX_FNAME] ;
  1404. +    _splitpath_s( szMyPath, szMyDrive, _MAX_FNAME,szMyDir, _MAX_FNAME, szMyName, _MAX_FNAME, NULL, 0 ) ;
  1405. +    _strupr_s( szMyName, sizeof(szMyName) ) ;
  1406.  
  1407. -   memset(VHFChInfo,0x00,sizeof(TChannelInfo)*VHFMAXCHANNELS);
  1408. -   memset(UHFChInfo,0x00,sizeof(TChannelInfo)*UHFMAXCHANNELS);
  1409. -   memset(CATVChInfo,0x00,sizeof(TChannelInfo)*CATVMAXCHANNELS);
  1410. -   memset(BSChInfo,0x00,sizeof(TChannelInfo)*BSMAXCHANNELS);
  1411. -   memset(CSChInfo,0x00,sizeof(TChannelInfo)*CSMAXCHANNELS);
  1412. -   VHFNumChannel=0;
  1413. -   UHFNumChannel=0;
  1414. -   CATVNumChannel=0;
  1415. -   BSNumChannel=0;
  1416. -   CSNumChannel=0;
  1417. -
  1418. -   GetModuleFileName(NULL, IniName, MAX_PATH);
  1419. -   p=_tcsrchr(IniName, _T('\\'));
  1420. -   if (p)
  1421. -       *p=0;
  1422. -   _tcscat(IniName,_T("\\BonDriver_Bulldog.ini"));
  1423. +    // Fx2 の ID を決定
  1424. +    int nFx2Id=0 ;
  1425. +    sscanf_s( szMyName, "BONDRIVER_BULLDOG_%1d", &nFx2Id ) ;
  1426. +    m_yFx2Id = BYTE(nFx2Id) ;
  1427.  
  1428. -   if (GetFileAttributes(IniName)==-1)
  1429. -   {
  1430. -       for(i=1;    i<=12;  i++)
  1431. -       {
  1432. -           _stprintf(bf,_T("0,%d,0x0000,%d"),i,i);
  1433. -           GetChannelInfo(bf,&VHFChInfo[i-1]);
  1434. -       }
  1435. -       VHFNumChannel=i-1;
  1436. -       for(i=13;   i<=62;  i++)
  1437. -       {
  1438. -           _stprintf(bf,_T("0,%d,0x0000,%d"),i,i);
  1439. -           GetChannelInfo(bf,&UHFChInfo[i-13]);
  1440. -       }
  1441. -       UHFNumChannel=i-13;
  1442. -       for(i=13;   i<=63;  i++)
  1443. -       {
  1444. -           _stprintf(bf,_T("0,%d,0x0000,C%d"),i+100,i);
  1445. -           GetChannelInfo(bf,&CATVChInfo[i-13]);
  1446. -       }
  1447. -       CATVNumChannel=i-13;
  1448. -       for(i=0;    DefBSChInfo[i] != NULL; i++)
  1449. -       {
  1450. -           GetChannelInfo(DefBSChInfo[i],&BSChInfo[i]);
  1451. -       }
  1452. -       BSNumChannel=i;
  1453. -       for(i=0;    DefCSChInfo[i] != NULL; i++)
  1454. -       {
  1455. -           GetChannelInfo(DefCSChInfo[i],&CSChInfo[i]);
  1456. -       }
  1457. -       CSNumChannel=i;
  1458. +    //チューナー名を決定
  1459. +    _stprintf_s( m_szTunerName, 100, TEXT("%s(ID=%d)"), TEXT("ブルドッグ"), nFx2Id ) ;
  1460.  
  1461. -       return;
  1462. +    // Ini ファイルをロード
  1463. +    LoadIniFile(string(szMyDrive)+string(szMyDir)+"BonDriver_Bulldog.ini") ;
  1464. +    LoadIniFile(string(szMyDrive)+string(szMyDir)+string(szMyName)+".ini") ;
  1465. +
  1466. +    // Channel ファイルをロード
  1467. +    if(!LoadChannelFile(string(szMyDrive)+string(szMyDir)+string(szMyName)+".ch.txt")) {
  1468. +       if(!LoadChannelFile(string(szMyDrive)+string(szMyDir)+"BonDriver_Bulldog.ch.txt"))
  1469. +         InitChannelToDefault() ;
  1470.     }
  1471. +}
  1472.  
  1473. -//Channel=ServiceID,PhysicalChannel,TSID,Name
  1474. +//*****    Laod Ini File *****
  1475.  
  1476. -   for(i=0;    i<VHFMAXCHANNELS;   i++)
  1477. -   {
  1478. -       _stprintf(key,_T("%d"),i);
  1479. -       GetPrivateProfileString(_T("VHF"),key,_T(""),bf,256,IniName);
  1480. -       if (bf[0]==0)
  1481. -           break;
  1482. +bool    CBonTuner::LoadIniFile(std::string strIniFileName)
  1483. +{
  1484. +  if(GetFileAttributesA(strIniFileName.c_str())==-1) return false ;
  1485. +  #define LOADINT(key) do { \
  1486. +      key = GetPrivateProfileIntA("BonTuner",#key, \
  1487. +        key,strIniFileName.c_str()) ; \
  1488. +    }while(0)
  1489. +  LOADINT(TSDATASIZE) ;
  1490. +  LOADINT(TSQUEUENUM) ;
  1491. +  LOADINT(TSTHREADWAIT) ;
  1492. +  LOADINT(TSTHREADPRIORITY) ;
  1493. +  LOADINT(TSDUALTHREADING) ;
  1494. +  LOADINT(ASYNCTSQUEUENUM) ;
  1495. +  LOADINT(ISDBTCOMMANDSENDTIMES) ;
  1496. +  LOADINT(ISDBTCOMMANDSENDWAIT) ;
  1497. +  LOADINT(ISDBSCOMMANDSENDTIMES) ;
  1498. +  LOADINT(ISDBSCOMMANDSENDWAIT) ;
  1499. +  #undef LOADINT
  1500. +  return true ;
  1501. +}
  1502.  
  1503. -       GetChannelInfo(bf,&VHFChInfo[i]);
  1504. -   }
  1505. -   VHFNumChannel=i;
  1506. +//*****    Load Channel File *****
  1507.  
  1508. -   for(i=0;    i<UHFMAXCHANNELS;   i++)
  1509. -   {
  1510. -       _stprintf(key,_T("%d"),i);
  1511. -       GetPrivateProfileString(_T("UHF"),key,_T(""),bf,256,IniName);
  1512. -       if (bf[0]==0)
  1513. -           break;
  1514. +bool   CBonTuner::LoadChannelFile(std::string strChannelFileName)
  1515. +{
  1516. +    FILE *st=NULL ;
  1517. +    fopen_s(&st,strChannelFileName.c_str(),"rt") ;
  1518. +    if(!st) return false;
  1519. +    char s[512] ;
  1520.  
  1521. -       GetChannelInfo(bf,&UHFChInfo[i]);
  1522. +    m_Channels.clear() ;
  1523. +    while(!feof(st)) {
  1524. +      s[0]='\0' ;
  1525. +      fgets(s,512,st) ;
  1526. +      string strLine = trim(string(s)) ;
  1527. +      wstring wstrLine = mbcs2wcs(strLine) ;
  1528. +      AddChannel(wstrLine) ;
  1529. +      //DBGOUT("%s",s) ;
  1530.     }
  1531. -   UHFNumChannel=i;
  1532.  
  1533. -   for(i=0;    i<CATVMAXCHANNELS;  i++)
  1534. -   {
  1535. -       _stprintf(key,_T("%d"),i);
  1536. -       GetPrivateProfileString(_T("CATV"),key,_T(""),bf,256,IniName);
  1537. -       if (bf[0]==0)
  1538. -           break;
  1539. +    fclose(st) ;
  1540. +
  1541. +    return true ;
  1542.  
  1543. -       GetChannelInfo(bf,&CATVChInfo[i]);
  1544. +}
  1545. +
  1546. +//*****    Init Channel To Default *****
  1547. +
  1548. +void    CBonTuner::InitChannelToDefault()
  1549. +{
  1550. +   wchar_t bf[256];
  1551. +
  1552. +    m_Channels.clear() ;
  1553. +
  1554. +    for(int i=1;   i<=12;  i++)
  1555. +    {
  1556. +        swprintf_s(bf,_countof(bf),_T("VHF,0,%d,0x0000,%d"),i,i);
  1557. +        AddChannel(bf);
  1558.     }
  1559. -   CATVNumChannel=i;
  1560.  
  1561. -   for(i=0;    i<BSMAXCHANNELS;    i++)
  1562. +    for(int i=13;  i<=62;  i++)
  1563.     {
  1564. -       _stprintf(key,_T("%d"),i);
  1565. -       GetPrivateProfileString(_T("BS"),key,_T(""),bf,256,IniName);
  1566. -       if (bf[0]==0)
  1567. -           break;
  1568. +        swprintf_s(bf,_countof(bf),_T("UHF,0,%d,0x0000,%d"),i,i);
  1569. +        AddChannel(bf);
  1570. +    }
  1571.  
  1572. -       GetChannelInfo(bf,&BSChInfo[i]);
  1573. +    for(int i=13;  i<=63;  i++)
  1574. +    {
  1575. +        swprintf_s(bf,_countof(bf),_T("CATV,0,%d,0x0000,C%d"),i+100,i);
  1576. +        AddChannel(bf);
  1577.     }
  1578. -   BSNumChannel=i;
  1579.  
  1580. -   for(i=0;    i<CSMAXCHANNELS;    i++)
  1581. +    for(int i=0;   DefBSChInfo[i] != NULL; i++)
  1582.     {
  1583. -       _stprintf(key,_T("%d"),i);
  1584. -       GetPrivateProfileString(_T("CS110"),key,_T(""),bf,256,IniName);
  1585. -       if (bf[0]==0)
  1586. -           break;
  1587. +        swprintf_s(bf,_countof(bf),_T("BS,%s"),DefBSChInfo[i]);
  1588. +        AddChannel(bf);
  1589. +    }
  1590.  
  1591. -       GetChannelInfo(bf,&CSChInfo[i]);
  1592. +    for(int i=0;   DefCSChInfo[i] != NULL; i++)
  1593. +    {
  1594. +        swprintf_s(bf,_countof(bf),_T("CS110,%s"),DefCSChInfo[i]);
  1595. +        AddChannel(bf);
  1596.     }
  1597. -   CSNumChannel=i;
  1598. -}
  1599.  
  1600. -//*****    Get Channel Info    *****
  1601. +}
  1602.  
  1603. -//Channel=ServiceID,PhysicalChannel,TSID,Name
  1604. +//*****    Add Channel *****
  1605.  
  1606. -void   CBonTuner::GetChannelInfo(_TCHAR *bf,TChannelInfo *ChInfo)
  1607. +bool CBonTuner::AddChannel(std::wstring wstrLine)
  1608.  {
  1609. -   _TCHAR  *p,*q;
  1610. -
  1611. -   memset(ChInfo,0x00,sizeof(TChannelInfo));
  1612. -
  1613. -   ChInfo->ServiceID=_tcstol(bf,&q,10);
  1614. -   if ((q) && (*q==_T(',')))
  1615. -   {
  1616. -       p=q+1;
  1617. -       ChInfo->Channel=_tcstol(p,&q,10);
  1618. -       if ((q) && (*q==_T(',')))
  1619. -       {
  1620. -           p=q+1;
  1621. -           ChInfo->TSID=_tcstol(p,&q,16);
  1622. -           if ((q) && (*q==_T(',')))
  1623. -           {
  1624. -               p=q+1;
  1625. -               _tcsncpy(ChInfo->Name,p,256);
  1626. +    int t=0 ;
  1627. +    wstring params[5] ;
  1628. +    params[0] = params[1] = params[2] = params[3] = params[4] = L"" ;
  1629. +    for(size_t i=0;i<wstrLine.length();i++) {
  1630. +      if(wstrLine[i]==L';') break ;
  1631. +      else if(wstrLine[i]==L',') {
  1632. +        t++ ; if(t==5) break ;
  1633. +      }else params[t] += wstrLine[i] ;
  1634.             }
  1635. +    if(t>=4) {
  1636. +      for(int i=0;i<5;i++) params[i] = trim(params[i]) ;
  1637. +      int ServiceID = 0 ;
  1638. +      int Channel = 0 ;
  1639. +      float MegaHz = 0.f ;
  1640. +      int TSID = 0 ;
  1641. +      swscanf_s(params[1].c_str(),L"%i",&ServiceID,sizeof(ServiceID)) ;
  1642. +      if( params[2].length()>3&&
  1643. +          params[2].substr(params[2].length()-3)==L"MHz" ) {
  1644. +        swscanf_s(params[2].c_str(),L"%fMHz",&MegaHz) ;
  1645. +      }else {
  1646. +        swscanf_s(params[2].c_str(),L"%i",&Channel,sizeof(Channel)) ;
  1647.         }
  1648. +      swscanf_s(params[3].c_str(),L"%i",&TSID,sizeof(TSID)) ;
  1649. +      m_Channels.push_back(
  1650. +        CHANNEL(params[0],ServiceID,Channel,TSID,params[4],MegaHz)) ;
  1651. +      return true ;
  1652.     }
  1653. +    return false ;
  1654.  }
  1655.  
  1656.  //*****    I2C Write   *****
  1657. @@ -981,7 +1095,7 @@
  1658.  {
  1659.     BYTE    cmd[64];
  1660.     DWORD   cmd_len=0;
  1661. -   int     i;
  1662. +   //int       i;
  1663.  
  1664.     cmd[cmd_len++]=CMD_I2C_READ;
  1665.     cmd[cmd_len++]=adrs;
  1666. @@ -1004,7 +1118,7 @@
  1667.  {
  1668.     BYTE    cmd[64];
  1669.     DWORD   cmd_len=0;
  1670. -   int     i;
  1671. +   //int       i;
  1672.  
  1673.     cmd[cmd_len++]=CMD_I2C_WRITE;
  1674.     cmd[cmd_len++]=adrs;
  1675. @@ -1032,7 +1146,7 @@
  1676.  {
  1677.     BYTE    cmd[64];
  1678.     DWORD   cmd_len=0;
  1679. -   int     i;
  1680. +   //int       i;
  1681.  
  1682.     cmd[cmd_len++]=CMD_I2C_WRITE;
  1683.     cmd[cmd_len++]=adrs;
  1684. diff -uPrb Org/BonTuner.h Mod/BonTuner.h
  1685. --- Org/BonTuner.h  2012-02-22 16:36:04.000000000 +0900
  1686. +++ Mod/BonTuner.h  2014-01-26 07:44:09.000000000 +0900
  1687. @@ -10,29 +10,92 @@
  1688.  #include "UsbFx2Driver.h"
  1689.  #include <vector>
  1690.  #include <queue>
  1691. -
  1692. -using std::vector;
  1693. -using std::queue;
  1694. -
  1695. -#define    VHFMAXCHANNELS  12
  1696. -#define    UHFMAXCHANNELS  50
  1697. -#define    CATVMAXCHANNELS 51
  1698. -#define    BSMAXCHANNELS   64
  1699. -#define    CSMAXCHANNELS   256
  1700. -
  1701. -
  1702. -typedef    struct {
  1703. -   WORD    ServiceID;
  1704. -   int     Channel;
  1705. -   WORD    TSID;
  1706. -   _TCHAR  Name[256];
  1707. -}  TChannelInfo;
  1708. +#include <string>
  1709.  
  1710.  typedef enum   CLockStatus {stLock, stLostLock, stNoSignal, stUnknown };
  1711.  
  1712.  class CBonTuner :  public IBonDriver2,
  1713.             protected IUsbFx2DriverHost
  1714.  {
  1715. +private:
  1716. +    // CHANNEL/CHANNELS
  1717. +    struct CHANNEL {
  1718. +        std::wstring Space ;
  1719. +        WORD       ServiceID;
  1720. +        int            Channel;
  1721. +        float       MegaHz ;
  1722. +        WORD       TSID;
  1723. +        std::wstring   Name ;
  1724. +        bool isISDBT() { return TSID==0 ; }
  1725. +        bool isISDBS() { return !isISDBT() ; }
  1726. +        bool isChannelTuning() { return Channel!=0 ; }
  1727. +        bool isMegaHzTuning() { return !isChannelTuning() ; }
  1728. +        CHANNEL(std::wstring _Space, WORD _ServiceID,int _Channel,WORD _TSID,
  1729. +          std::wstring _Name, float _MegaHz=0.f) {
  1730. +            Space = _Space ;
  1731. +            ServiceID = _ServiceID ;
  1732. +            Channel = _Channel ;
  1733. +            TSID = _TSID ;
  1734. +            Name = _Name ;
  1735. +            MegaHz = _MegaHz ;
  1736. +        }
  1737. +        CHANNEL(const CHANNEL &_Src) {
  1738. +            Space = _Src.Space ;
  1739. +            ServiceID = _Src.ServiceID ;
  1740. +            Channel = _Src.Channel ;
  1741. +            TSID = _Src.TSID ;
  1742. +            Name = _Src.Name ;
  1743. +            MegaHz = _Src.MegaHz ;
  1744. +        }
  1745. +    } ;
  1746. +    typedef std::vector<CHANNEL> CHANNELS ;
  1747. +    // BUFFER/BUFFERPOOL
  1748. +    struct BUFFER {
  1749. +        BUFFER() : _buffer(NULL), _size(0UL) {}
  1750. +        BUFFER(const BUFFER &src )
  1751. +         : _buffer(NULL), _size(0UL) {
  1752. +          *this = src ;
  1753. +        }
  1754. +        BUFFER(const void *buffer, size_t size)
  1755. +         : _buffer(NULL), _size(0UL) {
  1756. +          resize(size) ;
  1757. +          if(_buffer&&_size==size)
  1758. +            CopyMemory(_buffer,buffer,size) ;
  1759. +        }
  1760. +        ~BUFFER() {
  1761. +          if(_buffer) std::free(_buffer) ;
  1762. +        }
  1763. +        BUFFER &operator =(const BUFFER &src) {
  1764. +          resize(src._size) ;
  1765. +          if(_buffer&&_size==src._size)
  1766. +            CopyMemory(_buffer,src._buffer,src._size) ;
  1767. +          return *this ;
  1768. +        }
  1769. +        void resize(size_t size) {
  1770. +          if(_size!=size) {
  1771. +            if(!size) {
  1772. +              if(_buffer) {
  1773. +                free(_buffer) ;
  1774. +                _buffer=NULL ;
  1775. +              }
  1776. +            }else {
  1777. +              if(_buffer) {
  1778. +                _buffer = std::realloc(_buffer,size) ;
  1779. +              }else {
  1780. +                _buffer = std::malloc(size) ;
  1781. +              }
  1782. +            }
  1783. +            if(_buffer) _size = size ;
  1784. +            else _size = 0UL ;
  1785. +          }
  1786. +        }
  1787. +        void *top() const { return _buffer ; }
  1788. +        size_t size() const { return _size ; }
  1789. +    private:
  1790. +        void *_buffer ;
  1791. +        size_t _size ;
  1792. +    };
  1793. +    typedef std::vector<BUFFER> BUFFERPOOL ;
  1794.  public:
  1795.     CBonTuner();
  1796.     virtual ~CBonTuner();
  1797. @@ -42,8 +105,8 @@
  1798.     int I2CRead(unsigned char adrs,unsigned char reg,int len,unsigned char *data);
  1799.     int I2CRead(unsigned char adrs,unsigned tadrs,unsigned char reg,int len,unsigned char *data);
  1800.     void    SetTSID(int tsid);
  1801. -   void    SetISDBTChannel(int ch);
  1802. -   void    SetISDBSChannel(int ch,int tsid);
  1803. +   void    SetISDBTChannel(int ch,float MegaHz=0.f);
  1804. +   void    SetISDBSChannel(int ch,int tsid,float MegaHz=0.f);
  1805.     CLockStatus IsLockISDBT(void);
  1806.     CLockStatus IsLockISDBS(void);
  1807.     CLockStatus IsLock(void);
  1808. @@ -88,34 +151,36 @@
  1809.     void AllocFifoBuff(void);
  1810.     void FreeFifoBuff(void);
  1811.  
  1812. -   inline void PushFifoBuff(const BYTE *pData,DWORD len);
  1813. +   inline void PushFifoBuff(const BYTE *pData,DWORD dwLen);
  1814.  
  1815. -   void    LoadIni(void);
  1816. -   void    GetChannelInfo(_TCHAR *bf,TChannelInfo *ChInfo);
  1817. +    void   InitTunerProperty() ;
  1818. +   bool    LoadIniFile(std::string strIniFileName);
  1819. +   bool    LoadChannelFile(std::string strChannelFileName);
  1820. +   void    InitChannelToDefault() ;
  1821. +   bool    AddChannel(std::wstring wstrLine) ;
  1822. +    const BOOL SetChannelSub(const DWORD dwCh) ;
  1823.  
  1824.     CUsbFx2Driver   *m_pUsbFx2Driver;
  1825.     CCriticalLock   m_CriticalLock;
  1826.     HANDLE          m_hOnStreamEvent;
  1827.  
  1828. -   queue<BYTE *>   m_FifoBuffer;
  1829. -   vector<vector<BYTE>>    m_BufferPool;
  1830. +    std::queue< std::pair<BYTE *,size_t> > m_FifoBuffer;
  1831. +    BUFFERPOOL m_BufferPool ;
  1832.     DWORD           m_dwEmptyFifoPos;
  1833. +   DWORD           m_dwFifoThreadIndex;
  1834.    
  1835.     bool            fOpened;
  1836.     HANDLE          m_hMutex;
  1837.  
  1838.     DWORD           m_dwCurSpace;
  1839.     DWORD           m_dwCurChannel;
  1840. +   DWORD           GetCurSerialChannel() ;
  1841. +
  1842. +    // チューナーのプロパティ
  1843. +    BYTE m_yFx2Id ;
  1844. +    TCHAR m_szTunerName[100] ;
  1845. +    CHANNELS m_Channels ;
  1846. +
  1847. +    BOOL is_channel_valid ;
  1848.  
  1849. -   TChannelInfo    VHFChInfo[VHFMAXCHANNELS];
  1850. -   TChannelInfo    UHFChInfo[UHFMAXCHANNELS];
  1851. -   TChannelInfo    CATVChInfo[CATVMAXCHANNELS];
  1852. -   TChannelInfo    BSChInfo[BSMAXCHANNELS];
  1853. -   TChannelInfo    CSChInfo[CSMAXCHANNELS];
  1854. -
  1855. -   int             VHFNumChannel;
  1856. -   int             UHFNumChannel;
  1857. -   int             CATVNumChannel;
  1858. -   int             BSNumChannel;
  1859. -   int             CSNumChannel;
  1860.  };
  1861. diff -uPrb Org/Cusb2/cusb2.cpp Mod/Cusb2/cusb2.cpp
  1862. --- Org/Cusb2/cusb2.cpp 2012-02-22 15:36:26.000000000 +0900
  1863. +++ Mod/Cusb2/cusb2.cpp 2014-11-13 20:58:35.000000000 +0900
  1864. @@ -65,6 +65,8 @@
  1865.             wchar_t wcs[64];
  1866.             size_t n;
  1867.             mbstowcs_s(&n, wcs, 64, (char *)string1, 64);
  1868. +           TRACE(L"fwload: Manufacturer=\"%s\", Compare=\"%s\"\r\n"
  1869. +             ,USBDevice->Manufacturer,wcs) ;
  1870.             if(wcscmp(USBDevice->Manufacturer, wcs) == 0)
  1871.                 return true;
  1872.         }
  1873. @@ -166,7 +168,17 @@
  1874.     return(ep->XferData(buf, len));
  1875.  }
  1876.  
  1877. -// Modified by 拡張ツール中の人
  1878. +struct DUAL_TRANSFER_CONTEXT
  1879. +{
  1880. +  HANDLE evDataAvailable ;
  1881. +  HANDLE evTransferCompleted ;
  1882. +  int *len ;
  1883. +  OVERLAPPED *ovlp ;
  1884. +  PUCHAR *data ;
  1885. +  PUCHAR *context ;
  1886. +};
  1887. +
  1888. +// Modified by 拡張ツール中の人 ( Fixed by ◆PRY8EAlByw )
  1889.  void cusb2::thread_proc(cusb2_tcb *tcb)
  1890.  {
  1891.     u32 i;
  1892. @@ -175,36 +187,70 @@
  1893.     LONG len;
  1894.     CCyUSBEndPoint *ep;
  1895.  
  1896. +    tcb->idTh = ::GetCurrentThreadId() ;
  1897.  
  1898.     ep = tcb->ep;
  1899.     tcb->nsuccess = 0;
  1900.     tcb->nfailure = 0;
  1901.     tcb->looping = true;
  1902. -   tcb->fTerminate=false;
  1903. +
  1904. +    tcb->fTerminate = false ;
  1905.  
  1906.     OVERLAPPED *ovlp = new OVERLAPPED[tcb->ques];
  1907.     PUCHAR *data = new PUCHAR[tcb->ques];
  1908.     PUCHAR *context = new PUCHAR[tcb->ques];
  1909.     ep->SetXferSize(tcb->xfer);
  1910. -   BOOL ret=SetThreadPriority(tcb->th, THREAD_PRIORITY_HIGHEST);
  1911. +   BOOL ret=SetThreadPriority(tcb->th, tcb->prior);
  1912. +
  1913. +    const DWORD WAIT_MSEC_LIMIT = tcb->wait ;
  1914. +
  1915. +    DUAL_TRANSFER_CONTEXT *dtc = NULL ;
  1916. +    HANDLE thData = NULL ;
  1917. +
  1918. +    const bool incoming = (tcb->epaddr & 0x80) ? true : false ;
  1919. +    const bool dual = tcb->fDualTransfer && tcb->looping && incoming ;
  1920. +
  1921. +    if(dual) {  // Setup the dual transfer threading context.
  1922. +      dtc = new DUAL_TRANSFER_CONTEXT ;
  1923. +      dtc->len = new int[tcb->ques] ;
  1924. +      dtc->evDataAvailable = CreateEvent(NULL,false,false,NULL) ;
  1925. +      dtc->evTransferCompleted = CreateEvent(NULL,false,false,NULL) ;
  1926. +      dtc->ovlp = ovlp ;
  1927. +      dtc->data = data ;
  1928. +      dtc->context = context ;
  1929. +      tcb->lpDualTransferContext = (LPVOID) dtc ;
  1930. +      thData = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)cusb2::data_transfer_thread_proc, tcb, CREATE_SUSPENDED, NULL) ;
  1931. +      SetThreadPriority(thData,tcb->prior) ;
  1932. +    }
  1933.  
  1934. -   if(tcb->epaddr & 0x80)
  1935. +   if(incoming)
  1936.     {   //IN(FX2->PC)転送
  1937.         for(i=0; i<tcb->ques; i++)
  1938.         {
  1939.             data[i] = new UCHAR[tcb->xfer];
  1940. +            if(dual) dtc->len[i] = -1 ; // Init all to no data available.
  1941.             ovlp[i].hEvent = CreateEvent(NULL, false, false, NULL);
  1942.             context[i] = ep->BeginDataXfer(data[i], tcb->xfer, &(ovlp[i]));
  1943.             qnum++;
  1944.         }
  1945. -       for(i=0;;)
  1946. +       if(dual) {
  1947. +          // Start a data transfer threading process.
  1948. +          ::ResumeThread(thData) ;
  1949. +        }
  1950. +        for(i=0;!tcb->fTerminate;)
  1951.         {
  1952. -           if (tcb->fTerminate)
  1953. -               break;
  1954. -           if(!ep->WaitForXfer(&(ovlp[i]),500))
  1955. +           if(dual&&tcb->looping) {
  1956. +              while(dtc->len[i]>=0) { // Wait for a data transfer completed event.
  1957. +                WaitForSingleObject(dtc->evTransferCompleted,WAIT_MSEC_LIMIT) ;
  1958. +                if(tcb->fTerminate||!tcb->looping) break ;
  1959. +              }
  1960. +              if(tcb->fTerminate) break ;
  1961. +            }
  1962. +
  1963. +            if(!ep->WaitForXfer(&(ovlp[i]),WAIT_MSEC_LIMIT))
  1964.             {
  1965.                 ep->Abort();
  1966. -               WaitForSingleObject(&(ovlp[i]),500);
  1967. +               //WaitForSingleObject(&(ovlp[i]),WAIT_MSEC_LIMIT);
  1968.             }
  1969.  
  1970.             len = tcb->xfer;
  1971. @@ -215,20 +261,31 @@
  1972.             {
  1973.                 if(tcb->looping)
  1974.                 {
  1975. -                   if(!tcb->cb_func(data[i], (u32)len))
  1976. +                   if(dual) {
  1977. +                      dtc->len[i] = len ;
  1978. +                   }else {
  1979. +                      if(!tcb->cb_func(data[i], (u32)len, tcb->idTh))
  1980.                     {
  1981.                         tcb->looping = false;
  1982.                     }
  1983.                 }
  1984. +               }
  1985.                 tcb->nsuccess++;
  1986.             }
  1987.             else
  1988.             {
  1989. +               if(dual) {
  1990. +                  dtc->len[i] = 0 ;
  1991. +                }
  1992.                 tcb->nfailure++;
  1993.             }
  1994.  
  1995. +            // Notify the transfer thread that one of new data is available.
  1996. +            if(dual) SetEvent(dtc->evDataAvailable) ;
  1997. +
  1998.             if(tcb->looping)
  1999.             {
  2000. +               if(!dual)
  2001.                 context[i] = ep->BeginDataXfer(data[i], tcb->xfer, &(ovlp[i]));
  2002.                 qnum++;
  2003.             }
  2004. @@ -249,7 +306,7 @@
  2005.             ovlp[i].hEvent = CreateEvent(NULL, false, false, NULL);
  2006.             if(tcb->looping)
  2007.             {
  2008. -               if(!tcb->cb_func(data[i], (u32)tcb->xfer))
  2009. +               if(!tcb->cb_func(data[i], (u32)tcb->xfer, tcb->idTh))
  2010.                 {
  2011.                     tcb->looping = false;
  2012.                 }
  2013. @@ -257,14 +314,12 @@
  2014.             context[i] = ep->BeginDataXfer(data[i], tcb->xfer, &(ovlp[i]));
  2015.             qnum++;
  2016.         }
  2017. -       for(i=0;;)
  2018. +       for(i=0;!tcb->fTerminate;)
  2019.         {
  2020. -           if (tcb->fTerminate)
  2021. -               break;
  2022. -           if(!ep->WaitForXfer(&(ovlp[i]),500))
  2023. +           if(!ep->WaitForXfer(&(ovlp[i]),WAIT_MSEC_LIMIT))
  2024.             {
  2025.                 ep->Abort();
  2026. -               WaitForSingleObject(&(ovlp[i]),500);
  2027. +               //WaitForSingleObject(&(ovlp[i]),WAIT_MSEC_LIMIT);
  2028.             }
  2029.  
  2030.             len = tcb->xfer;
  2031. @@ -282,7 +337,7 @@
  2032.  
  2033.             if(tcb->looping)
  2034.             {
  2035. -               if(!tcb->cb_func(data[i], (u32)tcb->xfer))
  2036. +               if(!tcb->cb_func(data[i], (u32)tcb->xfer, tcb->idTh))
  2037.                 {
  2038.                     tcb->looping = false;
  2039.                 }
  2040. @@ -299,6 +354,20 @@
  2041.         }
  2042.     }
  2043.  
  2044. +    tcb->fTerminate = true ;
  2045. +
  2046. +    if(dual) {
  2047. +      // Destroy the dual transfer threading context.
  2048. +      SetEvent(dtc->evDataAvailable) ;
  2049. +      WaitForSingleObject(thData, INFINITE);
  2050. +      CloseHandle(thData) ;
  2051. +      CloseHandle(dtc->evDataAvailable) ;
  2052. +      CloseHandle(dtc->evTransferCompleted) ;
  2053. +      delete [] dtc->len ;
  2054. +      delete dtc ;
  2055. +      tcb->lpDualTransferContext = NULL ;
  2056. +    }
  2057. +
  2058.     for(i=0; i<tcb->ques; i++)
  2059.     {
  2060.         CloseHandle(ovlp[i].hEvent);
  2061. @@ -307,12 +376,40 @@
  2062.     delete [] context;
  2063.     delete [] data;
  2064.     delete [] ovlp;
  2065. +}
  2066.  
  2067. -// _endthreadex( 0 );
  2068. -// return(0);
  2069. +// Appended by ◆PRY8EAlByw
  2070. +void cusb2::data_transfer_thread_proc(cusb2_tcb *tcb)
  2071. +{
  2072. +  DUAL_TRANSFER_CONTEXT *dtc = (DUAL_TRANSFER_CONTEXT *) tcb->lpDualTransferContext ;
  2073. +  const DWORD WAIT_MSEC_LIMIT = tcb->wait ;
  2074. +  for(u32 i=0;!tcb->fTerminate;i++) {
  2075. +    if(i>=tcb->ques) i=0 ;
  2076. +    while(dtc->len[i]<0) { // Wait for a data available event.
  2077. +      WaitForSingleObject(dtc->evDataAvailable,WAIT_MSEC_LIMIT) ;
  2078. +      if(tcb->fTerminate||!tcb->looping) break ;
  2079. +    }
  2080. +    if(tcb->fTerminate||!tcb->looping) break ;
  2081. +    int len = dtc->len[i] ;
  2082. +    if(len>=0) {
  2083. +      if(len>0) {
  2084. +        if(tcb->looping&&!tcb->cb_func(dtc->data[i], (u32)len, tcb->idTh)) {
  2085. +          tcb->fTerminate = true ; // error
  2086. +        }
  2087. +      }
  2088. +    }else tcb->fTerminate = true ; // error
  2089. +    dtc->len[i] = -1 ;
  2090. +    if(!tcb->fTerminate&&tcb->looping) {
  2091. +      dtc->context[i] = tcb->ep->BeginDataXfer(dtc->data[i], tcb->xfer, &(dtc->ovlp[i]));
  2092. +    }
  2093. +    // Notify the main thread that one of new data transfering is completed.
  2094. +    SetEvent(dtc->evTransferCompleted) ;
  2095. +    if(!tcb->looping) break ;
  2096. +  }
  2097.  }
  2098.  
  2099. -cusb2_tcb* cusb2::start_thread(u8 epaddr, u32 xfer, s32 ques, bool (*cb_func)(u8 *, u32))
  2100. +
  2101. +cusb2_tcb* cusb2::start_thread(u8 epaddr, u32 xfer, s32 ques, u32 wait, int prior, cb_func_t cb_func)
  2102.  {
  2103.     cusb2_tcb *tcb = new cusb2_tcb;
  2104.     tcb->epaddr = epaddr;
  2105. @@ -320,19 +417,18 @@
  2106.     tcb->epaddr = epaddr;
  2107.     tcb->xfer = xfer;
  2108.     tcb->ques = ques;
  2109. +    tcb->wait = wait;
  2110. +    tcb->prior = prior;
  2111.     tcb->cb_func = cb_func;                                 // Modified by 拡張ツール中の人
  2112.     tcb->th = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)cusb2::thread_proc, tcb, 0, NULL);
  2113. -// tcb->th = (HANDLE)_beginthreadex(NULL,0,thread_proc,(void*)tcb,0/*CREATE_SUSPENDED*/,(unsigned*)&tcb->ThreadID);
  2114.     Sleep(100);
  2115.     return tcb;
  2116.  }
  2117.  
  2118.  void cusb2::delete_thread(cusb2_tcb *tcb)
  2119.  {
  2120. -   tcb->fTerminate=true;
  2121. -   WaitForSingleObject(tcb->th, 3000);
  2122. -// WaitForSingleObject(tcb->th, INFINITE);
  2123. -// CloseHandle(tcb->th);
  2124. +   tcb->fTerminate = true ;
  2125. +    WaitForSingleObject(tcb->th, INFINITE);
  2126.     delete tcb;
  2127.  }
  2128.  
  2129. diff -uPrb Org/Cusb2/cusb2.h Mod/Cusb2/cusb2.h
  2130. --- Org/Cusb2/cusb2.h   2012-02-22 15:34:52.000000000 +0900
  2131. +++ Mod/Cusb2/cusb2.h   2014-11-13 20:58:35.000000000 +0900
  2132. @@ -15,18 +15,44 @@
  2133.  
  2134.  #define CUSB_DEBUG   0
  2135.  
  2136. +typedef bool (*cb_func_t)(u8 *data, u32 ln, u32 idTh) ;
  2137. +
  2138.  struct _cusb2_tcb
  2139.  {
  2140.     HANDLE          th;
  2141. +    DWORD idTh;
  2142.     CCyUSBEndPoint  *ep;
  2143.     u8              epaddr;
  2144.     LONG            xfer;
  2145.     u32             ques;
  2146. -   bool            (*cb_func)(u8 *, u32);
  2147. +   cb_func_t cb_func ;
  2148.     bool            looping;
  2149.     u32             nsuccess;
  2150.     u32             nfailure;
  2151.     bool            fTerminate;
  2152. +    //---- wait & thread priority -----
  2153. +    u32             wait  ;
  2154. +    int             prior ;
  2155. +    //---- dual transfer threading -----
  2156. +    bool            fDualTransfer ;
  2157. +    void            *lpDualTransferContext ;
  2158. +    //----
  2159. +    _cusb2_tcb() {
  2160. +      th = 0 ;
  2161. +      idTh = 0 ;
  2162. +      ep = 0 ;
  2163. +      epaddr = 0 ;
  2164. +      xfer = 0 ;
  2165. +      cb_func = 0 ;
  2166. +      looping = 0 ;
  2167. +      nsuccess = 0 ;
  2168. +      nfailure = 0 ;
  2169. +      fTerminate = 0 ;
  2170. +      wait = 500 ;
  2171. +      prior = 0 ;
  2172. +      fDualTransfer = 0 ;
  2173. +      lpDualTransferContext = 0 ;
  2174. +    }
  2175.  };
  2176.  
  2177.  typedef struct _cusb2_tcb cusb2_tcb;
  2178. @@ -47,13 +73,14 @@
  2179.     bool fwload(u8 id, u8 *fw, u8 *string1);
  2180.     CCyUSBEndPoint* get_endpoint(u8 addr);
  2181.     bool xfer(CCyUSBEndPoint *ep, PUCHAR buf, LONG &len);
  2182. -   cusb2_tcb *start_thread(u8 epaddr, u32 xfer, s32 ques, bool (*cb_func)(u8 *, u32));
  2183. +   cusb2_tcb *start_thread(u8 epaddr, u32 xfer, s32 ques, u32 wait, int prior, cb_func_t cb_func );
  2184.     void delete_thread(cusb2_tcb *tcb);
  2185.     bool PnpEvent(WPARAM wParam, LPARAM lParam);
  2186.  
  2187. -// Modified by 拡張ツール中の人
  2188. +// Modified by 拡張ツール中の人 ( Fixed by ◆PRY8EAlByw )
  2189.  protected:
  2190.     static void thread_proc(cusb2_tcb *tcb);   
  2191. +    static void data_transfer_thread_proc(cusb2_tcb *tcb);
  2192.  
  2193.  private:
  2194.     s32 check_fx2(u8 id);
  2195. diff -uPrb Org/Cusb2/UsbFx2Dirver.cpp Mod/Cusb2/UsbFx2Dirver.cpp
  2196. --- Org/Cusb2/UsbFx2Dirver.cpp  2012-02-22 15:50:18.000000000 +0900
  2197. +++ Mod/Cusb2/UsbFx2Dirver.cpp  2014-11-13 18:48:34.000000000 +0900
  2198. @@ -12,10 +12,7 @@
  2199.  #define new DEBUG_NEW
  2200.  #endif
  2201.  
  2202. -
  2203. -// FX2のファームウェアサイズ
  2204. -#define FIRMWARE_SIZE  (3893UL)                //(3367UL)
  2205. -
  2206. +using namespace std ;
  2207.  
  2208.  CUsbFx2Driver *CUsbFx2Driver::m_pThis = NULL;
  2209.  
  2210. @@ -31,7 +28,9 @@
  2211.     CloseDriver();
  2212.  }
  2213.  
  2214. -const bool CUsbFx2Driver::OpenDriver(const BYTE byDeviceID, const BYTE *pFirmWare, int size,const char *lpszFirmName)
  2215. +const bool CUsbFx2Driver::OpenDriver(
  2216. +  const BYTE byDeviceID, const BYTE *pFirmWare,
  2217. +   const DWORD FIRMWARE_SIZE, const char *lpszFirmName)
  2218.  {
  2219.     if(!pFirmWare)return false;
  2220.  
  2221. @@ -39,26 +38,27 @@
  2222.     CloseDriver();
  2223.    
  2224.     // ファームウェアをコピーする(cusb2内で書き換えられるため)
  2225. -   BYTE *abyFirmBuffer=new BYTE[size]; //[FIRMWARE_SIZE];
  2226. -   ::CopyMemory(abyFirmBuffer, pFirmWare, size);
  2227. +   BYTE *abyFirmBuffer = new BYTE[FIRMWARE_SIZE] ;
  2228. +   memcpy(abyFirmBuffer, pFirmWare, FIRMWARE_SIZE);
  2229.    
  2230.     // ファームウェアのダウンロードを行う
  2231. -   return fwload(byDeviceID, abyFirmBuffer, (BYTE *)lpszFirmName);
  2232. +   bool result = fwload(byDeviceID, abyFirmBuffer, (BYTE *)lpszFirmName);
  2233. +
  2234. +   delete [] abyFirmBuffer ;
  2235. +   return result ;
  2236.  }
  2237.  
  2238.  void CUsbFx2Driver::CloseDriver(void)
  2239.  {
  2240.     // 全てのスレッドを終了させる
  2241. -   for(DWORD dwIndex = 0UL ; dwIndex < m_ThreadArray.size() ; dwIndex++)
  2242. -   {
  2243. +   for(DWORD dwIndex = 0UL ; dwIndex < m_ThreadArray.size() ; dwIndex++){
  2244.         if(!m_ThreadArray[dwIndex].pThreadTcb->looping)continue;
  2245.  
  2246.         // スレッド終了シグナルセット
  2247.         m_ThreadArray[dwIndex].pThreadTcb->looping = false;
  2248.  
  2249.         // スレッド終了を待つ
  2250. -       if(::WaitForSingleObject(m_ThreadArray[dwIndex].pThreadTcb->th, 3000UL) != WAIT_OBJECT_0)
  2251. -       {
  2252. +       if(::WaitForSingleObject(m_ThreadArray[dwIndex].pThreadTcb->th, 1000UL) != WAIT_OBJECT_0){
  2253.             // スレッド強制終了
  2254.             ::TerminateThread(m_ThreadArray[dwIndex].pThreadTcb->th, 0UL);
  2255.         }
  2256. @@ -70,6 +70,7 @@
  2257.     // 内部状態をクリアする
  2258.     m_EndPointArray.clear();
  2259.     m_ThreadArray.clear();
  2260. +   m_PidIndicesMap.clear();
  2261.  }
  2262.  
  2263.  const bool CUsbFx2Driver::AddEndPoint(const BYTE byAddress, DWORD *pdwEpIndex)
  2264. @@ -123,7 +124,10 @@
  2265.     return TransmitData(dwEpIndex, abySendBuffer, dwLen);
  2266.  }
  2267.  
  2268. -const bool CUsbFx2Driver::CreateFifoThread(const BYTE byAddress, DWORD *pdwThreadIndex, const DWORD dwBufLen, const DWORD dwQueNum)
  2269. +const bool CUsbFx2Driver::CreateFifoThread(
  2270. +  const BYTE byAddress, DWORD *pdwThreadIndex, const DWORD dwBufLen,
  2271. +  const DWORD dwQueNum, const DWORD dwWait, const int iPrior,
  2272. +  const BOOL bDualTransferThreading )
  2273.  {
  2274.     // スレッド起動
  2275.     TAG_THREADINFO ThreadInfo;
  2276. @@ -136,13 +140,19 @@
  2277.     ThreadInfo.pThreadTcb->ep = get_endpoint(byAddress);
  2278.     ThreadInfo.pThreadTcb->xfer = dwBufLen;
  2279.     ThreadInfo.pThreadTcb->ques = dwQueNum;
  2280. +    ThreadInfo.pThreadTcb->wait = dwWait ;
  2281. +    ThreadInfo.pThreadTcb->prior = iPrior ;
  2282.     ThreadInfo.pThreadTcb->cb_func = CUsbFx2Driver::FifoRecvCallback;
  2283. +    ThreadInfo.pThreadTcb->fDualTransfer = bDualTransferThreading ? true : false ;
  2284.  
  2285.     ThreadInfo.pThreadTcb->th = ::CreateThread(NULL, 0UL, (LPTHREAD_START_ROUTINE)cusb2::thread_proc, (LPVOID)ThreadInfo.pThreadTcb, CREATE_SUSPENDED, &ThreadInfo.dwThreadID);
  2286.     if(!ThreadInfo.pThreadTcb->th)return false;
  2287.  
  2288. +
  2289.     // リストに登録
  2290. -   if(pdwThreadIndex)*pdwThreadIndex = m_ThreadArray.size();
  2291. +    DWORD dwThreadIndex = m_ThreadArray.size() ;
  2292. +   if(pdwThreadIndex)*pdwThreadIndex = dwThreadIndex ;
  2293. +    m_PidIndicesMap[ThreadInfo.dwThreadID] = dwThreadIndex ;
  2294.     m_ThreadArray.push_back(ThreadInfo);
  2295.    
  2296.     // レジューム
  2297. @@ -151,19 +161,20 @@
  2298.     return true;
  2299.  }
  2300.  
  2301. -bool CUsbFx2Driver::FifoRecvCallback(u8 *pData, u32 dwLen)
  2302. +bool CUsbFx2Driver::FifoRecvCallback(u8 *pData, u32 dwLen, u32 dwThreadID)
  2303.  {
  2304. +    #if 0
  2305.     // 呼び出し元を特定するためにスレッドIDを取得
  2306. -   const DWORD dwThreadID = ::GetCurrentThreadId();
  2307. -  
  2308. -   for(DWORD dwIndex = 0UL ; dwIndex < m_pThis->m_ThreadArray.size() ; dwIndex++)
  2309. -   {
  2310. -       if(m_pThis->m_ThreadArray[dwIndex].dwThreadID == dwThreadID)
  2311. -       {
  2312. +   for(DWORD dwIndex = 0UL ; dwIndex < m_pThis->m_ThreadArray.size() ; dwIndex++){
  2313. +       if(m_pThis->m_ThreadArray[dwIndex].dwThreadID == dwThreadID){
  2314.             // インタフェースを呼び出す
  2315.             return m_pThis->m_pDriverHost->OnRecvFifoData(dwIndex, pData, dwLen, m_pThis);
  2316.         }      
  2317.     }
  2318. -
  2319. +    #else
  2320. +   map<u32,int>::iterator pos=m_pThis->m_PidIndicesMap.find(dwThreadID) ;
  2321. +    if(pos!=m_pThis->m_PidIndicesMap.end())
  2322. +     return m_pThis->m_pDriverHost->OnRecvFifoData(pos->second, pData, dwLen, m_pThis);
  2323. +    #endif
  2324.     return false;
  2325.  }
  2326. diff -uPrb Org/Cusb2/UsbFx2Driver.h Mod/Cusb2/UsbFx2Driver.h
  2327. --- Org/Cusb2/UsbFx2Driver.h    2012-02-18 15:46:56.000000000 +0900
  2328. +++ Mod/Cusb2/UsbFx2Driver.h    2014-11-13 18:30:03.000000000 +0900
  2329. @@ -6,15 +6,18 @@
  2330.  
  2331.  
  2332.  #include <vector>
  2333. +#include <map>
  2334.  #include "cusb2.h"
  2335.  
  2336.  
  2337. -using std::vector;
  2338. +//using std::vector;
  2339.  
  2340.  
  2341.  // デフォルトのFIFOバッファパラメータ設定
  2342.  #define DEF_BUFLEN (1024UL * 64UL)     // cap_stsから
  2343. -#define DEF_QUENUM (16UL)              // cap_stsから
  2344. +#define DEF_QUENUM 16UL                // cap_stsから
  2345. +#define DEF_WAIT   500UL
  2346. +#define DEF_PRIOR  THREAD_PRIORITY_HIGHEST
  2347.  
  2348.  
  2349.  /////////////////////////////////////////////////////////////////////////////
  2350. @@ -36,22 +39,26 @@
  2351.  // cusb2 ラッパークラス
  2352.  /////////////////////////////////////////////////////////////////////////////
  2353.  
  2354. -class CUsbFx2Driver : public cusb2
  2355. +class CUsbFx2Driver : private cusb2
  2356.  {
  2357.  public:
  2358.     CUsbFx2Driver(IUsbFx2DriverHost *pHostClass, HWND hHostHwnd = NULL);
  2359.     ~CUsbFx2Driver();
  2360.  
  2361. -   const bool OpenDriver(const BYTE byDeviceID, const BYTE *pFirmWare, int size,const char *lpszFirmName = NULL);
  2362. +   const bool OpenDriver(const BYTE byDeviceID, const BYTE *pFirmWare,
  2363. +      const DWORD FIRMWARE_SIZE, const char *lpszFirmName = NULL);
  2364.     void CloseDriver(void);
  2365.    
  2366.     const bool AddEndPoint(const BYTE byAddress, DWORD *pdwEpIndex = NULL);
  2367.     const bool TransmitData(const DWORD dwEpIndex, BYTE *pData, DWORD &dwLen);
  2368.     const bool TransmitFormatedData(const DWORD dwEpIndex, const DWORD dwDataNum, ...);
  2369. -   const bool CreateFifoThread(const BYTE byAddress, DWORD *pdwThreadIndex = NULL, const DWORD dwBufLen = DEF_BUFLEN, const DWORD dwQueNum = DEF_QUENUM);
  2370. +   const bool CreateFifoThread(
  2371. +      const BYTE byAddress, DWORD *pdwThreadIndex = NULL, const DWORD dwBufLen = DEF_BUFLEN,
  2372. +      const DWORD dwQueNum = DEF_QUENUM, const DWORD dwWait = DEF_WAIT, const int iPrior = DEF_PRIOR,
  2373. +      const BOOL bDualTransferThreading = FALSE );
  2374.        
  2375.  protected:
  2376. -   static bool FifoRecvCallback(u8 *pData, u32 dwLen);
  2377. +   static bool FifoRecvCallback(u8 *pData, u32 dwLen, u32 dwThreadID);
  2378.  
  2379.     struct TAG_THREADINFO
  2380.     {
  2381. @@ -63,6 +70,7 @@
  2382.  
  2383.     IUsbFx2DriverHost *m_pDriverHost;
  2384.    
  2385. -   vector<CCyUSBEndPoint *> m_EndPointArray;
  2386. -   vector<TAG_THREADINFO> m_ThreadArray;
  2387. +   std::vector<CCyUSBEndPoint *> m_EndPointArray;
  2388. +   std::vector<TAG_THREADINFO> m_ThreadArray;
  2389. +    std::map<u32/*pid*/,int/*index*/> m_PidIndicesMap ;
  2390.  };
  2391. diff -uPrb Org/stdafx.cpp Mod/stdafx.cpp
  2392. --- Org/stdafx.cpp  2008-02-12 01:10:02.000000000 +0900
  2393. +++ Mod/stdafx.cpp  2014-01-10 03:55:10.000000000 +0900
  2394. @@ -3,7 +3,11 @@
  2395.  // stdafx.obj にはプリコンパイル済み型情報が含まれます。
  2396.  
  2397.  #include "stdafx.h"
  2398. -#include <Stdio.h>
  2399. +#include <cstring>
  2400. +#include <cstdio>
  2401. +#include <cstdlib>
  2402. +#include <cstdarg>
  2403. +#include <clocale>
  2404.  
  2405.  // TODO: このファイルではなく、STDAFX.H で必要な
  2406.  // 追加ヘッダーを参照してください。
  2407. @@ -18,6 +22,44 @@
  2408.         ::wvsprintf(szTempStr, szFormat, Args);
  2409.         va_end(Args);
  2410.  
  2411. -       ::OutputDebugString(szTempStr);
  2412. +        #ifndef DEBUG_TO_X_DRIVE
  2413. +        ::OutputDebugString(szTempStr) ;
  2414. +        #else
  2415. +        FILE *fp = NULL ;
  2416. +        fopen_s(&fp,"X:\\Debug.txt","a+t") ;
  2417. +        if(fp) {
  2418. +          size_t ln = wcslen(szTempStr) ;
  2419. +          if(ln) {
  2420. +            char *mbcs = new char[ln*2 + 2] ;
  2421. +            size_t mbLen = 0 ;
  2422. +            setlocale(LC_ALL,"japanese");
  2423. +            wcstombs_s(&mbLen, mbcs, ln*2+1, szTempStr, _TRUNCATE);
  2424. +            std::fputs(mbcs,fp) ;
  2425. +            delete [] mbcs;
  2426. +          }
  2427. +          std::fclose(fp) ;
  2428. +        }
  2429. +        #endif
  2430. +   }
  2431. +#endif
  2432. +
  2433. +#ifdef _DEBUG
  2434. +    void DBGOUT( const char* pszFormat,... )
  2435. +    {
  2436. +        std::va_list marker ;
  2437. +        char edit_str[1024] ;
  2438. +        va_start( marker, pszFormat ) ;
  2439. +        vsprintf_s( edit_str, sizeof(edit_str), pszFormat, marker ) ;
  2440. +        va_end( marker ) ;
  2441. +        #ifndef DEBUG_TO_X_DRIVE
  2442. +        OutputDebugStringA(edit_str) ;
  2443. +        #else
  2444. +        FILE *fp = NULL ;
  2445. +        fopen_s(&fp,"X:\\Debug.txt","a+t") ;
  2446. +        if(fp) {
  2447. +          std::fputs(edit_str,fp) ;
  2448. +          std::fclose(fp) ;
  2449. +        }
  2450. +        #endif
  2451.     }
  2452.  #endif
  2453. diff -uPrb Org/stdafx.h Mod/stdafx.h
  2454. --- Org/stdafx.h    2008-02-12 01:09:46.000000000 +0900
  2455. +++ Mod/stdafx.h    2014-01-04 03:30:32.000000000 +0900
  2456. @@ -20,6 +20,21 @@
  2457.  #define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
  2458.  #endif
  2459.  
  2460. +#ifndef __BORLANDC__
  2461. +  #ifdef _MSC_VER
  2462. +    #if _MSC_VER <= 1200 // VC++ 6.0 以下
  2463. +      //色々と問題が多いコンパイラなので、場合分け用のフラグを設定しておく
  2464. +      #define __MSVC_1200__
  2465. +      //VC++ for構文のインライン変数除去マクロ
  2466. +      #define for if(0) ; else for
  2467. +    #endif
  2468. +    // C4786 警告を除去
  2469. +    #pragma warning (disable : 4786)
  2470. +  #endif
  2471. +#endif
  2472. +
  2473. +#define DEBUG_TO_X_DRIVE
  2474. +
  2475.  // トレース出力
  2476.  #ifdef _DEBUG
  2477.     #define TRACE MYTARACEFUNC
  2478. @@ -27,3 +42,11 @@
  2479.  #else
  2480.     #define TRACE __noop
  2481.  #endif
  2482. +
  2483. +// DBGOUT
  2484. +#ifdef _DEBUG
  2485. +    void DBGOUT( const char* pszFormat,... ) ;
  2486. +#else
  2487. +    #define DBGOUT __noop
  2488. +#endif
  2489. +
  2490. diff -uPrb Org/TC90532/MxL5007.cpp Mod/TC90532/MxL5007.cpp
  2491. --- Org/TC90532/MxL5007.cpp 2011-11-27 21:03:48.000000000 +0900
  2492. +++ Mod/TC90532/MxL5007.cpp 2014-11-13 21:58:49.000000000 +0900
  2493. @@ -315,7 +315,7 @@
  2494.     case MxL_MODE_CABLE:                       
  2495.         myIRV = IRV_Init_Cable;
  2496.         SetIRVBit(myIRV, 0x09, 0xFF, 0xC1);
  2497. -       SetIRVBit(myIRV, 0x0A, 0xFF, 8-IF_Diff_Out_Level)
  2498. +       SetIRVBit(myIRV, 0x0A, 0xFF, UINT8(8-IF_Diff_Out_Level));  
  2499.         SetIRVBit(myIRV, 0x0B, 0xFF, 0x17);                        
  2500.         break;
  2501.     }
  2502. diff -uPrb Org/TC90532/tc90532.cpp Mod/TC90532/tc90532.cpp
  2503. --- Org/TC90532/tc90532.cpp 2012-02-18 11:44:48.000000000 +0900
  2504. +++ Mod/TC90532/tc90532.cpp 2014-11-13 21:58:49.000000000 +0900
  2505. @@ -13,8 +13,6 @@
  2506.  #include "MxL5007.h"
  2507.  #include "tc90532.h"
  2508.  
  2509. -#define TC90502_OK              0
  2510. -#define TC90502_ERR             1
  2511.  
  2512.  #define    CH_MAX                  62//-13         //The Ch maximum number
  2513.  
  2514. @@ -61,18 +59,18 @@
  2515.  
  2516.  float BS_table[12] =
  2517.  {
  2518. -   1049.48,    //CH 1
  2519. -   1087.84,    //CH 3
  2520. -   1126.20,    //CH 5 
  2521. -   1164.56,    //CH 7
  2522. -   1202.92,    //CH 9
  2523. -   1241.28,    //CH 11
  2524. -   1279.64,    //CH 13
  2525. -   1318.00,    //CH 15
  2526. -   1356.36,    //CH 17
  2527. -   1394.72,    //CH 19
  2528. -   1433.08,    //CH 21
  2529. -   1471.44     //CH 23
  2530. +   1049.48f,   //CH 1
  2531. +   1087.84f,   //CH 3
  2532. +   1126.20f,   //CH 5
  2533. +   1164.56f,   //CH 7
  2534. +   1202.92f,   //CH 9
  2535. +   1241.28f,   //CH 11
  2536. +   1279.64f,   //CH 13
  2537. +   1318.00f,   //CH 15
  2538. +   1356.36f,   //CH 17
  2539. +   1394.72f,   //CH 19
  2540. +   1433.08f,   //CH 21
  2541. +   1471.44f    //CH 23
  2542.  };
  2543.  
  2544.  float CS_table[12] =
  2545. @@ -91,28 +89,34 @@
  2546.     2053        //CH 24
  2547.  };
  2548.  
  2549. -UINT8 SetMxl5007(UINT8 CH)
  2550. +UINT8 SetMxl5007(UINT8 CH, float MegaHz)
  2551.  {
  2552. -    UINT32 freq, x;
  2553.      MxL_ERR_MSG Status = MxL_OK;
  2554.      BOOL RFSynthLock, REFSynthLock;
  2555. -    SINT32 RF_Input_Level;
  2556. +    //SINT32 RF_Input_Level;
  2557.      MxL5007_TunerConfigS myTuner;
  2558.      unsigned long rf;
  2559. -    unsigned char bw;
  2560.  
  2561. -    x = CH;
  2562. -
  2563. -    if(CH < 4)          freq =  93000 + (x - 1) * 6000;
  2564. -    else if(CH < 8)     freq = 173000 + (x - 4) * 6000;
  2565. -    else if(CH < 13)    freq = 195000 + (x - 8) * 6000;
  2566. -    else if(CH < 63)   freq = 473143 + (x - 13) * 6000;
  2567. -   else if(CH < 123)   freq = 111143 + (x - 113) * 6000;
  2568. -   else if(CH < 136)   freq = 225143 + (x - 123) * 6000;
  2569. -   else                freq = 303143 + (x - 136) * 6000;
  2570. -
  2571. -    rf = freq * 1000UL;
  2572. -    bw = 6;
  2573. +    if(!CH) {
  2574. +      rf = UINT32(MegaHz * 1000000.f) ;
  2575. +    }else {
  2576. +      if(CH < 4)        rf =  93UL + (CH - 1)   * 6UL ;
  2577. +      else if(CH < 8)   rf = 173UL + (CH - 4)   * 6UL ;
  2578. +      else if(CH < 13)  rf = 195UL + (CH - 8)   * 6UL ;
  2579. +      else if(CH < 63) rf = 473UL + (CH - 13)  * 6UL ;
  2580. +      else if(CH < 122)    rf = 111UL + (CH - 113) * 6UL ;
  2581. +      else if(CH ==122) rf = 167UL ; // C22
  2582. +      #if 0
  2583. +      else if(CH ==123) rf = 225UL ;
  2584. +      else if(CH < 128)    rf = 233UL + (CH - 124) * 6UL ;
  2585. +      else if(CH < 136)    rf = 255UL + (CH - 128) * 6UL ;
  2586. +      #else
  2587. +      else if(CH < 136) rf = 225UL + (CH - 123) * 6UL ;
  2588. +      #endif
  2589. +      else             rf = 303UL + (CH - 136) * 6UL ;
  2590. +      rf *= 1000000UL ;
  2591. +      rf +=  142857UL ;
  2592. +    }
  2593.  
  2594.     myTuner.DemodAddr = DEMODTADRS;
  2595.      //Set Tuner's I2C Address
  2596. @@ -142,7 +146,7 @@
  2597.         //Init Tuner fail
  2598.      }
  2599.      //Tune Tuner
  2600. -    if(Status == MxL_Tuner_RFTune(&myTuner, rf, (MxL5007_BW_MHz)bw))
  2601. +    if(Status == MxL_Tuner_RFTune(&myTuner, rf, MxL_BW_6MHz))
  2602.      {
  2603.         //Tune Tuner fail
  2604.      }
  2605. @@ -162,7 +166,7 @@
  2606.      return 0;
  2607.  }
  2608.  
  2609. -UINT8 SetStv6110a(UINT8 BSCh)
  2610. +UINT8 SetStv6110a(UINT8 BSCh,float MegaHz)
  2611.  {
  2612.     UINT8 STB6110A[8] = {0x07,0x13,0xdc,0x85,0x17,0x01,0xe6,0x1e};
  2613.     UINT8 K;
  2614. @@ -173,14 +177,18 @@
  2615.     int rDivOpt = 0;
  2616.     int pCalc, i;
  2617.     UINT8 CF;
  2618. -   UINT8 buffer;
  2619. +   //UINT8 buffer;
  2620.     float RF;
  2621. -   float symb = 28.86;
  2622. +   float symb = 28.86f;
  2623.  
  2624. +   if(!BSCh) {
  2625. +     RF = MegaHz ;
  2626. +   }else {
  2627.     if (BSCh & 1)
  2628.         RF = BS_table[BSCh/2];
  2629.     else
  2630.         RF = CS_table[BSCh/2-1];
  2631. +   }
  2632.  
  2633.     for(i=0; i<8; i++)
  2634.     {
  2635. @@ -231,7 +239,7 @@
  2636.  
  2637.     divider = (UINT16)(((RF * (float)r * pow(2.0,(double)(P+1)) * 10.0 / (float)XTAL) + 5.0) / 10.0) ;
  2638.     STB6110A[2] = divider & 0x00ff;
  2639. -   STB6110A[3] = ((rDivOpt & 0x3) << 6) | (Presc << 5) | (P << 4) | ((divider & 0x700) >> 8);
  2640. +   STB6110A[3] = ((rDivOpt & 0x3) << 6) | (Presc << 5) | (P << 4) | ((divider & 0xF00) >> 8);
  2641.  
  2642.     if(WriteTuner(DemodAddress+1,0xC6,0x02,STB6110A[2]) != 0)
  2643.         return 1;
  2644. diff -uPrb Org/TC90532/tc90532.h Mod/TC90532/tc90532.h
  2645. --- Org/TC90532/tc90532.h   2012-02-07 20:05:32.000000000 +0900
  2646. +++ Mod/TC90532/tc90532.h   2014-11-13 22:01:10.000000000 +0900
  2647. @@ -2,6 +2,9 @@
  2648.  #ifndef TC90532_H
  2649.  #define TC90532_H
  2650.  
  2651. +#define TC90502_OK              0
  2652. +#define TC90502_ERR             1
  2653. +
  2654.  #define DemodAddress            0x10
  2655.  
  2656.  #define    DEMODTADRS              0x10
  2657. @@ -14,9 +17,10 @@
  2658.  #define ISDB_S                 2
  2659.  
  2660.  
  2661. -UINT8 SetMxl5007(UINT8 CH);
  2662. -UINT8 SetStv6110a(UINT8 BSCh);
  2663. +UINT8 SetMxl5007(UINT8 CH,float MegaHz=0);
  2664. +UINT8 SetStv6110a(UINT8 BSCh,float MegaHz=0);
  2665.  UINT8 SetTC90502(UINT8 TS);
  2666.  
  2667.  
  2668.  #endif     //TC90532_H
  2669. +// Fixed by ◆PRY8EAlByw
  2670. +// hyrolean-dtv@yahoo.co.jp
  2671. \ No newline at end of file
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement