forked from mohr/ArduinoIO
timer lib added
This commit is contained in:
parent
325f7c0bca
commit
48de9591f7
@ -13,6 +13,7 @@ static const uint8_t COMMAND_TRANSFER_SPI = 1;
|
|||||||
#define SERIAL_RX_BUFFER_SIZE 256
|
#define SERIAL_RX_BUFFER_SIZE 256
|
||||||
#define RING_BUFFER_SIZE 100
|
#define RING_BUFFER_SIZE 100
|
||||||
#define MAX_PACKET_LENGTH 100
|
#define MAX_PACKET_LENGTH 100
|
||||||
|
#define RING_BUFFER_CHECK_INTVL 1000
|
||||||
|
|
||||||
// Define which port to use for the SPI Chip Select by using the register
|
// Define which port to use for the SPI Chip Select by using the register
|
||||||
// definitions. The data direction register is assigned as well.
|
// definitions. The data direction register is assigned as well.
|
||||||
|
13
IOBoard.cpp
13
IOBoard.cpp
@ -10,6 +10,12 @@ SimpleRingBuffer ringBuffer(RING_BUFFER_SIZE, true);
|
|||||||
uint8_t rawData[2 * RING_BUFFER_SIZE];
|
uint8_t rawData[2 * RING_BUFFER_SIZE];
|
||||||
size_t rawDataSize = 0;
|
size_t rawDataSize = 0;
|
||||||
|
|
||||||
|
#define PACKET_COMMAND_LENGTH 1
|
||||||
|
#define PACKET_ADDRESS_LENGTH 1
|
||||||
|
#define PACKET_SIZE_FIELD_LENGTH 2
|
||||||
|
|
||||||
|
#define PACKET_HEADER_LENGTH 4
|
||||||
|
|
||||||
namespace IOBoard {
|
namespace IOBoard {
|
||||||
|
|
||||||
void handleNewData() {
|
void handleNewData() {
|
||||||
@ -79,14 +85,14 @@ void handlePacket(uint8_t *packet, size_t packetLen) {
|
|||||||
uint16_t crc = Calculate_CRC(packet, packetLen);
|
uint16_t crc = Calculate_CRC(packet, packetLen);
|
||||||
|
|
||||||
if (crc != 0) {
|
if (crc != 0) {
|
||||||
Serial.println("invalid Checksum");
|
Serial.println("-AI- Invalid packet checksum detected!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t payloadLen = (packet[2] << 8) | packet[3];
|
uint16_t payloadLen = (packet[2] << 8) | packet[3];
|
||||||
|
|
||||||
if (payloadLen != packetLen - 6) {
|
if (payloadLen != packetLen - 6) {
|
||||||
Serial.println("invalid len");
|
Serial.println("-AI- Invalid packet length detected!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,7 +101,7 @@ void handlePacket(uint8_t *packet, size_t packetLen) {
|
|||||||
|
|
||||||
switch (command) {
|
switch (command) {
|
||||||
case COMMAND_TRANSFER_SPI:
|
case COMMAND_TRANSFER_SPI:
|
||||||
transferSPI(address, packet + 4, payloadLen);
|
transferSPI(address, packet + PACKET_HEADER_LENGTH, payloadLen);
|
||||||
//echo the data back, no need to change the header fields, they are the same
|
//echo the data back, no need to change the header fields, they are the same
|
||||||
//checksum will be written by sendReply()
|
//checksum will be written by sendReply()
|
||||||
//check reply:
|
//check reply:
|
||||||
@ -149,6 +155,7 @@ void sendReply(uint8_t *data, size_t len) {
|
|||||||
|
|
||||||
|
|
||||||
//TODO check if this is thread safe by arduino
|
//TODO check if this is thread safe by arduino
|
||||||
|
// I think it is, see HardwareSerial::available()
|
||||||
void serialEvent() {
|
void serialEvent() {
|
||||||
//Serial.println(ringBuffer.availableWriteSpace());
|
//Serial.println(ringBuffer.availableWriteSpace());
|
||||||
//uint8_t i = 0;
|
//uint8_t i = 0;
|
||||||
|
1
Makefile
1
Makefile
@ -9,6 +9,7 @@ PSRC += arduino_core/ArduinoCore-avr/libraries/SPI/src/SPI.cpp
|
|||||||
ARDLIBS =
|
ARDLIBS =
|
||||||
|
|
||||||
EXTRAINCDIRS = arduino_core/ArduinoCore-avr/libraries/SPI/src
|
EXTRAINCDIRS = arduino_core/ArduinoCore-avr/libraries/SPI/src
|
||||||
|
EXTRAINCDIRS = arduino_core/src
|
||||||
|
|
||||||
# this line includes the Makefile.base
|
# this line includes the Makefile.base
|
||||||
include arduino_core/arduino-base.mk
|
include arduino_core/arduino-base.mk
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 527ec7353dc51c35168c2b77e7981e6329323f89
|
Subproject commit b9aa89f6d2393a59b1103870b7fc2f95f1d8ba76
|
15
main.cpp
15
main.cpp
@ -3,12 +3,16 @@
|
|||||||
#include "IOBoard.h"
|
#include "IOBoard.h"
|
||||||
#include "ArduinoConfig.h"
|
#include "ArduinoConfig.h"
|
||||||
|
|
||||||
|
// TODO: Copy this header into arduino_core, so it can be used without
|
||||||
|
// Eclipse Sloeber as well.
|
||||||
|
#include <arduino-timer.h>
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
|
|
||||||
//SPI is formally a library, so it is not part of the objects compiled
|
//SPI is formally a library, so it is not part of the objects compiled
|
||||||
//from the core and we need to include it explicitly
|
//from the core and we need to include it explicitly
|
||||||
#include <SPI.h>
|
#include <SPI.h>
|
||||||
|
|
||||||
|
auto timer = timer_create_default();
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
// Set data direction of selected port to output.
|
// Set data direction of selected port to output.
|
||||||
@ -28,9 +32,16 @@ void setup() {
|
|||||||
SPI.begin();
|
SPI.begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
bool periodicHandler1(void* args) {
|
||||||
|
if(args) {};
|
||||||
IOBoard::handleNewData();
|
IOBoard::handleNewData();
|
||||||
delay(1000);
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
timer.tick();
|
||||||
|
timer.every(RING_BUFFER_CHECK_INTVL, periodicHandler1);
|
||||||
|
//delay(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user