Receive Basic
I can configure the device to send messages now I need to configure the SX1276 device to receive them. For my first attempt just simple polling for a message to arrive nothing flash.
//---------------------------------------------------------------------------------
// Copyright (c) August 2018, devMobile Software
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//---------------------------------------------------------------------------------
namespace devMobile.IoT.NetMF.Rfm9X.ReceiveBasic
{
using System;
using System.Text;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
public sealed class Rfm9XDevice
{
private const byte RegisterAddressReadMask = 0X7f;
private const byte RegisterAddressWriteMask = 0x80;
private SPI Rfm9XLoraModem = null;
private OutputPort ResetGpioPin = null;
public Rfm9XDevice(Cpu.Pin chipSelect, Cpu.Pin reset)
{
// Factory reset pin configuration
ResetGpioPin = new OutputPort(Pins.GPIO_PIN_D9, true);
ResetGpioPin.Write(false);
Thread.Sleep(10);
ResetGpioPin.Write(true);
Thread.Sleep(10);
this.Rfm9XLoraModem = new SPI(new SPI.Configuration(chipSelect, false, 0, 0, false, false, 2000, SPI.SPI_module.SPI1));
Thread.Sleep(100);
}
public Byte RegisterReadByte(byte registerAddress)
{
byte[] writeBuffer = new byte[] { registerAddress };
byte[] readBuffer = new byte[1];
Debug.Assert(Rfm9XLoraModem != null);
Rfm9XLoraModem.WriteRead(writeBuffer, readBuffer, 1);
return readBuffer[0];
}
public ushort RegisterReadWord(byte address)
{
byte[] writeBuffer = new byte[] { address &= RegisterAddressReadMask };
byte[] readBuffer = new byte[2];
Debug.Assert(Rfm9XLoraModem != null);
readBuffer[0] = RegisterReadByte(address);
readBuffer[1] = RegisterReadByte(address += 1);
return (ushort)(readBuffer[1] + (readBuffer[0] << 8));
}
public byte[] RegisterRead(byte address, int length)
{
byte[] writeBuffer = new byte[] { address &= RegisterAddressReadMask };
byte[] readBuffer = new byte[length];
Debug.Assert(Rfm9XLoraModem != null);
for (byte index = 0; index < length; index++)
{
readBuffer[index] = RegisterReadByte(address += 1);
}
return readBuffer;
}
public void RegisterWriteByte(byte address, byte value)
{
byte[] writeBuffer = new byte[] { address |= RegisterAddressWriteMask, value };
Debug.Assert(Rfm9XLoraModem != null);
Rfm9XLoraModem.Write(writeBuffer);
}
public void RegisterWriteWord(byte address, ushort value)
{
byte[] valueBytes = BitConverter.GetBytes(value);
byte[] writeBuffer = new byte[] { address |= RegisterAddressWriteMask, valueBytes[0], valueBytes[1] };
Debug.Assert(Rfm9XLoraModem != null);
Rfm9XLoraModem.Write(writeBuffer);
}
public void RegisterWrite(byte address, byte[] bytes)
{
byte[] writeBuffer = new byte[1 + bytes.Length];
Debug.Assert(Rfm9XLoraModem != null);
Array.Copy(bytes, 0, writeBuffer, 1, bytes.Length);
writeBuffer[0] = address |= RegisterAddressWriteMask;
Rfm9XLoraModem.Write(writeBuffer);
}
public void RegisterDump()
{
Debug.Print("---Registers 0x00 thru 0x42---");
for (byte registerIndex = 0; registerIndex 4];
// Mask off the upper 4 bits to get the rest of it.
hexString += hexChars[singlebyte & 0x0F];
return hexString;
}
private static string WordToHexString(ushort singleword)
{
string hexString = string.Empty;
byte[] bytes = BitConverter.GetBytes(singleword);
hexString += ByteToHexString(bytes[1]);
hexString += ByteToHexString(bytes[0]);
return hexString;
}
}
}
In the debug window I could see messages from one of my arduino devices
The thread '' (0x2) has exited with code 0 (0x0). Receive-Wait . . . . . . . . . . . Receive-Message Received 15 byte message HeLoRa World! 0 Receive-Done Receive-Wait . . . . . . . . . . . Receive-Message Received 15 byte message HeLoRa World! 2 Receive-Done Receive-Wait . .
Next steps handling inbound & outbound messages with interrupts, then integrating all the samples into a useful functional V1 library.