Пример #1
0
//		public static List<T> ReadRuns<T>(GarminUnit garmin)
//		{
//			return TransferItems<T>(garmin, (ushort) Command.ID.Transfer_Runs, PacketID.Run);
//		}

        public static Type GetProtocolType(GarminUnit garmin, string protocol_name)
        {
            ushort protocol = garmin.Configuration[protocol_name];

            if (protocol_name.StartsWith("protocol"))
            {
                ///TODO: figure out if this needs to be implemented
            }
            else if (protocol_name.StartsWith("datatype"))
            {
                switch (protocol)
                {
                case 304: return(typeof(D304_Trk_Point_Type)); break;

                case 311: return(typeof(D311_Trk_Hdr_Type)); break;

                case 906: return(typeof(D906_Lap_Type)); break;

                case 1000: return(typeof(D1000_Run_Type)); break;

                case 1001: return(typeof(D1001_Lap_Type)); break;

                case 1002: return(typeof(D1002_Workout_Type)); break;

                case 1008: return(typeof(D1008_Workout_Type)); break;

                case 1009: return(typeof(D1009_Run_Type)); break;

                case 1015: return(typeof(D1015_Lap_Type)); break;
                }
            }
            return(null);
        }
Пример #2
0
        public static List <T> TransferItems <T>(GarminUnit garmin, ushort command, PacketID pid)
        {
            byte[] buffer = BitConverter.GetBytes(command);
            Packet p      = MakeCommandPacket(garmin, (uint)buffer.Length);

            garmin.Write(p, buffer);
            return(ReadRecords <T>(garmin, pid));
        }
Пример #3
0
        public static uint StartSession(GarminUnit garmin)
        {
            Packet p = Packet.CreatePacket(PacketType.USB, (ushort)Protocol.PacketID.StartSession, 0);

            garmin.Write(p);
            byte[] buffer;
            int    buffer_size = garmin.Read(out p, out buffer);

            if (buffer_size == 16)
            {
                return(BitConverter.ToUInt32(buffer, 0));
            }
            return(0);
        }
Пример #4
0
 internal void InitializeAddIns()
 {
     AddinManager.Initialize();
     AddinManager.Registry.Update();
     foreach (IGarminUnit addin in AddinManager.GetExtensionObjects(typeof(IGarminUnit)))
     {
         Console.WriteLine("Finding units of type ", addin.Description);
         foreach (UsbDevice dev in FindDevices(addin.VID, addin.PID))
         {
             GarminUnit unit = new GarminUnit(dev);
             unit.Init();
             GarminUnits.Add(unit);
         }
     }
 }
Пример #5
0
        public void AddRun(GarminUnit garmin, Run run)
        {
            var runs = new Runs()
            {
                FirstLapIndex = run.FirstLapIndex,
                LastLapIndex = run.LastLapIndex,
                SportType = (int) run.SportType,
                ProgramType = run.ProgramType,
                MultiSport = (int) run.MultiSport,
            //				QuickWorkout = (int) run.QuickWorkout,
            //				Workout = (int) run.Workout,
            //				VirtualPartner = (int) run.VirtualPartner
            };

            database.Runs.InsertOnSubmit(runs);
            database.SubmitChanges();
        }
Пример #6
0
        public static List <T> ReadRecords <T>(GarminUnit garmin, PacketID pid)
        {
            List <T> items = new List <T>();
            Packet   p     = Packet.CreatePacket(GSharp.Protocols.PacketType.Application, (ushort)pid, 0);

            byte[] buffer = new byte[Marshal.SizeOf(typeof(Packet)) + 1024];
            ushort expected_items = 0, received_items = 0;
            bool   done = false;

            if (garmin.Read(out p, out buffer) > 0)
            {
                if (p.id == (ushort)PacketID.Records)
                {
                    expected_items = BitConverter.ToUInt16(buffer, 0);
                    while (!done && garmin.Read(out p, out buffer) > 0)
                    {
                        if (p.id == (ushort)pid)
                        {
                            items.Add(ByteArrayToStructure <T>(buffer));
                            received_items++;
                        }
                        else if (p.id == (ushort)PacketID.Xfer_Cmplt)
                        {
                            if (received_items != expected_items)
                            {
                                throw new Exception("items received is different from expected items");
                            }
                            done = true;
                        }
                        else
                        {
                            done = true;
                        }
                    }
                }
            }
            return(items);
        }
Пример #7
0
 public void AddLap(GarminUnit garmin, Lap lap)
 {
     var l = new Laps()
     {
         AvgCadence = lap.AvgCadence,
         AvgHeartRage = lap.AvgHeartRate,
         Calories = lap.CaloriesBurned,
         EndLat = lap.End.lat,
         EndLon = lap.End.lon,
         GarminUnit = (int) garmin.ID,
         Index = lap.Index,
         Intensity = lap.Intensity,
         MaxHeartRage = lap.MaxHeartRate,
         MaxSpeed = lap.MaxSpeed,
         StartLat = lap.Begin.lat,
         StartLon = lap.Begin.lon,
         StartTime = lap.StartTime.,
         TotalDist = lap.TotalDistance,
         TotalTime = lap.TotalTime,
         TriggerMethod = lap.TriggerMethod
     };
     database.Laps.InsertOnSubmit(l);
     database.SubmitChanges();
 }
Пример #8
0
        public static void AssignProtocols(GarminUnit garmin, application_protocol protocol, List <garmin_datatype> datatypes)
        {
            switch (protocol)
            {
            case application_protocol.appl_A010:
            case application_protocol.appl_A011:
                garmin.SetCapability("protocol.command", (ushort)protocol);
                break;

            case application_protocol.appl_A100:
                garmin.SetCapability("protocol.waypoint.waypoint", (ushort)protocol);
                garmin.SetCapability("datatype.waypoint.waypoint", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A101:
                garmin.SetCapability("protocol.waypoint.category", (ushort)protocol);
                garmin.SetCapability("datatype.waypoint.category", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A200:
                garmin.SetCapability("protocol.route", (ushort)protocol);
                garmin.SetCapability("datatype.route.header", (ushort)datatypes[0]);
                garmin.SetCapability("datatype.route.waypoint", (ushort)datatypes[1]);
                break;

            case application_protocol.appl_A201:
                garmin.SetCapability("protocol.route", (ushort)protocol);
                garmin.SetCapability("datatype.route.header", (ushort)datatypes[0]);
                garmin.SetCapability("datatype.route.waypoint", (ushort)datatypes[1]);
                garmin.SetCapability("datatype.route.link", (ushort)datatypes[1]);
                break;

            case application_protocol.appl_A300:
                garmin.SetCapability("protocol.track", (ushort)protocol);
                garmin.SetCapability("datatype.track.data", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A301:
                garmin.SetCapability("protocol.track", (ushort)protocol);
                garmin.SetCapability("datatype.track.header", (ushort)datatypes[0]);
                garmin.SetCapability("datatype.track.data", (ushort)datatypes[1]);
                break;

            case application_protocol.appl_A400:
                garmin.SetCapability("protocol.waypoint.proximity", (ushort)protocol);
                garmin.SetCapability("datatype.waypoint.proximity", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A500:
                garmin.SetCapability("protocol.almanac", (ushort)protocol);
                garmin.SetCapability("datatype.almanac", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A600:
                garmin.SetCapability("protocol.date_time", (ushort)protocol);
                garmin.SetCapability("datatype.date_time", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A601:
                // UNDOCUMENTED
                break;

            case application_protocol.appl_A650:
                garmin.SetCapability("protocol.flightbook", (ushort)protocol);
                garmin.SetCapability("datatype.flightbook", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A700:
                garmin.SetCapability("protocol.position", (ushort)protocol);
                garmin.SetCapability("datatype.position", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A800:
                garmin.SetCapability("protocol.pvt", (ushort)protocol);
                garmin.SetCapability("datatype.pvt", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A801:
                // UNDOCUMENTED
                break;

            case application_protocol.appl_A902:
                // UNDOCUMENTED
                break;

            case application_protocol.appl_A903:
                // UNDOCUMENTED
                break;

            case application_protocol.appl_A906:
                garmin.SetCapability("protocol.lap", (ushort)protocol);
                garmin.SetCapability("datatype.lap", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A1000:
                garmin.SetCapability("protocol.run", (ushort)protocol);
                garmin.SetCapability("datatype.run", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A1002:
                garmin.SetCapability("protocol.workout.workout", (ushort)protocol);
                garmin.SetCapability("datatype.workout.workout", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A1003:
                garmin.SetCapability("protocol.workout.occurrence", (ushort)protocol);
                garmin.SetCapability("datatype.workout.occurrence", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A1004:
                garmin.SetCapability("protocol.fitness", (ushort)protocol);
                garmin.SetCapability("datatype.fitness", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A1005:
                garmin.SetCapability("protocol.workout.limits", (ushort)protocol);
                garmin.SetCapability("datatype.workout.limits", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A1006:
                garmin.SetCapability("protocol.course.course", (ushort)protocol);
                garmin.SetCapability("datatype.course.course", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A1007:
                garmin.SetCapability("protocol.course.lap", (ushort)protocol);
                garmin.SetCapability("datatype.course.lap", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A1008:
                garmin.SetCapability("protocol.course.point", (ushort)protocol);
                garmin.SetCapability("datatype.course.point", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A1009:
                garmin.SetCapability("protocol.course.limits", (ushort)protocol);
                garmin.SetCapability("datatype.course.limits", (ushort)datatypes[0]);
                break;

            case application_protocol.appl_A1012:
                garmin.SetCapability("protocol.course.track", (ushort)protocol);
                garmin.SetCapability("datatype.course.track.header", (ushort)datatypes[0]);
                garmin.SetCapability("datatype.course.track.data", (ushort)datatypes[1]);
                break;

            default:
                break;
            }
        }
Пример #9
0
 public static Packet MakeCommandPacket(GarminUnit garmin, uint data_length)
 {
     return(Packet.CreatePacket(PacketType.Application, (ushort)PacketID.Command_Data, data_length));
 }
Пример #10
0
        public static void GetCapability(GarminUnit garmin)
        {
            Packet p;
            bool done = false;

            p = Packet.CreatePacket(PacketType.Application, (ushort) Protocol.PacketID.ProductRequest,0);
            garmin.Write(Protocol.StructureToByteArray<Packet>(p));
            byte[] packet_data;
            while ( !done && garmin.Read(out p, out packet_data) > 0 )
            {
                switch (p.id)
                {
                case (ushort) Protocol.PacketID.ProductData:
                    byte[] pdt_array = new byte[4];
                    Array.Copy(packet_data,pdt_array,4);
                    int pdt_descr_size = packet_data.Length - 4;
                    byte[] pdt_descr_array = new byte[pdt_descr_size];
                    Product pdt = Protocol.ByteArrayToStructure<Product>(pdt_array);
                    Array.Copy(packet_data,4,pdt_descr_array,0,pdt_descr_size);
                    garmin.SetProductType(pdt,System.Text.ASCIIEncoding.ASCII.GetString(pdt_descr_array));
                    break;
                case (ushort) Protocol.PacketID.ExtProductData:
                    var extended_data = System.Text.ASCIIEncoding.ASCII.GetString(packet_data);
                    garmin.SetExtendedDescription(extended_data);
                    break;
                case (ushort) Protocol.PacketID.ProtocolArray:
                    int size = packet_data.Length/3;
                    ProtocolDataType[] data_types = new ProtocolDataType[size];
                    for ( int i=0; i<size; i++)
                    {
                        byte[] temp_buffer = new byte[3];
                        Array.Copy(packet_data,i*3,temp_buffer,0,3);
                        data_types[i] = ProtocolDataType.GetPacket(temp_buffer);
                    }
                    int j = 0;
                    while ( j < size )
                    {
                        switch (data_types[j].Tag)
                        {
                        case Tags.Phys_Prot_Id:
                            garmin.SetCapability("protocol.physical", data_types[j].data);
                            j++;
                            break;
                        case Tags.Link_Prot_Id:
                            garmin.SetCapability("protocol.link", data_types[j].data);
                            j++;
                            break;
                        case Tags.Appl_Prot_Id:
                            application_protocol app = data_types[j].GetApplicationProtocol();
                            List<garmin_datatype> phys = new  List<garmin_datatype>();
                            for (++j; j<size; j++)
                            {
                                if ( data_types[j].Tag != Tags.Data_Type_Id )
                                {
                                    Protocol.AssignProtocols(garmin,app,phys);
                                    break;
                                }
                                phys.Add(data_types[j].GetDataType());
                            }
                            break;
                        case Tags.Data_Type_Id:
                            // taken care of in application protocol section
                            break;
                        default:
                            j++;
                            break;
                        }
                    }

                    done = true;
                    break;
                default:
                    break;
                }
            }
        }
Пример #11
0
        public static void GetCapability(GarminUnit garmin)
        {
            Packet p;
            bool   done = false;

            p = Packet.CreatePacket(PacketType.Application, (ushort)Protocol.PacketID.ProductRequest, 0);
            garmin.Write(Protocol.StructureToByteArray <Packet>(p));
            byte[] packet_data;
            while (!done && garmin.Read(out p, out packet_data) > 0)
            {
                switch (p.id)
                {
                case (ushort)Protocol.PacketID.ProductData:
                    byte[] pdt_array = new byte[4];
                    Array.Copy(packet_data, pdt_array, 4);
                    int     pdt_descr_size  = packet_data.Length - 4;
                    byte[]  pdt_descr_array = new byte[pdt_descr_size];
                    Product pdt             = Protocol.ByteArrayToStructure <Product>(pdt_array);
                    Array.Copy(packet_data, 4, pdt_descr_array, 0, pdt_descr_size);
                    garmin.SetProductType(pdt, System.Text.ASCIIEncoding.ASCII.GetString(pdt_descr_array));
                    break;

                case (ushort)Protocol.PacketID.ExtProductData:
                    var extended_data = System.Text.ASCIIEncoding.ASCII.GetString(packet_data);
                    garmin.SetExtendedDescription(extended_data);
                    break;

                case (ushort)Protocol.PacketID.ProtocolArray:
                    int size = packet_data.Length / 3;
                    ProtocolDataType[] data_types = new ProtocolDataType[size];
                    for (int i = 0; i < size; i++)
                    {
                        byte[] temp_buffer = new byte[3];
                        Array.Copy(packet_data, i * 3, temp_buffer, 0, 3);
                        data_types[i] = ProtocolDataType.GetPacket(temp_buffer);
                    }
                    int j = 0;
                    while (j < size)
                    {
                        switch (data_types[j].Tag)
                        {
                        case Tags.Phys_Prot_Id:
                            garmin.SetCapability("protocol.physical", data_types[j].data);
                            j++;
                            break;

                        case Tags.Link_Prot_Id:
                            garmin.SetCapability("protocol.link", data_types[j].data);
                            j++;
                            break;

                        case Tags.Appl_Prot_Id:
                            application_protocol   app  = data_types[j].GetApplicationProtocol();
                            List <garmin_datatype> phys = new  List <garmin_datatype>();
                            for (++j; j < size; j++)
                            {
                                if (data_types[j].Tag != Tags.Data_Type_Id)
                                {
                                    Protocol.AssignProtocols(garmin, app, phys);
                                    break;
                                }
                                phys.Add(data_types[j].GetDataType());
                            }
                            break;

                        case Tags.Data_Type_Id:
                            // taken care of in application protocol section
                            break;

                        default:
                            j++;
                            break;
                        }
                    }


                    done = true;
                    break;

                default:
                    break;
                }
            }
        }
Пример #12
0
 public bool ContainsRun(GarminUnit garmin, Run run)
 {
     if ( database.Runs.Count() == 0 )
         return false;
     var runs = from r in database.Runs
                 where r.GarminDevice == (int) garmin.ID
                 where r.FirstLapIndex == (int) run.FirstLapIndex
                 where r.LastLapIndex == (int) run.LastLapIndex
                 select r;
     return (runs.Count() > 0);
 }
Пример #13
0
 public bool ContainsLap(GarminUnit garmin, Lap lap)
 {
     if ( database.Laps.Count() == 0 )
         return false;
     var laps = from l in database.Laps
         where l.GarminUnit == (int) garmin.ID
         where l.Index == (int) lap.Index
         select l;
     return (laps.Count() > 0);
 }
Пример #14
0
 internal void InitializeAddIns()
 {
     AddinManager.Initialize();
     AddinManager.Registry.Update();
     foreach (IGarminUnit addin in AddinManager.GetExtensionObjects(typeof(IGarminUnit)))
     {
         Console.WriteLine("Finding units of type ", addin.Description);
         foreach ( UsbDevice dev in FindDevices(addin.VID, addin.PID))
         {
             GarminUnit unit = new GarminUnit(dev);
             unit.Init();
             GarminUnits.Add(unit);
         }
     }
 }