using System.ComponentModel; using DTS.Common.Converters; using DTS.Common.Utils; using Xceed.Wpf.Toolkit.PropertyGrid.Attributes; namespace DTS.Common { [TypeConverter(typeof(EnumDescriptionTypeConverter))] public enum ClockSyncProfile : byte { [Description("ClockSyncProfile_None")] None = 0, [Description("ClockSyncProfile_Manual")] Manual, [Description("ClockSyncProfile_Slave_E2E")] Slave_E2E, [Description("ClockSyncProfile_Master_E2E")] Master_E2E, [Description("ClockSyncProfile_Auto_E2E")] Auto_E2E, [Description("ClockSyncProfile_Master_E2E_IRIG")] Master_E2E_IRIG, [Description("ClockSyncProfile_Master_E2E_IRIG_EXT_PPS")] Master_E2E_IRIG_EXT_PPS, [Description("ClockSyncProfile_Master_E2E_GPS")] Master_E2E_GPS, [Description("ClockSyncProfile_Master_E2E_GPS_EXT_PPS")] Master_E2E_GPS_EXT_PPS, [Description("ClockSyncProfile_Master_E2E_EXT_PPS")] Master_E2E_EXT_PPS, //[Description("ClockSyncProfile_Slave_P2P")] //Slave_P2P = 12, //[Description("ClockSyncProfile_Master_P2P")] //Master_P2P, //[Description("ClockSyncProfile_Auto_P2P")] //Auto_P2P, //[Description("ClockSyncProfile_Master_P2P_IRIG")] //Master_P2P_IRIG, //[Description("ClockSyncProfile_Master_P2P_IRIG_EXT_PPS")] //Master_P2P_IRIG_EXT_PPS, //[Description("ClockSyncProfile_Master_P2P_GPS")] //Master_P2P_GPS, //[Description("ClockSyncProfile_Master_P2P_GPS_EXT_PPS")] //Master_P2P_GPS_EXT_PPS, //[Description("ClockSyncProfile_Master_P2P_EXT_PPS")] //Master_P2P_EXT_PPS, [Description("ClockSyncProfile_IRIG")] IRIG = 21, [Description("ClockSyncProfile_IRIG_EXT_PPS")] IRIG_EXT_PPS, [Description("ClockSyncProfile_GPS")] GPS, [Description("ClockSyncProfile_GPS_EXT_PPS")] GPS_EXT_PPS, [Description("ClockSyncProfile_EXT_PPS")] EXT_PPS, //1PPS Out Profiles [Description("ClockSyncProfile_Slave_E2E_PPS_OUT")] Slave_E2E_PPS_OUT, [Description("ClockSyncProfile_Master_E2E_PPS_OUT")] Master_E2E_PPS_OUT, [Description("ClockSyncProfile_IRIG_Master_E2E_PPS_OUT")] IRIG_Master_E2E_PPS_OUT, [Description("ClockSyncProfile_IRIG_PPS_OUT")] IRIG_PPS_OUT = 32, //Combinations that are possible in UI, but no device supports [Description("ClockSyncProfile_PPS_OUT")] PPS_OUT = 245, [Description("ClockSyncProfile_GPS_PPS_OUT")] GPS_PPS_OUT, [Description("ClockSyncProfile_GPS_Master_E2E_PPS_OUT")] GPS_Master_E2E_PPS_OUT, [Description("ClockSyncProfile_GPS_EXT_PPS_PPS_OUT")] GPS_EXT_PPS_PPS_OUT, [Description("ClockSyncProfile_GPS_EXT_PPS_Master_E2E_PPS_OUT")] GPS_EXT_PPS_Master_E2E_PPS_OUT, [Description("ClockSyncProfile_EXT_PPS_PPS_OUT")] EXT_PPS_PPS_OUT, [Description("ClockSyncProfile_EXT_PPS_Master_E2E_PPS_OUT")] EXT_PPS_Master_E2E_PPS_OUT, [Description("ClockSyncProfile_IRIG_EXT_PPS_PPS_OUT")] IRIG_EXT_PPS_PPS_OUT, [Description("ClockSyncProfile_IRIG_EXT_PPS_Master_E2E_PPS_OUT")] IRIG_EXT_PPS_Master_E2E_PPS_OUT, [Description("ClockSyncProfile_Slave_E2E_Master_E2E_OUT")] Slave_E2E_Master_E2E_OUT, [Description("ClockSyncProfile_Slave_E2E_Master_E2E_PPS_OUT")] Slave_E2E_Master_E2E_PPS_OUT, } [TypeConverter(typeof(EnumDescriptionTypeConverter))] public enum InputClockSource : byte { [Description("InputClockSource_None")] None = 0, [Description("InputClockSource_PTP")] PTP = (1 << 0), [Description("InputClockSource_IRIG")] IRIG = (1 << 1), [Description("InputClockSource_GPS")] GPS = (1 << 2), [Description("InputClockSource_1PPS")] OnePPS = (1 << 3), [Description("InputClockSource_PTP_1PPS")] PTP_OnePPS = (1 << 0) | (1 << 3), [Description("InputClockSource_IRIG_1PPS")] IRIG_OnePPS = (1 << 1) | (1 << 3), [Description("InputClockSource_GPS_1PPS")] GPS_OnePPS = (1 << 2) | (1 << 3), } [TypeConverter(typeof(EnumDescriptionTypeConverter))] public enum OutputClockSource : byte { [Description("OutputClockSource_None")] None = 0, [Description("OutputClockSource_PTP")] // not a real setting. for UI purposes only. PTP = 255, [Description("OutputClockSource_PTP_OnePPS")] // not a real setting. for UI purposes only. PTP_OnePPS = 254, [Description("OutputClockSource_PTPMaster_E2E")] PTPMasterE2E = (1 << 0), [Description("OutputClockSource_PTPMaster_P2P")] PTPMasterP2P = (1 << 0) | (1 << 2), [Description("OutputClockSource_PTPBoundary_E2E")] PTPBoundaryE2E = (1 << 1), [Description("OutputClockSource_PTPBoundary_P2P")] PTPBoundaryP2P = (1 << 1) | (1 << 2), [Description("OutputClockSource_OnePPS")] OnePPS = (1 << 3), [Description("OutputClockSource_PTPMaster_E2E_OnePPS")] PTPMasterE2E_OnePPS = (1 << 0) | (1 << 3), [Description("OutputClockSource_PTPMaster_P2P_OnePPS")] PTPMasterP2P_OnePPS = (1 << 0) | (1 << 2) | (1 << 3), [Description("OutputClockSource_PTPBoundary_E2E_OnePPS")] PTPBoundaryE2E_OnePPS = (1 << 1) | (1 << 3), [Description("OutputClockSource_PTPBoundary_P2P_OnePPS")] PTPBoundaryP2P_OnePPS = (1 << 1) | (1 << 2) | (1 << 3) } public class MasterClockSyncProfileItemsSource : ProfileSourceItemsSource { public override ItemCollection GetValues() { return FromProfiles(Constants.MasterProfiles); } } public class SlaveClockSyncProfileItemsSource : ProfileSourceItemsSource { public override ItemCollection GetValues() { return FromProfiles(Constants.SlaveProfiles); } } public abstract class ProfileSourceItemsSource : IItemsSource { protected ItemCollection FromProfiles(ClockSyncProfile[] profiles) { var values = new ItemCollection(); foreach (var profile in profiles) { values.Add(profile, Strings.Strings.ResourceManager.GetString(profile.GetEnumDescription())); } return values; } public virtual ItemCollection GetValues() { return FromProfiles(new ClockSyncProfile[] {}); } } }