Created
August 31, 2023 22:05
-
-
Save julianblanco/98252df1f1f44fd49bc70949d5d0ad54 to your computer and use it in GitHub Desktop.
buffer data coming over serial and write out over single pair ethernet to another board
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include </Users/jules/Documents/Arduino/libraries/CircularBuffer/CircularBuffer.h> | |
// #include <CircularBuffer.h>// issue with name conflict with core libary, use full path to library instead | |
#include "SparkFun_SinglePairEthernet.h" | |
CircularBuffer<char, 1024> buffer; | |
char outputString[1024]; | |
SinglePairEthernet adin1110; | |
int msg = 0; | |
const int NUM_MSGS = 8; | |
const int MAX_MSG_SIZE = 200; | |
byte deviceMAC[6] = {0x00, 0xE0, 0x22, 0xFE, 0xDA, 0xC9}; | |
byte destinationMAC[6] = {0x00, 0xE0, 0x22, 0xFE, 0xDA, 0xCA}; | |
static void rxCallback(byte * data, int dataLen, byte * senderMac) | |
{ | |
Serial.print("Recieved:\t"); | |
Serial.println((char *)data); //This is ok since we know they are all null terminated strings | |
if(!adin1110.indenticalMacs(senderMac, destinationMAC)) | |
{ | |
Serial.print("From an unknown source: "); | |
for(int i = 0; i < 6; i++) | |
{ | |
Serial.print(senderMac[i]); | |
Serial.print(" "); | |
} | |
} | |
Serial.println(); | |
} | |
void setup() { | |
Serial.begin(115200); | |
Serial.println("Single Pair Ethernet - Example 1a Basic Send and Recieve"); | |
/* Start up adin1110 */ | |
if (!adin1110.begin(deviceMAC)) | |
{ | |
Serial.print("Failed to connect to ADIN1110 MACPHY. Make sure board is connected and pins are defined for target."); | |
while(1); //If we can't connect just stop here | |
} | |
Serial.println("Connected to ADIN1110 MACPHY"); | |
/* Set up callback, to control what we do when data is recieved */ | |
adin1110.setRxCallback(rxCallback); | |
/* Wait for link to be established */ | |
Serial.println("Device Configured, waiting for connection..."); | |
while (adin1110.getLinkStatus() != true); | |
// put your setup code here, to run once: | |
} | |
String temp; | |
void loop() { | |
while (Serial.available()) { | |
buffer.push(Serial.read()); | |
} | |
if(!(buffer.isEmpty())) | |
{ | |
if(adin1110.getLinkStatus()) | |
{ | |
while(!buffer.isEmpty()) | |
{ | |
temp = temp += buffer.shift(); | |
} | |
Serial.print("Sending:\t"); | |
Serial.println(temp); //This is ok since we know they are all null terminated strings | |
temp.toCharArray(outputString, sizeof(outputString)); | |
adin1110.sendData((byte *)outputString, sizeof(outputString), destinationMAC); | |
temp = ""; | |
} | |
else | |
{ | |
Serial.println("Waiting for link to resume sending"); | |
} | |
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); | |
delay(5000); | |
} | |
// put your main code here, to run repeatedly: | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment