public static void Main(string[] args) { var rigName = "Dummy"; var serialPort = string.Empty; //var rigName = "FT-857"; //var serialPort = "/dev/ttyUSB0"; Console.WriteLine("HamLib Native Library Version: {0}", HamLib.NativeVersion); Console.WriteLine("HamLib Managed Library Version: {0}", HamLib.ManagedVersion); Console.WriteLine(); Console.WriteLine("WARNING: This will PTT your RIG!! Ensure proper dummy load"); Console.WriteLine("Press Enter to continue or CTRL+C to exit"); Console.ReadLine(); Console.WriteLine("Attempting to open: {0} at port: {1}", rigName, serialPort); HamLib.SetDebugLevel(RigDebugLevel.Error); Rig rig = null; try { rig = new Rig(rigName); rig.Open(serialPort); } catch (RigException e) { Console.WriteLine("Unable to Open Rig: {0}", e.Message); return; } var freqHz = 28350125; Console.WriteLine("Set Frequency to: {0}", Rig.FrequencyToString(freqHz)); rig.SetFrequency(freqHz); Console.WriteLine("Read Frequency is: {0}", Rig.FrequencyToString(rig.GetFrequency())); Console.WriteLine("Attempting to PTT Rig for 1 Sec"); rig.SetPtt(PttMode.On); System.Threading.Thread.Sleep(1000); Console.WriteLine(rig.GetPtt()); Console.WriteLine("PTT OFF"); rig.SetPtt(PttMode.Off); while (true) { Console.WriteLine("Frequency is: {0}", Rig.FrequencyToString(rig.GetFrequency())); System.Threading.Thread.Sleep(1000); } }
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); }
public static void Main(string[] args) { //var rigName = "Dummy"; //var port = string.Empty; //var rigName = "FT-857"; //var port = "/dev/ttyUSB0"; var rigName = "PiHPSDR"; var port = "127.0.0.1:19090"; Console.WriteLine("HamLib Native Library Version: {0}", HamLib.NativeVersion); Console.WriteLine("HamLib Managed Library Version: {0}", HamLib.ManagedVersion); Console.WriteLine(); Console.WriteLine("WARNING: This will PTT your RIG!! Ensure proper dummy load"); Console.WriteLine("Press Enter to continue or CTRL+C to exit"); Console.ReadLine(); Console.WriteLine("Attempting to open: {0} at port: {1}", rigName, port); //This will output to console hamlib traces //HamLib.SetDebugLevel (RigDebugLevel.Trace); Rig rig = null; try { rig = new Rig(rigName); rig.Open(port); } catch (RigException e) { Console.WriteLine("Unable to Open Rig: {0}", e.Message); return; } var freqHz = 28350125; Console.WriteLine("Set Frequency to: {0}", Rig.FrequencyToString(freqHz)); rig.SetFrequency(freqHz); Console.WriteLine("Read Frequency is: {0}", Rig.FrequencyToString(rig.GetFrequency())); Console.WriteLine("Attempting to PTT Rig for 1 Sec"); //rig.SetPtt (PttMode.On); System.Threading.Thread.Sleep(1000); Console.WriteLine(rig.GetPtt()); Console.WriteLine("PTT OFF"); rig.SetPtt(PttMode.Off); rig.SetLevel(RigLevel.Agc, (int)RigAgcLevel.Off); System.Threading.Thread.Sleep(1000); int level; rig.GetLevel(RigLevel.Agc, out level); Console.WriteLine("AGC Level: {0}", level); rig.SetLevel(RigLevel.Agc, (int)RigAgcLevel.Superfast); System.Threading.Thread.Sleep(1000); rig.GetLevel(RigLevel.Agc, out level); Console.WriteLine("AGC Level: {0}", level); rig.SetLevel(RigLevel.Agc, (int)RigAgcLevel.Fast); System.Threading.Thread.Sleep(1000); rig.GetLevel(RigLevel.Agc, out level); Console.WriteLine("AGC Level: {0}", level); rig.SetLevel(RigLevel.Agc, (int)RigAgcLevel.Medium); System.Threading.Thread.Sleep(1000); rig.GetLevel(RigLevel.Agc, out level); Console.WriteLine("AGC Level: {0}", level); rig.SetLevel(RigLevel.Agc, (int)RigAgcLevel.Slow); System.Threading.Thread.Sleep(1000); rig.GetLevel(RigLevel.Agc, out level); Console.WriteLine("AGC Level: {0}", level); while (true) { Console.WriteLine("Frequency is: {0}", Rig.FrequencyToString(rig.GetFrequency())); System.Threading.Thread.Sleep(1000); } }