22#include "STAR_ADS126X.h"
26#define PINS_ACTIVE_LAYOUT sense_board_pins::PT_Board
39#define FILTER ADS126X_SINC5
40#define DATA_RATE ADS126X_RATE_38400
57 return (
static_cast<float>(code) * 2.5f) / 2147483648.0f;
61 for (
int i = 0; i < cycles; i++) {
69 const uint8_t active_count =
coreState.stored_config.num_sensors;
70 if (active_count == 0)
72 const uint8_t* active_ids =
coreState.stored_config.sensor_ids;
75 for (uint8_t i = 0; i < active_count; i++) {
81 const auto reading =
ads126x.readADC1();
82 const uint32_t
value =
83 reading.checksumValid ?
static_cast<uint32_t
>(reading.value) : 0u;
86 if (
chunk.size() == active_count &&
92 bool also_to_abort_controller,
94 int abort_controller_port) {
100 const uint8_t num_sensors =
dataChunks[0].num_sensors;
105 coreState.udp.beginPacket(dest_ip, dest_port);
113 unsigned long now =
millis();
117 for (
size_t i = 0; i <
dataChunks.size(); ++i) {
124 for (
const auto& dp :
chunk.datapoints) {
126 HF_VERBOSE(
static_cast<unsigned>(dp.sensor_id));
135 if (also_to_abort_controller) {
136 coreState.udp.beginPacket(abort_controller_ip, abort_controller_port);
175 bool also_to_abort_controller,
177 int abort_controller_port) {
179 abort_controller_ip, abort_controller_port);
189 return "DISCONNECTED";
197 std::vector<daq::SelfTestResult>& results_out) {
201 results_out.push_back(daq::SelfTestResult{
202 0u,
static_cast<uint8_t
>(adc_result.passed ? 1 : 0)});
204 HF_LOGLN(
"=== ADC TDAC Self-Test ===");
213 HF_VERBOSELN(adc_result.checksum_valid ?
"OK" :
"FAIL");
215 HF_LOGLN(adc_result.passed ?
"PASS" :
"FAIL");
219 HF_LOGLN(
"=== Sensor Bias Test ===");
221 for (uint8_t i = 0; i < cfg.num_sensors; i++) {
222 uint8_t
id = cfg.sensor_ids[i];
227 HF_LOGLN(
" channel=INVALID result=FAIL");
228 results_out.push_back(daq::SelfTestResult{id, 0u});
232 ads126x,
Pins.ADC_DRDY_1,
static_cast<uint8_t
>(channel),
244 HF_VERBOSE(bias.checksum_valid ?
"OK" :
"FAIL");
248 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 float convert_code_to_voltage(int32_t code)
static const char * bias_result_str(SensorSelfTest::BiasResult r)
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.
constexpr int32_t ADC_TDAC_EXPECTED_CODE
constexpr int32_t ADC_TDAC_TOLERANCE
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.