@@ -49,36 +49,68 @@ namespace pimoroni {
49
49
public:
50
50
struct reading {
51
51
// Cycle 1
52
+ uint16_t c1_astatus = 0 ; // (c1_astatus >> 8) & 0b10001111
53
+ // 0b10000000 = saturated
54
+ // 0b00001111 = gain lowest nibble
52
55
uint16_t FZ = 0 ; // 428-480 nm
53
56
uint16_t FY = 0 ; // 534-593 nm
54
57
uint16_t FXL = 0 ; // 593-628 nm
55
58
uint16_t NIR = 0 ; // 849-903 nm
56
59
57
60
uint16_t c1_vis_tl = 0 ; // Visible top-left
58
61
uint16_t c1_vis_br = 0 ; // Visible bottom-right
59
- uint16_t c1_astatus = 0 ; // (c1_astatus >> 8) & 0b10001111
60
- // 0b10000000 = saturated
61
- // 0b00001111 = gain lowest nibble
62
+ // uint16_t c1_fd = 0; // This is where flicker detect *would* be
62
63
63
64
// Cycle 2
65
+ uint16_t c2_astatus = 0 ;
64
66
uint16_t F2 = 0 ; // 408-448 nm
65
67
uint16_t F3 = 0 ; // 448-500 mn
66
68
uint16_t F4 = 0 ; // 500-534 nm
67
69
uint16_t F6 = 0 ; // 618-665 nm
68
70
69
71
uint16_t c2_vis_tl = 0 ;
70
72
uint16_t c2_vis_br = 0 ;
71
- uint16_t c2_astatus = 0 ;
73
+ // uint16_t c2_fd = 0;
72
74
73
75
// Cycle 3
76
+ uint16_t c3_astatus = 0 ;
74
77
uint16_t F1 = 0 ; // 396-408 nm
75
- uint16_t F5 = 0 ; // 531-594 nm
76
78
uint16_t F7 = 0 ; // 685-715 nm
77
79
uint16_t F8 = 0 ; // 715-766 nm
80
+ uint16_t F5 = 0 ; // 531-594 nm
78
81
79
82
uint16_t c3_vis_tl = 0 ;
80
83
uint16_t c3_vis_br = 0 ;
81
- uint16_t c3_astatus = 0 ;
84
+ // uint16_t c3_fd = 0;
85
+
86
+ float gain (uint8_t cycle) {
87
+ uint8_t status = 0 ;
88
+ switch (cycle) {
89
+ case 1 :
90
+ status = c1_astatus & 0xf ;
91
+ break ;
92
+ case 2 :
93
+ status = c2_astatus & 0xf ;
94
+ break ;
95
+ case 3 :
96
+ status = c3_astatus & 0xf ;
97
+ break ;
98
+ }
99
+ return status ? 1 << (status - 1 ) : 0 .5f ;
100
+ }
101
+
102
+ bool saturated (uint8_t cycle) {
103
+ switch (cycle) {
104
+ case 1 :
105
+ return c1_astatus & 0x80 ;
106
+ case 2 :
107
+ return c2_astatus & 0x80 ;
108
+ case 3 :
109
+ return c3_astatus & 0x80 ;
110
+ default :
111
+ return false ;
112
+ }
113
+ }
82
114
};
83
115
84
116
@@ -95,6 +127,8 @@ namespace pimoroni {
95
127
uint8_t read_cycles = 1 ;
96
128
uint8_t ch_count = (uint8_t )channel_count::SIX_CHANNEL;
97
129
130
+ bool running = false ;
131
+
98
132
99
133
// --------------------------------------------------
100
134
// Constructors/Destructor
@@ -120,6 +154,9 @@ namespace pimoroni {
120
154
121
155
void get_version (uint8_t &auxid, uint8_t &revid, uint8_t &hwid);
122
156
157
+ void start_measurement ();
158
+ void stop_measurement ();
159
+
123
160
reading read ();
124
161
125
162
void read_fifo (uint16_t *buf);
0 commit comments