@@ -57,6 +57,10 @@ SDPSensor::SDPSensor(uint8_t i2c_addr, i2c_port_t i2c_port) {
5757 this ->i2c_port = i2c_port;
5858 this ->pressureScale = 0 ; // will be read & set in the begin()
5959 this ->initialized = false ;
60+ this ->modelNumber = 0 ;
61+ this ->rangePa = 0 ;
62+ this ->productId = 0 ;
63+ this ->serialNumber = 0 ;
6064}
6165
6266
@@ -125,65 +129,64 @@ esp_err_t SDPSensor::begin() {
125129 }
126130
127131 /*
128- Read product id and serial number.
129- Data Format:
132+ Read product id and serial number.
133+ Data Format:
130134 | Byte | 0 | 1 | 2 | 3 | 4 | 5 | 6...17 |
131135 | Value | pid1 |CRC| pid2 |CRC| serial |
132- */
136+ */
133137 err = i2c_master_read_from_device (i2c_port, i2c_addr, read_buffer, 18 , ticks_to_wait_long);
134138 if (err != ESP_OK) {
135139 logInitFailed (err);
136140 return err;
137141 }
138142
139- const uint32_t pid = (read_buffer[0 ] << 24 ) | (read_buffer[1 ] << 16 )
143+ productId = (read_buffer[0 ] << 24 ) | (read_buffer[1 ] << 16 )
140144 | (read_buffer[3 ] << 8 ) | (read_buffer[4 ] << 0 );
141145
142- uint64_t serial_num = 0 ;
143- uint64_t *pserial = &serial_num;
146+ uint64_t *pserial = &serialNumber;
144147 for (int i = 6 ; i < 18 ; i++) {
145- if ((i + 1 ) % 3 == 0 ) continue ; // CRC
148+ if ((i + 1 ) % 3 == 0 ) continue ; // CRC
146149 *pserial <<= 8 ;
147150 *pserial |= (uint64_t ) read_buffer[i];
148151 }
149152
150- uint32_t model_number, range_pa ;
151- switch (pid & 0xFFFFFF00 ) {
153+ modelNumber, rangePa ;
154+ switch (productId & 0xFFFFFF00 ) {
152155 case SPD31_500_PID:
153- model_number = 31 ;
154- range_pa = 500 ;
156+ modelNumber = 31 ;
157+ rangePa = 500 ;
155158 break ;
156159 case SDP32_125_PID:
157- model_number = 32 ;
158- range_pa = 125 ;
160+ modelNumber = 32 ;
161+ rangePa = 125 ;
159162 break ;
160163 case SDP800_500_PID:
161- model_number = 800 ;
162- range_pa = 500 ;
164+ modelNumber = 800 ;
165+ rangePa = 500 ;
163166 break ;
164167 case SDP810_500_PID:
165- model_number = 810 ;
166- range_pa = 500 ;
168+ modelNumber = 810 ;
169+ rangePa = 500 ;
167170 break ;
168171 case SDP801_500_PID:
169- model_number = 801 ;
170- range_pa = 500 ;
172+ modelNumber = 801 ;
173+ rangePa = 500 ;
171174 break ;
172175 case SDP811_500_PID:
173- model_number = 811 ;
174- range_pa = 500 ;
176+ modelNumber = 811 ;
177+ rangePa = 500 ;
175178 break ;
176179 case SDP800_125_PID:
177- model_number = 800 ;
178- range_pa = 125 ;
180+ modelNumber = 800 ;
181+ rangePa = 125 ;
179182 break ;
180183 case SDP810_125_PID:
181- model_number = 810 ;
182- range_pa = 125 ;
184+ modelNumber = 810 ;
185+ rangePa = 125 ;
183186 break ;
184187 }
185188
186- ESP_LOGI (TAG_SDPSENSOR, " Initialized SDP%d %dPa sensor (PID=0x%08X), serial=0x%016llX" , model_number, range_pa, pid, serial_num );
189+ ESP_LOGI (TAG_SDPSENSOR, " Initialized SDP%d %dPa sensor (PID=0x%08X), serial=0x%016llX" , modelNumber, rangePa, productId, serialNumber );
187190
188191 err = i2c_master_write_to_device (i2c_port, i2c_addr, cmd_measure, SDPSENSOR_I2C_CMD_LEN, ticks_to_wait_long);
189192 if (err != ESP_OK) {
@@ -201,14 +204,22 @@ esp_err_t SDPSensor::begin() {
201204
202205 this ->pressureScale = ((int16_t ) read_buffer[6 ]) << 8 | read_buffer[7 ];
203206
204- ESP_LOGI (TAG_SDPSENSOR, " SDP%d pressure scale: %d" , model_number , this ->pressureScale );
207+ ESP_LOGI (TAG_SDPSENSOR, " SDP%d pressure scale: %d" , modelNumber , this ->pressureScale );
205208
206209 this ->initialized = true ;
207210
208211 return err;
209212}
210213
211214
215+ void SDPSensor::getInfo (uint32_t *modelNumber, uint32_t *rangePa, uint32_t *productId, uint64_t *serialNumber) {
216+ if (modelNumber != NULL ) *modelNumber = this ->modelNumber ;
217+ if (rangePa != NULL ) *rangePa = this ->rangePa ;
218+ if (productId != NULL ) *productId = this ->productId ;
219+ if (serialNumber != NULL ) *serialNumber = this ->serialNumber ;
220+ }
221+
222+
212223uint16_t SDPSensor::getPressureScale () {
213224 return pressureScale;
214225}
@@ -272,10 +283,10 @@ esp_err_t SDPSensor::readDiffPressureTemperature(int16_t *diffPressureRaw, float
272283 uint8_t data[6 ] = { 0 };
273284
274285 /*
275- Data Format:
286+ Data Format:
276287 | Byte | 0 | 1 | 2 | 3 | 4 | 5 |
277288 | Value | pressure | CRC |temperature| CRC |
278- */
289+ */
279290 esp_err_t err = i2c_master_read_from_device (i2c_port, i2c_addr, data, 6 , I2C_NO_TIMEOUT);
280291
281292 if (err == ESP_OK) {
0 commit comments