uC chip interface arduino  0.9.0
A interface for async and neuromrphic IC testing
Loading...
Searching...
No Matches
core_ring_buffer.h
Go to the documentation of this file.
1/*
2 This file is part of the Firmware project to interface with small Async or Neuromorphic chips
3 Copyright (C) 2022-2023 Ole Richter - University of Groningen
4 Copyright (C) 2022 Benjamin Hucko
5
6 This program is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <https://www.gnu.org/licenses/>.
18*/
19
20#ifndef RING_BUFFER_H
21#define RING_BUFFER_H
22#include <cstdint>
23#include "datatypes.h"
24#include <stdlib.h>
25#include <Arduino.h>
26#include "uc_boards.h"
27
28
29
30/*
31 the ring buffer
32*/
33
35extern volatile uint16_t input_ring_buffer_start;
36extern volatile uint16_t input_ring_buffer_next_free;
38extern volatile uint16_t output_ring_buffer_start;
39extern volatile uint16_t output_ring_buffer_next_free;
40extern volatile bool output_buffer_overflow;
41extern volatile bool output_buffer_read;
42
43extern volatile unsigned long offset_time; // offset time is in microseconds, 0 also doubles as no recording
44extern volatile bool read_active;
45
46extern volatile uint16_t loop_runs_without_gpio_interrups;
47extern volatile bool is_realtime;
48
54void set_read_on_request(uint8_t state);
56void add_input_packet(packet_t* input_packet);
59void send_output_ring_buffer_last(bool conf = true);
61void error_message(uint8_t error_header, uint8_t source_header, uint32_t value, uint8_t sub_source_header = 255);
62void error_message(uint8_t error_header, uint8_t source_header);
63void send_pin(uint8_t header, uint8_t id, uint8_t value, bool is_confirmation = false);
64void send_data_i2c(uint8_t header,uint8_t device_address_8, uint8_t register_address, uint8_t value_ms, uint8_t value_ls, bool is_confirmation = false);
65void send_data32(uint8_t header, uint32_t value, bool is_confirmation = false);
66void send_config(uint8_t header, uint8_t config_header, uint8_t value);
67void error_message_bypass_buffer(uint8_t error_header, uint8_t source_header, uint32_t value, uint8_t sub_source_header = 255);
68
69#endif
void send_output_ring_buffer()
void error_message(uint8_t error_header, uint8_t source_header, uint32_t value, uint8_t sub_source_header=255)
void set_read_on_request(uint8_t state)
void error_message_bypass_buffer(uint8_t error_header, uint8_t source_header, uint32_t value, uint8_t sub_source_header=255)
volatile uint16_t output_ring_buffer_next_free
void send_pin(uint8_t header, uint8_t id, uint8_t value, bool is_confirmation=false)
volatile packet_t input_ring_buffer[INPUT_BUFFER_SIZE]
volatile unsigned long offset_time
void send_input_ring_buffer()
volatile uint16_t input_ring_buffer_start
volatile bool output_buffer_read
bool is_output_buffer_not_full()
bool is_input_buffer_not_full()
void send_data32(uint8_t header, uint32_t value, bool is_confirmation=false)
volatile packet_t output_ring_buffer[OUTPUT_BUFFER_SIZE]
volatile uint16_t input_ring_buffer_next_free
void enable_gpio_interrupt()
volatile bool read_active
void send_input_ring_buffer_free_spots()
volatile uint16_t loop_runs_without_gpio_interrups
void send_output_ring_buffer_first()
volatile bool is_realtime
void send_output_ring_buffer_last(bool conf=true)
void send_config(uint8_t header, uint8_t config_header, uint8_t value)
volatile uint16_t output_ring_buffer_start
void send_data_i2c(uint8_t header, uint8_t device_address_8, uint8_t register_address, uint8_t value_ms, uint8_t value_ls, bool is_confirmation=false)
void disable_gpio_interrupt()
volatile bool output_buffer_overflow
void setup_ring_buffer()
void add_input_packet(packet_t *input_packet)
#define OUTPUT_BUFFER_SIZE
Definition: uc_boards.h:108
#define INPUT_BUFFER_SIZE
Definition: uc_boards.h:107