public bool RadioCheck(RadioID toCheck, ref float rssi) { CSBKBurst burst = new RadioCheck(this.ID, toCheck); RadioCall call = DataCall.CSBKRadioCall(6, false, this.ID, toCheck, burst); float myRSSI = 0.0F; SemaphoreSlim signal = new SemaphoreSlim(0, 1); CallHander handler = new CallHander((sender, e) => { if (e.Call.IsAudio) { return; } DataCall intcall = (DataCall)e.Call; if (intcall.From.Equals(toCheck) && intcall.To.Equals(this.myID) && intcall.DataType == CallDataType.RadioCheckAck) { myRSSI = intcall.RSSI; e.Handled = true; signal.Release(); } }); this.InternalCallHandler += handler; this.SendCall(call); if (signal.Wait(5000) == false) { this.InternalCallHandler -= handler; return(false); } this.InternalCallHandler -= handler; rssi = myRSSI; return(true); }
public void SendCall(RadioCall call) { UserPacket[] packets = call.ToPackets(this.myID); foreach (UserPacket p in packets) { this.SendPacketToRestChannel(p); Thread.Sleep(60); //This seems to be the minimum time to get this to work correctly } }
public CallEventArgs(RadioCall call) : base() { this.Call = call; }