mirror of
https://github.com/soypat/lora.git
synced 2026-08-08 04:53:39 +00:00
finish init bare
This commit is contained in:
@@ -24,6 +24,18 @@ func (d *DeviceLoRaBare) Configure(c lora.Config) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, irv := range initRegValues {
|
||||
err = d.setModem(irv.modem)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = d.DL.Write8(irv.addr, irv.val)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return d.setModem(modeFSK)
|
||||
|
||||
// Set up FIFO
|
||||
// We configure so that we can use the entire 256 byte FIFO for either receive
|
||||
// or transmit, but not both at the same time
|
||||
@@ -119,3 +131,29 @@ func (d *DeviceLoRaBare) Read(addr uint8) uint8 {
|
||||
val, _ := d.DL.read8(addr)
|
||||
return val
|
||||
}
|
||||
|
||||
const modeFSK, modeLoRa = 0, 1
|
||||
|
||||
var initRegValues = []struct {
|
||||
modem uint8
|
||||
addr uint8
|
||||
val uint8
|
||||
}{
|
||||
{modeFSK, regLNA, 0x23},
|
||||
{modeFSK, regRXConfig, 0x1E},
|
||||
{modeFSK, regRSSIConfig, 0xD2},
|
||||
{modeFSK, regAFCFEI, 0x01},
|
||||
{modeFSK, regPreambleDetect, 0xAA},
|
||||
{modeFSK, regOsc, 0x07},
|
||||
{modeFSK, regSyncConfig, 0x12},
|
||||
{modeFSK, regSyncValue1, 0xC1},
|
||||
{modeFSK, regSyncValue2, 0x94},
|
||||
{modeFSK, regSyncValue3, 0xC1},
|
||||
{modeFSK, regPacketConfig1, 0xD8},
|
||||
{modeFSK, regFifoThresh, 0x8F},
|
||||
{modeFSK, regImageCal, 0x02},
|
||||
{modeFSK, regDIO_MAPPING_1, 0x00},
|
||||
{modeFSK, regDIO_MAPPING_2, 0x30},
|
||||
{modeLoRa, regDETECTION_OPTIMIZE, 0x43},
|
||||
{modeLoRa, regMAX_PAYLOAD_LENGTH, 0x40},
|
||||
}
|
||||
|
||||
+19
-3
@@ -160,13 +160,29 @@ const (
|
||||
|
||||
// FSK/OOK registers.
|
||||
const (
|
||||
regImageCal = 0x3b
|
||||
regTemp = 0x3c
|
||||
|
||||
regImageCal = 0x3b
|
||||
regTemp = 0x3c
|
||||
regRXConfig = 0x0D
|
||||
regRSSIConfig = 0x0E
|
||||
regAFCFEI = 0x1a
|
||||
regPreambleDetect = 0x1f
|
||||
regOsc = 0x24
|
||||
regSyncConfig = 0x27
|
||||
regSyncValue1 = 0x28
|
||||
regSyncValue2 = 0x29
|
||||
regSyncValue3 = 0x2A
|
||||
regSyncValue4 = 0x2B
|
||||
regSyncValue5 = 0x2C
|
||||
regSyncValue6 = 0x2D
|
||||
regSyncValue7 = 0x2E
|
||||
regSyncValue8 = 0x2F
|
||||
regPacketConfig1 = 0x30
|
||||
regFifoThresh = 0x35
|
||||
// Values that would be read from regTemp:
|
||||
lowTempVal uint8 = 64 // -40 C
|
||||
medTempVal uint8 = 245 // +25 C
|
||||
hiTempVal uint8 = 181 // +85 C
|
||||
|
||||
)
|
||||
|
||||
var bandwidths = [bw500_0 + 1]lora.Frequency{
|
||||
|
||||
@@ -1170,3 +1170,21 @@ func (d *DeviceLoRa) imageCal(deadline time.Time) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *DeviceLoRaBare) setModem(mode uint8) error {
|
||||
d.SetOpModeBare(OpSleep)
|
||||
const loramask uint8 = 0x7f
|
||||
switch mode {
|
||||
case modeFSK:
|
||||
d.DL.writeMasked8(regOP_MODE, ^loramask, 0)
|
||||
d.DL.Write8(regDIO_MAPPING_1, 0)
|
||||
d.DL.Write8(regDIO_MAPPING_2, 0x30)
|
||||
case modeLoRa:
|
||||
d.DL.writeMasked8(regOP_MODE, (^loramask)|uint8(opLoRaBit), byte(opLoRaBit))
|
||||
d.DL.Write8(regDIO_MAPPING_1, 0)
|
||||
d.DL.Write8(regDIO_MAPPING_2, 0)
|
||||
default:
|
||||
return errors.New("invalid modem")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user