STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
connector_adc_map.h
Go to the documentation of this file.
1
#pragma once
2
3
#include <cstddef>
4
#include <cstdint>
5
6
#include "STAR_ADS126X.h"
7
#include "
sense_board_pins.h
"
8
9
struct
ConnectorAdcMapEntry
{
10
uint8_t
connector
;
// e.g. 1 = J1, 2 = J2
11
uint8_t
pin
;
// e.g. 1 = Jx-1, 2 = Jx-2
12
uint8_t
adc
;
// e.g. ADS126X_AIN0 = 0b0000
13
uint8_t
adc_index
;
// 1 = primary ADC, 2 = secondary ADC, etc.
14
};
15
16
struct
AdcSelection
{
17
int
channel
;
18
int
adc_index
;
19
};
20
21
struct
AdcLayout
{
22
const
ConnectorAdcMapEntry
*
table
;
23
std::size_t
size
;
24
25
constexpr
AdcSelection
get
(uint8_t connector, uint8_t pin)
const
{
26
for
(std::size_t i = 0; i <
size
; ++i) {
27
const
auto
& e =
table
[i];
28
if
(e.connector == connector && e.pin == pin)
29
return
{e.adc, e.adc_index};
// raw integer channel + adc index
30
}
31
return
{-1, -1};
// invalid
32
}
33
};
34
35
namespace
sense_board_pins
{
36
37
// PT Board
38
inline
constexpr
ConnectorAdcMapEntry
PT_Board_AdcEntries
[] = {
39
// connector, pin, adc channel, adc index
40
{1, 1,
ADS126X_AIN0
, 1}, {2, 1,
ADS126X_AIN1
, 1}, {3, 1,
ADS126X_AIN7
, 1},
41
{4, 1,
ADS126X_AIN5
, 1}, {5, 1,
ADS126X_AIN9
, 1}, {6, 1,
ADS126X_AIN2
, 1},
42
{7, 1,
ADS126X_AIN3
, 1}, {8, 1,
ADS126X_AIN4
, 1}, {9, 1,
ADS126X_AIN6
, 1},
43
{10, 1,
ADS126X_AIN8
, 1},
44
};
45
46
inline
constexpr
AdcLayout
PT_Board_Adc
= {
47
PT_Board_AdcEntries
,
48
sizeof
(
PT_Board_AdcEntries
) /
sizeof
(
PT_Board_AdcEntries
[0]),
49
};
50
51
// LC Board
52
inline
constexpr
ConnectorAdcMapEntry
LC_Board_AdcEntries
[] = {
53
// connector, pin, adc channel, adc index
54
{1, 1,
ADS126X_AIN0
, 1}, {1, 2,
ADS126X_AIN1
, 1}, {2, 1,
ADS126X_AIN4
, 1},
55
{2, 2,
ADS126X_AIN5
, 1}, {3, 1,
ADS126X_AIN8
, 1}, {3, 2,
ADS126X_AIN9
, 1},
56
{6, 1,
ADS126X_AIN2
, 1}, {6, 2,
ADS126X_AIN3
, 1}, {7, 1,
ADS126X_AIN6
, 1},
57
{7, 2,
ADS126X_AIN7
, 1},
58
59
{4, 1,
ADS126X_AIN2
, 2}, {4, 2,
ADS126X_AIN3
, 2}, {5, 1,
ADS126X_AIN6
, 2},
60
{5, 2,
ADS126X_AIN7
, 2}, {8, 1,
ADS126X_AIN0
, 2}, {8, 2,
ADS126X_AIN1
, 2},
61
{9, 1,
ADS126X_AIN4
, 2}, {9, 2,
ADS126X_AIN5
, 2}, {10, 1,
ADS126X_AIN8
, 2},
62
{10, 2,
ADS126X_AIN9
, 2},
63
};
64
65
inline
constexpr
AdcLayout
LC_Board_Adc
= {
66
LC_Board_AdcEntries
,
67
sizeof
(
LC_Board_AdcEntries
) /
sizeof
(
LC_Board_AdcEntries
[0]),
68
};
69
70
// TC Board
71
inline
constexpr
ConnectorAdcMapEntry
TC_Board_AdcEntries
[] = {
72
// connector, pin, adc channel, adc index
73
{1, 1,
ADS126X_AIN0
, 1}, {2, 1,
ADS126X_AIN2
, 1}, {3, 1,
ADS126X_AIN4
, 1},
74
{4, 1,
ADS126X_AIN6
, 1}, {5, 1,
ADS126X_AIN8
, 1}, {6, 1,
ADS126X_AIN1
, 1},
75
{7, 1,
ADS126X_AIN3
, 1}, {8, 1,
ADS126X_AIN5
, 1}, {9, 1,
ADS126X_AIN7
, 1},
76
{10, 1,
ADS126X_AIN9
, 1},
77
};
78
79
inline
constexpr
AdcLayout
TC_Board_Adc
= {
80
TC_Board_AdcEntries
,
81
sizeof
(
TC_Board_AdcEntries
) /
sizeof
(
TC_Board_AdcEntries
[0]),
82
};
83
84
// RTD Board
85
inline
constexpr
ConnectorAdcMapEntry
RTD_Board_AdcEntries
[] = {
86
// connector, pin, adc channel, adc index
87
{1, 1,
ADS126X_AIN2
, 1}, {1, 2,
ADS126X_AIN3
, 1},
88
{1, 101,
ADS126X_AIN1
, 1},
// IDAC1, corresponding to the pin 1
89
{1, 102,
ADS126X_AIN4
, 1},
// IDAC2, corresponding to the pin 2
90
91
{2, 1,
ADS126X_AIN6
, 1}, {2, 2,
ADS126X_AIN7
, 1},
92
{2, 101,
ADS126X_AIN5
, 1},
// IDAC1
93
{2, 102,
ADS126X_AIN8
, 1},
// IDAC2
94
95
{3, 1,
ADS126X_AIN2
, 2}, {3, 2,
ADS126X_AIN3
, 2},
96
{3, 101,
ADS126X_AIN1
, 2},
// IDAC1
97
{3, 102,
ADS126X_AIN4
, 2},
// IDAC2
98
99
{4, 1,
ADS126X_AIN6
, 2}, {4, 2,
ADS126X_AIN7
, 2},
100
{4, 101,
ADS126X_AIN5
, 2},
// IDAC1
101
{4, 102,
ADS126X_AIN8
, 2},
// IDAC2
102
};
103
104
inline
constexpr
AdcLayout
RTD_Board_Adc
= {
105
RTD_Board_AdcEntries
,
106
sizeof
(
RTD_Board_AdcEntries
) /
sizeof
(
RTD_Board_AdcEntries
[0]),
107
};
108
109
// Set to a default value, if it was forgotten
110
#ifndef PINS_ACTIVE_LAYOUT
111
#define PINS_ACTIVE_LAYOUT PT_Board
112
#endif
113
114
// Some ChatGPT bullshit to let us reuse the "PINS_ACTIVE_LAYOUT" macro
115
#define ADC_LAYOUT_CAT_IMPL(a, b) a##b
116
#define ADC_LAYOUT_CAT(a, b) ADC_LAYOUT_CAT_IMPL(a, b)
117
#define ADC_LAYOUT_FROM_PINS(layout_sym) ADC_LAYOUT_CAT(layout_sym, _Adc)
118
inline
constexpr
const
AdcLayout
&
AdcMap
=
119
ADC_LAYOUT_FROM_PINS
(
PINS_ACTIVE_LAYOUT
);
120
121
// Function to get adc channel (-1 if invalid)
122
constexpr
int
getAdcChannel
(uint8_t connector, uint8_t pin) {
123
// To avoid someone trying to get the IDAC intended pins on the
124
// RTD board as ADC channels that should be read
125
if
(pin > 100) {
126
return
-1;
127
}
128
129
return
AdcMap
.get(connector, pin).channel;
130
}
131
132
// Function to get adc channel for idac intended pins (-1 if invalid)
133
constexpr
int
getIdacChannel
(uint8_t connector, uint8_t pin) {
134
// Look there are reasons we did this but they are hard to explain
135
// We set the pin number for the IDAC channels to be + 100 since it was the
136
// cleanest way
137
return
AdcMap
.get(connector, pin + 100).channel;
138
}
139
140
// Function to get adc index (1-based, -1 if invalid)
141
constexpr
int
getAdcIndex
(uint8_t connector, uint8_t pin) {
142
return
AdcMap
.get(connector, pin).adc_index;
143
}
144
145
}
// namespace sense_board_pins
ADS126X_AIN4
#define ADS126X_AIN4
Definition
STAR_ADS126X_definitions.h:146
ADS126X_AIN0
#define ADS126X_AIN0
Definition
STAR_ADS126X_definitions.h:142
ADS126X_AIN8
#define ADS126X_AIN8
Definition
STAR_ADS126X_definitions.h:150
ADS126X_AIN2
#define ADS126X_AIN2
Definition
STAR_ADS126X_definitions.h:144
ADS126X_AIN6
#define ADS126X_AIN6
Definition
STAR_ADS126X_definitions.h:148
ADS126X_AIN1
#define ADS126X_AIN1
Definition
STAR_ADS126X_definitions.h:143
ADS126X_AIN9
#define ADS126X_AIN9
Definition
STAR_ADS126X_definitions.h:151
ADS126X_AIN7
#define ADS126X_AIN7
Definition
STAR_ADS126X_definitions.h:149
ADS126X_AIN5
#define ADS126X_AIN5
Definition
STAR_ADS126X_definitions.h:147
ADS126X_AIN3
#define ADS126X_AIN3
Definition
STAR_ADS126X_definitions.h:145
ADC_LAYOUT_FROM_PINS
#define ADC_LAYOUT_FROM_PINS(layout_sym)
Definition
connector_adc_map.h:117
PINS_ACTIVE_LAYOUT
#define PINS_ACTIVE_LAYOUT
Definition
main.cpp:13
sense_board_pins
Definition
connector_adc_map.h:35
sense_board_pins::AdcMap
constexpr const AdcLayout & AdcMap
Definition
connector_adc_map.h:118
sense_board_pins::PT_Board_AdcEntries
constexpr ConnectorAdcMapEntry PT_Board_AdcEntries[]
Definition
connector_adc_map.h:38
sense_board_pins::LC_Board_Adc
constexpr AdcLayout LC_Board_Adc
Definition
connector_adc_map.h:65
sense_board_pins::TC_Board_Adc
constexpr AdcLayout TC_Board_Adc
Definition
connector_adc_map.h:79
sense_board_pins::getAdcIndex
constexpr int getAdcIndex(uint8_t connector, uint8_t pin)
Definition
connector_adc_map.h:141
sense_board_pins::TC_Board_AdcEntries
constexpr ConnectorAdcMapEntry TC_Board_AdcEntries[]
Definition
connector_adc_map.h:71
sense_board_pins::LC_Board_AdcEntries
constexpr ConnectorAdcMapEntry LC_Board_AdcEntries[]
Definition
connector_adc_map.h:52
sense_board_pins::PT_Board_Adc
constexpr AdcLayout PT_Board_Adc
Definition
connector_adc_map.h:46
sense_board_pins::getIdacChannel
constexpr int getIdacChannel(uint8_t connector, uint8_t pin)
Definition
connector_adc_map.h:133
sense_board_pins::getAdcChannel
constexpr int getAdcChannel(uint8_t connector, uint8_t pin)
Definition
connector_adc_map.h:122
sense_board_pins::RTD_Board_Adc
constexpr AdcLayout RTD_Board_Adc
Definition
connector_adc_map.h:104
sense_board_pins::RTD_Board_AdcEntries
constexpr ConnectorAdcMapEntry RTD_Board_AdcEntries[]
Definition
connector_adc_map.h:85
sense_board_pins.h
AdcLayout
Definition
connector_adc_map.h:21
AdcLayout::table
const ConnectorAdcMapEntry * table
Definition
connector_adc_map.h:22
AdcLayout::size
std::size_t size
Definition
connector_adc_map.h:23
AdcLayout::get
constexpr AdcSelection get(uint8_t connector, uint8_t pin) const
Definition
connector_adc_map.h:25
AdcSelection
Definition
connector_adc_map.h:16
AdcSelection::channel
int channel
Definition
connector_adc_map.h:17
AdcSelection::adc_index
int adc_index
Definition
connector_adc_map.h:18
ConnectorAdcMapEntry
Definition
connector_adc_map.h:9
ConnectorAdcMapEntry::pin
uint8_t pin
Definition
connector_adc_map.h:11
ConnectorAdcMapEntry::adc
uint8_t adc
Definition
connector_adc_map.h:12
ConnectorAdcMapEntry::adc_index
uint8_t adc_index
Definition
connector_adc_map.h:13
ConnectorAdcMapEntry::connector
uint8_t connector
Definition
connector_adc_map.h:10
firmware
common
connector_adc_map.h
Generated by
1.15.0