Ejemplo n.º 1
0
        public static void Main(string[] args)
        {
            Console.WriteLine("HamLib Native Library Version: {0}", HamLib.NativeVersion);
            Console.WriteLine("HamLib Managed Library Version: {0}", HamLib.ManagedVersion);

            var rig = new Rig("Dummy");
            //var rig = new Rig ("Si570 AVR-USB");
            //var rig = new Rig ("FT-857");
            //rig.Open ();

            var caps = rig.Caps;

            int           i;
            int           backend_warnings = 0;
            StringBuilder sb;

            Console.WriteLine("Caps dump for model:\t{0}", caps.RigModel);
            Console.WriteLine("Model name:\t\t{0}", caps.ModelName);
            Console.WriteLine("Mfg name:\t\t{0}", caps.MfgName);
            Console.WriteLine("Backend version:\t{0}", caps.Version);
            Console.WriteLine("Backend copyright:\t{0}", caps.Copyright);
            Console.WriteLine("Backend status:\t\t{0}", caps.Status);
            Console.Write("Rig type:\t");
            switch (caps.RigType)              // & RigFlags.Mask) {
            {
            case RigType.Transceiver:
                Console.WriteLine("Transceiver");
                break;

            case RigType.Handheld:
                Console.WriteLine("Handheld");
                break;

            case RigType.Mobile:
                Console.WriteLine("Mobile");
                break;

            case RigType.Receiver:
                Console.WriteLine("Receiver");
                break;

            case RigType.PCReceiver:
                Console.WriteLine("PC Receiver");
                break;

            case RigType.Scanner:
                Console.WriteLine("Scanner");
                break;

            case RigType.TrunkScanner:
                Console.WriteLine("Trunking scanner");
                break;

            case RigType.Computer:
                Console.WriteLine("Computer");
                break;

            case RigType.Tuner:
                Console.WriteLine("Tuner");
                break;

            case RigType.Other:
                Console.WriteLine("Other");
                break;

            default:
                Console.WriteLine("Unknown");
                backend_warnings++;
                break;
            }

            Console.Write("PTT type:\t");
            switch (caps.PttType)
            {
            case PttType.Rig:
                Console.WriteLine("Rig capable");
                break;

            case PttType.RigMicData:
                Console.WriteLine("Rig capable (Mic/Data)");
                break;

            case PttType.Parallel:
                Console.WriteLine("Parallel port (DATA0)");
                break;

            case PttType.SerialRts:
                Console.WriteLine("Serial port (CTS/RTS)");
                break;

            case PttType.SerialDtr:
                Console.WriteLine("Serial port (DTR/DSR)");
                break;

            case PttType.None:
                Console.WriteLine("None");
                break;

            default:
                Console.WriteLine("Unknown");
                backend_warnings++;
                break;
            }

            Console.Write("DCD type:\t");
            switch (caps.DcdType)
            {
            case RigDcd.Rig:
                Console.WriteLine("Rig capable");
                break;

            case RigDcd.Parallel:
                Console.WriteLine("Parallel port (/STROBE)");
                break;

            case RigDcd.SerialCts:
                Console.WriteLine("Serial port (CTS/RTS)");
                break;

            case RigDcd.SerialDsr:
                Console.WriteLine("Serial port (DTR/DSR)");
                break;

            case RigDcd.SerialCar:
                Console.WriteLine("Serial port (CD)");
                break;

            case RigDcd.None:
                Console.WriteLine("None");
                break;

            default:
                Console.WriteLine("Unknown");
                backend_warnings++;
                break;
            }

            Console.Write("Port type:\t");
            switch (caps.PortType)
            {
            case RigPort.Serial:
                Console.WriteLine("RS-232");
                Console.WriteLine("Serial speed: {0}..{1} bauds, Databits:{2}, Parity:{3}, Stopbits:{4}, HW Handshake:{5}", caps.SerialRateMin,
                                  caps.SerialRateMax, caps.SerialDataBits, caps.SerialParity, caps.SerialStopBits,
                                  caps.SerialHandshake);
                break;

            case RigPort.Parallel:
                Console.WriteLine("Parallel");
                break;

            case RigPort.Device:
                Console.WriteLine("Device driver");
                break;

            case RigPort.USB:
                Console.WriteLine("USB");
                break;

            case RigPort.Network:
                Console.WriteLine("Network link");
                break;

            case RigPort.UdpNetwork:
                Console.WriteLine("UDP Network link");
                break;

            case RigPort.None:
                Console.WriteLine("None");
                break;

            default:
                Console.WriteLine("Unknown");
                backend_warnings++;
                break;
            }

            Console.WriteLine("Write delay: {0}ms, timeout {1}ms, {2} retry",
                              caps.WriteDelay, caps.Timeout, caps.Retry);
            Console.WriteLine("Post Write delay: {0}ms",
                              caps.PostWriteDelay);

            Console.WriteLine("Has targetable VFO: {0}",
                              caps.TargetableVfo != 0 ? "Y" : "N");

            Console.WriteLine("Has transceive: {0}",
                              caps.Transceive != 0 ? "Y" : "N");

            Console.WriteLine("Announce: 0x{0:X}", caps.Announces);
            Console.WriteLine("Max RIT: -{0}.{1}kHz/+{0}.{1}kHz",
                              caps.MaxRit / 1000, caps.MaxRit % 1000);

            Console.WriteLine("Max XIT: -{0}.{1}kHz/+{0}.{1}kHz",
                              caps.MaxXit / 1000, caps.MaxXit % 1000);

            Console.WriteLine("Max IF-SHIFT: -{0}.{1}kHz/+{0}.{1}kHz",
                              caps.MaxIfshift / 1000, caps.MaxIfshift % 1000);

            Console.Write("Preamp:");
            for (i = 0; i < caps.Preamp.Length && caps.Preamp [i] != 0; i++)
            {
                Console.Write(" {0}dB", caps.Preamp [i]);
            }
            if (i == 0)
            {
                Console.WriteLine(" None");
            }
            else
            {
                Console.WriteLine();
            }

            Console.Write("Attenuator:");
            for (i = 0; i < caps.Attenuator.Length && caps.Attenuator [i] != 0; i++)
            {
                Console.Write(" {0}dB", caps.Attenuator [i]);
            }
            if (i == 0)
            {
                Console.WriteLine(" None");
            }
            else
            {
                Console.WriteLine();
            }

            Console.Write("CTCSS:");
            for (i = 0; i < caps.CtcssTones.Count; i++)
            {
                Console.Write(" {0}.{1}", caps.CtcssTones[i] / 10, caps.CtcssTones[i] % 10);
            }
            if (i == 0)
            {
                Console.WriteLine(" None");
            }
            else
            {
                Console.WriteLine(" Hz, {0} tones", i);
            }

            Console.Write("DCS:");
            for (i = 0; i < caps.DcsCodes.Count; i++)
            {
                Console.Write(" {0}", caps.DcsCodes[i]);
            }
            if (i == 0)
            {
                Console.WriteLine(" None");
            }
            else
            {
                Console.WriteLine(", {0} codes", i);
            }

            Console.WriteLine("Get functions: {0}", caps.GetFunctions);

            Console.WriteLine("Set functions: {0}", caps.SetFunctions);

            // TODO: integrate the LevelGran into report
            Console.WriteLine("Get Levels: {0}", caps.GetLevels);

            Console.WriteLine("Set Levels: {0}", caps.SetLevels);

            Console.Write("Extra levels:");
            foreach (var level in caps.ExtLevels)
            {
                Console.Write(" {0}", level.Name);
            }
            Console.WriteLine();

            // TODO: integrate the LevelGran into report
            Console.WriteLine("Get parameters: {0}", caps.GetParms);

            Console.WriteLine("Set parameters: {0}", caps.SetParms);

            Console.Write("Extra parameters:");
            foreach (var level in caps.ExtParms)
            {
                Console.Write(" {0}", level.Name);
            }
            Console.WriteLine();

            if (rig.ModeList != RigMode.None)
            {
                Console.Write("Mode list: ");
                sb = new StringBuilder();
                for (i = 0; i < 30; i++)
                {
                    var val = (uint)rig.ModeList & (1U << i);
                    if (val > 0)
                    {
                        sb.Append(Rig.ModeToString((RigMode)val) + " ");
                    }
                }
                Console.WriteLine("\t{0}", sb);
            }
            else
            {
                Console.WriteLine("None. This backend might be bogus!");
                backend_warnings++;
            }

            if (rig.VfoList != 0)
            {
                Console.Write("VFO list: ");
                sb = new StringBuilder();
                for (i = 0; i < 30; i++)
                {
                    var val = (uint)rig.VfoList & (1U << i);
                    if (val > 0)
                    {
                        sb.Append(Rig.VfoToString(val) + " ");
                    }
                }
                Console.WriteLine("\t{0}", sb);
            }
            else
            {
                Console.WriteLine("None. This backend might be bogus!");
                backend_warnings++;
            }

            sb = new StringBuilder();
            foreach (RigVfoOperation op in Enum.GetValues(typeof(RigVfoOperation)))
            {
                sb.Append(Rig.VfoOperationToString(caps.VfoOps & op) + " ");
            }

            Console.WriteLine("VFO Ops: {0}", sb);

            sb = new StringBuilder();
            foreach (RigScanOperation op in Enum.GetValues(typeof(RigScanOperation)))
            {
                sb.Append(Rig.ScanOperationToString(caps.ScanOps & op) + " ");
            }

            Console.WriteLine("Scan Ops: {0}", sb);

            Console.WriteLine("Number of banks:\t{0}", caps.BankQty);
            Console.WriteLine("Memory name desc size:\t{0}", caps.ChanDescSz);

            Console.WriteLine("Memories:");
            for (i = 0; i < caps.ChanList.Count; i++)
            {
                Console.WriteLine("\t{0}..{1}:   \t{2}", caps.ChanList[i].Start, caps.ChanList[i].End,
                                  Rig.MemoryChannelToString(caps.ChanList[i].Type));
                Console.Write("\t  Mem caps: ");
                Console.WriteLine(DumpChannelCaps(caps.ChanList[i].MemCaps));
            }
            if (i == 0)
            {
                Console.WriteLine(" None");
            }
            Console.WriteLine();

            int status = RangeSanityCheck(caps.TxRangeList1, 0);

            Console.WriteLine("TX ranges status, region 1:\t{0} ({1})", status != 0 ? "Bad" : "OK", status);
            if (status != 0)
            {
                backend_warnings++;
            }
            status = RangeSanityCheck(caps.RxRangeList1, 1);
            Console.WriteLine("RX ranges status, region 1:\t{0} ({1})", status != 0 ? "Bad" : "OK", status);
            if (status != 0)
            {
                backend_warnings++;
            }

            status = RangeSanityCheck(caps.TxRangeList2, 0);
            Console.WriteLine("TX ranges status, region 2:\t{0} ({1})", status != 0 ? "Bad" : "OK", status);
            if (status != 0)
            {
                backend_warnings++;
            }
            status = RangeSanityCheck(caps.RxRangeList2, 1);
            Console.WriteLine("RX ranges status, region 2:\t{0} ({1})", status != 0 ? "Bad" : "OK", status);
            if (status != 0)
            {
                backend_warnings++;
            }

            Console.WriteLine("Tuning steps:");
            for (i = 0; i < caps.TuningSteps.Count; i++)
            {
                if (caps.TuningSteps[i].Value == ModeValue.Any)
                {
                    Console.Write("\tANY");
                }
                else
                {
                    Console.Write("\t{0}", caps.TuningSteps[i].Value);
                }

                sb = new StringBuilder();
                foreach (RigMode mode in Enum.GetValues(typeof(RigMode)))
                {
                    var rigMode = caps.TuningSteps[i].Modes & mode;
                    if (rigMode != RigMode.None)
                    {
                        sb.Append(Rig.ModeToString(rigMode) + " ");
                    }
                }
                Console.WriteLine("\t{0}", sb);
            }
            if (i == 0)
            {
                Console.WriteLine(" None! This backend might be bogus!");
                backend_warnings++;
            }
            Console.WriteLine();

            status = TuneStepSanityCheck(caps.TuningSteps);
            Console.WriteLine("Tuning steps status:\t{0} ({1})", status != 0 ? "Bad" : "OK", status);
            if (status != 0)
            {
                backend_warnings++;
            }


            Console.WriteLine("Filters:");
            for (i = 0; i < caps.Filters.Count; i++)
            {
                if (caps.Filters[i].Value == ModeValue.Any)
                {
                    Console.Write("\tANY");
                }
                else
                {
                    Console.Write("\t{0}", Rig.FrequencyToString(caps.Filters[i].Value));
                }

                sb = new StringBuilder();
                foreach (RigMode mode in Enum.GetValues(typeof(RigMode)))
                {
                    var rigMode = caps.Filters[i].Modes & mode;
                    if (rigMode != RigMode.None)
                    {
                        sb.Append(Rig.ModeToString(rigMode) + " ");
                    }
                }
                Console.WriteLine("\t{0}", sb);
            }
            if (i == 0)
            {
                Console.WriteLine(" None. This backend might be bogus!");
                backend_warnings++;
            }
            Console.WriteLine();


            Console.WriteLine("Bandwidths:");
            foreach (RigMode mode in Enum.GetValues(typeof(RigMode)))
            {
                var passBandFreq = rig.PassbandNormal(mode);
                if (passBandFreq == 0)
                {
                    continue;
                }

                Console.Write("\t{0}\tNormal: {1},\t", Rig.ModeToString(mode), Rig.FrequencyToString(passBandFreq));
                Console.Write("Narrow: {0},\t", Rig.FrequencyToString(rig.PassbandNarrow(mode)));
                Console.WriteLine("Wide: {0}", Rig.FrequencyToString(rig.PassbandWide(mode)));
            }
            Console.WriteLine();

            Console.WriteLine("Has priv data:\t{0}", caps.HasPrivateData ? 'Y' : 'N');

            // Status is either 'Y'es, 'E'mulated, 'N'o
            // TODO: keep me up-to-date with API call list!

            Console.WriteLine("Has Init:\t{0}", caps.HasRigInit ? 'Y' : 'N');
            Console.WriteLine("Has Cleanup:\t{0}", caps.HasRigCleanup ? 'Y' : 'N');
            Console.WriteLine("Has Open:\t{0}", caps.HasRigOpen ? 'Y' : 'N');
            Console.WriteLine("Has Close:\t{0}", caps.HasRigClose ? 'Y' : 'N');
            Console.WriteLine("Can set Conf:\t{0}", caps.HasSetConf ? 'Y' : 'N');
            Console.WriteLine("Can get Conf:\t{0}", caps.HasGetConf ? 'Y' : 'N');
            Console.WriteLine("Can set Frequency:\t{0}", caps.HasSetFreq ? 'Y' : 'N');
            Console.WriteLine("Can get Frequency:\t{0}", caps.HasGetFreq ? 'Y' : 'N');
            Console.WriteLine("Can set Mode:\t{0}", caps.HasSetMode ? 'Y' : 'N');
            Console.WriteLine("Can get Mode:\t{0}", caps.HasGetMode ? 'Y' : 'N');
            Console.WriteLine("Can set VFO:\t{0}", caps.HasSetVfo ? 'Y' : 'N');
            Console.WriteLine("Can get VFO:\t{0}", caps.HasGetVfo ? 'Y' : 'N');
            Console.WriteLine("Can set PTT:\t{0}", caps.HasSetPtt ? 'Y' : 'N');
            Console.WriteLine("Can get PTT:\t{0}", caps.HasGetPtt ? 'Y' : 'N');
            Console.WriteLine("Can get DCD:\t{0}", caps.HasGetDcd ? 'Y' : 'N');
            Console.WriteLine("Can set Repeater Duplex:\t{0}", caps.HasSetRptrShift ? 'Y' : 'N');
            Console.WriteLine("Can get Repeater Duplex:\t{0}", caps.HasGetRptrShift ? 'Y' : 'N');
            Console.WriteLine("Can set Repeater Offset:\t{0}", caps.HasSetRptrOffs ? 'Y' : 'N');
            Console.WriteLine("Can get Repeater Offset:\t{0}", caps.HasGetRptrOffs ? 'Y' : 'N');

            var canSplitVfo = caps.HasSetSplitVfo && (caps.HasSetVfo || (rig.HasVfoOP(RigVfoOperation.Toggle) && caps.VfoOps != RigVfoOperation.None));

            Console.WriteLine("Can set Split Freq:\t{0}", caps.HasSetSplitFreq ? 'Y' :
                              (canSplitVfo && caps.HasSetFreq ? 'E' : 'N'));
            Console.WriteLine("Can get Split Freq:\t{0}", caps.HasGetSplitFreq ? 'Y' :
                              (canSplitVfo && caps.HasGetFreq ? 'E' : 'N'));
            Console.WriteLine("Can set Split Mode:\t{0}", caps.HasSetSplitMode ? 'Y' :
                              (canSplitVfo && caps.HasSetMode ? 'E' : 'N'));
            Console.WriteLine("Can get Split Mode:\t{0}", caps.HasGetSplitMode ? 'Y' :
                              (canSplitVfo && caps.HasGetMode ? 'E' : 'N'));

            Console.WriteLine("Can set Split VFO:\t{0}", caps.HasSetSplitVfo ? 'Y' : 'N');
            Console.WriteLine("Can get Split VFO:\t{0}", caps.HasGetSplitVfo ? 'Y' : 'N');
            Console.WriteLine("Can set Tuning Step:\t{0}", caps.HasSetTS ? 'Y' : 'N');
            Console.WriteLine("Can get Tuning Step:\t{0}", caps.HasGetTS ? 'Y' : 'N');
            Console.WriteLine("Can set RIT:\t{0}", caps.HasSetRit ? 'Y' : 'N');
            Console.WriteLine("Can get RIT:\t{0}", caps.HasGetRit ? 'Y' : 'N');
            Console.WriteLine("Can set XIT:\t{0}", caps.HasSetXit ? 'Y' : 'N');
            Console.WriteLine("Can get XIT:\t{0}", caps.HasGetXit ? 'Y' : 'N');
            Console.WriteLine("Can set CTCSS:\t{0}", caps.HasSetCtcssTone ? 'Y' : 'N');
            Console.WriteLine("Can get CTCSS:\t{0}", caps.HasGetCtcssTone ? 'Y' : 'N');
            Console.WriteLine("Can set DCS:\t{0}", caps.HasSetDcsCode ? 'Y' : 'N');
            Console.WriteLine("Can get DCS:\t{0}", caps.HasGetDcsCode ? 'Y' : 'N');
            Console.WriteLine("Can set CTCSS Squelch:\t{0}", caps.HasSetCtcssSquelch ? 'Y' : 'N');
            Console.WriteLine("Can get CTCSS Squelch:\t{0}", caps.HasGetCtcssSquelch ? 'Y' : 'N');
            Console.WriteLine("Can set DCS Squelch:\t{0}", caps.HasSetDcsSquelch ? 'Y' : 'N');
            Console.WriteLine("Can get DCS Squelch:\t{0}", caps.HasGetDcsSquelch ? 'Y' : 'N');
            Console.WriteLine("Can set Power Stat:\t{0}", caps.HasSetPowerstat ? 'Y' : 'N');
            Console.WriteLine("Can get Power Stat:\t{0}", caps.HasGetPowerstat? 'Y' : 'N');
            Console.WriteLine("Can Reset:\t{0}", caps.HasReset ? 'Y' : 'N');
            Console.WriteLine("Can get Ant:\t{0}", caps.HasGetAnt ? 'Y' : 'N');
            Console.WriteLine("Can set Ant:\t{0}", caps.HasSetAnt ? 'Y' : 'N');
            Console.WriteLine("Can set Transceive:\t{0}", caps.HasSetTrn ? 'Y' : caps.Transceive == RigTransceive.Rig ? 'E' : 'N');
            Console.WriteLine("Can get Transceive:\t{0}", caps.HasGetTrn ? 'Y' : 'N');
            Console.WriteLine("Can set Func:\t{0}", caps.HasSetFunc ? 'Y' : 'N');
            Console.WriteLine("Can get Func:\t{0}", caps.HasGetFunc ? 'Y' : 'N');
            Console.WriteLine("Can set Level:\t{0}", caps.HasSetLevel ? 'Y' : 'N');
            Console.WriteLine("Can get Level:\t{0}", caps.HasGetLevel ? 'Y' : 'N');
            Console.WriteLine("Can set Param:\t{0}", caps.HasSetParm ? 'Y' : 'N');
            Console.WriteLine("Can get Param:\t{0}", caps.HasGetParm ? 'Y' : 'N');
            Console.WriteLine("Can send DTMF:\t{0}", caps.HasSendDTMF ? 'Y': 'N');
            Console.WriteLine("Can recv DTMF:\t{0}", caps.HasRecvDTMF ? 'Y' : 'N');
            Console.WriteLine("Can send Morse:\t{0}", caps.HasSendMorse ? 'Y' : 'N');
            Console.WriteLine("Can decode Events:\t{0}", caps.HasDecodeEvent ? 'Y' : 'N');
            Console.WriteLine("Can set Bank:\t{0}", caps.HasSetBank ? 'Y' : 'N');
            Console.WriteLine("Can set Mem:\t{0}", caps.HasSetMem ? 'Y' : 'N');
            Console.WriteLine("Can get Mem:\t{0}", caps.HasGetMem ? 'Y' : 'N');

            var can_echannel = caps.HasSetMem && (
                (caps.HasSetVfo && ((rig.VfoList & RigVfo.Memory) == RigVfo.Memory)) ||
                (caps.VfoOps != RigVfoOperation.None && rig.HasVfoOP(RigVfoOperation.MemToVfo | RigVfoOperation.VfoToMem)));

            Console.WriteLine("Can set Channel:\t{0}", caps.HasSetChannel ? 'Y' :
                              (can_echannel ? 'E' : 'N'));
            Console.WriteLine("Can get Channel:\t{0}", caps.HasGetChannel ? 'Y' :
                              (can_echannel ? 'E' : 'N'));

            Console.WriteLine("Can ctl Mem/VFO:\t{0}", caps.HasVfoOp ? 'Y' : 'N');
            Console.WriteLine("Can Scan:\t{0}", caps.HasScan ? 'Y' : 'N');
            Console.WriteLine("Can get Info:\t{0}", caps.HasGetInfo ? 'Y' : 'N');
            Console.WriteLine("Can get power2mW:\t{0}", caps.HasPower2mW ? 'Y' : 'N');
            Console.WriteLine("Can get mW2power:\t{0}", caps.HasmW2power ? 'Y' : 'N');
            Console.WriteLine("Overall backend warnings: {0}", backend_warnings);
        }
Ejemplo n.º 2
0
 public int PassbandNormal(RigMode mode)
 {
     return(rig.PassbandNormal(mode));
 }