public void SetAllValue() { rfstatus = ucLoRa.RFStatus.Standby; if (ChipVer == ucLoRa.ChipSet.RF92) rfm92.ApplyValue(); else rfm96.ApplyValue(); try { double num1 = (double) ( (ChipVer != ucLoRa.ChipSet.RF92 ? (((uint)rfm96.RegFrMsb.Value << 16) + ((uint)rfm96.RegFrMid.Value << 8)) + (uint)rfm96.RegFrLsb.Value : (((uint)rfm92.RegFrMsb.Value << 16) + ((uint)rfm92.RegFrMid.Value << 8)) + (uint)rfm92.RegFrLsb.Value ) + 1 ) * (15625.0 / 256.0); nudRadioFreq.Value = 434000000M; // !!! (Decimal)(num1); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } if (((ChipVer != ucLoRa.ChipSet.RF92 ? rfm96.RegTcxo.Value : rfm92.RegTcxo.Value) & 16) == 16) { rbTCXO.Checked = true; rbXTAL.Checked = false; } else { rbTCXO.Checked = false; rbXTAL.Checked = true; } if (((ChipVer != ucLoRa.ChipSet.RF92 ? rfm96.RegPaConfig.Value : rfm92.RegPaConfig.Value) & 128) == 128) cbPaOutput.SelectedIndex = 1; else cbPaOutput.SelectedIndex = 0; if (ChipVer == ucLoRa.ChipSet.RF92) { cbPaRamp.SelectedIndex = (int)rfm92.RegPaRamp.Value & 15; if (cbPaOutput.SelectedIndex == 1) { if ((int)rfm92.RegPaDac.Value == 135) cbOutputPower.SelectedIndex = ((int)rfm92.RegPaConfig.Value & 15) + 3; else cbOutputPower.SelectedIndex = (int)rfm92.RegPaConfig.Value & 15; } else cbOutputPower.SelectedIndex = (int)rfm92.RegPaConfig.Value & 15; cbPLLBW.SelectedIndex = ((int)rfm92.RegPllHf.Value & 192) >> 6; } else { cbPaRamp.SelectedIndex = (int)rfm96.RegPaRamp.Value & 15; if (cbPaOutput.SelectedIndex == 1) { if (rfm96.RegPaDac.Value == 135) cbOutputPower.SelectedIndex = ((int)rfm96.RegPaConfig.Value & 15) + 3; else cbOutputPower.SelectedIndex = (int)rfm96.RegPaConfig.Value & 15; } else { cbMaxOutputPower.SelectedIndex = ((int)rfm96.RegPaConfig.Value & 112) >> 4; cbOutputPower.SelectedIndex = (int)rfm96.RegPaConfig.Value & 15; } cbPLLBW.SelectedIndex = ((int)rfm96.RegPllHf.Value & 192) >> 6; } byte num3 = ChipVer != ucLoRa.ChipSet.RF92 ? rfm96.RegOcp.Value : rfm92.RegOcp.Value; if ((num3 & 32) == 32) { rbOCPOn.Checked = true; rbOCPOff.Checked = false; } else { rbOCPOn.Checked = false; rbOCPOff.Checked = true; } switch (num3 & 0x1F) { case 0: case 1: case 2: case 3: cbOcpTrimming.SelectedIndex = 0; break; case 4: case 5: case 6: case 7: cbOcpTrimming.SelectedIndex = 1; break; case 8: case 9: case 10: case 11: cbOcpTrimming.SelectedIndex = 2; break; case 12: case 13: case 14: case 15: cbOcpTrimming.SelectedIndex = 3; break; case 16: case 17: cbOcpTrimming.SelectedIndex = 4; break; case 18: case 19: cbOcpTrimming.SelectedIndex = 5; break; case 20: case 21: cbOcpTrimming.SelectedIndex = 6; break; case 22: case 23: cbOcpTrimming.SelectedIndex = 7; break; case 24: case 25: cbOcpTrimming.SelectedIndex = 8; break; case 26: case 27: case 28: case 29: case 30: case 31: cbOcpTrimming.SelectedIndex = 9; break; } if (((ChipVer != ucLoRa.ChipSet.RF92 ? (int)rfm96.RegModemConfig3.Value : (int)rfm92.RegModemConfig2.Value) & 4) == 4) { rbAGCOn.Checked = true; rbAGCOff.Checked = false; cbLnaGain.Enabled = false; } else { rbAGCOn.Checked = false; rbAGCOff.Checked = true; cbLnaGain.Enabled = true; } cbLnaGain.SelectedIndex = ((ChipVer != ucLoRa.ChipSet.RF92 ? (int)rfm96.RegLna.Value : (int)rfm92.RegLna.Value) & 224) >> 5; byte num4 = ChipVer != ucLoRa.ChipSet.RF92 ? rfm96.RegModemConfig2.Value : rfm92.RegModemConfig2.Value; cbImplicit.Enabled = true; switch (num4 & 0xF0) { case 176: cbSF.SelectedIndex = 5; break; case 144: cbSF.SelectedIndex = 3; break; case 160: cbSF.SelectedIndex = 4; break; case 96: cbSF.SelectedIndex = 0; cbImplicit.Enabled = false; break; case 112: cbSF.SelectedIndex = 1; break; case 128: cbSF.SelectedIndex = 2; break; default: cbSF.SelectedIndex = 6; break; } switch ((ChipVer != ucLoRa.ChipSet.RF92 ? (int)(byte)((uint)rfm96.RegModemConfig1.Value >> 1) : (int)(byte)((uint)rfm92.RegModemConfig1.Value >> 3)) & 7) { case 2: cbCR.SelectedIndex = 1; break; case 3: cbCR.SelectedIndex = 2; break; case 4: cbCR.SelectedIndex = 3; break; default: cbCR.SelectedIndex = 0; break; } if (ChipVer == ucLoRa.ChipSet.RF92) { switch (rfm92.RegModemConfig1.Value & 0xC0) { case 64: cbBW.SelectedIndex = 1; break; case 128: cbBW.SelectedIndex = 2; break; default: cbBW.SelectedIndex = 0; break; } } else if (rbTCXO.Checked) { switch (rfm96.RegModemConfig1.Value & 0xF0) { case 128: cbBW.SelectedIndex = 8; break; case 144: cbBW.SelectedIndex = 9; break; case 80: cbBW.SelectedIndex = 5; break; case 96: cbBW.SelectedIndex = 6; break; case 32: cbBW.SelectedIndex = 2; break; case 48: cbBW.SelectedIndex = 3; break; case 64: cbBW.SelectedIndex = 4; break; case 0: cbBW.SelectedIndex = 0; break; case 16: cbBW.SelectedIndex = 1; break; default: cbBW.SelectedIndex = 7; break; } } else { switch (rfm96.RegModemConfig1.Value & 0xF0) { case 128: cbBW.SelectedIndex = 2; break; case 144: cbBW.SelectedIndex = 3; break; case 96: cbBW.SelectedIndex = 0; break; default: cbBW.SelectedIndex = 1; break; } } nudRxTimeOut.Value = ChipVer != ucLoRa.ChipSet.RF92 ? (Decimal)(((int)rfm96.RegModemConfig2.Value & 3) * 256 + (int)rfm96.RegSymbTimeoutLsb.Value) : (Decimal)(((int)rfm92.RegModemConfig2.Value & 3) * 256 + (int)rfm92.RegSymbTimeoutLsb.Value); if (ChipVer == ucLoRa.ChipSet.RF92) { if ((rfm92.RegModemConfig1.Value & 4) == 4) { cbImplicit.Checked = true; nudImplicitRxLength.Value = (Decimal)rfm92.RegPayloadLength.Value; } else { cbImplicit.Checked = false; nudImplicitRxLength.Value = (Decimal)rfm96.RegPayloadLength.Value; } } else cbImplicit.Checked = ((int)rfm96.RegModemConfig1.Value & 1) == 1; if (ChipVer == ucLoRa.ChipSet.RF92) { if ((rfm92.RegModemConfig1.Value & 1) == 1) { rbLROptimizeOn.Checked = true; rbLROptimizeOff.Checked = false; } else { rbLROptimizeOn.Checked = false; rbLROptimizeOff.Checked = true; } } else if ((rfm96.RegModemConfig3.Value & 8) == 8) { rbLROptimizeOn.Checked = true; rbLROptimizeOff.Checked = false; } else { rbLROptimizeOn.Checked = false; rbLROptimizeOff.Checked = true; } nudPreambleLength.Value = ChipVer != ucLoRa.ChipSet.RF92 ? (Decimal)((int)rfm96.RegPreambleMsb.Value * 256 + (int)rfm96.RegPreambleLsb.Value) : (Decimal)((int)rfm92.RegPreambleMsb.Value * 256 + (int)rfm92.RegPreambleLsb.Value); if (ChipVer == ucLoRa.ChipSet.RF92) { if ((rfm92.RegModemConfig1.Value & 2) == 2) { rbPayloadCRCOn.Checked = true; rbPayloadCRCOff.Checked = false; } else { rbPayloadCRCOn.Checked = false; rbPayloadCRCOff.Checked = true; } } else if ((rfm96.RegModemConfig2.Value & 4) == 4) { rbPayloadCRCOn.Checked = true; rbPayloadCRCOff.Checked = false; } else { rbPayloadCRCOn.Checked = false; rbPayloadCRCOff.Checked = true; } byte num5 = ChipVer != ucLoRa.ChipSet.RF92 ? rfm96.RegIrqFlagsMask.Value : rfm92.RegIrqFlagsMask.Value; if ((num5 & 0x80) == 0x80) { cbRxTimeOut.Checked = true; RxTimeOutLed.LedColor = Color.Red; } else { cbRxTimeOut.Checked = false; RxTimeOutLed.LedColor = Color.Lime; } if ((num5 & 0x40) == 0x40) { cbRxDone.Checked = true; RxDoneLed.LedColor = Color.Red; } else { cbRxDone.Checked = false; RxDoneLed.LedColor = Color.Lime; } if ((num5 & 0x20) == 0x20) { cbCRCError.Checked = true; CRCErrorLed.LedColor = Color.Red; } else { cbCRCError.Checked = false; CRCErrorLed.LedColor = Color.Lime; } if ((num5 & 0x10) == 0x10) { cbValidHeader.Checked = true; ValidHeaderLed.LedColor = Color.Red; } else { cbValidHeader.Checked = false; ValidHeaderLed.LedColor = Color.Lime; } if ((num5 & 0x08) == 0x08) { cbTxDone.Checked = true; TxDoneLed.LedColor = Color.Red; } else { cbTxDone.Checked = false; TxDoneLed.LedColor = Color.Lime; } if ((num5 & 0x04) == 0x04) { cbCADDone.Checked = true; CADDoneLed.LedColor = Color.Red; } else { cbCADDone.Checked = false; CADDoneLed.LedColor = Color.Lime; } if ((num5 & 0x02) == 0x02) { cbFHSSChannel.Checked = true; FHSSChannelLed.LedColor = Color.Red; } else { cbFHSSChannel.Checked = false; FHSSChannelLed.LedColor = Color.Lime; } if ((num5 & 0x01) == 0x01) { cbCADDetect.Checked = true; CADDetectLed.LedColor = Color.Red; } else { cbCADDetect.Checked = false; CADDetectLed.LedColor = Color.Lime; } }
public bool EntryTx() { byte data = 0; ConfigRF(); ClearIrq(); byte txData = GetTxData(bbPayload.Text); if (txData != 0) { rfstatus = ucLoRa.RFStatus.Transmitter; if (ChipVer == ucLoRa.ChipSet.RF92) { ftdi.SendByte(rfm92.RegIrqFlagsMask.Address, rfm92.RegIrqFlagsMask.Value); rfm92.RegPayloadLength.Value = txData; ftdi.SendByte(rfm92.RegPayloadLength.Address, rfm92.RegPayloadLength.Value); ftdi.ReadByte(rfm92.RegFifoTxBaseAddr.Address, ref data); rfm92.RegFifoAddrPtr.Value = data; ftdi.SendByte(rfm92.RegFifoAddrPtr.Address, rfm92.RegFifoAddrPtr.Value); if (ftdi.SendBytes(rfm92.RegFifo.Address, TxBuf, txData)) { rfm92.RegOpMode.Value &= 248; rfm92.RegOpMode.Value |= (byte)rfstatus; ftdi.SendByte(rfm92.RegOpMode.Address, rfm92.RegOpMode.Value); } else { rfstatus = ucLoRa.RFStatus.Standby; rfm92.RegOpMode.Value &= 248; rfm92.RegOpMode.Value |= (byte)rfstatus; ftdi.LedOff(); return false; } } else { ftdi.SendByte(rfm96.RegIrqFlagsMask.Address, rfm96.RegIrqFlagsMask.Value); rfm96.RegPayloadLength.Value = txData; ftdi.SendByte(rfm96.RegPayloadLength.Address, rfm96.RegPayloadLength.Value); ftdi.ReadByte(rfm96.RegFifoTxBaseAddr.Address, ref data); rfm96.RegFifoAddrPtr.Value = data; ftdi.SendByte(rfm96.RegFifoAddrPtr.Address, rfm96.RegFifoAddrPtr.Value); ftdi.ReadByte(rfm96.RegOpMode.Address, ref data); rfm96.RegOpMode.Value = (byte)((data & 248) | (byte)rfstatus); if (nudRadioFreq.Value < new Decimal(525000000)) rfm96.RegOpMode.Value |= 8; else rfm96.RegOpMode.Value &= 247; if (ftdi.SendBytes(rfm96.RegFifo.Address, TxBuf, txData)) { ftdi.SendByte(rfm96.RegOpMode.Address, rfm96.RegOpMode.Value); } else { rfstatus = ucLoRa.RFStatus.Standby; rfm96.RegOpMode.Value &= 248; rfm96.RegOpMode.Value |= (byte)rfstatus; ftdi.LedOff(); return false; } } return true; } MessageBox.Show("No data!"); return false; }
public bool EntryTxTest() { byte data = 0; TestConfigRF(); rfstatus = ucLoRa.RFStatus.TxTest; if (ChipVer == ucLoRa.ChipSet.RF92) { ftdi.ReadByte(rfm92.RegOpMode.Address, ref data); rfm92.RegOpMode.Value = (byte)((data & 152) | 32 | (byte)rfstatus); ftdi.SendByte(rfm92.RegOpMode.Address, rfm92.RegOpMode.Value); ftdi.RfDataOut(); ftdi.RfDataHigh(); Thread.Sleep(10); data = 0; ftdi.ReadByte(62, ref data); return ((data & 160) == 160); } ftdi.ReadByte(rfm96.RegOpMode.Address, ref data); rfm96.RegOpMode.Value = (byte)((data & 152) | 32 | (byte)rfstatus); if (nudRadioFreq.Value < new Decimal(525000000)) rfm96.RegOpMode.Value |= 8; else rfm96.RegOpMode.Value &= 247; ftdi.SendByte(rfm96.RegOpMode.Address, rfm96.RegOpMode.Value); ftdi.RfDataOut(); ftdi.RfDataHigh(); Thread.Sleep(10); data = 0; ftdi.ReadByte(62, ref data); return ((data & 160) == 160); }
public void EntryStandby() { byte data = 0; rfstatus = ucLoRa.RFStatus.Standby; if (ChipVer == ucLoRa.ChipSet.RF92) { ftdi.ReadByte(rfm92.RegOpMode.Address, ref data); rfm92.RegOpMode.Value = (byte)((data & 248) | (byte)rfstatus); ftdi.SendByte(rfm92.RegOpMode.Address, rfm92.RegOpMode.Value); } else { ftdi.ReadByte(rfm96.RegOpMode.Address, ref data); rfm96.RegOpMode.Value = (byte)((data & 248) | (byte)rfstatus); if (nudRadioFreq.Value < new Decimal(525000000)) rfm96.RegOpMode.Value |= 8; else rfm96.RegOpMode.Value &= 247; ftdi.SendByte(rfm96.RegOpMode.Address, rfm96.RegOpMode.Value); } }
private void RxChkTimer_Tick(object sender, EventArgs e) { byte data = 0; if (rfstatus == ucLoRa.RFStatus.Receiver || rfstatus == ucLoRa.RFStatus.Transmitter || rfstatus == ucLoRa.RFStatus.CADdetect) { lock (syncThread) { RxChkTimer.Enabled = false; if (ChipVer == ucLoRa.ChipSet.RF92) ftdi.ReadByte(rfm92.RegIrqFlags.Address, ref data); else ftdi.ReadByte(rfm96.RegIrqFlags.Address, ref data); UpdataLedStatus(data); if (ChipVer == ucLoRa.ChipSet.RF92) { if ((data & 0x40) == 0x40) { ++PktRxCnt; RFM92_RxDone(); UpdataCnt(); if (rbGoCAD.Checked) EntryCAD(); } if ((data & 0x08) == 0x08) { ClearIrq(); EntryStandby(); ++PktTxCnt; tbTxPktCnt.Text = PktTxCnt.ToString(); TxInterTimer.Interval = (int)nudTxDelay.Value; TxInterTimer.Enabled = true; UpdataCnt(); } if ((data & 0x01) == 0x01) { rfstatus = ucLoRa.RFStatus.Receiver; TxInterTimer.Enabled = false; data &= 251; ClearIrq(); EntryRx(); ChkPllLock(); ftdi.RxLedOn(); } if ((data & 0x04) == 0x04) { ClearIrq(); EntrySleep(); ftdi.LedOff(); TxInterTimer.Interval = (int)nudTxDelay.Value; TxInterTimer.Enabled = true; } } else { if ((data & 0x40) == 0x40) { ++PktRxCnt; RFM96_RxDone(); UpdataCnt(); if (rbGoCAD.Checked) EntryCAD(); } if ((data & 0x08) == 0x08) { ClearIrq(); EntryStandby(); ++PktTxCnt; tbTxPktCnt.Text = PktTxCnt.ToString(); TxInterTimer.Interval = (int)nudTxDelay.Value; TxInterTimer.Enabled = true; UpdataCnt(); } if ((data & 0x01) == 0x01) { rfstatus = ucLoRa.RFStatus.Receiver; TxInterTimer.Enabled = false; data &= 251; ClearIrq(); EntryRx(); ChkPllLock(); ftdi.RxLedOn(); } if ((data & 0x04) == 0x04) { ClearIrq(); EntrySleep(); ftdi.LedOff(); TxInterTimer.Interval = (int)nudTxDelay.Value; TxInterTimer.Enabled = true; } } RxChkTimer.Enabled = true; } } else UpdataLedStatus(0); }
public bool EntryRx() { byte data = 0; ConfigRF(); ClearIrq(); rfstatus = ucLoRa.RFStatus.Receiver; if (ChipVer == ucLoRa.ChipSet.RF92) { ftdi.SendByte(rfm92.RegIrqFlagsMask.Address, rfm92.RegIrqFlagsMask.Value); ftdi.ReadByte(rfm92.RegFifoRxBaseAddr.Address, ref data); rfm92.RegFifoAddrPtr.Value = data; ftdi.SendByte(rfm92.RegFifoAddrPtr.Address, rfm92.RegFifoAddrPtr.Value); if (cbImplicit.Checked) { rfm92.RegPayloadLength.Value = (byte)nudImplicitRxLength.Value; ftdi.SendByte(rfm92.RegPayloadLength.Address, rfm92.RegPayloadLength.Value); } if (cbSF.SelectedIndex == 0) { ftdi.ReadByte(49, ref data); ftdi.SendByte(49, (byte)((data & 248) | 5)); ftdi.SendByte(55, 12); } ftdi.ReadByte(rfm92.RegOpMode.Address, ref data); rfm92.RegOpMode.Value = (byte)((data & 248) | (byte)rfstatus); ftdi.SendByte(rfm92.RegOpMode.Address, rfm92.RegOpMode.Value); Thread.Sleep(5); ftdi.ReadByte(rfm92.RegModemStat.Address, ref data); return ((data & 4) == 4); } ftdi.SendByte(rfm96.RegIrqFlagsMask.Address, rfm96.RegIrqFlagsMask.Value); ftdi.ReadByte(rfm96.RegFifoRxBaseAddr.Address, ref data); rfm96.RegFifoAddrPtr.Value = data; ftdi.SendByte(rfm96.RegFifoAddrPtr.Address, rfm96.RegFifoAddrPtr.Value); if (cbImplicit.Checked) { rfm96.RegPayloadLength.Value = (byte)nudImplicitRxLength.Value; ftdi.SendByte(rfm96.RegPayloadLength.Address, rfm96.RegPayloadLength.Value); } if (cbSF.SelectedIndex == 0) { byte data3 = 0; ftdi.ReadByte(49, ref data3); data3 &= 248; data3 |= 5; ftdi.SendByte(49, data3); ftdi.SendByte(55, 12); } ftdi.ReadByte(rfm96.RegOpMode.Address, ref data); rfm96.RegOpMode.Value = (byte)((data & 248) | (byte)rfstatus); if (nudRadioFreq.Value < new Decimal(525000000)) rfm96.RegOpMode.Value |= 8; else rfm96.RegOpMode.Value &= 247; ftdi.SendByte(rfm96.RegOpMode.Address, rfm96.RegOpMode.Value); Thread.Sleep(5); ftdi.ReadByte(rfm96.RegModemStat.Address, ref data); return (data & 4) == 4; }
public void EntryLoRa() { rfstatus = ucLoRa.RFStatus.Sleep; if (ChipVer == ucLoRa.ChipSet.RF92) { rfm92.RegOpMode.Value = (byte)(0x80 | (int)rfstatus); ftdi.SendByte(rfm92.RegOpMode.Address, rfm92.RegOpMode.Value); } else { rfm96.RegOpMode.Value |= (byte)(0x80 | (int)rfstatus); if (nudRadioFreq.Value < new Decimal(525000000)) rfm96.RegOpMode.Value |= 8; else rfm96.RegOpMode.Value &= 0xF7; ftdi.SendByte(rfm96.RegOpMode.Address, rfm96.RegOpMode.Value); } }
private void bSwitch_Click(object sender, EventArgs e) { if (bSwitch.Text == "Start") { bSwitch.Text = "Stop"; rbGoTx.Enabled = false; rbGoRx.Enabled = false; rbGoSleep.Enabled = false; rbGoCAD.Enabled = false; rbGoRxTest.Enabled = false; rbGoTxTest.Enabled = false; PktTxCnt = 0U; PktRxCnt = 0U; tbTxPktCnt.Text = "0"; if (rbGoTx.Checked) { ClearLedStatus(); if (EntryTx()) { ChkPllLock(); rfstatus = ucLoRa.RFStatus.Transmitter; RxChkTimer.Enabled = true; ftdi.TxLedOn(); } else { bSwitch.Text = "Start"; rfstatus = ucLoRa.RFStatus.Standby; rbGoTx.Enabled = true; rbGoRx.Enabled = true; RxChkTimer.Enabled = false; TxInterTimer.Enabled = false; EntryStandby(); ftdi.LedOff(); } } else if (rbGoRx.Checked) { bbPayload.Clear(); rfstatus = ucLoRa.RFStatus.Receiver; ClearLedStatus(); EntryRx(); ChkPllLock(); RxChkTimer.Enabled = true; ftdi.RxLedOn(); } else if (rbGoCAD.Checked) { bbPayload.Clear(); rfstatus = ucLoRa.RFStatus.CADdetect; ClearLedStatus(); EntryCAD(); RxChkTimer.Enabled = true; ftdi.RxLedOn(); } else if (rbGoRxTest.Checked) { bbPayload.Clear(); ClearLedStatus(); EntryRxTest(); RxChkTimer.Enabled = false; ftdi.RxLedOn(); } else if (rbGoTxTest.Checked) { bbPayload.Clear(); ClearLedStatus(); EntryTxTest(); RxChkTimer.Enabled = false; ftdi.TxLedOn(); } else { bbPayload.Clear(); RxChkTimer.Enabled = false; rfstatus = ucLoRa.RFStatus.Sleep; EntrySleep(); ClearLedStatus(); } } else { bSwitch.Text = "Start"; rfstatus = ucLoRa.RFStatus.Standby; rbGoTx.Enabled = true; rbGoRx.Enabled = true; rbGoSleep.Enabled = true; rbGoCAD.Enabled = true; rbGoRxTest.Enabled = true; rbGoTxTest.Enabled = true; RxChkTimer.Enabled = false; TxInterTimer.Enabled = false; EntryStandby(); ftdi.LedOff(); ClearLedStatus(); } }