fit4ruby 3.5.0 → 3.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e3c3c8eeb82d8dcde4114e43cc7e99882c61eef8cbf204bff47abe8658523dbe
4
- data.tar.gz: 02aa11ffebeabab221d493199e402a51ffe3bcbf88d023ca2734c05b22e64362
3
+ metadata.gz: a6c0eeaa643f6448d85589f5dd3eba27f05b5b98c9612df717c6105941d37c04
4
+ data.tar.gz: af7fb428ac6490e2e0ffa239d3f6135e7a66362e35a630f1b83020fed43a9a50
5
5
  SHA512:
6
- metadata.gz: 209b75663bb89a9a52185c632971039651cf71a0ee9758a56b4accfa1559f360123beaa4f055b0d50f064adc43ca0c951050806aeed38d21b7db5a014b597288
7
- data.tar.gz: ac995d33edeb4c6c35bb808896933f5f76795efaeb500e73b95d9b270afcc68ff3eca04c1ddd95ae7367c27b6f531576c65d9407271277cadbc732cf5a457aa8
6
+ metadata.gz: 251d1d4bf916e08744f3609bf4ee9eec766094b937dc9094fe2f1215d7971ad4a7ae94b2d047370d62d79bf8e9b3e250cb54fb08da036e0444ef37685cbe7736
7
+ data.tar.gz: 9c61be05a87a745b3509458ac56f4798c1afb1065d9f1d9808d7fd2e860a400b224e901a57f97263912d15b9199b5f14e9a9c7fab9ee7737f1872ed6dd78f6f5
@@ -37,7 +37,7 @@ DEPENDENCIES
37
37
  bundler (>= 1.6.4)
38
38
  fit4ruby!
39
39
  pry (>= 0.12)
40
- rake (~> 0.9.6)
40
+ rake (~> 12.0.0)
41
41
  rspec (>= 3.8)
42
42
  yard (~> 0.9.20)
43
43
 
@@ -26,7 +26,7 @@ EOT
26
26
 
27
27
  spec.add_dependency('bindata', '=2.3.0')
28
28
  spec.add_development_dependency('yard', '~>0.9.20')
29
- spec.add_development_dependency('rake', '~>0.9.6')
29
+ spec.add_development_dependency('rake', '~>12.0.0')
30
30
  spec.add_development_dependency('bundler', '>=1.6.4')
31
31
  spec.add_development_dependency('rspec', '>=3.8')
32
32
  spec.add_development_dependency('pry', '>=0.12')
@@ -32,6 +32,25 @@ module Fit4Ruby
32
32
  @timestamp <=> fdr.timestamp
33
33
  end
34
34
 
35
+ def numeric_manufacturer
36
+ if @manufacturer.is_a?(String)
37
+ GlobalFitDictionaries['manufacturer'].value_by_name(@manufacturer)
38
+ else
39
+ @manufacturer
40
+ end
41
+ end
42
+
43
+ def numeric_product
44
+ if @garmin_product && @garmin_product.is_a?(String)
45
+ return GlobalFitDictionaries['garmin_product'].
46
+ value_by_name(@garmin_product)
47
+ elsif @product.is_a?(String)
48
+ return GlobalFitDictionaries['product'].value_by_name(@product)
49
+ else
50
+ return @product
51
+ end
52
+ end
53
+
35
54
  def check(index)
36
55
  unless @device_index
37
56
  Log.fatal 'device info record must have a device_index'
@@ -47,6 +47,12 @@ module Fit4Ruby
47
47
  Log.error "fit_base_type_id #{@fit_base_type_id} is too large"
48
48
  return
49
49
  end
50
+
51
+ name = "_#{@developer_data_index}_#{@field_name}"
52
+ # A fit file may include multiple definitions of the same field. We
53
+ # ignore all subsequent definitions.
54
+ return if msg.has_field?(name)
55
+
50
56
  options = {}
51
57
  options[:scale] = @scale if @scale
52
58
  options[:offset] = @offset if @offset
@@ -54,7 +60,7 @@ module Fit4Ruby
54
60
  options[:unit] = @units
55
61
  msg.field(@field_definition_number,
56
62
  FIT_TYPE_DEFS[@fit_base_type_id & 0x7F][1],
57
- "_#{@developer_data_index}_#{@field_name}", options)
63
+ name, options)
58
64
  end
59
65
 
60
66
  end
@@ -54,8 +54,8 @@ module Fit4Ruby
54
54
  else
55
55
  @name = "field#{field_definition_number.snapshot}"
56
56
  @type = nil
57
- Log.warn { "Unknown field number #{field_definition_number} " +
58
- "in global message #{@global_message_number}" }
57
+ Log.debug { "Unknown field number #{field_definition_number} " +
58
+ "in global message #{@global_message_number}" }
59
59
  end
60
60
  end
61
61
 
@@ -36,7 +36,7 @@ module Fit4Ruby
36
36
  @name = @gfm.name
37
37
  else
38
38
  @name = "message#{@global_message_number}"
39
- Log.warn { "Unknown global message number #{@global_message_number}" }
39
+ Log.debug { "Unknown global message number #{@global_message_number}" }
40
40
  end
41
41
  @message_record = produce(definition)
42
42
  end
@@ -59,8 +59,8 @@ module Fit4Ruby
59
59
  end
60
60
  obj = entity.new_fit_data_record(@name)
61
61
 
62
- # It's important to ensure that alternative fields processed after the
63
- # regular fields so that the decision field has already been already set.
62
+ # It's important to ensure that alternative fields are processed after
63
+ # the regular fields so that the decision field has already been set.
64
64
  sorted_fields = @definition.data_fields.sort do |f1, f2|
65
65
  f1alt = is_alt_field?(f1)
66
66
  f2alt = is_alt_field?(f2)
@@ -312,52 +312,306 @@ module Fit4Ruby
312
312
  entry 144, 'uint64z'
313
313
 
314
314
  dict 'garmin_product'
315
+ entry 1, 'hrm1'
316
+ entry 2, 'axh01'
317
+ entry 3, 'axb01'
318
+ entry 4, 'axb02'
319
+ entry 5, 'hrm2ss'
320
+ entry 6, 'dsi_alf02'
321
+ entry 7, 'hrm3ss'
315
322
  entry 8, 'hrm_run_single_byte_product_id'
316
323
  entry 9, 'bsm'
317
324
  entry 10, 'bcm'
325
+ entry 11, 'axs01'
326
+ entry 12, 'hrm_tri_single_byte_product_id'
327
+ entry 13, 'hrm4_run_single_byte_product_id'
328
+ entry 14, 'fr225_single_byte_product_id'
329
+ entry 473, 'fr301_china'
330
+ entry 474, 'fr301_japan'
331
+ entry 475, 'fr301_korea'
332
+ entry 494, 'fr301_taiwan'
333
+ entry 717, 'fr405'
334
+ entry 782, 'fr50'
335
+ entry 987, 'fr405_japan'
336
+ entry 988, 'fr60'
337
+ entry 1011, 'dsi_alf01'
338
+ entry 1018, 'fr310xt'
339
+ entry 1036, 'edge500'
340
+ entry 1124, 'fr110'
341
+ entry 1169, 'edge800'
342
+ entry 1199, 'edge500_taiwan'
343
+ entry 1213, 'edge500_japan'
344
+ entry 1253, 'chirp'
345
+ entry 1274, 'fr110_japan'
346
+ entry 1325, 'edge200'
347
+ entry 1328, 'fr910xt'
348
+ entry 1333, 'edge800_taiwan'
349
+ entry 1334, 'edge800_japan'
350
+ entry 1341, 'alf04'
351
+ entry 1345, 'fr610'
352
+ entry 1360, 'fr210_japan'
353
+ entry 1380, 'vector_ss'
354
+ entry 1381, 'vector_cp'
355
+ entry 1386, 'edge800_china'
356
+ entry 1387, 'edge500_china'
357
+ entry 1405, 'approach_g10'
358
+ entry 1410, 'fr610_japan'
359
+ entry 1422, 'edge500_korea'
360
+ entry 1436, 'fr70'
361
+ entry 1446, 'fr310xt_4t'
362
+ entry 1461, 'amx'
363
+ entry 1482, 'fr10'
364
+ entry 1497, 'edge800_korea'
365
+ entry 1499, 'swim'
366
+ entry 1537, 'fr910xt_china'
318
367
  entry 1551, 'fenix'
368
+ entry 1555, 'edge200_taiwan'
369
+ entry 1561, 'edge510'
370
+ entry 1567, 'edge810'
371
+ entry 1570, 'tempe'
372
+ entry 1600, 'fr910xt_japan'
319
373
  # The Fenix3 is rumored to have a Mediatek MT3333 GPS chipset. Not sure if
320
374
  # that would be a beter name.
321
375
  entry 1620, 'fenix3_gps' # Just a guess
322
376
  entry 1621, 'fenix5_gps' # Just a guess
323
377
  entry 1623, 'fr620'
324
378
  entry 1632, 'fr220'
379
+ entry 1664, 'fr910xt_korea'
380
+ entry 1688, 'fr10_japan'
325
381
  # The FR620 is rumored to have a MediaTek MT3339 GPS chipset while the
326
382
  # FR920XT is rumored to have a MT3333. Not sure why they have the same ID
327
383
  # in the FIT file for the GPS device.
328
384
  entry 1689, 'fr620_fr920xt_gps' # Just a guess
385
+ entry 1721, 'edge810_japan'
386
+ entry 1735, 'virb_elite'
387
+ entry 1736, 'edge_touring'
388
+ entry 1742, 'edge510_japan'
329
389
  entry 1743, 'hrm_tri'
330
390
  entry 1752, 'hrm_run'
331
391
  entry 1765, 'fr920xt'
392
+ entry 1821, 'edge510_asia'
393
+ entry 1822, 'edge810_china'
394
+ entry 1823, 'edge810_taiwan'
395
+ entry 1836, 'edge1000'
396
+ entry 1837, 'vivo_fit'
397
+ entry 1853, 'virb_remote'
398
+ entry 1885, 'vivo_ki'
399
+ entry 1903, 'fr15'
400
+ entry 1907, 'vivo_active'
401
+ entry 1918, 'edge510_korea'
332
402
  entry 1928, 'fr620_japan'
333
403
  entry 1929, 'fr620_china'
334
404
  entry 1930, 'fr220_japan'
335
405
  entry 1931, 'fr220_china'
406
+ entry 1936, 'approach_s6'
407
+ entry 1956, 'vivo_smart'
336
408
  entry 1967, 'fenix2'
337
409
  entry 1988, 'epix'
338
410
  entry 2050, 'fenix3'
411
+ entry 2052, 'edge1000_taiwan'
412
+ entry 2053, 'edge1000_japan'
413
+ entry 2061, 'fr15_japan'
414
+ entry 2067, 'edge520'
415
+ entry 2070, 'edge1000_china'
339
416
  entry 2072, 'fr620_russia'
340
417
  entry 2073, 'fr220_russia'
418
+ entry 2079, 'vector_s'
419
+ entry 2100, 'edge1000_korea'
341
420
  entry 2130, 'fr920xt_taiwan'
342
421
  entry 2131, 'fr920xt_china'
343
422
  entry 2132, 'fr920xt_japan'
423
+ entry 2134, 'virbx'
424
+ entry 2135, 'vivo_smart_apac'
425
+ entry 2140, 'etrex_touch'
426
+ entry 2147, 'edge25'
427
+ entry 2148, 'fr25'
428
+ entry 2150, 'vivo_fit2'
429
+ entry 2153, 'fr225'
430
+ entry 2156, 'fr630'
431
+ entry 2157, 'fr230'
432
+ entry 2158, 'fr735xt'
433
+ entry 2160, 'vivo_active_apac'
434
+ entry 2161, 'vector_2'
435
+ entry 2162, 'vector_2s'
436
+ entry 2172, 'virbxe'
344
437
  entry 2173, 'fr620_taiwan'
438
+ entry 2174, 'fr220_taiwan'
439
+ entry 2175, 'truswing'
345
440
  entry 2188, 'fenix3_china'
346
441
  entry 2189, 'fenix3_twn'
442
+ entry 2192, 'varia_headlight'
443
+ entry 2193, 'varia_taillight_old'
444
+ entry 2204, 'edge_explore_1000'
445
+ entry 2219, 'fr225_asia'
446
+ entry 2225, 'varia_radar_taillight'
447
+ entry 2226, 'varia_radar_display'
448
+ entry 2238, 'edge20'
449
+ entry 2260, 'edge520_asia'
450
+ entry 2261, 'edge520_japan'
451
+ entry 2262, 'd2_bravo'
452
+ entry 2266, 'approach_s20'
453
+ entry 2271, 'vivo_smart2'
454
+ entry 2274, 'edge1000_thai'
455
+ entry 2276, 'varia_remote'
456
+ entry 2288, 'edge25_asia'
457
+ entry 2289, 'edge25_jpn'
458
+ entry 2290, 'edge20_asia'
459
+ entry 2292, 'approach_x40'
460
+ entry 2293, 'fenix3_japan'
461
+ entry 2294, 'vivo_smart_emea'
462
+ entry 2310, 'fr630_asia'
463
+ entry 2311, 'fr630_jpn'
464
+ entry 2313, 'fr230_jpn'
347
465
  entry 2327, 'hrm4_run'
466
+ entry 2332, 'epix_japan'
467
+ entry 2337, 'vivo_active_hr'
468
+ entry 2347, 'vivo_smart_gps_hr'
469
+ entry 2348, 'vivo_smart_hr'
470
+ entry 2361, 'vivo_smart_hr_asia'
471
+ entry 2362, 'vivo_smart_gps_hr_asia'
472
+ entry 2368, 'vivo_move'
473
+ entry 2379, 'varia_taillight'
474
+ entry 2397, 'fr235_japan'
475
+ entry 2398, 'varia_vision'
476
+ entry 2406, 'vivo_fit3'
477
+ entry 2407, 'fenix3_korea'
478
+ entry 2408, 'fenix3_sea'
348
479
  entry 2413, 'fenix3_hr'
480
+ entry 2417, 'virb_ultra_30'
481
+ entry 2429, 'index_smart_scale'
349
482
  entry 2431, 'fr235'
350
483
  entry 2432, 'fenix3_chronos'
484
+ entry 2441, 'oregon7xx'
485
+ entry 2444, 'rino7xx'
486
+ entry 2457, 'epix_korea'
487
+ entry 2473, 'fenix3_hr_chn'
488
+ entry 2474, 'fenix3_hr_twn'
489
+ entry 2475, 'fenix3_hr_jpn'
490
+ entry 2476, 'fenix3_hr_sea'
491
+ entry 2477, 'fenix3_hr_kor'
492
+ entry 2496, 'nautix'
493
+ entry 2497, 'vivo_active_hr_apac'
494
+ entry 2512, 'oregon7xx_ww'
495
+ entry 2530, 'edge_820'
496
+ entry 2531, 'edge_explore_820'
497
+ entry 2533, 'fr735xt_apac'
498
+ entry 2534, 'fr735xt_japan'
351
499
  entry 2544, 'fenix5s'
352
- entry 2604, 'fenix5x'
500
+ entry 2547, 'd2_bravo_titanium'
501
+ entry 2567, 'varia_ut800'
353
502
  entry 2593, 'running_dynamics_pod'
503
+ entry 2599, 'edge_820_china'
504
+ entry 2600, 'edge_820_japan'
505
+ entry 2604, 'fenix5x'
506
+ entry 2606, 'vivo_fit_jr'
507
+ entry 2622, 'vivo_smart3'
508
+ entry 2623, 'vivo_sport'
509
+ entry 2628, 'edge_820_taiwan'
510
+ entry 2629, 'edge_820_korea'
511
+ entry 2630, 'edge_820_sea'
512
+ entry 2650, 'fr35_hebrew'
513
+ entry 2656, 'approach_s60'
514
+ entry 2667, 'fr35_apac'
515
+ entry 2668, 'fr35_japan'
516
+ entry 2675, 'fenix3_chronos_asia'
517
+ entry 2687, 'virb_360'
354
518
  entry 2691, 'fr935'
355
519
  entry 2697, 'fenix5'
520
+ entry 2700, 'vivoactive3'
521
+ entry 2733, 'fr235_china_nfc'
522
+ entry 2769, 'foretrex_601_701'
523
+ entry 2772, 'vivo_move_hr'
524
+ entry 2713, 'edge_1030'
525
+ entry 2796, 'fenix5_asia'
526
+ entry 2797, 'fenix5s_asia'
527
+ entry 2798, 'fenix5x_asia'
528
+ entry 2806, 'approach_z80'
529
+ entry 2814, 'fr35_korea'
530
+ entry 2819, 'd2charlie'
531
+ entry 2831, 'vivo_smart3_apac'
532
+ entry 2832, 'vivo_sport_apac'
533
+ entry 2833, 'fr935_asia'
534
+ entry 2859, 'descent'
535
+ entry 2886, 'fr645'
536
+ entry 2888, 'fr645m'
537
+ entry 2891, 'fr30'
538
+ entry 2900, 'fenix5s_plus'
539
+ entry 2909, 'Edge_130'
540
+ entry 2924, 'edge_1030_asia'
541
+ entry 2927, 'vivosmart_4'
542
+ entry 2945, 'vivo_move_hr_asia'
356
543
  entry 2957, 'fenix5_gps_galileo' # Just a guess
544
+ entry 2962, 'approach_x10'
545
+ entry 2977, 'fr30_asia'
546
+ entry 2988, 'vivoactive3m_w'
547
+ entry 3003, 'fr645_asia'
548
+ entry 3004, 'fr645m_asia'
549
+ entry 3011, 'edge_explore'
550
+ entry 3028, 'gpsmap66'
551
+ entry 3049, 'approach_s10'
552
+ entry 3066, 'vivoactive3m_l'
553
+ entry 3085, 'approach_g80'
554
+ entry 3092, 'edge_130_asia'
555
+ entry 3095, 'edge_1030_bontrager'
556
+ entry 3110, 'fenix5_plus'
357
557
  entry 3111, 'fenix5x_plus'
358
- entry 3126, 'instinct'
558
+ entry 3112, 'edge_520_plus'
559
+ entry 3121, 'edge_530'
560
+ entry 3122, 'edge_830'
561
+ entry 3134, 'fenix5s_plus_apac'
562
+ entry 3135, 'fenix5x_plus_apac'
563
+ entry 3142, 'edge_520_plus_apac'
564
+ entry 3144, 'fr235l_asia'
565
+ entry 3145, 'fr245_asia'
566
+ entry 3163, 'vivo_active3m_apac'
567
+ entry 3218, 'vivo_smart4_asia'
568
+ entry 3224, 'vivoactive4_small'
569
+ entry 3225, 'vivoactive4_large'
570
+ entry 3226, 'venu'
571
+ entry 3246, 'marq_driver'
572
+ entry 3247, 'marq_aviator'
573
+ entry 3248, 'marq_captain'
574
+ entry 3249, 'marq_commander'
575
+ entry 3250, 'marq_expedition'
576
+ entry 3251, 'marq_athlete'
577
+ entry 3287, 'fenix6S_sport'
578
+ entry 3288, 'fenix6S'
579
+ entry 3289, 'fenix6_sport'
580
+ entry 3290, 'fenix6'
359
581
  entry 3291, 'fenix6x'
582
+ entry 3299, 'hrm_dual'
583
+ entry 3308, 'vivo_move3_premium'
584
+ entry 3314, 'approach_s40'
585
+ entry 3321, 'fr245m_asia'
586
+ entry 3349, 'edge_530_apac'
587
+ entry 3350, 'edge_830_apac'
588
+ entry 3378, 'vivo_move3'
589
+ entry 3387, 'vivo_active4_small_asia'
590
+ entry 3388, 'vivo_active4_large_asia'
591
+ entry 3389, 'vivo_active4_oled_asia'
592
+ entry 3405, 'swim2'
593
+ entry 3420, 'marq_driver_asia'
594
+ entry 3421, 'marq_aviator_asia'
595
+ entry 3422, 'vivo_move3_asia'
596
+ entry 3446, 'vivo_active3t_chn'
597
+ entry 3448, 'marq_captain_asia'
598
+ entry 3449, 'marq_commander_asia'
599
+ entry 3450, 'marq_expedition_asia'
600
+ entry 3451, 'marq_athlete_asia'
601
+ entry 3469, 'fr45_asia'
602
+ entry 3473, 'vivoactive3_daimler'
603
+ entry 3512, 'fenix6s_sport_asia'
604
+ entry 3513, 'fenix6s_asia'
605
+ entry 3514, 'fenix6_sport_asia'
606
+ entry 3515, 'fenix6_asia'
607
+ entry 3516, 'fenix6x_asia'
608
+ entry 3624, 'marq_adventurer'
609
+ entry 3648, 'marq_adventurer_asia'
610
+ entry 3639, 'swim2_apac'
611
+ entry 3737, 'venu_daimler_asia'
612
+ entry 3740, 'venu_daimler'
360
613
  entry 10007, 'sdm4'
614
+ entry 10014, 'edge_remote'
361
615
  entry 20119, 'training_center'
362
616
  entry 65532, 'android_antplus_plugin'
363
617
  entry 65534, 'connect'
@@ -629,39 +883,39 @@ module Fit4Ruby
629
883
  entry 24, 'challenge'
630
884
  entry 25, 'indoor_skiing'
631
885
  entry 26, 'cardio_training'
632
- entry 27, 'indoor_walking '
633
- entry 28, 'e_bike_fitness '
886
+ entry 27, 'indoor_walking'
887
+ entry 28, 'e_bike_fitness'
634
888
  entry 29, 'bmx'
635
- entry 30, 'casual_walking '
889
+ entry 30, 'casual_walking'
636
890
  entry 31, 'speed_walking'
637
- entry 32, 'bike_to_run_transition '
638
- entry 33, 'run_to_bike_transition '
891
+ entry 32, 'bike_to_run_transition'
892
+ entry 33, 'run_to_bike_transition'
639
893
  entry 34, 'swim_to_bike_transition'
640
894
  entry 35, 'atv'
641
895
  entry 36, 'motocross'
642
896
  entry 37, 'backcountry'
643
- entry 38, 'resort '
644
- entry 39, 'rc_drone '
645
- entry 40, 'wingsuit '
646
- entry 41, 'whitewater '
647
- entry 42, 'skate_skiing '
648
- entry 43, 'yoga '
897
+ entry 38, 'resort'
898
+ entry 39, 'rc_drone'
899
+ entry 40, 'wingsuit'
900
+ entry 41, 'whitewater'
901
+ entry 42, 'skate_skiing'
902
+ entry 43, 'yoga'
649
903
  entry 44, 'pilates'
650
- entry 45, 'indoor_running '
651
- entry 46, 'gravel_cycling '
904
+ entry 45, 'indoor_running'
905
+ entry 46, 'gravel_cycling'
652
906
  entry 47, 'e_bike_mountain'
653
907
  entry 48, 'commuting'
654
908
  entry 49, 'mixed_surface'
655
- entry 50, 'navigate '
656
- entry 51, 'track_me '
909
+ entry 50, 'navigate'
910
+ entry 51, 'track_me'
657
911
  entry 52, 'map'
658
912
  entry 53, 'single_gas_diving'
659
- entry 54, 'multi_gas_diving '
660
- entry 55, 'gauge_diving '
661
- entry 56, 'apnea_diving '
913
+ entry 54, 'multi_gas_diving'
914
+ entry 55, 'gauge_diving'
915
+ entry 56, 'apnea_diving'
662
916
  entry 57, 'apnea_hunting'
663
- entry 58, 'virtual_activity '
664
- entry 59, 'obstacle '
917
+ entry 58, 'virtual_activity'
918
+ entry 59, 'obstacle'
665
919
  entry 254, 'all'
666
920
 
667
921
  dict 'training_status'
@@ -223,6 +223,11 @@ module Fit4Ruby
223
223
  register_field_by_number(field, number)
224
224
  end
225
225
 
226
+ # Check if a field with the given name already exists?
227
+ def has_field?(name)
228
+ return @fields_by_name.include?(name)
229
+ end
230
+
226
231
  # Define a new set of Field alternatives for this message definition.
227
232
  def alt_field(number, ref_field, &block)
228
233
  unless @fields_by_name.include?(ref_field)
@@ -133,8 +133,12 @@ module Fit4Ruby
133
133
  field 148, 'enum', 'undocumented_field_148'
134
134
  field 149, 'enum', 'undocumented_field_149'
135
135
  field 151, 'enum', 'undocumented_field_151'
136
+ field 160, 'enum', 'undocumented_field_160'
137
+ field 163, 'enum', 'undocumented_field_163'
138
+ field 164, 'uint8', 'undocumented_field_164'
136
139
  field 167, 'string', 'undocumented_field_167'
137
140
  field 168, 'enum', 'undocumented_field_168'
141
+ field 170, 'uint8', 'undocumented_field_170'
138
142
 
139
143
  message 3, 'user_profile'
140
144
  field 0, 'string', 'friendly_name'
@@ -175,6 +179,10 @@ module Fit4Ruby
175
179
  field 44, 'uint8', 'undocumented_field_44'
176
180
  field 45, 'uint8z', 'undocumented_field_45'
177
181
  field 47, 'enum', 'undocumented_field_47'
182
+ field 52, 'enum', 'undocumented_field_52'
183
+ field 53, 'uint8', 'undocumented_field_53'
184
+ field 54, 'uint8', 'undocumented_field_54'
185
+ field 57, 'enum', 'undocumented_field_57'
178
186
  field 253, 'uint32', 'timestamp', :type => 'date_time'
179
187
 
180
188
  message 5, 'sdm_profile'
@@ -231,6 +239,8 @@ module Fit4Ruby
231
239
  field 11, 'enum', 'undocumented_field_11'
232
240
  field 12, 'enum', 'undocumented_field_12'
233
241
  field 13, 'enum', 'undocumented_field_13'
242
+ field 15, 'uint16', 'undocumented_field_15'
243
+ field 16, 'uint32', 'undocumented_field_16'
234
244
  field 254, 'uint16', 'message_index'
235
245
 
236
246
  message 12, 'sport'
@@ -251,6 +261,7 @@ module Fit4Ruby
251
261
  field 17, 'enum', 'undocumented_field_17'
252
262
  field 18, 'enum', 'undocumented_field_18'
253
263
  field 19, 'enum', 'undocumented_field_19', :array => true
264
+ field 21, 'enum', 'undocumented_field_21'
254
265
 
255
266
  # Not part of the official ANT SDK doc.
256
267
  message 13, 'undocumented_13'
@@ -318,10 +329,17 @@ module Fit4Ruby
318
329
  field 68, 'sint32','undocumented_field_68'
319
330
  field 69, 'uint16', 'undocumented_field_69'
320
331
  field 70, 'enum', 'undocumented_field_70'
332
+ field 71, 'enum', 'undocumented_field_71'
333
+ field 72, 'enum', 'undocumented_field_72'
321
334
  field 73, 'sint32', 'undocumented_field_73'
322
335
  field 74, 'sint32', 'undocumented_field_74'
323
336
  field 75, 'enum', 'undocumented_field_75'
324
337
  field 76, 'enum', 'undocumented_field_76'
338
+ field 78, 'enum', 'undocumented_field_78'
339
+ field 79, 'enum', 'undocumented_field_79'
340
+ field 81, 'enum', 'undocumented_field_81'
341
+ field 82, 'enum', 'undocumented_field_82'
342
+ field 83, 'enum', 'undocumented_field_83'
325
343
  field 254, 'uint16', 'message_index'
326
344
 
327
345
  message 18, 'session'
@@ -454,6 +472,8 @@ module Fit4Ruby
454
472
  field 188, 'enum', 'undocumented_field_188'
455
473
  field 189, 'uint16', 'undocumented_field_189'
456
474
  field 190, 'uint16', 'undocumented_field_190'
475
+ field 194, 'uint8', 'undocumented_field_194'
476
+ field 195, 'uint8', 'undocumented_field_195'
457
477
  field 253, 'uint32', 'timestamp', :type => 'date_time'
458
478
  field 254, 'uint16', 'message_index'
459
479
 
@@ -581,6 +601,7 @@ module Fit4Ruby
581
601
  field 13, 'sint8', 'temperature', :unit => 'C'
582
602
  field 14, 'uint32', 'undefined_field_14'
583
603
  field 15, 'uint32', 'undefined_field_15'
604
+ field 18, 'uint8', 'undefined_field_18'
584
605
  field 29, 'uint32', 'accumulated_power', :unit => 'watts'
585
606
  field 30, 'uint8', 'left_right_balance', :dict => 'left_right_balance'
586
607
  field 39, 'uint16', 'vertical_oscillation', :scale => 10, :unit => 'mm'
@@ -607,6 +628,12 @@ module Fit4Ruby
607
628
  field 71, 'uint8', 'right_power_phase', :scale => 0.7111111, :unit => 'degrees', :array => true
608
629
  field 72, 'uint8', 'right_power_phase_peak', :scale => 0.7111111, :unit => 'degrees', :array => true
609
630
  field 73, 'uint32', 'enhanced_speed', :scale => 1000, :unit => 'm/s'
631
+ field 74, 'uint32', 'undefined_value_74'
632
+ field 75, 'uint32', 'undefined_value_75'
633
+ field 76, 'uint32', 'undefined_value_76'
634
+ field 77, 'uint32', 'undefined_value_77'
635
+ field 79, 'uint32', 'undefined_value_79'
636
+ field 80, 'uint32', 'undefined_value_80'
610
637
  field 78, 'uint32', 'enhanced_elevation', :scale => 5, :offset => 500, :unit => 'm'
611
638
  field 83, 'uint16', 'vertical_ratio', :scale => 100, :unit => '%' # guessed
612
639
  field 84, 'uint16', 'gct_balance', :scale => 100, :unit => '%' # guessed
@@ -614,7 +641,13 @@ module Fit4Ruby
614
641
  field 87, 'uint16', 'undefined_value_87' # first seen on F3 FW6.80
615
642
  field 88, 'uint16', 'undefined_value_88' # first seen on F3HR FW3.60
616
643
  field 90, 'sint8', 'performance_condition' # guessed
644
+ field 100, 'sint32', 'undocumented_field_100'
645
+ field 101, 'sint32', 'undocumented_field_101'
646
+ field 107, 'enum', 'undocumented_field_107'
647
+ field 116, 'uint16', 'undocumented_field_116'
617
648
  field 108, 'uint16', 'respiration_rate', :scale => 100, :unit => 'brpm' # guessed
649
+ field 135, 'uint8', 'undocumented_field_135'
650
+ field 136, 'uint8', 'undocumented_field_136'
618
651
  field 253, 'uint32', 'timestamp', :type => 'date_time'
619
652
 
620
653
  message 21, 'event'
@@ -826,6 +859,8 @@ module Fit4Ruby
826
859
  field 18, 'sint32', 'undocumented_field_18'
827
860
  field 19, 'sint32', 'undocumented_field_19'
828
861
  field 20, 'uint16', 'undocumented_field_20'
862
+ field 21, 'sint32', 'undocumented_field_21'
863
+ field 22, 'sint32', 'undocumented_field_22'
829
864
  field 253, 'uint32', 'timestamp', :type => 'date_time'
830
865
 
831
866
  message 101, 'length'
@@ -940,6 +975,12 @@ module Fit4Ruby
940
975
  field 39, 'sint32', 'undocumented_field_39'
941
976
  field 40, 'sint32', 'undocumented_field_40'
942
977
  field 41, 'enum', 'undocumented_field_41'
978
+ field 42, 'uint8', 'undocumented_field_42'
979
+ field 43, 'sint16', 'undocumented_field_43'
980
+ field 44, 'sint16', 'undocumented_field_44'
981
+ field 45, 'sint16', 'undocumented_field_45'
982
+ field 46, 'uint8', 'undocumented_field_46'
983
+ field 48, 'uint32', 'undocumented_field_48'
943
984
  field 253, 'uint32', 'timestamp', :type => 'date_time'
944
985
 
945
986
  # Not part of the official ANT SDK doc. The message name is guessed and
@@ -1004,7 +1045,12 @@ module Fit4Ruby
1004
1045
  field 48, 'enum', 'undocumented_field_48'
1005
1046
  field 50, 'uint8', 'undocumented_field_50'
1006
1047
  field 51, 'enum', 'undocumented_field_51'
1007
- field 52, 'uint8', 'undocumented_field_52'
1048
+ # The type of this field changed from 'uint8' to 'enum' in more recent
1049
+ # devices. No idea why and what the proper selection field should be.
1050
+ alt_field 52, 'undocumented_field_51' do
1051
+ field :default, 'uint8', 'undocumented_field_52_0'
1052
+ field 0, 'enum', 'undocumented_field_52_1'
1053
+ end
1008
1054
  field 53, 'uint8', 'undocumented_field_53'
1009
1055
  field 54, 'enum', 'undocumented_field_54'
1010
1056
  field 55, 'uint16', 'undocumented_field_55'
@@ -1023,6 +1069,11 @@ module Fit4Ruby
1023
1069
  field 73, 'uint16z', 'undocumented_field_73'
1024
1070
  field 254, 'uint16', 'message_index'
1025
1071
 
1072
+ # Not part of the official ANT SDK doc.
1073
+ message 160, 'undocumented_160'
1074
+ field 3, 'uint32', 'undocumented_field_3'
1075
+ field 4, 'uint32', 'undocumented_field_4'
1076
+
1026
1077
  # Not part of the official ANT SDK doc.
1027
1078
  message 188, 'undocumented_188'
1028
1079
  field 0, 'enum', 'undocumented_field_0'
@@ -1166,6 +1217,35 @@ module Fit4Ruby
1166
1217
  field 252, 'uint8', 'undocumented_field_252'
1167
1218
  field 253, 'uint32', 'timestamp', :type => 'date_time'
1168
1219
 
1220
+ # Not part of the official ANT SDK doc.
1221
+ message 325, 'undocumented_325'
1222
+ field 0, 'uint8', 'undocumented_field_0'
1223
+ field 1, 'uint8', 'undocumented_field_1'
1224
+ field 2, 'uint8', 'undocumented_field_2'
1225
+ field 3, 'uint8', 'undocumented_field_3'
1226
+ field 4, 'uint8', 'undocumented_field_4'
1227
+ field 5, 'uint8', 'undocumented_field_5'
1228
+ field 253, 'uint32', 'timestamp', :type => 'date_time'
1229
+
1230
+ # Not part of the official ANT SDK doc.
1231
+ message 326, 'undocumented_326'
1232
+ field 0, 'uint32', 'undocumented_field_0'
1233
+ field 1, 'uint32', 'undocumented_field_1'
1234
+ field 253, 'uint32', 'timestamp', :type => 'date_time'
1235
+
1236
+ # Not part of the official ANT SDK doc.
1237
+ message 327, 'undocumented_327'
1238
+ field 0, 'uint8', 'undocumented_field_0'
1239
+ field 1, 'uint8', 'undocumented_field_1'
1240
+ field 2, 'uint8', 'undocumented_field_2'
1241
+ field 3, 'uint32', 'undocumented_field_3'
1242
+ field 4, 'uint32', 'undocumented_field_4'
1243
+ field 5, 'uint32', 'undocumented_field_5'
1244
+ field 6, 'enum', 'undocumented_field_6'
1245
+ field 251, 'byte', 'undocumented_field_251'
1246
+ field 252, 'uint8', 'undocumented_field_252'
1247
+ field 253, 'uint32', 'timestamp', :type => 'date_time'
1248
+
1169
1249
  # Not part of the official ANT SDK doc.
1170
1250
  message 1024, 'undocumented_1024'
1171
1251
  field 0, 'enum', 'undocumented_field_0'
@@ -1,4 +1,4 @@
1
1
  module Fit4Ruby
2
2
  # The version number of the library.
3
- VERSION = '3.5.0'
3
+ VERSION = '3.6.0'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fit4ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.0
4
+ version: 3.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Schlaeger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-16 00:00:00.000000000 Z
11
+ date: 2020-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bindata
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.9.6
47
+ version: 12.0.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.9.6
54
+ version: 12.0.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement