rubyfit 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/rubyfit/fit.c +3 -3
- data/ext/rubyfit/fit.h +5 -5
- data/ext/rubyfit/fit_config.h +1 -1
- data/ext/rubyfit/fit_convert.c +3 -3
- data/ext/rubyfit/fit_convert.h +3 -3
- data/ext/rubyfit/fit_crc.c +3 -3
- data/ext/rubyfit/fit_crc.h +3 -3
- data/ext/rubyfit/fit_example.c +60 -15
- data/ext/rubyfit/fit_example.h +382 -79
- data/ext/rubyfit/fit_ram.c +3 -3
- data/ext/rubyfit/fit_ram.h +3 -3
- data/ext/rubyfit/rubyfit.c +20 -58
- data/lib/rubyfit/version.rb +1 -1
- metadata +2 -2
data/ext/rubyfit/fit_ram.c
CHANGED
@@ -7,11 +7,11 @@
|
|
7
7
|
// warranties of merchantability, non-infringement, or fitness for a particular
|
8
8
|
// purpose, are specifically disclaimed.
|
9
9
|
//
|
10
|
-
// Copyright
|
10
|
+
// Copyright 2014 Dynastream Innovations Inc.
|
11
11
|
////////////////////////////////////////////////////////////////////////////////
|
12
12
|
// ****WARNING**** This file is auto-generated! Do NOT edit this file.
|
13
|
-
// Profile Version =
|
14
|
-
// Tag = $Name:
|
13
|
+
// Profile Version = 11.0Release
|
14
|
+
// Tag = $Name: AKW11_000 $
|
15
15
|
// Product = EXAMPLE
|
16
16
|
// Alignment = 4 bytes, padding disabled.
|
17
17
|
////////////////////////////////////////////////////////////////////////////////
|
data/ext/rubyfit/fit_ram.h
CHANGED
@@ -7,11 +7,11 @@
|
|
7
7
|
// warranties of merchantability, non-infringement, or fitness for a particular
|
8
8
|
// purpose, are specifically disclaimed.
|
9
9
|
//
|
10
|
-
// Copyright
|
10
|
+
// Copyright 2014 Dynastream Innovations Inc.
|
11
11
|
////////////////////////////////////////////////////////////////////////////////
|
12
12
|
// ****WARNING**** This file is auto-generated! Do NOT edit this file.
|
13
|
-
// Profile Version =
|
14
|
-
// Tag = $Name:
|
13
|
+
// Profile Version = 11.0Release
|
14
|
+
// Tag = $Name: AKW11_000 $
|
15
15
|
// Product = EXAMPLE
|
16
16
|
// Alignment = 4 bytes, padding disabled.
|
17
17
|
////////////////////////////////////////////////////////////////////////////////
|
data/ext/rubyfit/rubyfit.c
CHANGED
@@ -23,6 +23,7 @@ VALUE mRubyFit;
|
|
23
23
|
VALUE cFitParser;
|
24
24
|
VALUE cFitHandler;
|
25
25
|
VALUE cFitHandlerPrintFun;
|
26
|
+
VALUE cFitHandlerPrintErrFun;
|
26
27
|
VALUE cFitHandlerActivityFun;
|
27
28
|
VALUE cFitHandlerRecordFun;
|
28
29
|
VALUE cFitHandlerLapFun;
|
@@ -45,6 +46,10 @@ void pass_message(char *msg) {
|
|
45
46
|
rb_funcall(cFitHandler, cFitHandlerPrintFun, 1, rb_str_new2(msg));
|
46
47
|
}
|
47
48
|
|
49
|
+
void pass_err_message(char *msg) {
|
50
|
+
rb_funcall(cFitHandler, cFitHandlerPrintErrFun, 1, rb_str_new2(msg));
|
51
|
+
}
|
52
|
+
|
48
53
|
static VALUE fit_pos_to_rb(FIT_SINT32 pos) {
|
49
54
|
float tmp = pos * (180.0 / pow(2,31));
|
50
55
|
tmp -= (tmp > 180.0 ? 360.0 : 0.0);
|
@@ -58,6 +63,7 @@ static VALUE init(VALUE self, VALUE handler) {
|
|
58
63
|
|
59
64
|
//callbacks
|
60
65
|
cFitHandlerPrintFun = rb_intern("print_msg");
|
66
|
+
cFitHandlerPrintErrFun = rb_intern("print_error_msg");
|
61
67
|
cFitHandlerActivityFun = rb_intern("on_activity");
|
62
68
|
cFitHandlerSessionFun = rb_intern("on_session");
|
63
69
|
cFitHandlerLapFun = rb_intern("on_lap");
|
@@ -347,7 +353,7 @@ static void pass_device_info(const FIT_DEVICE_INFO_MESG *mesg) {
|
|
347
353
|
rb_hash_aset(rh, rb_str_new2("battery_voltage"), UINT2NUM(mesg->battery_voltage));
|
348
354
|
if(mesg->device_index != FIT_DEVICE_INDEX_INVALID)
|
349
355
|
rb_hash_aset(rh, rb_str_new2("device_index"), UINT2NUM(mesg->device_index));
|
350
|
-
if(mesg->device_type !=
|
356
|
+
if(mesg->device_type != FIT_ANTPLUS_DEVICE_TYPE_INVALID)
|
351
357
|
rb_hash_aset(rh, rb_str_new2("device_type"), UINT2NUM(mesg->device_type));
|
352
358
|
if(mesg->hardware_version != FIT_UINT8_INVALID)
|
353
359
|
rb_hash_aset(rh, rb_str_new2("hardware_version"), UINT2NUM(mesg->hardware_version));
|
@@ -397,19 +403,11 @@ static VALUE parse(VALUE self, VALUE original_str) {
|
|
397
403
|
FIT_UINT8 buf[8];
|
398
404
|
FIT_CONVERT_RETURN convert_return = FIT_CONVERT_CONTINUE;
|
399
405
|
FIT_UINT32 buf_size;
|
400
|
-
#if defined(FIT_CONVERT_MULTI_THREAD)
|
401
|
-
FIT_CONVERT_STATE state;
|
402
|
-
#endif
|
403
|
-
|
404
|
-
#if defined(FIT_CONVERT_MULTI_THREAD)
|
405
|
-
FitConvert_Init(&state, FIT_TRUE);
|
406
|
-
#else
|
407
406
|
FitConvert_Init(FIT_TRUE);
|
408
|
-
#endif
|
409
407
|
|
410
408
|
if(RSTRING_LEN(str) == 0) {
|
411
409
|
//sprintf(err_msg, "Passed in string with length of 0!");
|
412
|
-
|
410
|
+
pass_err_message(err_msg);
|
413
411
|
return Qnil;
|
414
412
|
}
|
415
413
|
|
@@ -421,110 +419,77 @@ static VALUE parse(VALUE self, VALUE original_str) {
|
|
421
419
|
}
|
422
420
|
|
423
421
|
do {
|
424
|
-
#if defined(FIT_CONVERT_MULTI_THREAD)
|
425
|
-
convert_return = FitConvert_Read(&state, buf, buf_size);
|
426
|
-
#else
|
427
422
|
convert_return = FitConvert_Read(buf, buf_size);
|
428
|
-
#endif
|
429
423
|
|
430
424
|
switch(convert_return) {
|
431
425
|
case FIT_CONVERT_MESSAGE_AVAILABLE: {
|
432
|
-
#if defined(FIT_CONVERT_MULTI_THREAD)
|
433
|
-
const FIT_UINT8 *mesg = FitConvert_GetMessageData(&state);
|
434
|
-
FIT_UINT16 mesg_num = FitConvert_GetMessageNumber(&state);
|
435
|
-
#else
|
436
426
|
const FIT_UINT8 *mesg = FitConvert_GetMessageData();
|
437
427
|
FIT_UINT16 mesg_num = FitConvert_GetMessageNumber();
|
438
|
-
#endif
|
439
|
-
|
440
|
-
//pass_message(err_msg);
|
441
428
|
|
442
429
|
switch(mesg_num) {
|
443
430
|
case FIT_MESG_NUM_FILE_ID: {
|
444
|
-
//pass_message(err_msg);
|
445
431
|
break;
|
446
432
|
}
|
447
433
|
|
448
434
|
case FIT_MESG_NUM_USER_PROFILE: {
|
449
435
|
const FIT_USER_PROFILE_MESG *user_profile = (FIT_USER_PROFILE_MESG *) mesg;
|
450
|
-
//sprintf(err_msg, "User Profile: weight=%0.1fkg\n", user_profile->weight / 10.0f);
|
451
|
-
//pass_message(err_msg);
|
452
436
|
pass_user_profile(user_profile);
|
453
437
|
break;
|
454
438
|
}
|
455
439
|
|
456
440
|
case FIT_MESG_NUM_ACTIVITY: {
|
457
441
|
const FIT_ACTIVITY_MESG *activity = (FIT_ACTIVITY_MESG *) mesg;
|
458
|
-
//sprintf(err_msg, "Activity: timestamp=%u, type=%u, event=%u, event_type=%u, num_sessions=%u\n", activity->timestamp, activity->type, activity->event, activity->event_type, activity->num_sessions);
|
459
|
-
//pass_message(err_msg);
|
460
442
|
pass_activity(activity);
|
461
443
|
|
462
444
|
{
|
463
445
|
FIT_ACTIVITY_MESG old_mesg;
|
464
446
|
old_mesg.num_sessions = 1;
|
465
|
-
#if defined(FIT_CONVERT_MULTI_THREAD)
|
466
|
-
FitConvert_RestoreFields(&state, &old_mesg);
|
467
|
-
#else
|
468
447
|
FitConvert_RestoreFields(&old_mesg);
|
469
|
-
|
470
|
-
|
471
|
-
//pass_message(err_msg);
|
448
|
+
sprintf(err_msg, "Restored num_sessions=1 - Activity: timestamp=%u, type=%u, event=%u, event_type=%u, num_sessions=%u\n", activity->timestamp, activity->type, activity->event, activity->event_type, activity->num_sessions);
|
449
|
+
pass_message(err_msg);
|
472
450
|
}
|
473
451
|
break;
|
474
452
|
}
|
475
453
|
|
476
454
|
case FIT_MESG_NUM_SESSION: {
|
477
455
|
const FIT_SESSION_MESG *session = (FIT_SESSION_MESG *) mesg;
|
478
|
-
//sprintf(err_msg, "Session: timestamp=%u\n", session->timestamp);
|
479
|
-
//pass_message(err_msg);
|
480
456
|
pass_session(session);
|
481
457
|
break;
|
482
458
|
}
|
483
459
|
|
484
460
|
case FIT_MESG_NUM_LAP: {
|
485
461
|
const FIT_LAP_MESG *lap = (FIT_LAP_MESG *) mesg;
|
486
|
-
//sprintf(err_msg, "Lap: timestamp=%u, total_ascent=%u, total_distance=%f\n", lap->timestamp, lap->total_ascent, (lap->total_distance / 100.0) / 1000.0 * 0.621371192);
|
487
|
-
//pass_message(err_msg);
|
488
462
|
pass_lap(lap);
|
489
463
|
break;
|
490
464
|
}
|
491
465
|
|
492
466
|
case FIT_MESG_NUM_RECORD: {
|
493
467
|
const FIT_RECORD_MESG *record = (FIT_RECORD_MESG *) mesg;
|
494
|
-
|
495
|
-
//sprintf(err_msg, "Record: timestamp=%u", record->timestamp);
|
496
|
-
//pass_message(err_msg);
|
497
468
|
pass_record(record);
|
498
469
|
break;
|
499
470
|
}
|
500
471
|
|
501
472
|
case FIT_MESG_NUM_EVENT: {
|
502
473
|
const FIT_EVENT_MESG *event = (FIT_EVENT_MESG *) mesg;
|
503
|
-
//sprintf(err_msg, "Event: timestamp=%u, event_type = %i\n", event->timestamp, event->event_type);
|
504
|
-
//pass_message(err_msg);
|
505
474
|
pass_event(event);
|
506
475
|
break;
|
507
476
|
}
|
508
477
|
|
509
478
|
case FIT_MESG_NUM_DEVICE_INFO: {
|
510
479
|
const FIT_DEVICE_INFO_MESG *device_info = (FIT_DEVICE_INFO_MESG *) mesg;
|
511
|
-
//sprintf(err_msg, "Device Info: timestamp=%u, battery_status=%u\n", (unsigned int)device_info->timestamp, device_info->battery_voltage);
|
512
|
-
//pass_message(err_msg);
|
513
480
|
pass_device_info(device_info);
|
514
481
|
break;
|
515
482
|
}
|
516
483
|
|
517
484
|
case FIT_MESG_NUM_WEIGHT_SCALE: {
|
518
485
|
const FIT_WEIGHT_SCALE_MESG *weight_scale_info = (FIT_WEIGHT_SCALE_MESG *) mesg;
|
519
|
-
//sprintf(err_msg, "Device Info: timestamp=%u, battery_status=%u\n", (unsigned int)device_info->timestamp, device_info->battery_voltage);
|
520
|
-
//pass_message(err_msg);
|
521
486
|
pass_weight_scale_info(weight_scale_info);
|
522
487
|
break;
|
523
488
|
}
|
524
489
|
|
525
490
|
default: {
|
526
|
-
|
527
|
-
|
491
|
+
sprintf(err_msg, "Unknown message\n");
|
492
|
+
pass_message(err_msg);
|
528
493
|
break;
|
529
494
|
}
|
530
495
|
}
|
@@ -537,28 +502,25 @@ static VALUE parse(VALUE self, VALUE original_str) {
|
|
537
502
|
}
|
538
503
|
|
539
504
|
if (convert_return == FIT_CONVERT_ERROR) {
|
540
|
-
|
541
|
-
|
542
|
-
//fclose(file);
|
505
|
+
sprintf(err_msg, "Error decoding file.\n");
|
506
|
+
pass_err_message(err_msg);
|
543
507
|
return Qnil;
|
544
508
|
}
|
545
509
|
|
546
510
|
if (convert_return == FIT_CONVERT_CONTINUE) {
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
//return Qnil;
|
511
|
+
sprintf(err_msg, "Unexpected end of file.\n");
|
512
|
+
pass_err_message(err_msg);
|
513
|
+
return Qnil;
|
551
514
|
}
|
552
515
|
|
553
516
|
if (convert_return == FIT_CONVERT_PROTOCOL_VERSION_NOT_SUPPORTED) {
|
554
|
-
|
555
|
-
|
556
|
-
//fclose(file);
|
517
|
+
sprintf(err_msg, "Protocol version not supported.\n");
|
518
|
+
pass_err_message(err_msg);
|
557
519
|
return Qnil;
|
558
520
|
}
|
559
521
|
|
560
522
|
if (convert_return == FIT_CONVERT_END_OF_FILE) {
|
561
|
-
|
523
|
+
sprintf(err_msg, "File converted successfully.\n");
|
562
524
|
pass_message(err_msg);
|
563
525
|
}
|
564
526
|
|
data/lib/rubyfit/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubyfit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cullen King
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: FIT files are binary, and as a result, are a pain to parse. This is
|
14
14
|
a wrapper around the FIT SDK, which makes creating a stream based parser simple.
|