24#include "STAR_ADS126X.h"
28#define PINS_ACTIVE_LAYOUT sense_board_pins::RTD_Board
45#define FILTER ADS126X_FIR
46#define DATA_RATE ADS126X_RATE_20
48#define NUM_CONNECTORS 4
79 adc.setIDAC1Pin(
static_cast<uint8_t
>(idac1));
83 adc.setIDAC2Pin(
static_cast<uint8_t
>(idac2));
89 const uint8_t active_count =
coreState.stored_config.num_sensors;
90 if (active_count == 0)
92 const uint8_t* active_ids =
coreState.stored_config.sensor_ids;
95 for (uint8_t i = 0; i < active_count; i++) {
96 const uint8_t conn = active_ids[i];
103 const auto reading =
adc.readADC1();
104 const uint32_t
value =
105 reading.checksumValid ?
static_cast<uint32_t
>(reading.value) : 0u;
108 if (
chunk.size() == active_count &&
114 bool also_to_abort_controller,
116 int abort_controller_port) {
122 const uint8_t num_sensors =
dataChunks[0].num_sensors;
127 coreState.udp.beginPacket(dest_ip, dest_port);
135 unsigned long now =
millis();
139 for (
size_t i = 0; i <
dataChunks.size(); ++i) {
146 for (
const auto& dp :
chunk.datapoints) {
148 HF_VERBOSE(
static_cast<unsigned>(dp.sensor_id));
157 if (also_to_abort_controller) {
158 coreState.udp.beginPacket(abort_controller_ip, abort_controller_port);
177 if (
Pins.ADC_RESET_1 >= 0) {
184 if (
Pins.ADC_START_1 >= 0) {
188 if (
Pins.ADC_RESET_2 >= 0) {
195 if (
Pins.ADC_START_2 >= 0) {
239 bool also_to_abort_controller,
241 int abort_controller_port) {
243 abort_controller_ip, abort_controller_port);
248 std::vector<daq::SelfTestResult>& results_out) {
252 results_out.push_back(daq::SelfTestResult{
253 0u,
static_cast<uint8_t
>(adc1_result.passed ? 1 : 0)});
257 results_out.push_back(daq::SelfTestResult{
258 100u,
static_cast<uint8_t
>(adc2_result.passed ? 1 : 0)});
264 for (uint8_t i = 0; i < cfg.num_sensors; i++) {
265 uint8_t
id = cfg.sensor_ids[i];
268 if (ch1 < 0 || ch2 < 0)
275 static_cast<uint8_t
>(ch1),
276 static_cast<uint8_t
>(ch2));
279 results_out.push_back(daq::SelfTestResult{id, pass});
void delayMicroseconds(unsigned int)
void digitalWrite(int, int)
#define ADS126X_REF_POS_VDD
#define ADS126X_REF_NEG_VSS
#define ADS126X_REF_POS_INT
#define ADS126X_IDAC_MAG_1000
#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 set_connector_rtd(uint8_t connector_id)
static void run_self_test_cb(void *, const SensorHotfire::StoredSensorConfig &cfg, std::vector< daq::SelfTestResult > &results_out)
static int drdy_for_connector(uint8_t connector_id)
static void collect_chunk_cb(void *)
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 ADS126X & adc_for_connector(uint8_t connector_id)
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)
static STAR_MCP3201 adc(MCP3201_CS_PIN, &mcp_spi)
#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 getAdcIndex(uint8_t connector, uint8_t pin)
constexpr int getIdacChannel(uint8_t connector, uint8_t pin)
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.