经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Scala » 查看文章
Scala解析MDF文件
来源:cnblogs  作者:精彩一生  时间:2018/10/22 16:26:19  对本文有异议
  1. 1 import java.io._
  2. 2 import java.nio.ByteBuffer
  3. 3
  4. 4 import scala.collection.mutable.ListBuffer
  5. 5
  6. 6 object Hello_mdf {
  7. 7
  8. 8 def main(args: Array[String]) {
  9. 9 var datFile = "D:\\Scala\\Dat\\00006004_251-4416EN12-ECU FI 0_1212_Knock and Pre-ignition control check on vehicle (Dynamic and diagnosis)_cold start 30C_tianmashan_00006004_2018-10-17_09-10-11_2018-10-17_09-21-22_sorted.dat";
  10. 10 var fis = new FileInputStream(new File(datFile))
  11. 11 val bytes = new Array[Byte](fis.available().toInt)
  12. 12 fis.read(bytes)
  13. 13 fis.close()
  14. 14
  15. 15 var mdf = new MDF(bytes)
  16. 16
  17. 17 var dict: Map[String, Channel] = Map()
  18. 18 var channelTmep = new Channel;
  19. 19
  20. 20 channelTmep = mdf.get("DFES_ctEntry")
  21. 21 if(channelTmep == null)
  22. 22 println("Signal is not found")
  23. 23 else
  24. 24 dict += ("DFES_ctEntry" -> mdf.get("DFES_ctEntry"))
  25. 25
  26. 26 channelTmep = mdf.get("nmot_w")
  27. 27 if(channelTmep == null)
  28. 28 println("Signal is not found")
  29. 29 else
  30. 30 dict += ("nmot_w" -> mdf.get("nmot_w"))
  31. 31
  32. 32 channelTmep = mdf.get("rl_w")
  33. 33 if(channelTmep == null)
  34. 34 println("Signal is not found")
  35. 35 else
  36. 36 dict += ("rl_w" -> mdf.get("rl_w"))
  37. 37
  38. 38 channelTmep = mdf.get("EpmCaS_phiCaSOfsAvg_[0]")
  39. 39 if(channelTmep == null)
  40. 40 println("Signal is not found")
  41. 41 else
  42. 42 dict += ("EpmCaS_phiCaSOfsAvg_[0]" -> mdf.get("EpmCaS_phiCaSOfsAvg_[0]"))
  43. 43 channelTmep = mdf.get("EpmCaS_phiCaSOfsAvg_[1]")
  44. 44 if(channelTmep == null)
  45. 45 println("Signal is not found")
  46. 46 else
  47. 47 dict += ("EpmCaS_phiCaSOfsAvg_[1]" -> mdf.get("EpmCaS_phiCaSOfsAvg_[1]"))
  48. 48
  49. 49 channelTmep = mdf.get("fkmsdk_w")
  50. 50 if(channelTmep == null)
  51. 51 println("Signal is not found")
  52. 52 else
  53. 53 dict += ("fkmsdk_w" -> mdf.get("fkmsdk_w")) // 节气门自学习
  54. 54
  55. 55 channelTmep = mdf.get("fra_w")
  56. 56 if(channelTmep == null)
  57. 57 println("Signal is not found")
  58. 58 else
  59. 59 dict += ("fra_w" -> mdf.get("fra_w"))
  60. 60
  61. 61 channelTmep = mdf.get("uprm_w")
  62. 62 if(channelTmep == null)
  63. 63 println("Signal is not found")
  64. 64 else
  65. 65 dict += ("uprm_w" -> mdf.get("uprm_w"))
  66. 66
  67. 67 channelTmep = mdf.get("MoF_rTrqInrAct")
  68. 68 if(channelTmep == null)
  69. 69 println("Signal is not found")
  70. 70 else
  71. 71 dict += ("MoF_rTrqInrAct" -> mdf.get("MoF_rTrqInrAct"))
  72. 72
  73. 73 channelTmep = mdf.get("miist_w")
  74. 74 if(channelTmep == null)
  75. 75 println("Signal is not found")
  76. 76 else
  77. 77 dict += ("miist_w" -> mdf.get("miist_w"))
  78. 78
  79. 79 channelTmep = mdf.get("rkrnv6_w_[0]")
  80. 80 if(channelTmep == null)
  81. 81 println("Signal is not found")
  82. 82 else
  83. 83 dict += ("rkrnv6_w_[0]" -> mdf.get("rkrnv6_w_[0]"))
  84. 84 channelTmep = mdf.get("rkrnv6_w_[1]")
  85. 85 if(channelTmep == null)
  86. 86 println("Signal is not found")
  87. 87 else
  88. 88 dict += ("rkrnv6_w_[1]" -> mdf.get("rkrnv6_w_[1]"))
  89. 89 channelTmep = mdf.get("rkrnv6_w_[2]")
  90. 90 if(channelTmep == null)
  91. 91 println("Signal is not found")
  92. 92 else
  93. 93 dict += ("rkrnv6_w_[2]" -> mdf.get("rkrnv6_w_[2]"))
  94. 94 channelTmep = mdf.get("rkrnv6_w_[3]")
  95. 95 if(channelTmep == null)
  96. 96 println("Signal is not found")
  97. 97 else
  98. 98 dict += ("rkrnv6_w_[3]" -> mdf.get("rkrnv6_w_[3]"))
  99. 99
  100. 100 channelTmep = mdf.get("B_kl")
  101. 101 if(channelTmep == null)
  102. 102 println("Signal is not found")
  103. 103 else
  104. 104 dict += ("B_kl" -> mdf.get("B_kl"))
  105. 105
  106. 106
  107. 107 dict.keys.foreach {
  108. 108 i => {
  109. 109 println("*************" + i + "*******************")
  110. 110 for (j <- 0 until 30) {
  111. 111 println("Count: "+ j, " time: "+dict(i).time(j), " data: "+dict(i).data(j))
  112. 112 }
  113. 113 println("*****************************************")
  114. 114 }
  115. 115 }
  116. 116
  117. 117 // make fault counter
  118. 118 var faultCounter = makeEmptySeries(dict("nmot_w"))
  119. 119
  120. 120 // var dict_nmotrl = p1
  121. 121 var nmotSeries =makeSeries(dict("nmot_w"))
  122. 122 var rlSeries =makeSeries(dict("rl_w"))
  123. 123 var nmotRlSeries = makeXYSeries(dict("nmot_w"), dict("rl_w"))
  124. 124 // epm
  125. 125 var epm0Series =makeSeries(dict("EpmCaS_phiCaSOfsAvg_[0]"))
  126. 126 var epm1Series =makeSeries(dict("EpmCaS_phiCaSOfsAvg_[1]"))
  127. 127
  128. 128 var (epm0StatisX, epm0StatisY) =makeDistribution(-10,10, 30, dict("EpmCaS_phiCaSOfsAvg_[0]"))
  129. 129 var (epm1StatisX, epm1StatisY) =makeDistribution(-10,10, 30, dict("EpmCaS_phiCaSOfsAvg_[0]"))
  130. 130 // throttle
  131. 131 var fkmsdkSeries =makeSeries(dict("fkmsdk_w"))
  132. 132 var (fkmsdkStatisX, fkmsdkStatisY) =makeDistribution(-10,10, 30, dict("fkmsdk_w"))
  133. 133 // lambda
  134. 134 var lambdaSeries = makeSeries(dict("fra_w"))
  135. 135 var (lambdaSeriesStatisX, lambdaSeriesStatisY) = makeDistribution(-10,10, 30, dict("fra_w"))
  136. 136 // hdfs
  137. 137 var uprmSeries = makeSeries(dict("uprm_w"))
  138. 138 var (uprmSeriesStatisX, uprmSeriesStatisY) =makeDistribution(-10,10, 30, dict("uprm_w"))
  139. 139 // safetyTorque
  140. 140 var minusArray = makeMinusSeries(dict("MoF_rTrqInrAct"), dict("miist_w"))
  141. 141 var (minusArrayX, minusArrayY) = makeDistributionMinus(-10,10, 30, dict("MoF_rTrqInrAct"), dict("miist_w"))
  142. 142 // knock OverView
  143. 143 // Noise Ref
  144. 144 var noiseRef0 = makeSeries(dict("rkrnv6_w_[0]"))
  145. 145 var noiseRef1 = makeSeries(dict("rkrnv6_w_[1]"))
  146. 146 var noiseRef2 = makeSeries(dict("rkrnv6_w_[2]"))
  147. 147 var noiseRef3 = makeSeries(dict("rkrnv6_w_[3]"))
  148. 148
  149. 149 // println(epm0StatisY.mkString(","))
  150. 150 println("--------------------------------------done--------------------------------------")
  151. 151 }
  152. 152
  153. 153 def makeEmptySeries(_channel: Channel): List[Array[Double]]={
  154. 154
  155. 155 var _series= new ListBuffer[Array[Double]]
  156. 156
  157. 157 for (i <- 0 until _channel.time.length) {
  158. 158
  159. 159 var _arr = new Array[Double](2)
  160. 160 _arr(0) = _channel.time(i)
  161. 161 _arr(1) = 0.0
  162. 162 _series.append(_arr)
  163. 163 }
  164. 164
  165. 165 _series.toList
  166. 166 }
  167. 167
  168. 168 def makeSeries(_channel: Channel): List[Array[Double]]={
  169. 169
  170. 170 var _series= new ListBuffer[Array[Double]]
  171. 171
  172. 172 for (i <- 0 until _channel.time.length) {
  173. 173
  174. 174 var _arr = new Array[Double](2)
  175. 175 _arr(0) = _channel.time(i)
  176. 176 _arr(1) = _channel.data(i)
  177. 177 _series.append(_arr)
  178. 178 }
  179. 179
  180. 180 _series.toList
  181. 181 }
  182. 182
  183. 183 def makeMinusSeries(_channel: Channel, _channel2: Channel): List[Array[Double]]={
  184. 184
  185. 185 var _series= new ListBuffer[Array[Double]]
  186. 186
  187. 187 for (i <- 0 until _channel.time.length) {
  188. 188
  189. 189 var _arr = new Array[Double](2)
  190. 190 _arr(0) = _channel.time(i)
  191. 191 _arr(1) = _channel.data(i)-_channel2.data(i)
  192. 192 _series.append(_arr)
  193. 193 }
  194. 194
  195. 195 _series.toList
  196. 196 }
  197. 197
  198. 198 def makeXYSeries(_channel: Channel, _channel2: Channel): List[Array[Double]]={
  199. 199
  200. 200 var _series= new ListBuffer[Array[Double]]
  201. 201
  202. 202 for (i <- 0 until _channel.time.length) {
  203. 203
  204. 204 var _arr = new Array[Double](2)
  205. 205 _arr(0) = _channel.data(i)
  206. 206 _arr(1) = _channel2.data(i)
  207. 207 _series.append(_arr)
  208. 208 }
  209. 209
  210. 210 _series.toList
  211. 211 }
  212. 212
  213. 213 def makeDistribution(_min:Double, _max:Double, _bin:Int, _chan: Channel)={
  214. 214
  215. 215 var _seriesX = new Array[Double](_bin)
  216. 216 var _seriesY = new Array[Double](_bin)
  217. 217
  218. 218 var x_delta = (_max-_min)/(_bin-1)
  219. 219
  220. 220 for(i<-0 until _bin-1){
  221. 221 _seriesX(i) = _min+i*x_delta
  222. 222 }
  223. 223 _seriesX(_seriesX.length-1) = _max
  224. 224
  225. 225 for(i<-0 until _chan.data.length){
  226. 226 for (j<-0 until _bin){
  227. 227 if(_chan.data(i)>_seriesX(j)-x_delta/2 & _chan.data(i)<=_seriesX(j)+x_delta/2){
  228. 228 _seriesY(j)+=1
  229. 229 }
  230. 230 }
  231. 231 }
  232. 232
  233. 233 (_seriesX, _seriesY)
  234. 234
  235. 235 }
  236. 236
  237. 237 def makeDistributionMinus(_min:Double, _max:Double, _bin:Int, _chan: Channel, _chan2:Channel) ={
  238. 238
  239. 239 var _seriesX = new Array[Double](_bin)
  240. 240 var _seriesY = new Array[Double](_bin)
  241. 241
  242. 242 var x_delta = (_max-_min)/(_bin-1)
  243. 243
  244. 244 for(i<-0 until _bin-1){
  245. 245 _seriesX(i) = _min+i*x_delta
  246. 246 }
  247. 247 _seriesX(_seriesX.length-1) = _max
  248. 248
  249. 249 for(i<-0 until _chan.data.length){
  250. 250 for (j<-0 until _bin){
  251. 251 if((_chan.data(i)-_chan2.data(i))>_seriesX(j)-x_delta/2 & (_chan.data(i)-_chan2.data(i))<=_seriesX(j)+x_delta/2){
  252. 252 _seriesY(j)+=1
  253. 253 }
  254. 254 }
  255. 255 }
  256. 256 (_seriesX, _seriesY)
  257. 257 }
  258. 258
  259. 259 class MDF {
  260. 260
  261. 261 var allBytes: Array[Byte] = _
  262. 262 var idBlock: IDBlock = _
  263. 263 var hdBlock: HDBlock = _
  264. 264 var dgBlocks: List[DGBlock] = _
  265. 265
  266. 266 def this(_bytes: Array[Byte]) {
  267. 267
  268. 268 this()
  269. 269 this.allBytes = _bytes
  270. 270 this.idBlock = new IDBlock(_bytes)
  271. 271 this.hdBlock = new HDBlock(_bytes)
  272. 272
  273. 273 this.dgBlocks = List()
  274. 274 var dg = new DGBlock(_bytes, hdBlock.pointerFirstDGBlock)
  275. 275 dgBlocks = dgBlocks :+ dg
  276. 276 while (dg.pointerNextDGBlock != 0) {
  277. 277 dg = new DGBlock(_bytes, dg.pointerNextDGBlock)
  278. 278 dgBlocks = dgBlocks :+ dg
  279. 279 }
  280. 280 }
  281. 281
  282. 282 def get(_channelName: String): Channel = {
  283. 283
  284. 284 for {
  285. 285 i <- 0 until this.dgBlocks.length
  286. 286 j <- 0 until this.dgBlocks(i).cgBlocks.length
  287. 287 k <- 0 until this.dgBlocks(i).cgBlocks(j).cnBlocks.length
  288. 288 } {
  289. 289
  290. 290 /*println("i: "+i)
  291. 291 println("j: "+j)
  292. 292 println("k: "+k)*/
  293. 293
  294. 294 var shortSignalName = this.dgBlocks(i).cgBlocks(j).cnBlocks(k).shortSignalName
  295. 295 var index = 0
  296. 296 if(shortSignalName.contains("\\")){
  297. 297 index = shortSignalName.indexOf("\\")
  298. 298 shortSignalName = shortSignalName.substring(0,index)
  299. 299 }
  300. 300 else if(shortSignalName.contains(":")){
  301. 301 index = shortSignalName.indexOf(":")
  302. 302 shortSignalName = shortSignalName.substring(0,index)
  303. 303 }
  304. 304
  305. 305 if (shortSignalName.equals(_channelName)) {
  306. 306 // println("shortSignalName: "+this.dgBlocks(i).cgBlocks(j).cnBlocks(k).shortSignalName)
  307. 307 var _channel = new Channel()
  308. 308
  309. 309 _channel.idxCGBlock = j
  310. 310
  311. 311 _channel.cCBlock = new CCBlock(this.allBytes, this.dgBlocks(i).cgBlocks(j).cnBlocks(k).pointerCCBlock)
  312. 312
  313. 313 var numberOfRecord = this.dgBlocks(i).cgBlocks(j).numberRecords
  314. 314 // println("numberOfRecord", numberOfRecord)
  315. 315
  316. 316 var recordSizeInByte = this.dgBlocks(i).cgBlocks(j).sizeDataRecord
  317. 317 // println("recordSizeInByte", recordSizeInByte)
  318. 318
  319. 319 var pointerDataBlock = this.dgBlocks(i).pointerDataBlock
  320. 320 // println("pointerDataBlock", pointerDataBlock)
  321. 321
  322. 322 var signalDataType = this.dgBlocks(i).cgBlocks(j).cnBlocks(k).signalDataType
  323. 323 var signalDataType0 = this.dgBlocks(i).cgBlocks(j).cnBlocks(0).signalDataType
  324. 324 // println("signalDataType", signalDataType)
  325. 325
  326. 326 var numberOfBits = this.dgBlocks(i).cgBlocks(j).cnBlocks(k).numberOfBits
  327. 327 var numberOfBits0 = this.dgBlocks(i).cgBlocks(j).cnBlocks(0).numberOfBits
  328. 328 // println("numberOfBits", numberOfBits)
  329. 329
  330. 330 var startOffsetInBits = this.dgBlocks(i).cgBlocks(j).cnBlocks(k).startOffsetInBits
  331. 331 var startOffsetInBits0 = this.dgBlocks(i).cgBlocks(j).cnBlocks(0).startOffsetInBits
  332. 332 // println("startOffsetInBits", startOffsetInBits)
  333. 333
  334. 334 var shortSignalName = this.dgBlocks(i).cgBlocks(j).cnBlocks(k).shortSignalName
  335. 335 var shortSignalName0 = this.dgBlocks(i).cgBlocks(j).cnBlocks(0).shortSignalName
  336. 336 // println("shortSignalName", shortSignalName)
  337. 337
  338. 338 var buffer = new Array[Byte](numberOfRecord * recordSizeInByte)
  339. 339 for (i <- 0 until buffer.length) {
  340. 340 // data block from dg
  341. 341 buffer(i) = this.allBytes(i + pointerDataBlock)
  342. 342 }
  343. 343
  344. 344 var rawData = new Array[Double](numberOfRecord)
  345. 345 // println(this.dgBlocks(i).cgBlocks(j).cnBlocks(0).shortSignalName) // get time channel signal name
  346. 346 var rawTime = new Array[Double](numberOfRecord)
  347. 347
  348. 348 signalDataType match {
  349. 349 case 0 => {
  350. 350 // println("signalDataType",signalDataType)
  351. 351 if (numberOfBits == 1) {
  352. 352 // println("numberOfBits",numberOfBits)
  353. 353 rawData = DataReaderBit(buffer, startOffsetInBits, numberOfRecord, recordSizeInByte)
  354. 354 }
  355. 355
  356. 356 if (numberOfBits / 8 == 1) {
  357. 357 if (shortSignalName.contains("$")) {
  358. 358 }
  359. 359 else {
  360. 360 // println("numberOfBits",numberOfBits,"OK")
  361. 361 rawData = DataReaderBit(buffer, startOffsetInBits, numberOfRecord, recordSizeInByte)
  362. 362 }
  363. 363 }
  364. 364
  365. 365 if (numberOfBits / 8 == 2) {
  366. 366 // println("numberOfBits",numberOfBits)
  367. 367 rawData = DataReaderUInt16(buffer, startOffsetInBits, numberOfRecord, recordSizeInByte)
  368. 368 }
  369. 369
  370. 370 if (numberOfBits / 8 == 4) {
  371. 371 // println("numberOfBits",numberOfBits)
  372. 372 rawData = DataReaderUInt32(buffer, startOffsetInBits, numberOfRecord, recordSizeInByte)
  373. 373 }
  374. 374 if (numberOfBits0 / 8 == 8) {
  375. 375 // println("8")
  376. 376 rawTime = DataReaderUInt64(buffer, startOffsetInBits0, numberOfRecord, recordSizeInByte)
  377. 377 }
  378. 378 }
  379. 379
  380. 380 case 1 => {
  381. 381 println("signalDataType"+signalDataType)
  382. 382 if (numberOfBits / 8 == 1) {
  383. 383 if (shortSignalName.contains("$")) {
  384. 384 }
  385. 385 else {
  386. 386 rawData = DataReaderBit(buffer, startOffsetInBits, numberOfRecord, recordSizeInByte)
  387. 387 }
  388. 388 }
  389. 389 if (numberOfBits / 8 == 2) {
  390. 390 rawData = DataReaderUInt16(buffer, startOffsetInBits, numberOfRecord, recordSizeInByte)
  391. 391 }
  392. 392 if (numberOfBits / 8 == 4) {
  393. 393 rawData = DataReaderUInt32(buffer, startOffsetInBits, numberOfRecord, recordSizeInByte)
  394. 394 }
  395. 395 }
  396. 396
  397. 397 case 2 => {
  398. 398 println("signalDataType"+signalDataType)
  399. 399 if (numberOfBits / 8 == 4) {
  400. 400 rawData = DataReaderFloat(buffer, startOffsetInBits, numberOfRecord, recordSizeInByte)
  401. 401 }
  402. 402 }
  403. 403
  404. 404 case 3 => {
  405. 405 println("signalDataType"+signalDataType)
  406. 406 rawData = DataReaderDouble(buffer, startOffsetInBits, numberOfRecord, recordSizeInByte)
  407. 407 }
  408. 408
  409. 409 case _ => {
  410. 410 println("signalDataType Error")
  411. 411 }
  412. 412 }
  413. 413
  414. 414 signalDataType0 match {
  415. 415 case 0 => {
  416. 416 if (numberOfBits0 == 1) {
  417. 417 // println("1")
  418. 418 rawTime = DataReaderBit(buffer, startOffsetInBits0, numberOfRecord, recordSizeInByte)
  419. 419 }
  420. 420
  421. 421 if (numberOfBits0 / 8 == 1) {
  422. 422 if (shortSignalName.contains("$")) {
  423. 423 }
  424. 424 else {
  425. 425 // println("2")
  426. 426 rawTime = DataReaderBit(buffer, startOffsetInBits0, numberOfRecord, recordSizeInByte)
  427. 427 }
  428. 428 }
  429. 429
  430. 430 if (numberOfBits0 / 8 == 2) {
  431. 431 // println("3")
  432. 432 rawTime = DataReaderUInt16(buffer, startOffsetInBits0, numberOfRecord, recordSizeInByte)
  433. 433 }
  434. 434
  435. 435 if (numberOfBits0 / 8 == 4) {
  436. 436 // println("4")
  437. 437 rawTime = DataReaderUInt32(buffer, startOffsetInBits0, numberOfRecord, recordSizeInByte)
  438. 438 }
  439. 439
  440. 440 if (numberOfBits0 / 8 == 8) {
  441. 441 // println("8")
  442. 442 rawTime = DataReaderUInt64(buffer, startOffsetInBits0, numberOfRecord, recordSizeInByte)
  443. 443 }
  444. 444 }
  445. 445
  446. 446 case 1 => {
  447. 447 if (numberOfBits0 / 8 == 1) {
  448. 448 if (shortSignalName.contains("$")) {
  449. 449 }
  450. 450 else {
  451. 451 println("5")
  452. 452 rawTime = DataReaderBit(buffer, startOffsetInBits0, numberOfRecord, recordSizeInByte)
  453. 453 }
  454. 454 }
  455. 455 if (numberOfBits0 / 8 == 2) {
  456. 456 println("6")
  457. 457 rawTime = DataReaderUInt16(buffer, startOffsetInBits0, numberOfRecord, recordSizeInByte)
  458. 458 }
  459. 459 if (numberOfBits0 / 8 == 4) {
  460. 460 println("7")
  461. 461 rawTime = DataReaderUInt32(buffer, startOffsetInBits0, numberOfRecord, recordSizeInByte)
  462. 462 }
  463. 463 }
  464. 464
  465. 465 case 2 => {
  466. 466 if (numberOfBits0 / 8 == 4) {
  467. 467 println("8")
  468. 468 rawTime = DataReaderFloat(buffer, startOffsetInBits0, numberOfRecord, recordSizeInByte)
  469. 469 }
  470. 470 // if (numberOfBits0 / 8 == 8) {
  471. 471 // // println("4")
  472. 472 // rawTime = DataReaderUInt64(buffer, startOffsetInBits0, numberOfRecord, recordSizeInByte)
  473. 473 // }
  474. 474 }
  475. 475
  476. 476 case 3 => {
  477. 477 println("9","startOffset: "+startOffsetInBits0,"Record: " + numberOfRecord,"recordSize: "+recordSizeInByte)
  478. 478 rawTime = DataReaderDouble(buffer, startOffsetInBits0, numberOfRecord, recordSizeInByte)
  479. 479 }
  480. 480 case _ => {
  481. 481 println("signalDataType0")
  482. 482 }
  483. 483 }
  484. 484
  485. 485 // case 4 =>{println("lack of signal data type 4")}
  486. 486 // case 5 =>{println("lack of signal data type 5")}
  487. 487 // case 6 =>{println("lack of signal data type 6")}
  488. 488 // case 7 =>{
  489. 489 // // null
  490. 490 // }
  491. 491 // case 8 =>{println("lack of signal data type 8")}
  492. 492 // case 9 =>{println("lack of signal data type 9")}
  493. 493 // case 10 =>{println("lack of signal data type 10")}
  494. 494 // case 11 =>{println("lack of signal data type 11")}
  495. 495 // case 12 =>{println("lack of signal data type 12")}
  496. 496 // case 13 =>{println("lack of signal data type 13")}
  497. 497 // case 14 =>{println("lack of signal data type 14")}
  498. 498 // case 15 =>{println("lack of signal data type 15")}
  499. 499 // case 16 =>{println("lack of signal data type 16")}
  500. 500 //
  501. 501 // println("_channel.cCBlock.conversionType",_channel.cCBlock.conversionType)
  502. 502 // println("_channel.cCBlock.sizeInformation",_channel.cCBlock.sizeInformation)
  503. 503 // println("_channel.cCBlock.p1",_channel.cCBlock.p1)
  504. 504 // println("_channel.cCBlock.p2",_channel.cCBlock.p2)
  505. 505
  506. 506 _channel.cCBlock.conversionType match {
  507. 507 case 0 => {
  508. 508 if (_channel.cCBlock.sizeInformation > 0) {
  509. 509 for (i <- 0 until rawData.length) {
  510. 510 rawData(i) = _channel.cCBlock.p1 + _channel.cCBlock.p2 * rawData(i)
  511. 511 }
  512. 512 }
  513. 513 }
  514. 514
  515. 515 case 1 => {
  516. 516 println("lack of cc type 1")
  517. 517 }
  518. 518 case 2 => {
  519. 519 println("lack of cc type 2")
  520. 520 }
  521. 521 case 6 => {
  522. 522 println("lack of cc type 6")
  523. 523 }
  524. 524 case 7 => {
  525. 525 println("lack of cc type 7")
  526. 526 }
  527. 527 case 8 => {
  528. 528 println("lack of cc type 8")
  529. 529 }
  530. 530 case 9 => {
  531. 531 println("lack of cc type 9")
  532. 532 }
  533. 533 case 10 => {
  534. 534 println("lack of cc type 10")
  535. 535 }
  536. 536 case 11 => {
  537. 537 // println(this.dgBlocks(i).cgBlocks(j).cnBlocks(k).shortSignalName)
  538. 538 println("lack of cc type 11")
  539. 539 }
  540. 540 case 12 => {
  541. 541 println("lack of cc type 12")
  542. 542 }
  543. 543 case 132 => {
  544. 544 println("lack of cc type 132")
  545. 545 }
  546. 546 case 133 => {
  547. 547 println("lack of cc type 133")
  548. 548 }
  549. 549 case _ => {
  550. 550
  551. 551 }
  552. 552 }
  553. 553
  554. 554 var time_cc = new CCBlock(this.allBytes, this.dgBlocks(i).cgBlocks(j).cnBlocks(0).pointerCCBlock)
  555. 555 // println("time_cc.conversionType", time_cc.conversionType)
  556. 556 // println("time_cc.sizeInformation", time_cc.sizeInformation)
  557. 557 // println("time_cc.p1", time_cc.p1)
  558. 558 // println("time_cc.p2", time_cc.p2)
  559. 559
  560. 560 time_cc.conversionType match {
  561. 561 case 0 => {
  562. 562 if (time_cc.sizeInformation > 0) {
  563. 563 for (i <- 0 until rawTime.length) {
  564. 564 rawTime(i) = time_cc.p1 + time_cc.p2 * rawTime(i)
  565. 565 }
  566. 566
  567. 567 }
  568. 568 }
  569. 569 }
  570. 570
  571. 571 // for(i<-0 until 1000){
  572. 572 // println("time", i, rawTime(i))
  573. 573 // }
  574. 574 _channel.time = rawTime
  575. 575 _channel.data = rawData
  576. 576 return _channel
  577. 577 }
  578. 578 }
  579. 579 return null
  580. 580 }
  581. 581 }
  582. 582
  583. 583 class Channel {
  584. 584 var arrayBuffer: Array[Byte] = _
  585. 585
  586. 586 var channelName = ""
  587. 587 var idxCGBlock = 0
  588. 588 var cNBlock: CNBlock = _
  589. 589 var cCBlock: CCBlock = _
  590. 590 var time: Array[Double] = _
  591. 591 var data: Array[Double] = _
  592. 592
  593. 593 }
  594. 594
  595. 595 class IDBlock(var _bytes: Array[Byte]) {
  596. 596
  597. 597 var FileIdentifier = ""
  598. 598 var formatIdentifier = ""
  599. 599 var programIdentifier = ""
  600. 600 var defaultByteOrder = 0
  601. 601 var defaultFloatingPointFormat = 0
  602. 602 var versionNumber = 0
  603. 603
  604. 604 this.makeIDBlock()
  605. 605
  606. 606 def makeIDBlock(): Unit = {
  607. 607
  608. 608 var offset = 0
  609. 609 var len = 8
  610. 610 this.FileIdentifier = bytes2str(_bytes, offset, len)
  611. 611 offset += len
  612. 612
  613. 613 len = 8
  614. 614 this.formatIdentifier = bytes2str(_bytes, offset, len)
  615. 615 // println("this.formatIdentifier", this.formatIdentifier)
  616. 616 offset += len
  617. 617
  618. 618 len = 8
  619. 619 this.programIdentifier = bytes2str(_bytes, offset, len)
  620. 620 offset += len
  621. 621
  622. 622 len = 2
  623. 623 this.defaultByteOrder = bytes2uint16(_bytes, offset)
  624. 624 offset += len
  625. 625
  626. 626 len = 2
  627. 627 this.defaultFloatingPointFormat = bytes2uint16(_bytes, offset)
  628. 628 offset += len
  629. 629
  630. 630 len = 2
  631. 631 this.versionNumber = bytes2uint16(_bytes, offset)
  632. 632 }
  633. 633 }
  634. 634
  635. 635 class HDBlock(var _bytes: Array[Byte]) {
  636. 636 var blockTypeIdentifier = ""
  637. 637 var blockSize = 0
  638. 638 var pointerFirstDGBlock = 0
  639. 639 var pointerFileComment = 0
  640. 640 var pointerProgramBlock = 0
  641. 641 var numberDGroups = 0
  642. 642 var date = ""
  643. 643 var time = ""
  644. 644 var author = ""
  645. 645 var organization = ""
  646. 646 var project = ""
  647. 647 var measureObject = ""
  648. 648
  649. 649 this.makeHDBlock()
  650. 650
  651. 651 def makeHDBlock(): Unit = {
  652. 652
  653. 653 var offset = 64
  654. 654 var len = 2
  655. 655 this.blockTypeIdentifier = bytes2str(_bytes, offset, len)
  656. 656 offset += len
  657. 657
  658. 658 len = 2
  659. 659 this.blockSize = bytes2uint16(_bytes, offset)
  660. 660 offset += len
  661. 661
  662. 662 len = 4
  663. 663 this.pointerFirstDGBlock = bytes2uint32(_bytes, offset)
  664. 664 offset += len
  665. 665
  666. 666 len = 4
  667. 667 this.pointerFileComment = bytes2uint32(_bytes, offset)
  668. 668 offset += len
  669. 669
  670. 670 len = 4
  671. 671 this.pointerProgramBlock = bytes2uint32(_bytes, offset)
  672. 672 offset += len
  673. 673
  674. 674 len = 2
  675. 675 this.numberDGroups = bytes2uint16(_bytes, offset)
  676. 676 offset += len
  677. 677
  678. 678 len = 10
  679. 679 this.date = bytes2str(_bytes, offset, len)
  680. 680 offset += len
  681. 681
  682. 682 len = 8
  683. 683 this.time = bytes2str(_bytes, offset, len)
  684. 684 offset += len
  685. 685
  686. 686 len = 32
  687. 687 this.author = bytes2str(_bytes, offset, len)
  688. 688 offset += len
  689. 689
  690. 690 len = 32
  691. 691 this.organization = bytes2str(_bytes, offset, len)
  692. 692 offset += len
  693. 693
  694. 694 len = 32
  695. 695 this.project = bytes2str(_bytes, offset, len)
  696. 696 offset += len
  697. 697
  698. 698 len = 32
  699. 699 this.measureObject = bytes2str(_bytes, offset, len)
  700. 700 offset += len
  701. 701
  702. 702 }
  703. 703 }
  704. 704
  705. 705 class TXBlock(var _bytes: Array[Byte], var _offset: Int) {
  706. 706 var blockTypeIdentifier = ""
  707. 707 var blockSize = 0
  708. 708 var Text = ""
  709. 709
  710. 710 this.makeTXBlock()
  711. 711
  712. 712 def makeTXBlock(): Unit = {
  713. 713 var offset = _offset
  714. 714
  715. 715 var len = 2
  716. 716
  717. 717 this.blockTypeIdentifier = bytes2str(_bytes, offset, len)
  718. 718 offset += len
  719. 719
  720. 720 len = 2
  721. 721
  722. 722 this.blockSize = bytes2uint16(_bytes, offset)
  723. 723 offset += len
  724. 724
  725. 725 len = this.blockSize - 4
  726. 726 this.Text = bytes2str(_bytes, offset, len)
  727. 727 offset += len
  728. 728 }
  729. 729 }
  730. 730
  731. 731 class CEBlock(var _bytes: Array[Byte], var _offset: Int) {
  732. 732 var blockTypeIdentifier = ""
  733. 733 var blockSize = 0
  734. 734 var extensionType = 0
  735. 735 var moduleNumber = 0
  736. 736 var address = 0
  737. 737 var description = ""
  738. 738 var ECUIdentification = ""
  739. 739 var CANMessage = 0
  740. 740 var CANChannelIndex = 0
  741. 741 var messageName = ""
  742. 742 var senderName = ""
  743. 743
  744. 744 this.makeCEBlock()
  745. 745
  746. 746 def makeCEBlock(): Unit = {
  747. 747 var offset = _offset
  748. 748
  749. 749 var len = 2
  750. 750 this.blockTypeIdentifier = bytes2str(_bytes, offset, len)
  751. 751 offset += len
  752. 752
  753. 753 len = 2
  754. 754 this.blockSize = bytes2uint16(_bytes, offset)
  755. 755 offset += len
  756. 756
  757. 757 len = 2
  758. 758 this.extensionType = bytes2uint16(_bytes, offset)
  759. 759 offset += len
  760. 760
  761. 761 if(this.extensionType == 2){
  762. 762 len = 2
  763. 763 this.moduleNumber = bytes2uint16(_bytes, offset)
  764. 764 offset += len
  765. 765
  766. 766 len = 4
  767. 767 this.address = bytes2uint32(_bytes, offset)
  768. 768 offset += len
  769. 769
  770. 770 len = 80
  771. 771 this.description = bytes2str(_bytes, offset, len)
  772. 772 offset += len
  773. 773
  774. 774 len = 32
  775. 775 this.ECUIdentification = bytes2str(_bytes, offset, len)
  776. 776 offset += len
  777. 777
  778. 778 }
  779. 779 else if(this.extensionType == 19){
  780. 780 len = 4
  781. 781 this.moduleNumber = bytes2uint32(_bytes, offset)
  782. 782 offset += len
  783. 783
  784. 784 len = 4
  785. 785 this.address = bytes2uint32(_bytes, offset)
  786. 786 offset += len
  787. 787
  788. 788 len = 36
  789. 789 this.description = bytes2str(_bytes, offset, len)
  790. 790 offset += len
  791. 791
  792. 792 len = 36
  793. 793 this.ECUIdentification = bytes2str(_bytes, offset, len)
  794. 794 offset += len
  795. 795 }
  796. 796 }
  797. 797 }
  798. 798
  799. 799 class DGBlock(var _bytes: Array[Byte], var _offset: Int) {
  800. 800 var blockTypeIdentifier = ""
  801. 801 var blockSize = 0
  802. 802 var pointerNextDGBlock = 0
  803. 803 var pointerFirstCGBlock = 0
  804. 804 var pointerTriggerBlock = 0
  805. 805 var pointerDataBlock = 0
  806. 806 var numberCGs = 0
  807. 807 var numberRecordIDs = 0
  808. 808
  809. 809 var cgBlocks: List[CGBlock] = List()
  810. 810
  811. 811 this.makeDGBlock()
  812. 812
  813. 813 def makeDGBlock(): Unit = {
  814. 814
  815. 815 var offset = _offset
  816. 816 var len = 2
  817. 817 this.blockTypeIdentifier = bytes2str(_bytes, offset, len)
  818. 818 offset += len
  819. 819
  820. 820 len = 2
  821. 821 this.blockSize = bytes2uint16(_bytes, offset)
  822. 822 offset += len
  823. 823
  824. 824 len = 4
  825. 825 this.pointerNextDGBlock = bytes2uint32(_bytes, offset)
  826. 826 offset += len
  827. 827
  828. 828 len = 4
  829. 829 this.pointerFirstCGBlock = bytes2uint32(_bytes, offset)
  830. 830 offset += len
  831. 831
  832. 832 len = 4
  833. 833 this.pointerTriggerBlock = bytes2uint32(_bytes, offset)
  834. 834 offset += len
  835. 835
  836. 836 len = 4
  837. 837 this.pointerDataBlock = bytes2uint32(_bytes, offset)
  838. 838 offset += len
  839. 839
  840. 840 len = 2
  841. 841 this.numberCGs = bytes2uint16(_bytes, offset)
  842. 842 offset += len
  843. 843
  844. 844 len = 10
  845. 845 this.numberRecordIDs = bytes2uint16(_bytes, offset)
  846. 846 offset += len
  847. 847
  848. 848 var cg = new CGBlock(_bytes, this.pointerFirstCGBlock)
  849. 849 cgBlocks = cgBlocks :+ cg
  850. 850
  851. 851 while (cg.pointerNextCGBlock != 0) {
  852. 852 cg = new CGBlock(_bytes, cg.pointerNextCGBlock)
  853. 853 cgBlocks = cgBlocks :+ cg
  854. 854 }
  855. 855
  856. 856 }
  857. 857 }
  858. 858
  859. 859 class CGBlock(var _bytes: Array[Byte], var _offset: Int) {
  860. 860 var blockTypeIdentifier = ""
  861. 861 var blockSize = 0
  862. 862 var pointerNextCGBlock = 0
  863. 863 var pointerFirstCNBlock = 0
  864. 864 var pointerComment = 0
  865. 865 var recordID = 0
  866. 866 var numberChannels = 0
  867. 867 var sizeDataRecord = 0
  868. 868 var numberRecords = 0
  869. 869
  870. 870 var cnBlocks: List[CNBlock] = List()
  871. 871
  872. 872 this.makeCGBlock()
  873. 873
  874. 874 def makeCGBlock(): Unit = {
  875. 875
  876. 876 var offset = _offset
  877. 877 var len = 2
  878. 878 this.blockTypeIdentifier = bytes2str(_bytes, offset, len)
  879. 879 offset += len
  880. 880
  881. 881 len = 2
  882. 882 this.blockSize = bytes2uint16(_bytes, offset)
  883. 883 offset += len
  884. 884
  885. 885 len = 4
  886. 886 this.pointerNextCGBlock = bytes2uint32(_bytes, offset)
  887. 887 offset += len
  888. 888
  889. 889 len = 4
  890. 890 this.pointerFirstCNBlock = bytes2uint32(_bytes, offset)
  891. 891 offset += len
  892. 892
  893. 893 len = 4
  894. 894 this.pointerComment = bytes2uint32(_bytes, offset)
  895. 895 offset += len
  896. 896
  897. 897 len = 2
  898. 898 this.recordID = bytes2uint16(_bytes, offset)
  899. 899 offset += len
  900. 900
  901. 901 len = 2
  902. 902 this.numberChannels = bytes2uint16(_bytes, offset)
  903. 903 offset += len
  904. 904
  905. 905 len = 2
  906. 906 this.sizeDataRecord = bytes2uint16(_bytes, offset)
  907. 907 offset += len
  908. 908
  909. 909 len = 4
  910. 910 this.numberRecords = bytes2uint32(_bytes, offset)
  911. 911 offset += len
  912. 912
  913. 913
  914. 914 var cn = new CNBlock(_bytes, this.pointerFirstCNBlock)
  915. 915 cnBlocks = cnBlocks :+ cn
  916. 916
  917. 917 while (cn.pointerNextCNBlock != 0) {
  918. 918 cn = new CNBlock(_bytes, cn.pointerNextCNBlock)
  919. 919 cnBlocks = cnBlocks :+ cn
  920. 920 }
  921. 921 }
  922. 922 }
  923. 923
  924. 924 class CNBlock(var _bytes: Array[Byte], var _offset: Int) {
  925. 925 var blockTypeIdentifier = ""
  926. 926 var blockSize = 0
  927. 927 var pointerNextCNBlock = 0
  928. 928 var pointerCCBlock = 0
  929. 929 var pointerCEBlock = 0
  930. 930 var pointerCDBlock = 0
  931. 931 var pointerComment = 0
  932. 932 var channelType = 0
  933. 933 var shortSignalName = ""
  934. 934 var signalDescription = ""
  935. 935 var startOffsetInBits = 0
  936. 936 var numberOfBits = 0
  937. 937 var signalDataType = 0
  938. 938 var valueRangeValid = false
  939. 939 var minSignalValue = 0.0
  940. 940 var maxSignalValue = 0.0
  941. 941 var sampleRate = 0.0
  942. 942 var pointerLongSignalName = 0
  943. 943 var pointerDisplayName = 0
  944. 944 var additionalByteOffset = 0
  945. 945
  946. 946 this.makeCNBlock()
  947. 947
  948. 948 var ccBlock = new CCBlock(_bytes, this.pointerCCBlock)
  949. 949 var ceBlock = new CEBlock(_bytes, this.pointerCEBlock)
  950. 950 //var txBlock = new TXBlock(_bytes, this.pointerComment)
  951. 951
  952. 952 def makeCNBlock() = {
  953. 953
  954. 954 var offset = _offset
  955. 955 var len = 2
  956. 956 this.blockTypeIdentifier = bytes2str(_bytes, offset, len)
  957. 957 offset += len
  958. 958
  959. 959 len = 2
  960. 960 this.blockSize = bytes2uint16(_bytes, offset)
  961. 961 offset += len
  962. 962
  963. 963 len = 4
  964. 964 this.pointerNextCNBlock = bytes2uint32(_bytes, offset)
  965. 965 offset += len
  966. 966
  967. 967 len = 4
  968. 968 this.pointerCCBlock = bytes2uint32(_bytes, offset)
  969. 969 offset += len
  970. 970
  971. 971 len = 4
  972. 972 this.pointerCEBlock = bytes2uint32(_bytes, offset)
  973. 973 offset += len
  974. 974
  975. 975 len = 4
  976. 976 this.pointerCDBlock = bytes2uint32(_bytes, offset)
  977. 977 offset += len
  978. 978
  979. 979 len = 4
  980. 980 this.pointerComment = bytes2uint32(_bytes, offset)
  981. 981 offset += len
  982. 982
  983. 983 len = 2
  984. 984 this.channelType = bytes2uint16(_bytes, offset)
  985. 985 offset += len
  986. 986
  987. 987 len = 32
  988. 988 this.shortSignalName = bytes2str(_bytes, offset, len)
  989. 989 offset += len
  990. 990
  991. 991 len = 128
  992. 992 this.signalDescription = bytes2str(_bytes, offset, len)
  993. 993 offset += len
  994. 994
  995. 995 len = 2
  996. 996 this.startOffsetInBits = bytes2uint16(_bytes, offset)
  997. 997 offset += len
  998. 998
  999. 999 len = 2
  1000. 1000 this.numberOfBits = bytes2uint16(_bytes, offset)
  1001. 1001 offset += len
  1002. 1002
  1003. 1003 len = 2
  1004. 1004 this.signalDataType = bytes2uint16(_bytes, offset)
  1005. 1005 offset += len
  1006. 1006
  1007. 1007 len = 2
  1008. 1008 this.valueRangeValid = bytes2bool(_bytes, offset)
  1009. 1009 offset += len
  1010. 1010
  1011. 1011 len = 64
  1012. 1012 this.minSignalValue = bytes2real(_bytes, offset)
  1013. 1013 offset += len
  1014. 1014
  1015. 1015 len = 64
  1016. 1016 this.maxSignalValue = bytes2real(_bytes, offset)
  1017. 1017 offset += len
  1018. 1018
  1019. 1019 len = 64
  1020. 1020 this.sampleRate = bytes2real(_bytes, offset)
  1021. 1021 offset += len
  1022. 1022
  1023. 1023 len = 4
  1024. 1024 this.pointerLongSignalName = bytes2uint32(_bytes, offset)
  1025. 1025 offset += len
  1026. 1026
  1027. 1027 len = 4
  1028. 1028 this.pointerDisplayName = bytes2uint32(_bytes, offset)
  1029. 1029 offset += len
  1030. 1030
  1031. 1031 len = 2
  1032. 1032 this.additionalByteOffset = bytes2uint16(_bytes, offset)
  1033. 1033 offset += len
  1034. 1034 }
  1035. 1035 }
  1036. 1036
  1037. 1037 class CCBlock(var _bytes: Array[Byte], var _offset: Int) {
  1038. 1038 var arrayBuffer: Array[Byte] = _
  1039. 1039 var blockTypeIdentifier = ""
  1040. 1040 var blockSize = 0
  1041. 1041 var physicalValueRangeValid = false
  1042. 1042 var minPhysicalSignalValue = 0.0
  1043. 1043 var maxPhysicalSignalValue = 0.0
  1044. 1044 var physicalUnit = ""
  1045. 1045 var conversionType = 0
  1046. 1046 var sizeInformation = 0
  1047. 1047 var p1 = 0.0
  1048. 1048 var p2 = 0.0
  1049. 1049
  1050. 1050 // var additionalConversionData
  1051. 1051
  1052. 1052 this.makeCCBlock()
  1053. 1053
  1054. 1054 def makeCCBlock() = {
  1055. 1055
  1056. 1056 arrayBuffer = _bytes
  1057. 1057 var offset = _offset
  1058. 1058 var len = 2
  1059. 1059 this.blockTypeIdentifier = bytes2str(_bytes, offset, len)
  1060. 1060 // println("this.blockTypeIdentifier",this.blockTypeIdentifier)
  1061. 1061 offset += len
  1062. 1062
  1063. 1063 len = 2
  1064. 1064 this.blockSize = bytes2uint16(_bytes, offset)
  1065. 1065 // println("this.blockSize",this.blockSize)
  1066. 1066 offset += len
  1067. 1067
  1068. 1068 len = 2
  1069. 1069 this.physicalValueRangeValid = bytes2bool(_bytes, offset)
  1070. 1070 // println("this.physicalValueRangeValid",this.physicalValueRangeValid)
  1071. 1071 offset += len
  1072. 1072
  1073. 1073 len = 8
  1074. 1074 this.minPhysicalSignalValue = bytes2real(_bytes, offset)
  1075. 1075 // println("this.minPhysicalSignalValue",this.minPhysicalSignalValue)
  1076. 1076 offset += len
  1077. 1077
  1078. 1078 len = 8
  1079. 1079 this.maxPhysicalSignalValue = bytes2real(_bytes, offset)
  1080. 1080 // println("this.maxPhysicalSignalValue",this.maxPhysicalSignalValue)
  1081. 1081 offset += len
  1082. 1082
  1083. 1083 len = 20
  1084. 1084 this.physicalUnit = bytes2str(_bytes, offset, len)
  1085. 1085 // println("this.physicalUnit",this.physicalUnit)
  1086. 1086 offset += len
  1087. 1087
  1088. 1088 len = 2
  1089. 1089 this.conversionType = bytes2uint16(_bytes, offset)
  1090. 1090 // println("this.conversionType",this.conversionType)
  1091. 1091 offset += len
  1092. 1092
  1093. 1093 len = 2
  1094. 1094 this.sizeInformation = bytes2uint16(_bytes, offset)
  1095. 1095 // println("this.sizeInformation",this.sizeInformation)
  1096. 1096 offset += len
  1097. 1097
  1098. 1098 len = 8
  1099. 1099 this.p1 = bytes2real(_bytes, offset)
  1100. 1100 // println("this.p1",this.p1)
  1101. 1101 offset += len
  1102. 1102
  1103. 1103 len = 8
  1104. 1104 this.p2 = bytes2real(_bytes, offset)
  1105. 1105 // println("this.p2",this.p2)
  1106. 1106 offset += len
  1107. 1107
  1108. 1108 }
  1109. 1109 }
  1110. 1110
  1111. 1111
  1112. 1112 def bytes2str(_bytes: Array[Byte], _offset: Int, _len: Int): String = {
  1113. 1113 var temp_bytes = new Array[Byte](_len)
  1114. 1114 for (i <- 0 to _len - 1) {
  1115. 1115 temp_bytes(i) = _bytes(i + _offset)
  1116. 1116 }
  1117. 1117
  1118. 1118 return new String(temp_bytes).trim()
  1119. 1119 }
  1120. 1120
  1121. 1121 def bytes2uint8(_bytes: Array[Byte], _offset: Int): Int = {
  1122. 1122 var b0 = _bytes(_offset) & 0xff
  1123. 1123
  1124. 1124 return b0
  1125. 1125 }
  1126. 1126
  1127. 1127 def bytes2uint16(_bytes: Array[Byte], _offset: Int): Int = {
  1128. 1128 var b0 = _bytes(_offset) & 0xff
  1129. 1129 var b1 = _bytes(_offset + 1) & 0xff
  1130. 1130
  1131. 1131 return (b1 << 8) | b0
  1132. 1132 }
  1133. 1133
  1134. 1134 def bytes2uint32(_bytes: Array[Byte], _offset: Int): Int = {
  1135. 1135
  1136. 1136 var b0 = _bytes(_offset) & 0xff
  1137. 1137 var b1 = _bytes(_offset + 1) & 0xff
  1138. 1138 var b2 = _bytes(_offset + 2) & 0xff
  1139. 1139 var b3 = _bytes(_offset + 3) & 0xff
  1140. 1140
  1141. 1141 return (b3 << 24) | (b2 << 16) | (b1 << 8) | b0
  1142. 1142 }
  1143. 1143
  1144. 1144 def bytes2bool(_bytes: Array[Byte], _offset: Int): Boolean = {
  1145. 1145 var b0 = _bytes(_offset) & 0xff
  1146. 1146 var b1 = _bytes(_offset + 1) & 0xff
  1147. 1147
  1148. 1148 return if (((b1 << 8) | b0) != 0) true else false
  1149. 1149 }
  1150. 1150
  1151. 1151 def bytes2float(_bytes: Array[Byte], _offset: Int): Double = {
  1152. 1152
  1153. 1153 var _array: Array[Byte] = new Array[Byte](4)
  1154. 1154
  1155. 1155 for (i <- 0 until 4) {
  1156. 1156 _array(i) = _bytes(-i + _offset + 4)
  1157. 1157 }
  1158. 1158
  1159. 1159 return ByteBuffer.wrap(_array).getFloat()
  1160. 1160
  1161. 1161 // var b0 = _bytes(_offset) & 0xff
  1162. 1162 // var b1 = _bytes(_offset + 1) & 0xff
  1163. 1163 // var b2 = _bytes(_offset + 2) & 0xff
  1164. 1164 // var b3 = _bytes(_offset + 3) & 0xff
  1165. 1165
  1166. 1166 // return ((b3 << 24) | (b2 << 16) | (b1 << 8) | b0).toDouble
  1167. 1167 }
  1168. 1168
  1169. 1169 def bytes2real(_bytes: Array[Byte], _offset: Int): Double = {
  1170. 1170
  1171. 1171 var _array: Array[Byte] = new Array[Byte](8)
  1172. 1172
  1173. 1173 for (i <- 0 until 8) {
  1174. 1174 _array(i) = _bytes(-i + _offset + 7)
  1175. 1175 }
  1176. 1176
  1177. 1177 // var b0 = _bytes(_offset) & 0xff
  1178. 1178 // var b1 = _bytes(_offset + 1) & 0xff
  1179. 1179 // var b2 = _bytes(_offset + 2) & 0xff
  1180. 1180 // var b3 = _bytes(_offset + 3) & 0xff
  1181. 1181 // var b4 = _bytes(_offset + 4) & 0xff
  1182. 1182 // var b5 = _bytes(_offset + 5) & 0xff
  1183. 1183 // var b6 = _bytes(_offset + 6) & 0xff
  1184. 1184 // var b7 = _bytes(_offset + 7) & 0xff
  1185. 1185
  1186. 1186 return ByteBuffer.wrap(_array).getDouble
  1187. 1187
  1188. 1188 // return ((b7 << 56) |(b6 << 48)|(b5 << 40)|(b4 << 32)|(b3 << 24)|(b2 << 16)|(b1 << 8)| b0).toDouble
  1189. 1189 }
  1190. 1190
  1191. 1191 def bytes2long(_bytes: Array[Byte], _offset: Int): Double = {
  1192. 1192
  1193. 1193 var _array: Array[Byte] = new Array[Byte](8)
  1194. 1194
  1195. 1195 for (i <- 0 until 8) {
  1196. 1196 _array(i) = _bytes(-i + _offset + 7)
  1197. 1197 }
  1198. 1198 return ByteBuffer.wrap(_array).getLong
  1199. 1199
  1200. 1200 // return ((b7 << 56) |(b6 << 48)|(b5 << 40)|(b4 << 32)|(b3 << 24)|(b2 << 16)|(b1 << 8)| b0).toDouble
  1201. 1201 }
  1202. 1202
  1203. 1203 def DataReaderBit(_byte: Array[Byte], _startOffsetInBits: Int, _numberOfRecord: Int, _recordSizeInByte: Int): Array[Double] = {
  1204. 1204 var startposition = _startOffsetInBits / 8
  1205. 1205 var curPos = startposition
  1206. 1206
  1207. 1207 var result: Array[Double] = new Array[Double](_numberOfRecord)
  1208. 1208 for (i <- 0 until _numberOfRecord - 1) {
  1209. 1209 result(i) = bytes2uint8(_byte, curPos)
  1210. 1210 curPos += _recordSizeInByte
  1211. 1211 }
  1212. 1212 return result
  1213. 1213 }
  1214. 1214
  1215. 1215 def DataReaderUInt(_byte: Array[Byte], _startOffsetInBits: Int, _numberOfRecord: Int, _recordSizeInByte: Int): Array[Double] = {
  1216. 1216 var startposition = _startOffsetInBits / 8
  1217. 1217 var curPos = startposition
  1218. 1218
  1219. 1219 var result: Array[Double] = new Array[Double](_numberOfRecord)
  1220. 1220 for (i <- 0 until _numberOfRecord - 1) {
  1221. 1221 result(i) = bytes2uint8(_byte, curPos)
  1222. 1222 curPos += _recordSizeInByte
  1223. 1223 }
  1224. 1224
  1225. 1225 return result
  1226. 1226 }
  1227. 1227
  1228. 1228 def DataReaderUInt16(_byte: Array[Byte], _startOffsetInBits: Int, _numberOfRecord: Int, _recordSizeInByte: Int): Array[Double] = {
  1229. 1229 var startposition = _startOffsetInBits / 8
  1230. 1230 var curPos = startposition
  1231. 1231
  1232. 1232 var result: Array[Double] = new Array[Double](_numberOfRecord)
  1233. 1233
  1234. 1234 for (i <- 0 until _numberOfRecord - 1) {
  1235. 1235 result(i) = bytes2uint16(_byte, curPos)
  1236. 1236 curPos += _recordSizeInByte
  1237. 1237 }
  1238. 1238 return result
  1239. 1239 }
  1240. 1240
  1241. 1241 def DataReaderUInt32(_byte: Array[Byte], _startOffsetInBits: Int, _numberOfRecord: Int, _recordSizeInByte: Int): Array[Double] = {
  1242. 1242 var startposition = _startOffsetInBits / 8
  1243. 1243 var curPos = startposition
  1244. 1244
  1245. 1245 var result: Array[Double] = new Array[Double](_numberOfRecord)
  1246. 1246
  1247. 1247 for (i <- 0 until _numberOfRecord - 1) {
  1248. 1248 result(i) = bytes2uint32(_byte, curPos)
  1249. 1249 curPos += _recordSizeInByte
  1250. 1250 }
  1251. 1251 return result
  1252. 1252 }
  1253. 1253
  1254. 1254 def DataReaderUInt64(_byte: Array[Byte], _startOffsetInBits: Int, _numberOfRecord: Int, _recordSizeInByte: Int): Array[Double] = {
  1255. 1255 var startposition = _startOffsetInBits / 8
  1256. 1256 var curPos = startposition
  1257. 1257
  1258. 1258 var result: Array[Double] = new Array[Double](_numberOfRecord)
  1259. 1259
  1260. 1260 for (i <- 0 until _numberOfRecord - 1) {
  1261. 1261 result(i) = bytes2long(_byte, curPos)
  1262. 1262 curPos += _recordSizeInByte
  1263. 1263 }
  1264. 1264 return result
  1265. 1265 }
  1266. 1266
  1267. 1267 def DataReaderFloat(_byte: Array[Byte], _startOffsetInBits: Int, _numberOfRecord: Int, _recordSizeInByte: Int): Array[Double] = {
  1268. 1268 var startposition = _startOffsetInBits / 8
  1269. 1269 var curPos = startposition
  1270. 1270 var result: Array[Double] = new Array[Double](_numberOfRecord)
  1271. 1271
  1272. 1272 for (i <- 0 until _numberOfRecord - 1) {
  1273. 1273 result(i) = bytes2float(_byte, curPos)
  1274. 1274 curPos += _recordSizeInByte
  1275. 1275 }
  1276. 1276 return result
  1277. 1277 }
  1278. 1278
  1279. 1279 def DataReaderDouble(_byte: Array[Byte], _startOffsetInBits: Int, _numberOfRecord: Int, _recordSizeInByte: Int): Array[Double] = {
  1280. 1280 var startposition = _startOffsetInBits / 8
  1281. 1281 var curPos = startposition
  1282. 1282
  1283. 1283 var result: Array[Double] = new Array[Double](_numberOfRecord)
  1284. 1284
  1285. 1285 for (i <- 0 until _numberOfRecord - 1) {
  1286. 1286 result(i) = bytes2real(_byte, curPos)
  1287. 1287 curPos += _recordSizeInByte
  1288. 1288 }
  1289. 1289 return result
  1290. 1290 }
  1291. 1291
  1292. 1292 }
View Code

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号