コード例 #1
0
        private static void Write(object sender, MesgEventArgs e)
        {
            _logger.Verbose($"{e.mesg.Name}::");
            foreach (var f in e.mesg.Fields)
            {
                _logger.Verbose($"{f.Name}::{f.GetValue()}");
            }

            try
            {
                var dev = (DeveloperDataIdMesg)e.mesg;
                _logger.Verbose($"FOUND DEV FIELD - {dev.Name} {dev.Num}");
                foreach (DeveloperField devField in dev.DeveloperFields)
                {
                    var name         = devField.Name;
                    var value        = devField.GetValue();
                    var units        = devField.GetUnits();
                    var isResistance = devField.NativeOverride == RecordMesg.FieldDefNum.Resistance;
                    _logger.Verbose($"DevFields: {name} {value} {units} isResistance:{isResistance}");
                }

                foreach (Field devField in dev.Fields)
                {
                    var name  = devField.Name;
                    var value = devField.GetValue();
                    var units = devField.GetUnits();
                    _logger.Verbose($"Fields: {name} {value} {units}");
                }
            }
            catch { }
        }
コード例 #2
0
        void OnMesg(object sender, MesgEventArgs e)
        {
            logger.Trace("OnMesg: Received Mesg with global ID#{0}, its name is {1}", e.mesg.Num, e.mesg.Name);

            var msg = new Mesg(e.mesg.Name, e.mesg.Num);

            for (byte i = 0; i < e.mesg.GetNumFields(); i++)
            {
                var field = e.mesg.fields[i];
                var f     = new Field(field.Name, field.Num, field.Type, field.Scale, field.Offset, field.Units);
                for (int j = 0; j < e.mesg.fields[i].GetNumValues(); j++)
                {
                    logger.Trace("\tField{0} Index{1} (\"{2}\" Field#{4}) Value: {3} (raw value {5})", i, j, e.mesg.fields[i].GetName(), e.mesg.fields[i].GetValue(j), e.mesg.fields[i].Num, e.mesg.fields[i].GetRawValue(j));

                    f.SetValue(j, field.GetValue(j));
                }
                msg.SetField(field);
            }

            Encoder.Write(msg);

            if (mesgCounts.ContainsKey(e.mesg.Num) == true)
            {
                mesgCounts[e.mesg.Num]++;
            }
            else
            {
                mesgCounts.Add(e.mesg.Num, 1);
            }
        }
コード例 #3
0
        public static void OnEventMesg(object sender, MesgEventArgs e)
        {
            EventValues values = new EventValues();
            EventMesg   mesg   = (EventMesg)e.mesg;

            try
            {
                values._event0    = mesg.GetEvent();
                values._eventType = mesg.GetEventType();
                values._data      = mesg.GetData();

                ////Make sure properties with sub properties arent null before trying to create objects based on them
                if (mesg.GetTimestamp() != null)
                {
                    uint tc = (uint)mesg.GetTimestamp().GetTimeStamp();
                    values._timestamp = FitConvert.ToLocalDateTime(tc);
                }
            }
            catch (FitException exception)
            {
                Console.WriteLine("\tOnFileIDMesg Error {0}", exception.Message);
                Console.WriteLine("\t{0}", exception.InnerException);
            }
            DataManager.Instance.EventValues.Add(values);
        }
コード例 #4
0
        public static void OnActivityMesg(object sender, MesgEventArgs e)
        {
            ActivityValues values = new ActivityValues();
            ActivityMesg   mesg   = (ActivityMesg)e.mesg;

            try
            {
                values._totalTimerTime = mesg.GetTotalTimerTime();
                values._numSessions    = mesg.GetNumSessions();
                values._type           = mesg.GetType();
                values._actiEvent      = mesg.GetEvent();
                values._eventType      = mesg.GetEventType();
                uint?localTimeStamp = mesg.GetLocalTimestamp();
                if (localTimeStamp != null)
                {
                    values._localTimestamp = FitConvert.ToDateTime(((uint)localTimeStamp));
                }

                //Make sure properties with sub properties arent null before trying to create objects based on them
                if (mesg.GetTimestamp() != null)
                {
                    //values.timestamp = new Dynastream.Fit.DateTime(mesg.GetTimestamp().GetTimeStamp());
                    uint tc = (uint)mesg.GetTimestamp().GetTimeStamp();
                    values._timestamp = FitConvert.ToLocalDateTime(mesg.GetTimestamp().GetTimeStamp());
                }
            }
            catch (FitException exception)
            {
                Console.WriteLine("\tOnFileIDMesg Error {0}", exception.Message);
                Console.WriteLine("\t{0}", exception.InnerException);
            }
            DataManager.Instance.ActivityValues.Add(values);
        }
コード例 #5
0
        public static void OnFieldDescriptionMesg(object sender, MesgEventArgs e)
        {
            FieldDescriptionValues values = new FieldDescriptionValues();
            FieldDescriptionMesg   mesg   = (FieldDescriptionMesg)e.mesg;

            try
            {
                values._developerDataIndex    = mesg.GetDeveloperDataIndex();
                values._fieldDefinitionNumber = mesg.GetFieldDefinitionNumber();
                values._fitBaseTypeId         = mesg.GetFitBaseTypeId();
                int num3 = mesg.GetNumFieldValues(3);
                values._fieldName = new string[num3];
                values._units     = new string[num3];
                for (int i = 0; i < num3; i++)
                {
                    values._fieldName[i] = (mesg.GetFieldNameAsString(i));
                    values._units[i]     = (mesg.GetUnitsAsString(i));
                }
            }
            catch (FitException exception)
            {
                Console.WriteLine("\tOnFileIDMesg Error {0}", exception.Message);
                Console.WriteLine("\t{0}", exception.InnerException);
            }
            DataManager.Instance.FieldDescriptionValues.Add(values);
        }
コード例 #6
0
        public static void OnFileIDMesg(object sender, MesgEventArgs e)
        {
            FileIdValues values = new FileIdValues();
            FileIdMesg   mesg   = (FileIdMesg)e.mesg;

            try
            {
                values._fileType     = mesg.GetType();
                values._manufacturer = mesg.GetManufacturer();
                values._product      = mesg.GetProduct();
                values._serialNumber = mesg.GetSerialNumber();

                //Make sure properties with sub properties arent null before trying to create objects based on them
                if (mesg.GetTimeCreated() != null)
                {
                    uint tc = (uint)mesg.GetFieldValue("TimeCreated");
                    values._timeCreated = FitConvert.ToLocalDateTime(tc);
                }
            }
            catch (FitException exception)
            {
                Console.WriteLine("\tOnFileIDMesg Error {0}", exception.Message);
                Console.WriteLine("\t{0}", exception.InnerException);
            }
            DataManager.Instance.FileIdValues.Add(values);
        }
コード例 #7
0
        static void OnFileIDMesg(object sender, MesgEventArgs e)
        {
            Console.WriteLine("FileIdHandler: Received {1} Mesg with global ID#{0}", e.mesg.Num, e.mesg.Name);
            FileIdMesg myFileId = (FileIdMesg)e.mesg;

            try
            {
                Console.WriteLine("\tType: {0}", myFileId.GetType());
                Console.WriteLine("\tManufacturer: {0}", myFileId.GetManufacturer());
                Console.WriteLine("\tProduct: {0}", myFileId.GetProduct());
                Console.WriteLine("\tSerialNumber {0}", myFileId.GetSerialNumber());
                Console.WriteLine("\tNumber {0}", myFileId.GetNumber());
                Console.WriteLine("\tTimeCreated {0}", myFileId.GetTimeCreated());

                //Make sure properties with sub properties arent null before trying to create objects based on them
                if (myFileId.GetTimeCreated() != null)
                {
                    Dynastream.Fit.DateTime dtTime = new Dynastream.Fit.DateTime(myFileId.GetTimeCreated().GetTimeStamp());
                }
            }
            catch (FitException exception)
            {
                Console.WriteLine("\tOnFileIDMesg Error {0}", exception.Message);
                Console.WriteLine("\t{0}", exception.InnerException);
            }
        }
コード例 #8
0
        static void OnUserProfileMesg(object sender, MesgEventArgs e)
        {
            Console.WriteLine("UserProfileHandler: Received {1} Mesg, it has global ID#{0}", e.mesg.Num, e.mesg.Name);
            UserProfileMesg myUserProfile = (UserProfileMesg)e.mesg;
            string          friendlyName;

            try
            {
                try
                {
                    friendlyName = myUserProfile.GetFriendlyNameAsString();
                }
                catch (ArgumentNullException)
                {
                    //There is no FriendlyName property
                    friendlyName = "";
                }
                Console.WriteLine("\tFriendlyName \"{0}\"", friendlyName);
                Console.WriteLine("\tGender {0}", myUserProfile.GetGender().ToString());
                Console.WriteLine("\tAge {0}", myUserProfile.GetAge());
                Console.WriteLine("\tWeight  {0}", myUserProfile.GetWeight());
            }
            catch (FitException exception)
            {
                Console.WriteLine("\tOnUserProfileMesg Error {0}", exception.Message);
                Console.WriteLine("\t{0}", exception.InnerException);
            }
        }
コード例 #9
0
        static void OnMonitoringMessage(object sender, MesgEventArgs e)
        {
            Console.WriteLine("MonitoringHandler: Received {1} Mesg, it has global ID#{0}", e.mesg.Num, e.mesg.Name);
            MonitoringMesg myMonitoringMessage = (MonitoringMesg)e.mesg;

            try
            {
                Console.WriteLine("\tTimestamp  {0}", myMonitoringMessage.GetTimestamp());
                Console.WriteLine("\tActivityType {0}", myMonitoringMessage.GetActivityType());
                switch (myMonitoringMessage.GetActivityType()) // Cycles is a dynamic field
                {
                case ActivityType.Walking:
                case ActivityType.Running:
                    Console.WriteLine("\tSteps {0}", myMonitoringMessage.GetSteps());
                    break;

                case ActivityType.Cycling:
                case ActivityType.Swimming:
                    Console.WriteLine("\tStrokes {0}", myMonitoringMessage.GetStrokes());
                    break;

                default:
                    Console.WriteLine("\tCycles {0}", myMonitoringMessage.GetCycles());
                    break;
                }
            }
            catch (FitException exception)
            {
                Console.WriteLine("\tOnDeviceInfoMesg Error {0}", exception.Message);
                Console.WriteLine("\t{0}", exception.InnerException);
            }
        }
コード例 #10
0
        public static void OnDeviceInfoMesg(object sender, MesgEventArgs e)
        {
            DeviceInfoValues values = new DeviceInfoValues();
            DeviceInfoMesg   mesg   = (DeviceInfoMesg)e.mesg;

            try
            {
                values._deviceIndex     = mesg.GetDeviceIndex();
                values._deviceType      = mesg.GetDeviceType();
                values._manufacturer    = mesg.GetManufacturer();
                values._serialNumber    = mesg.GetSerialNumber();
                values._product         = mesg.GetProduct();
                values._softwareVersion = mesg.GetSoftwareVersion();
                values._batteryVoltage  = mesg.GetBatteryVoltage();
                values._batteryStatus   = mesg.GetBatteryStatus();
                values._descriptor      = mesg.GetDescriptorAsString();
                values._antDeviceNumber = mesg.GetAntDeviceNumber();
                values._sourceType      = mesg.GetSourceType();
                values._productName     = mesg.GetProductNameAsString();

                //Make sure properties with sub properties arent null before trying to create objects based on them
                if (mesg.GetTimestamp() != null)
                {
                    //values.timestamp = new Dynastream.Fit.DateTime(mesg.GetTimestamp().GetTimeStamp());
                    uint tc = (uint)mesg.GetTimestamp().GetTimeStamp();
                    values._timestamp = FitConvert.ToLocalDateTime(tc);
                }
            }
            catch (FitException exception)
            {
                Console.WriteLine("\tOnFileIDMesg Error {0}", exception.Message);
                Console.WriteLine("\t{0}", exception.InnerException);
            }
            DataManager.Instance.DeviceInfoValues.Add(values);
        }
コード例 #11
0
 public void OnFileIdMesg(object sender, MesgEventArgs e)
 {
     Messages.FileId = (FileIdMesg)e.mesg;
     if ((e.mesg as FileIdMesg).GetType() != fileType)
     {
         throw new FileTypeException($"Expected FIT File Type: {fileType}, recieved File Type: {(e.mesg as FileIdMesg).GetType()}");
     }
 }
コード例 #12
0
 private static void Write(object sender, MesgEventArgs e)
 {
     Log.Verbose($"{e.mesg.Name}::");
     foreach (var f in e.mesg.Fields)
     {
         Log.Verbose($"{f.Name}::{f.GetValue()}");
     }
 }
コード例 #13
0
        //called once per data message recieved by the main reader
        public static void OnRecordMessage(object sender, MesgEventArgs e)
        {
            //init the message to be given to the decoder
            var recordMessage = (RecordMesg)e.mesg;

            //call the decoder on the message - we're looking for power, cadence, speed, alt, distance, time
            int    power_value    = ReturnFieldValue(recordMessage, RecordMesg.FieldDefNum.Power);
            int    cadence_value  = ReturnFieldValue(recordMessage, RecordMesg.FieldDefNum.Cadence);
            double speed_value    = ReturnFieldValueDouble(recordMessage, RecordMesg.FieldDefNum.Speed) * 3.6; //converting m/s to km/h because m/s is useless info
            double alt_value      = ReturnFieldValueDouble(recordMessage, RecordMesg.FieldDefNum.Altitude);
            double distance_value = ReturnFieldValueDouble(recordMessage, RecordMesg.FieldDefNum.Distance);
            int    time_value     = ReturnFieldValue(recordMessage, RecordMesg.FieldDefNum.Timestamp);



            //add the given data values to their corresponding lists
            Power.power_data.Add(power_value);
            Cadence.cadence_data.Add(cadence_value);
            Speed.speed_data.Add(speed_value);
            Altitude.alt_data.Add(alt_value);
            Distance.distance_data.Add(distance_value);
            Time.time_data.Add(time_value);

            /*
             * // obsolete
             * //contruct a new data point given the data pulled from the decoder above
             * Data_Point new_point = new Data_Point(power_value, cadence_value, speed_value, alt_value, distance_value, time_value);
             *
             * //add that point to the list of all data points
             * Data_Point.data_point_list.Add(new_point);
             */

            //add to the counter (so we know how many points of data have been collected)
            data_count++;


            //now we need to collect data through various filters (i.e. deadzones, descents etc)
            //power
            if (power_value > 0)
            {
                Power.active_power_data_count++;
                Power.active_power_data.Add(power_value);
            }

            //cadence
            if (cadence_value > 0)
            {
                Cadence.active_cadence_data_count++;
                Cadence.active_cadence_data.Add(cadence_value);
            }

            //speed
            if (speed_value > 0)
            {
                Speed.active_speed_data_count++;
                Speed.active_speed_data.Add(speed_value);
            }
        }
コード例 #14
0
ファイル: FitFile.cs プロジェクト: ShawnBaker/FitFileViewer
        /// <summary>
        /// Updates the Activity.
        /// </summary>
        private void HandleActivityMessage(object sender, MesgEventArgs e)
        {
            ActivityMesg msg = (ActivityMesg)e.mesg;

            Activity = new FitActivity(msg);
            FitMessage message = new FitMessage(Resources.Activity);

            Messages.Add(message);
        }
コード例 #15
0
ファイル: FitFile.cs プロジェクト: ShawnBaker/FitFileViewer
        /// <summary>
        /// Updates the user profile.
        /// </summary>
        private void HandleUserProfileMesg(object sender, MesgEventArgs e)
        {
            UserProfileMesg msg = (UserProfileMesg)e.mesg;

            UserProfile = new FitUserProfile(msg);
            FitMessage message = new FitMessage(Resources.UserProfile);

            Messages.Add(message);
        }
コード例 #16
0
        public static void MesgEvent(object sender, MesgEventArgs e)
        {
            Field Field = e.mesg.GetField(SessionMesg.FieldDefNum.TotalElapsedTime);

            if (Field != null)
            {
                ElapsedTimeLogger.Instance.Log(Convert.ToInt32(Field.GetValue()));
            }
        }
コード例 #17
0
ファイル: FitFile.cs プロジェクト: ShawnBaker/FitFileViewer
        /// <summary>
        /// Updates the file ID.
        /// </summary>
        private void HandleFileIDMesg(object sender, MesgEventArgs e)
        {
            FileIdMesg msg = (FileIdMesg)e.mesg;

            FileID = new FitFileID(msg);
            FitMessage message = new FitMessage(Resources.FileID);

            Messages.Add(message);
        }
コード例 #18
0
ファイル: FitImporter.cs プロジェクト: gabornemeth/MoveSharp
        private void MessageBroadcaster_DeviceInfoMesgEvent(object sender, MesgEventArgs e)
        {
            var msg = e.mesg as DeviceInfoMesg;

            if (msg == null)
            {
                return;
            }
        }
コード例 #19
0
ファイル: FitImporter.cs プロジェクト: gabornemeth/MoveSharp
        void MessageBroadcaster_SessionMesgEvent(object sender, MesgEventArgs e)
        {
            var msg = e.mesg as SessionMesg;

            if (msg != null)
            {
                ActivitySummary summary = msg.ToSummary();
                Activity.SetSummary(summary);
            }
        }
コード例 #20
0
 public static void MesgEvent(object sender, MesgEventArgs e)
 {
     if (e.mesg.GetField(RecordMesg.FieldDefNum.HeartRate) != null)
     {
         HeartRateLogger logger         = HeartRateLogger.Instance;
         Field           HeartRateField = e.mesg.GetField(RecordMesg.FieldDefNum.HeartRate);
         int             HeartRate      = Convert.ToInt32(HeartRateField.GetValue());
         logger.Log(HeartRate);
     }
 }
コード例 #21
0
        void OnFileCreatorMesg(object sender, MesgEventArgs e)
        {
            FileCreatorMesg myFileCreator = (FileCreatorMesg)e.mesg;

            try
            {
                tSoftwareVersion.Text = myFileCreator.GetSoftwareVersion().ToString();
            }
            catch {}
        }
コード例 #22
0
ファイル: FitFile.cs プロジェクト: ShawnBaker/FitFileViewer
        /// <summary>
        /// Updates the device information.
        /// </summary>
        private void HandleDeviceInfoMessage(object sender, MesgEventArgs e)
        {
            DeviceInfoMesg msg        = (DeviceInfoMesg)e.mesg;
            FitDeviceInfo  deviceInfo = new FitDeviceInfo(msg);

            DeviceInfos.Add(deviceInfo);
            FitMessage message = new FitMessage(Resources.DeviceInfo);

            Messages.Add(message);
        }
コード例 #23
0
ファイル: FitFile.cs プロジェクト: ShawnBaker/FitFileViewer
        /// <summary>
        /// Adds a new session.
        /// </summary>
        private void HandleSessionMessage(object sender, MesgEventArgs e)
        {
            SessionMesg msg     = (SessionMesg)e.mesg;
            FitSession  session = new FitSession(msg, (Sessions.Count > 0) ? Sessions[Sessions.Count - 1].LastRecord + 1 : 0, Records.Count - 1);

            Sessions.Add(session);
            string     description = (session.FirstRecord < session.LastRecord) ? string.Format("{0} - {1}", session.FirstRecord, session.LastRecord) : session.FirstRecord.ToString();
            FitMessage message     = new FitMessage(Resources.Session, description);

            Messages.Add(message);
        }
コード例 #24
0
ファイル: FitFile.cs プロジェクト: ShawnBaker/FitFileViewer
        /// <summary>
        /// Adds a new lap.
        /// </summary>
        private void HandleLapMessage(object sender, MesgEventArgs e)
        {
            LapMesg msg = (LapMesg)e.mesg;
            FitLap  lap = new FitLap(msg, (Laps.Count > 0) ? Laps[Laps.Count - 1].LastRecord + 1 : 0, Records.Count - 1);

            Laps.Add(lap);
            string     description = (lap.FirstRecord < lap.LastRecord) ? string.Format("{0} - {1}", lap.FirstRecord, lap.LastRecord) : lap.FirstRecord.ToString();
            FitMessage message     = new FitMessage(Resources.Lap, description);

            Messages.Add(message);
        }
コード例 #25
0
ファイル: FitFile.cs プロジェクト: ShawnBaker/FitFileViewer
        /// <summary>
        /// Adds a new length.
        /// </summary>
        private void HandleLengthMessage(object sender, MesgEventArgs e)
        {
            LengthMesg msg    = (LengthMesg)e.mesg;
            FitLength  length = new FitLength(msg, (Lengths.Count > 0) ? Lengths[Lengths.Count - 1].LastRecord + 1 : 0, Records.Count - 1);

            Lengths.Add(length);
            string     description = (length.FirstRecord < length.LastRecord) ? string.Format("{0} - {1}", length.FirstRecord, length.LastRecord) : length.FirstRecord.ToString();
            FitMessage message     = new FitMessage(Resources.Length, description);

            Messages.Add(message);
        }
コード例 #26
0
    public void OnEventMesg(object sender, MesgEventArgs e)
    {
        var eventMesg = e.mesg as EventMesg;

        Messages.Events.Add(eventMesg);

        if (eventMesg?.GetEvent() == Event.Timer && eventMesg?.GetTimestamp() != null)
        {
            Messages.Records.Add(new ExtendedRecordMesg(eventMesg));
        }
    }
コード例 #27
0
        //This function adds coordinate points to the global list
        //These points will be displayed on the map.
        static void OnMesg(object sender, MesgEventArgs e)
        {
            try
            {
                CoordinatePoint coordinatePoint = new CoordinatePoint();
                foreach (Field field in e.mesg.Fields)
                {
                    for (int i = 0; i < field.GetNumValues(); i++)
                    {
                        //Use switch statement to set value on the coordinatePoint.
                        switch (field.GetName())
                        {
                        case LATITUDE:
                            coordinatePoint.latitude = reformatLatLong(field.GetValue(i).ToString());
                            break;

                        case LONGITUDE:
                            coordinatePoint.longitude = reformatLatLong(field.GetValue(i).ToString());
                            break;

                        case TIMESTAMP:
                            coordinatePoint.timeStamp = double.Parse(field.GetValue(i).ToString());
                            break;

                        case DISTANCE:
                            coordinatePoint.distance = double.Parse(field.GetValue(i).ToString());
                            break;

                        case SPEED:
                            coordinatePoint.speed = double.Parse(field.GetValue(i).ToString());
                            break;

                        case HEARTRATE:
                            coordinatePoint.heartRate = double.Parse(field.GetValue(i).ToString());
                            break;

                        default:
                            //do nothing :)
                            break;
                        }
                    }
                }
                if (coordinatePoint.HasLatLong())
                {
                    route.addCoordinatePoint(coordinatePoint);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error parsing double for JSON." + ex.Message);
            }
        }
コード例 #28
0
        void mesgBroadcaster_SessionMesgEvent(object sender, MesgEventArgs e)
        {
            var sessionMessage = (SessionMesg)e.mesg;

            if (sessionMessage != null)
            {
                data                  = new ActivitySummary();
                data.Sport            = sessionMessage.GetSport();
                data.TotalDistance    = sessionMessage.GetTotalDistance();
                data.TotalElapsedTime = sessionMessage.GetTotalElapsedTime();
                data.TotalFatCalories = sessionMessage.GetTotalFatCalories();
                data.StartTime        = sessionMessage.GetStartTime();
            }
        }
コード例 #29
0
 void OnMesg(object sender, MesgEventArgs e)
 {
     if (e.mesg.Name == "Totals")
     {
         Debug.WriteLine("============== TOTALS ================");
         for (byte i = 0; i < e.mesg.GetNumFields(); i++)
         {
             for (int j = 0; j < e.mesg.fields[i].GetNumValues(); j++)
             {
                 Debug.WriteLine(string.Format("\tField{0} Index{1} (\"{2}\" Field#{4}) Value: {3}", i, j, e.mesg.fields[i].GetName(), getVal(e.mesg.fields[i].GetValue(j)), e.mesg.fields[i].Num));
             }
         }
     }
 }
コード例 #30
0
        private static void OnSessionMesgEvent(object sender, MesgEventArgs e)
        {
            SessionMesg session = (SessionMesg)e.mesg;

            if (session.GetTotalCalories() < ushort.MaxValue)
            {
                tcx.Calories = (int)session.GetTotalCalories();
            }

            if (session.GetTotalDistance() < 1E6)
            {
                tcx.DistanceMeters = (double)session.GetTotalDistance();
            }
        }