23#include "STAR_ADS126X.h"
27#define PINS_ACTIVE_LAYOUT sense_board_pins::TC_Board
43#define FILTER ADS126X_FIR
44#define DATA_RATE ADS126X_RATE_20
47#define NUM_CHANNELS 10
62 for (
int i = 0; i < cycles; i++) {
70 const uint8_t active_count =
coreState.stored_config.num_sensors;
71 if (active_count == 0)
73 const uint8_t* active_ids =
coreState.stored_config.sensor_ids;
76 for (uint8_t i = 0; i < active_count; i++) {
82 const auto reading =
ads126x.readADC1();
83 const uint32_t
value =
84 reading.checksumValid ?
static_cast<uint32_t
>(reading.value) : 0u;
87 if (
chunk.size() == active_count &&
93 bool also_to_abort_controller,
95 int abort_controller_port) {
101 const uint8_t num_sensors =
dataChunks[0].num_sensors;
104 if (packetSize == 0) {
105 HF_VERBOSE(
"Send FAIL: create_sensor_data_packet returned 0 (n=");
112 coreState.udp.beginPacket(dest_ip, dest_port);
120 unsigned long now =
millis();
124 for (
size_t i = 0; i <
dataChunks.size(); ++i) {
131 for (
const auto& dp :
chunk.datapoints) {
133 HF_VERBOSE(
static_cast<unsigned>(dp.sensor_id));
142 if (also_to_abort_controller) {
143 coreState.udp.beginPacket(abort_controller_ip, abort_controller_port);
180 bool also_to_abort_controller,
182 int abort_controller_port) {
185 abort_controller_ip, abort_controller_port);
190 std::vector<daq::SelfTestResult>& results_out) {
194 results_out.push_back(daq::SelfTestResult{
195 0u,
static_cast<uint8_t
>(adc_result.passed ? 1 : 0)});
199 for (uint8_t i = 0; i < cfg.num_sensors; i++) {
200 uint8_t
id = cfg.sensor_ids[i];
206 results_out.push_back(daq::SelfTestResult{id, pass});
void delayMicroseconds(unsigned int)
#define ADS126X_REF_POS_VDD
#define ADS126X_REF_NEG_VSS
#define ADS126X_REF_POS_INT
#define SENSOR_HOTFIRE_MAX_PACKET_SIZE
Shared sensor hotfire state machine core — PT / TC / LC boards.
#define ADS126X_ASSERT_FILTER_RATE(filter, rate)
std::vector< daq::SensorDataChunkCollection > dataChunks
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]
static unsigned long g_last_sensor_packet_log_ms
static void run_self_test_cb(void *, const SensorHotfire::StoredSensorConfig &cfg, std::vector< daq::SelfTestResult > &results_out)
static void collect_chunk_cb(void *)
static SensorHotfire::Config coreConfig
static void init_adc_cb(void *)
static SensorHotfire::CoreState coreState
static void on_reference_voltage_cb(void *, uint8_t reference_voltage)
static void send_chunks_to_cb(void *, IPAddress dest_ip, int dest_port, bool also_to_abort_controller, IPAddress abort_controller_ip, int abort_controller_port)
static void run_self_test_cb(void *, const SensorHotfire::StoredSensorConfig &cfg, std::vector< daq::SelfTestResult > &results_out)
static void collect_chunk_cb(void *)
static void flush_cycles(int cycles)
static void send_chunks_to_impl(IPAddress dest_ip, int dest_port, bool also_to_abort_controller, IPAddress abort_controller_ip, int abort_controller_port)
static void init_adc_cb(void *)
static void on_reference_voltage_cb(void *, uint8_t reference_voltage)
static void collect_chunk_impl()
static void send_chunks_to_cb(void *, IPAddress dest_ip, int dest_port, bool also_to_abort_controller, IPAddress abort_controller_ip, int abort_controller_port)
#define HF_VERBOSELN(...)
void setup(CoreState &s, const Config &cfg)
void loop(CoreState &s, const Config &cfg)
void sensor_bias_disable(ADS126X &adc)
Call once after the connector loop.
BiasReadResult read_sensor_bias(ADS126X &adc, uint8_t drdy_pin, uint8_t adc_channel, uint8_t aincom, uint8_t settle_cycles=5)
Read one connector with sensor bias already active.
void sensor_bias_enable(ADS126X &adc)
Call once before the connector loop.
AdcSelfTestResult run_adc_self_test(ADS126X &adc, uint8_t drdy_pin, uint8_t original_ref_neg, uint8_t original_ref_pos)
size_t create_sensor_data_packet(const std::vector< SensorDataChunkCollection > &chunks, const uint8_t num_sensors, uint32_t timestamp_ms, uint8_t *buffer, size_t buffer_size)
Creates a complete Sensor Data packet in the provided buffer.
constexpr int getAdcChannel(uint8_t connector, uint8_t pin)
constexpr const Layout & Pins
#define SENSOR_MAX_CHUNKS_BEFORE_SEND
Represents a single data chunk with timestamp and sensor datapoints.