ESPHome 2025.5.0
Loading...
Searching...
No Matches
bmp280_spi.cpp
Go to the documentation of this file.
1#include <cstdint>
2#include <cstddef>
3
4#include "bmp280_spi.h"
6
7namespace esphome {
8namespace bmp280_spi {
9
10uint8_t set_bit(uint8_t num, uint8_t position) {
11 uint8_t mask = 1 << position;
12 return num | mask;
13}
14
15uint8_t clear_bit(uint8_t num, uint8_t position) {
16 uint8_t mask = 1 << position;
17 return num & ~mask;
18}
19
20void BMP280SPIComponent::setup() {
21 this->spi_setup();
22 BMP280Component::setup();
23};
24
25// In SPI mode, only 7 bits of the register addresses are used; the MSB of register address is not used
26// and replaced by a read/write bit (RW = ‘0’ for write and RW = ‘1’ for read).
27// Example: address 0xF7 is accessed by using SPI register address 0x77. For write access, the byte
28// 0x77 is transferred, for read access, the byte 0xF7 is transferred.
29// https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmp280-ds001.pdf
30
31bool BMP280SPIComponent::read_byte(uint8_t a_register, uint8_t *data) {
32 this->enable();
33 this->transfer_byte(set_bit(a_register, 7));
34 *data = this->transfer_byte(0);
35 this->disable();
36 return true;
37}
38
39bool BMP280SPIComponent::write_byte(uint8_t a_register, uint8_t data) {
40 this->enable();
41 this->transfer_byte(clear_bit(a_register, 7));
42 this->transfer_byte(data);
43 this->disable();
44 return true;
45}
46
47bool BMP280SPIComponent::read_bytes(uint8_t a_register, uint8_t *data, size_t len) {
48 this->enable();
49 this->transfer_byte(set_bit(a_register, 7));
50 this->read_array(data, len);
51 this->disable();
52 return true;
53}
54
55bool BMP280SPIComponent::read_byte_16(uint8_t a_register, uint16_t *data) {
56 this->enable();
57 this->transfer_byte(set_bit(a_register, 7));
58 ((uint8_t *) data)[1] = this->transfer_byte(0);
59 ((uint8_t *) data)[0] = this->transfer_byte(0);
60 this->disable();
61 return true;
62}
63
64} // namespace bmp280_spi
65} // namespace esphome
float position
Definition cover.h:0
uint8_t set_bit(uint8_t num, uint8_t position)
uint8_t clear_bit(uint8_t num, uint8_t position)
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
std::string size_t len
Definition helpers.h:301