private OperationTypeEnum GetOperationTypeFromLoggingDevices(ISOTime time)
        {
            HashSet <DeviceOperationType> representedTypes         = new HashSet <DeviceOperationType>();
            IEnumerable <string>          distinctDeviceElementIDs = time.DataLogValues.Select(d => d.DeviceElementIdRef).Distinct();

            foreach (string isoDeviceElementID in distinctDeviceElementIDs)
            {
                int?deviceElementID = TaskDataMapper.InstanceIDMap.GetADAPTID(isoDeviceElementID);
                if (deviceElementID.HasValue)
                {
                    DeviceElement deviceElement = DataModel.Catalog.DeviceElements.FirstOrDefault(d => d.Id.ReferenceId == deviceElementID.Value);
                    if (deviceElement != null && deviceElement.DeviceClassification != null)
                    {
                        DeviceOperationType deviceOperationType = DeviceOperationTypes.FirstOrDefault(d => d.MachineEnumerationMember.ToModelEnumMember().Value == deviceElement.DeviceClassification.Value.Value);
                        if (deviceOperationType != null)
                        {
                            representedTypes.Add(deviceOperationType);
                        }
                    }
                }
            }

            DeviceOperationType deviceType = representedTypes.FirstOrDefault(t => t.ClientNAMEMachineType >= 2 && t.ClientNAMEMachineType <= 11);

            if (deviceType != null)
            {
                //2-11 represent known types of operations
                //These will map to implement devices and will govern the actual operation type.
                //Return the first such device type
                return(deviceType.OperationType);
            }
            return(OperationTypeEnum.Unknown);
        }
        private EnumeratedValue DecodeMachineInfo(string clientNAME)
        {
            if (string.IsNullOrEmpty(clientNAME) ||
                clientNAME.Length != 16)
            {
                return(null);
            }

            byte deviceGroup;

            if (!byte.TryParse(clientNAME.Substring(0, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out deviceGroup))
            {
                return(null);
            }
            deviceGroup >>= 4;

            if ((deviceGroup & 0x07) != 2) // Agricultural devices
            {
                return(null);
            }

            byte deviceClass;

            if (!byte.TryParse(clientNAME.Substring(2, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out deviceClass))
            {
                return(null);
            }
            deviceClass >>= 1;

            AgGateway.ADAPT.ApplicationDataModel.Representations.EnumerationMember machineType = DefinedTypeEnumerationInstanceList.dtiTractor.ToModelEnumMember(); //Default

            DeviceOperationType deviceType = DeviceOperationTypes.SingleOrDefault(d => d.ClientNAMEMachineType == deviceClass);

            if (deviceType != null)
            {
                machineType = deviceType.MachineEnumerationMember.ToModelEnumMember();
            }

            return(new EnumeratedValue {
                Representation = RepresentationInstanceList.dtMachineType.ToModelRepresentation(), Value = machineType
            });
        }