forked from mohr/ArduinoIO
		
	timer lib added
This commit is contained in:
		@@ -7,12 +7,13 @@ static const uint8_t COMMAND_TRANSFER_SPI = 1;
 | 
			
		||||
// serial port which is usually also used to flash the Arduino
 | 
			
		||||
// Can be disabled if this output interferes with the usual
 | 
			
		||||
// serial communication logic
 | 
			
		||||
#define PROGRAMMING_OUTPUT      1
 | 
			
		||||
#define PROGRAMMING_OUTPUT          1
 | 
			
		||||
 | 
			
		||||
#define BAUD_RATE               115200
 | 
			
		||||
#define SERIAL_RX_BUFFER_SIZE   256
 | 
			
		||||
#define RING_BUFFER_SIZE        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
 | 
			
		||||
// 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];
 | 
			
		||||
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 {
 | 
			
		||||
 | 
			
		||||
void handleNewData() {
 | 
			
		||||
@@ -79,14 +85,14 @@ void handlePacket(uint8_t *packet, size_t packetLen) {
 | 
			
		||||
    uint16_t crc = Calculate_CRC(packet, packetLen);
 | 
			
		||||
 | 
			
		||||
    if (crc != 0) {
 | 
			
		||||
        Serial.println("invalid Checksum");
 | 
			
		||||
        Serial.println("-AI- Invalid packet checksum detected!");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    uint16_t payloadLen = (packet[2] << 8) | packet[3];
 | 
			
		||||
 | 
			
		||||
    if (payloadLen != packetLen - 6) {
 | 
			
		||||
        Serial.println("invalid len");
 | 
			
		||||
        Serial.println("-AI- Invalid packet length detected!");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -95,7 +101,7 @@ void handlePacket(uint8_t *packet, size_t packetLen) {
 | 
			
		||||
 | 
			
		||||
    switch (command) {
 | 
			
		||||
    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
 | 
			
		||||
        //checksum will be written by sendReply()
 | 
			
		||||
        //check reply:
 | 
			
		||||
@@ -149,6 +155,7 @@ void sendReply(uint8_t *data, size_t len) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//TODO check if this is thread safe by arduino
 | 
			
		||||
// I think it is, see HardwareSerial::available()
 | 
			
		||||
void serialEvent() {
 | 
			
		||||
    //Serial.println(ringBuffer.availableWriteSpace());
 | 
			
		||||
    //uint8_t i = 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								Makefile
									
									
									
									
									
								
							@@ -9,6 +9,7 @@ PSRC += arduino_core/ArduinoCore-avr/libraries/SPI/src/SPI.cpp
 | 
			
		||||
ARDLIBS = 				
 | 
			
		||||
 | 
			
		||||
EXTRAINCDIRS = arduino_core/ArduinoCore-avr/libraries/SPI/src
 | 
			
		||||
EXTRAINCDIRS = arduino_core/src
 | 
			
		||||
 | 
			
		||||
# this line includes the Makefile.base
 | 
			
		||||
include arduino_core/arduino-base.mk
 | 
			
		||||
 
 | 
			
		||||
 Submodule arduino_core updated: 527ec7353d...b9aa89f6d2
									
								
							
							
								
								
									
										15
									
								
								main.cpp
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								main.cpp
									
									
									
									
									
								
							@@ -3,12 +3,16 @@
 | 
			
		||||
#include "IOBoard.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>
 | 
			
		||||
 | 
			
		||||
//SPI is formally a library, so it is not part of the objects compiled
 | 
			
		||||
//from the core and we need to include it explicitly
 | 
			
		||||
#include <SPI.h>
 | 
			
		||||
 | 
			
		||||
auto timer = timer_create_default();
 | 
			
		||||
 | 
			
		||||
void setup() {
 | 
			
		||||
    // Set data direction of selected port to output.
 | 
			
		||||
@@ -28,9 +32,16 @@ void setup() {
 | 
			
		||||
    SPI.begin();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void loop() {
 | 
			
		||||
bool periodicHandler1(void* args) {
 | 
			
		||||
    if(args) {};
 | 
			
		||||
    IOBoard::handleNewData();
 | 
			
		||||
    delay(1000);
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void loop() {
 | 
			
		||||
    timer.tick();
 | 
			
		||||
    timer.every(RING_BUFFER_CHECK_INTVL, periodicHandler1);
 | 
			
		||||
    //delay(1000);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user