clang-format

This commit is contained in:
Gábor Poczkodi 2024-02-28 14:34:10 +01:00
parent b0030fc0b9
commit 1907cca2fa
4 changed files with 324 additions and 358 deletions

View file

@ -3,7 +3,8 @@
This is a CC1101 transceiver component that works with esphome's remote_transmitter/remote_receiver. This is a CC1101 transceiver component that works with esphome's remote_transmitter/remote_receiver.
It can be compiled with Arduino and esp-idf framework and should support any esphome compatible board through the SPI Bus. It can be compiled with Arduino and esp-idf framework and should support any esphome compatible board through the SPI
Bus.
On ESP8266, you can use the same pin for GDO and GD2 (it is an optional parameter). On ESP8266, you can use the same pin for GDO and GD2 (it is an optional parameter).
@ -25,9 +26,11 @@
#ifdef USE_ARDUINO #ifdef USE_ARDUINO
#include <Arduino.h> #include <Arduino.h>
#else // USE_ESP_IDF #else // USE_ESP_IDF
#include <driver/gpio.h> #include <driver/gpio.h>
long map(long x, long in_min, long in_max, long out_min, long out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } long map(long x, long in_min, long in_max, long out_min, long out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
#endif #endif
namespace esphome { namespace esphome {
@ -35,17 +38,16 @@ namespace cc1101 {
static const char *TAG = "cc1101"; static const char *TAG = "cc1101";
uint8_t PA_TABLE[8] {0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00}; uint8_t PA_TABLE[8]{0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
// -30 -20 -15 -10 0 5 7 10 // -30 -20 -15 -10 0 5 7 10
uint8_t PA_TABLE_315[8] {0x12,0x0D,0x1C,0x34,0x51,0x85,0xCB,0xC2}; // 300 - 348 uint8_t PA_TABLE_315[8]{0x12, 0x0D, 0x1C, 0x34, 0x51, 0x85, 0xCB, 0xC2}; // 300 - 348
uint8_t PA_TABLE_433[8] {0x12,0x0E,0x1D,0x34,0x60,0x84,0xC8,0xC0}; // 387 - 464 uint8_t PA_TABLE_433[8]{0x12, 0x0E, 0x1D, 0x34, 0x60, 0x84, 0xC8, 0xC0}; // 387 - 464
// -30 -20 -15 -10 -6 0 5 7 10 12 // -30 -20 -15 -10 -6 0 5 7 10 12
uint8_t PA_TABLE_868[10] {0x03,0x17,0x1D,0x26,0x37,0x50,0x86,0xCD,0xC5,0xC0}; // 779 - 899.99 uint8_t PA_TABLE_868[10]{0x03, 0x17, 0x1D, 0x26, 0x37, 0x50, 0x86, 0xCD, 0xC5, 0xC0}; // 779 - 899.99
// -30 -20 -15 -10 -6 0 5 7 10 11 // -30 -20 -15 -10 -6 0 5 7 10 11
uint8_t PA_TABLE_915[10] {0x03,0x0E,0x1E,0x27,0x38,0x8E,0x84,0xCC,0xC3,0xC0}; // 900 - 928 uint8_t PA_TABLE_915[10]{0x03, 0x0E, 0x1E, 0x27, 0x38, 0x8E, 0x84, 0xCC, 0xC3, 0xC0}; // 900 - 928
CC1101::CC1101() CC1101::CC1101() {
{
this->gdo0_ = NULL; this->gdo0_ = NULL;
this->gdo2_ = NULL; this->gdo2_ = NULL;
this->bandwidth_ = 200; this->bandwidth_ = 200;
@ -76,40 +78,24 @@ CC1101::CC1101()
this->clb_[3][1] = 79; this->clb_[3][1] = 79;
} }
void CC1101::set_config_gdo0(InternalGPIOPin* pin) void CC1101::set_config_gdo0(InternalGPIOPin *pin) {
{
gdo0_ = pin; gdo0_ = pin;
if(gdo2_ == NULL) gdo2_ = pin; if (gdo2_ == NULL)
gdo2_ = pin;
} }
void CC1101::set_config_gdo2(InternalGPIOPin* pin) void CC1101::set_config_gdo2(InternalGPIOPin *pin) { gdo2_ = pin; }
{
gdo2_ = pin;
}
void CC1101::set_config_bandwidth(uint32_t bandwidth) void CC1101::set_config_bandwidth(uint32_t bandwidth) { bandwidth_ = bandwidth; }
{
bandwidth_ = bandwidth;
}
void CC1101::set_config_frequency(uint32_t frequency) void CC1101::set_config_frequency(uint32_t frequency) { frequency_ = frequency; }
{
frequency_ = frequency;
}
void CC1101::set_config_rssi_sensor(sensor::Sensor* rssi_sensor) void CC1101::set_config_rssi_sensor(sensor::Sensor *rssi_sensor) { rssi_sensor_ = rssi_sensor; }
{
rssi_sensor_ = rssi_sensor;
}
void CC1101::set_config_lqi_sensor(sensor::Sensor* lqi_sensor) void CC1101::set_config_lqi_sensor(sensor::Sensor *lqi_sensor) { lqi_sensor_ = lqi_sensor; }
{
lqi_sensor_ = lqi_sensor;
}
void CC1101::setup() void CC1101::setup() {
{
this->gdo0_->setup(); this->gdo0_->setup();
this->gdo2_->setup(); this->gdo2_->setup();
this->gdo0_->pin_mode(gpio::FLAG_OUTPUT); this->gdo0_->pin_mode(gpio::FLAG_OUTPUT);
@ -117,8 +103,7 @@ void CC1101::setup()
this->spi_setup(); this->spi_setup();
if(!this->reset()) if (!this->reset()) {
{
mark_failed(); mark_failed();
ESP_LOGE(TAG, "Failed to reset CC1101 modem. Check connection."); ESP_LOGE(TAG, "Failed to reset CC1101 modem. Check connection.");
return; return;
@ -160,7 +145,7 @@ void CC1101::setup()
// ELECHOUSE_cc1101.setMHZ(_freq); // ELECHOUSE_cc1101.setMHZ(_freq);
this->set_frequency(this->frequency_); // TODO: already set this->set_frequency(this->frequency_); // TODO: already set
// //
@ -171,26 +156,21 @@ void CC1101::setup()
ESP_LOGI(TAG, "CC1101 initialized."); ESP_LOGI(TAG, "CC1101 initialized.");
} }
void CC1101::update() void CC1101::update() {
{ if (this->rssi_sensor_ != NULL) {
if(this->rssi_sensor_ != NULL)
{
int32_t rssi = this->get_rssi(); int32_t rssi = this->get_rssi();
if(rssi != this->last_rssi_) if (rssi != this->last_rssi_) {
{
this->rssi_sensor_->publish_state(rssi); this->rssi_sensor_->publish_state(rssi);
this->last_rssi_ = rssi; this->last_rssi_ = rssi;
} }
} }
if(this->lqi_sensor_ != NULL) if (this->lqi_sensor_ != NULL) {
{ int32_t lqi = this->get_lqi() & 0x7f; // msb = CRC ok or not set
int32_t lqi = this->get_lqi() & 0x7f; // msb = CRC ok or not set
if(lqi != this->last_lqi_) if (lqi != this->last_lqi_) {
{
this->lqi_sensor_->publish_state(lqi); this->lqi_sensor_->publish_state(lqi);
this->last_lqi_ = lqi; this->last_lqi_ = lqi;
@ -198,8 +178,7 @@ void CC1101::update()
} }
} }
void CC1101::dump_config() void CC1101::dump_config() {
{
ESP_LOGCONFIG(TAG, "CC1101 partnum %02x version %02x:", this->partnum_, this->version_); ESP_LOGCONFIG(TAG, "CC1101 partnum %02x version %02x:", this->partnum_, this->version_);
LOG_PIN(" CC1101 CS Pin: ", this->cs_); LOG_PIN(" CC1101 CS Pin: ", this->cs_);
LOG_PIN(" CC1101 GDO0: ", this->gdo0_); LOG_PIN(" CC1101 GDO0: ", this->gdo0_);
@ -210,17 +189,16 @@ void CC1101::dump_config()
LOG_SENSOR(" ", "LQI", this->lqi_sensor_); LOG_SENSOR(" ", "LQI", this->lqi_sensor_);
} }
bool CC1101::reset() bool CC1101::reset() {
{
// Chip reset sequence. CS wiggle (CC1101 manual page 45) // Chip reset sequence. CS wiggle (CC1101 manual page 45)
//this->disable(); // esp-idf calls end_transaction and asserts, because no begin_transaction was called // this->disable(); // esp-idf calls end_transaction and asserts, because no begin_transaction was called
this->cs_->digital_write(false); this->cs_->digital_write(false);
delayMicroseconds(5); delayMicroseconds(5);
//this->enable(); // this->enable();
this->cs_->digital_write(true); this->cs_->digital_write(true);
delayMicroseconds(10); delayMicroseconds(10);
//this->disable(); // this->disable();
this->cs_->digital_write(false); this->cs_->digital_write(false);
delayMicroseconds(41); delayMicroseconds(41);
@ -238,15 +216,13 @@ bool CC1101::reset()
return this->version_ > 0; return this->version_ > 0;
} }
void CC1101::send_cmd(uint8_t cmd) void CC1101::send_cmd(uint8_t cmd) {
{
this->enable(); this->enable();
this->transfer_byte(cmd); this->transfer_byte(cmd);
this->disable(); this->disable();
} }
uint8_t CC1101::read_register(uint8_t reg) uint8_t CC1101::read_register(uint8_t reg) {
{
this->enable(); this->enable();
this->transfer_byte(reg); this->transfer_byte(reg);
uint8_t value = this->transfer_byte(0); uint8_t value = this->transfer_byte(0);
@ -254,39 +230,29 @@ uint8_t CC1101::read_register(uint8_t reg)
return value; return value;
} }
uint8_t CC1101::read_config_register(uint8_t reg) uint8_t CC1101::read_config_register(uint8_t reg) { return this->read_register(reg | CC1101_READ_SINGLE); }
{
return this->read_register(reg | CC1101_READ_SINGLE);
}
uint8_t CC1101::read_status_register(uint8_t reg) uint8_t CC1101::read_status_register(uint8_t reg) { return this->read_register(reg | CC1101_READ_BURST); }
{
return this->read_register(reg | CC1101_READ_BURST);
}
void CC1101::read_register_burst(uint8_t reg, uint8_t* buffer, size_t length) void CC1101::read_register_burst(uint8_t reg, uint8_t *buffer, size_t length) {
{
this->enable(); this->enable();
this->write_byte(reg | CC1101_READ_BURST); this->write_byte(reg | CC1101_READ_BURST);
this->read_array(buffer, length); this->read_array(buffer, length);
this->disable(); this->disable();
} }
void CC1101::write_register(uint8_t reg, uint8_t* value, size_t length) void CC1101::write_register(uint8_t reg, uint8_t *value, size_t length) {
{
this->enable(); this->enable();
this->transfer_byte(reg); this->transfer_byte(reg);
this->transfer_array(value, length); this->transfer_array(value, length);
this->disable(); this->disable();
} }
void CC1101::write_register(uint8_t reg, uint8_t value) void CC1101::write_register(uint8_t reg, uint8_t value) {
{
uint8_t arr[1] = {value}; uint8_t arr[1] = {value};
this->write_register(reg, arr, 1); this->write_register(reg, arr, 1);
} }
void CC1101::write_register_burst(uint8_t reg, uint8_t* buffer, size_t length) void CC1101::write_register_burst(uint8_t reg, uint8_t *buffer, size_t length) {
{
this->write_register(reg | CC1101_WRITE_BURST, buffer, length); this->write_register(reg | CC1101_WRITE_BURST, buffer, length);
} }
/* /*
@ -319,20 +285,16 @@ bool CC1101::send_data(const uint8_t* data, size_t length)
// ELECHOUSE_CC1101 stuff // ELECHOUSE_CC1101 stuff
void CC1101::set_mode(bool s) void CC1101::set_mode(bool s) {
{
this->mode_ = s; this->mode_ = s;
if(s) if (s) {
{
this->write_register(CC1101_IOCFG2, 0x0B); this->write_register(CC1101_IOCFG2, 0x0B);
this->write_register(CC1101_IOCFG0, 0x06); this->write_register(CC1101_IOCFG0, 0x06);
this->write_register(CC1101_PKTCTRL0, 0x05); this->write_register(CC1101_PKTCTRL0, 0x05);
this->write_register(CC1101_MDMCFG3, 0xF8); this->write_register(CC1101_MDMCFG3, 0xF8);
this->write_register(CC1101_MDMCFG4, 11 + this->m4RxBw_); this->write_register(CC1101_MDMCFG4, 11 + this->m4RxBw_);
} } else {
else
{
this->write_register(CC1101_IOCFG2, 0x0D); this->write_register(CC1101_IOCFG2, 0x0D);
this->write_register(CC1101_IOCFG0, 0x0D); this->write_register(CC1101_IOCFG0, 0x0D);
this->write_register(CC1101_PKTCTRL0, 0x32); this->write_register(CC1101_PKTCTRL0, 0x32);
@ -343,21 +305,35 @@ void CC1101::set_mode(bool s)
this->set_modulation(this->modulation_); this->set_modulation(this->modulation_);
} }
void CC1101::set_modulation(uint8_t m) void CC1101::set_modulation(uint8_t m) {
{ if (m > 4)
if(m > 4) m = 4; m = 4;
this->modulation_ = m; this->modulation_ = m;
this->split_MDMCFG2(); this->split_MDMCFG2();
switch(m) switch (m) {
{ case 0:
case 0: this->m2MODFM_ = 0x00; this->frend0_ = 0x10; break; // 2-FSK this->m2MODFM_ = 0x00;
case 1: this->m2MODFM_ = 0x10; this->frend0_ = 0x10; break; // GFSK this->frend0_ = 0x10;
case 2: this->m2MODFM_ = 0x30; this->frend0_ = 0x11; break; // ASK break; // 2-FSK
case 3: this->m2MODFM_ = 0x40; this->frend0_ = 0x10; break; // 4-FSK case 1:
case 4: this->m2MODFM_ = 0x70; this->frend0_ = 0x10; break; // MSK this->m2MODFM_ = 0x10;
this->frend0_ = 0x10;
break; // GFSK
case 2:
this->m2MODFM_ = 0x30;
this->frend0_ = 0x11;
break; // ASK
case 3:
this->m2MODFM_ = 0x40;
this->frend0_ = 0x10;
break; // 4-FSK
case 4:
this->m2MODFM_ = 0x70;
this->frend0_ = 0x10;
break; // MSK
} }
this->write_register(CC1101_MDMCFG2, this->m2DCOFF_ + this->m2MODFM_ + this->m2MANCH_ + this->m2SYNCM_); this->write_register(CC1101_MDMCFG2, this->m2DCOFF_ + this->m2MODFM_ + this->m2MANCH_ + this->m2SYNCM_);
@ -366,77 +342,100 @@ void CC1101::set_modulation(uint8_t m)
this->set_pa(this->pa_); this->set_pa(this->pa_);
} }
void CC1101::set_pa(int8_t pa) void CC1101::set_pa(int8_t pa) {
{
this->pa_ = pa; this->pa_ = pa;
int a; int a;
if(this->frequency_ >= 300000 && this->frequency_ <= 348000) if (this->frequency_ >= 300000 && this->frequency_ <= 348000) {
{ if (pa <= -30)
if(pa <= -30) a = PA_TABLE_315[0]; a = PA_TABLE_315[0];
else if(pa > -30 && pa <= -20) a = PA_TABLE_315[1]; else if (pa > -30 && pa <= -20)
else if(pa > -20 && pa <= -15) a = PA_TABLE_315[2]; a = PA_TABLE_315[1];
else if(pa > -15 && pa <= -10) a = PA_TABLE_315[3]; else if (pa > -20 && pa <= -15)
else if(pa > -10 && pa <= 0) a = PA_TABLE_315[4]; a = PA_TABLE_315[2];
else if(pa > 0 && pa <= 5) a = PA_TABLE_315[5]; else if (pa > -15 && pa <= -10)
else if(pa > 5 && pa <= 7) a = PA_TABLE_315[6]; a = PA_TABLE_315[3];
else a = PA_TABLE_315[7]; else if (pa > -10 && pa <= 0)
a = PA_TABLE_315[4];
else if (pa > 0 && pa <= 5)
a = PA_TABLE_315[5];
else if (pa > 5 && pa <= 7)
a = PA_TABLE_315[6];
else
a = PA_TABLE_315[7];
this->last_pa_ = 1; this->last_pa_ = 1;
} } else if (this->frequency_ >= 378000 && this->frequency_ <= 464000) {
else if(this->frequency_ >= 378000 && this->frequency_ <= 464000) if (pa <= -30)
{ a = PA_TABLE_433[0];
if(pa <= -30) a = PA_TABLE_433[0]; else if (pa > -30 && pa <= -20)
else if(pa > -30 && pa <= -20) a = PA_TABLE_433[1]; a = PA_TABLE_433[1];
else if(pa > -20 && pa <= -15) a = PA_TABLE_433[2]; else if (pa > -20 && pa <= -15)
else if(pa > -15 && pa <= -10) a = PA_TABLE_433[3]; a = PA_TABLE_433[2];
else if(pa > -10 && pa <= 0) a = PA_TABLE_433[4]; else if (pa > -15 && pa <= -10)
else if(pa > 0 && pa <= 5) a = PA_TABLE_433[5]; a = PA_TABLE_433[3];
else if(pa > 5 && pa <= 7) a = PA_TABLE_433[6]; else if (pa > -10 && pa <= 0)
else a = PA_TABLE_433[7]; a = PA_TABLE_433[4];
else if (pa > 0 && pa <= 5)
a = PA_TABLE_433[5];
else if (pa > 5 && pa <= 7)
a = PA_TABLE_433[6];
else
a = PA_TABLE_433[7];
this->last_pa_ = 2; this->last_pa_ = 2;
} } else if (this->frequency_ >= 779000 && this->frequency_ < 900000) {
else if(this->frequency_ >= 779000 && this->frequency_ < 900000) if (pa <= -30)
{ a = PA_TABLE_868[0];
if(pa <= -30) a = PA_TABLE_868[0]; else if (pa > -30 && pa <= -20)
else if(pa > -30 && pa <= -20) a = PA_TABLE_868[1]; a = PA_TABLE_868[1];
else if(pa > -20 && pa <= -15) a = PA_TABLE_868[2]; else if (pa > -20 && pa <= -15)
else if(pa > -15 && pa <= -10) a = PA_TABLE_868[3]; a = PA_TABLE_868[2];
else if(pa > -10 && pa <= -6) a = PA_TABLE_868[4]; else if (pa > -15 && pa <= -10)
else if(pa > -6 && pa <= 0) a = PA_TABLE_868[5]; a = PA_TABLE_868[3];
else if(pa > 0 && pa <= 5) a = PA_TABLE_868[6]; else if (pa > -10 && pa <= -6)
else if(pa > 5 && pa <= 7) a = PA_TABLE_868[7]; a = PA_TABLE_868[4];
else if(pa > 7 && pa <= 10) a = PA_TABLE_868[8]; else if (pa > -6 && pa <= 0)
else a = PA_TABLE_868[9]; a = PA_TABLE_868[5];
else if (pa > 0 && pa <= 5)
a = PA_TABLE_868[6];
else if (pa > 5 && pa <= 7)
a = PA_TABLE_868[7];
else if (pa > 7 && pa <= 10)
a = PA_TABLE_868[8];
else
a = PA_TABLE_868[9];
this->last_pa_ = 3; this->last_pa_ = 3;
} } else if (this->frequency_ >= 900000 && this->frequency_ <= 928000) {
else if(this->frequency_ >= 900000 && this->frequency_ <= 928000) if (pa <= -30)
{ a = PA_TABLE_915[0];
if(pa <= -30) a = PA_TABLE_915[0]; else if (pa > -30 && pa <= -20)
else if(pa > -30 && pa <= -20) a = PA_TABLE_915[1]; a = PA_TABLE_915[1];
else if(pa > -20 && pa <= -15) a = PA_TABLE_915[2]; else if (pa > -20 && pa <= -15)
else if(pa > -15 && pa <= -10) a = PA_TABLE_915[3]; a = PA_TABLE_915[2];
else if(pa > -10 && pa <= -6) a = PA_TABLE_915[4]; else if (pa > -15 && pa <= -10)
else if(pa > -6 && pa <= 0) a = PA_TABLE_915[5]; a = PA_TABLE_915[3];
else if(pa > 0 && pa <= 5) a = PA_TABLE_915[6]; else if (pa > -10 && pa <= -6)
else if(pa > 5 && pa <= 7) a = PA_TABLE_915[7]; a = PA_TABLE_915[4];
else if(pa > 7 && pa <= 10) a = PA_TABLE_915[8]; else if (pa > -6 && pa <= 0)
else a = PA_TABLE_915[9]; a = PA_TABLE_915[5];
else if (pa > 0 && pa <= 5)
a = PA_TABLE_915[6];
else if (pa > 5 && pa <= 7)
a = PA_TABLE_915[7];
else if (pa > 7 && pa <= 10)
a = PA_TABLE_915[8];
else
a = PA_TABLE_915[9];
this->last_pa_ = 4; this->last_pa_ = 4;
} } else {
else
{
ESP_LOGE(TAG, "CC1101 set_pa(%d) frequency out of range: %d", pa, this->frequency_); ESP_LOGE(TAG, "CC1101 set_pa(%d) frequency out of range: %d", pa, this->frequency_);
return; return;
} }
if(this->modulation_ == 2) if (this->modulation_ == 2) {
{
PA_TABLE[0] = 0; PA_TABLE[0] = 0;
PA_TABLE[1] = a; PA_TABLE[1] = a;
} } else {
else
{
PA_TABLE[0] = a; PA_TABLE[0] = a;
PA_TABLE[1] = 0; PA_TABLE[1] = 0;
} }
@ -444,22 +443,27 @@ void CC1101::set_pa(int8_t pa)
this->write_register_burst(CC1101_PATABLE, PA_TABLE, sizeof(PA_TABLE)); this->write_register_burst(CC1101_PATABLE, PA_TABLE, sizeof(PA_TABLE));
} }
void CC1101::set_frequency(uint32_t f) void CC1101::set_frequency(uint32_t f) {
{
this->frequency_ = f; this->frequency_ = f;
uint8_t freq2 = 0; uint8_t freq2 = 0;
uint8_t freq1 = 0; uint8_t freq1 = 0;
uint8_t freq0 = 0; uint8_t freq0 = 0;
float mhz = (float)f / 1000; float mhz = (float) f / 1000;
while(true) while (true) {
{ if (mhz >= 26) {
if(mhz >= 26) { mhz -= 26; freq2++; } mhz -= 26;
else if(mhz >= 0.1015625) { mhz -= 0.1015625; freq1++; } freq2++;
else if(mhz >= 0.00039675) { mhz -= 0.00039675; freq0++; } } else if (mhz >= 0.1015625) {
else break; mhz -= 0.1015625;
freq1++;
} else if (mhz >= 0.00039675) {
mhz -= 0.00039675;
freq0++;
} else
break;
} }
/* /*
@ -477,116 +481,95 @@ void CC1101::set_frequency(uint32_t f)
// calibrate // calibrate
mhz = (float)f / 1000; mhz = (float) f / 1000;
if(mhz >= 300 && mhz <= 348) if (mhz >= 300 && mhz <= 348) {
{
this->write_register(CC1101_FSCTRL0, map(mhz, 300, 348, this->clb_[0][0], this->clb_[0][1])); this->write_register(CC1101_FSCTRL0, map(mhz, 300, 348, this->clb_[0][0], this->clb_[0][1]));
if(mhz < 322.88) if (mhz < 322.88) {
{
this->write_register(CC1101_TEST0, 0x0B); this->write_register(CC1101_TEST0, 0x0B);
} } else {
else
{
this->write_register(CC1101_TEST0, 0x09); this->write_register(CC1101_TEST0, 0x09);
uint8_t s = this->read_status_register(CC1101_FSCAL2); uint8_t s = this->read_status_register(CC1101_FSCAL2);
if(s < 32) if (s < 32) {
{
this->write_register(CC1101_FSCAL2, s + 32); this->write_register(CC1101_FSCAL2, s + 32);
} }
if(this->last_pa_ != 1) this->set_pa(this->pa_); if (this->last_pa_ != 1)
this->set_pa(this->pa_);
} }
} } else if (mhz >= 378 && mhz <= 464) {
else if(mhz >= 378 && mhz <= 464)
{
this->write_register(CC1101_FSCTRL0, map(mhz, 378, 464, this->clb_[1][0], this->clb_[1][1])); this->write_register(CC1101_FSCTRL0, map(mhz, 378, 464, this->clb_[1][0], this->clb_[1][1]));
if(mhz < 430.5) if (mhz < 430.5) {
{
this->write_register(CC1101_TEST0, 0x0B); this->write_register(CC1101_TEST0, 0x0B);
} } else {
else
{
this->write_register(CC1101_TEST0, 0x09); this->write_register(CC1101_TEST0, 0x09);
uint8_t s = this->read_status_register(CC1101_FSCAL2); uint8_t s = this->read_status_register(CC1101_FSCAL2);
if(s < 32) if (s < 32) {
{
this->write_register(CC1101_FSCAL2, s + 32); this->write_register(CC1101_FSCAL2, s + 32);
} }
if(this->last_pa_ != 2) this->set_pa(this->pa_); if (this->last_pa_ != 2)
this->set_pa(this->pa_);
} }
} } else if (mhz >= 779 && mhz <= 899.99) {
else if(mhz >= 779 && mhz <= 899.99)
{
this->write_register(CC1101_FSCTRL0, map(mhz, 779, 899, this->clb_[2][0], this->clb_[2][1])); this->write_register(CC1101_FSCTRL0, map(mhz, 779, 899, this->clb_[2][0], this->clb_[2][1]));
if(mhz < 861) if (mhz < 861) {
{
this->write_register(CC1101_TEST0, 0x0B); this->write_register(CC1101_TEST0, 0x0B);
} } else {
else
{
this->write_register(CC1101_TEST0, 0x09); this->write_register(CC1101_TEST0, 0x09);
uint8_t s = this->read_status_register(CC1101_FSCAL2); uint8_t s = this->read_status_register(CC1101_FSCAL2);
if(s < 32) if (s < 32) {
{
this->write_register(CC1101_FSCAL2, s + 32); this->write_register(CC1101_FSCAL2, s + 32);
} }
if(this->last_pa_ != 3) this->set_pa(this->pa_); if (this->last_pa_ != 3)
this->set_pa(this->pa_);
} }
} } else if (mhz >= 900 && mhz <= 928) {
else if(mhz >= 900 && mhz <= 928)
{
this->write_register(CC1101_FSCTRL0, map(mhz, 900, 928, this->clb_[3][0], this->clb_[3][1])); this->write_register(CC1101_FSCTRL0, map(mhz, 900, 928, this->clb_[3][0], this->clb_[3][1]));
this->write_register(CC1101_TEST0, 0x09); this->write_register(CC1101_TEST0, 0x09);
uint8_t s = this->read_status_register(CC1101_FSCAL2); uint8_t s = this->read_status_register(CC1101_FSCAL2);
if(s < 32) if (s < 32) {
{
this->write_register(CC1101_FSCAL2, s + 32); this->write_register(CC1101_FSCAL2, s + 32);
} }
if(this->last_pa_ != 4) this->set_pa(this->pa_); if (this->last_pa_ != 4)
this->set_pa(this->pa_);
} }
} }
void CC1101::set_clb(uint8_t b, uint8_t s, uint8_t e) void CC1101::set_clb(uint8_t b, uint8_t s, uint8_t e) {
{ if (b < 4) {
if(b < 4)
{
this->clb_[b][0] = s; this->clb_[b][0] = s;
this->clb_[b][1] = e; this->clb_[b][1] = e;
} }
} }
void CC1101::set_rxbw(uint32_t bw) void CC1101::set_rxbw(uint32_t bw) {
{
this->bandwidth_ = bw; this->bandwidth_ = bw;
float f = (float)this->bandwidth_; float f = (float) this->bandwidth_;
int s1 = 3; int s1 = 3;
int s2 = 3; int s2 = 3;
for(int i = 0; i < 3 && f > 101.5625f; i++) for (int i = 0; i < 3 && f > 101.5625f; i++) {
{
f /= 2; f /= 2;
s1--; s1--;
} }
for(int i = 0; i < 3 && f > 58.1f; i++) for (int i = 0; i < 3 && f > 58.1f; i++) {
{
f /= 1.25f; f /= 1.25f;
s2--; s2--;
} }
@ -598,43 +581,37 @@ void CC1101::set_rxbw(uint32_t bw)
this->write_register(CC1101_MDMCFG4, this->m4RxBw_ + this->m4DaRa_); this->write_register(CC1101_MDMCFG4, this->m4RxBw_ + this->m4DaRa_);
} }
void CC1101::set_tx() void CC1101::set_tx() {
{
ESP_LOGI(TAG, "CC1101 set_tx"); ESP_LOGI(TAG, "CC1101 set_tx");
this->send_cmd(CC1101_SIDLE); this->send_cmd(CC1101_SIDLE);
this->send_cmd(CC1101_STX); this->send_cmd(CC1101_STX);
this->trxstate_ = 1; this->trxstate_ = 1;
} }
void CC1101::set_rx() void CC1101::set_rx() {
{
ESP_LOGI(TAG, "CC1101 set_rx"); ESP_LOGI(TAG, "CC1101 set_rx");
this->send_cmd(CC1101_SIDLE); this->send_cmd(CC1101_SIDLE);
this->send_cmd(CC1101_SRX); this->send_cmd(CC1101_SRX);
this->trxstate_ = 2; this->trxstate_ = 2;
} }
void CC1101::set_sres() void CC1101::set_sres() {
{
this->send_cmd(CC1101_SRES); this->send_cmd(CC1101_SRES);
this->trxstate_ = 0; this->trxstate_ = 0;
} }
void CC1101::set_sidle() void CC1101::set_sidle() {
{
this->send_cmd(CC1101_SIDLE); this->send_cmd(CC1101_SIDLE);
this->trxstate_ = 0; this->trxstate_ = 0;
} }
void CC1101::set_sleep() void CC1101::set_sleep() {
{ this->send_cmd(CC1101_SIDLE); // Exit RX / TX, turn off frequency synthesizer and exit
this->send_cmd(CC1101_SIDLE); // Exit RX / TX, turn off frequency synthesizer and exit this->send_cmd(CC1101_SPWD); // Enter power down mode when CSn goes high.
this->send_cmd(CC1101_SPWD); // Enter power down mode when CSn goes high.
this->trxstate_ = 0; this->trxstate_ = 0;
} }
void CC1101::split_MDMCFG2() void CC1101::split_MDMCFG2() {
{
uint8_t calc = this->read_status_register(CC1101_MDMCFG2); uint8_t calc = this->read_status_register(CC1101_MDMCFG2);
this->m2DCOFF_ = calc & 0x80; this->m2DCOFF_ = calc & 0x80;
@ -643,61 +620,53 @@ void CC1101::split_MDMCFG2()
this->m2SYNCM_ = calc & 0x07; this->m2SYNCM_ = calc & 0x07;
} }
void CC1101::split_MDMCFG4() void CC1101::split_MDMCFG4() {
{
uint8_t calc = this->read_status_register(CC1101_MDMCFG4); uint8_t calc = this->read_status_register(CC1101_MDMCFG4);
this->m4RxBw_ = calc & 0xf0; this->m4RxBw_ = calc & 0xf0;
this->m4DaRa_ = calc & 0x0f; this->m4DaRa_ = calc & 0x0f;
} }
int32_t CC1101::get_rssi() int32_t CC1101::get_rssi() {
{
int32_t rssi; int32_t rssi;
rssi = this->read_status_register(CC1101_RSSI); rssi = this->read_status_register(CC1101_RSSI);
if(rssi >= 128) rssi -= 256; if (rssi >= 128)
rssi -= 256;
return (rssi / 2) - 74; return (rssi / 2) - 74;
} }
uint8_t CC1101::get_lqi() uint8_t CC1101::get_lqi() { return this->read_status_register(CC1101_LQI); }
{
return this->read_status_register(CC1101_LQI);
}
void CC1101::begin_tx() void CC1101::begin_tx() {
{
this->set_tx(); this->set_tx();
if(this->gdo0_ == this->gdo2_) if (this->gdo0_ == this->gdo2_) {
{
#ifdef USE_ESP8266 #ifdef USE_ESP8266
#ifdef USE_ARDUINO #ifdef USE_ARDUINO
noInterrupts(); // NOLINT noInterrupts(); // NOLINT
#else // USE_ESP_IDF #else // USE_ESP_IDF
portDISABLE_INTERRUPTS() portDISABLE_INTERRUPTS()
#endif #endif
#endif #endif
this->gdo0_->pin_mode(gpio::FLAG_OUTPUT); this->gdo0_->pin_mode(gpio::FLAG_OUTPUT);
} }
} }
void CC1101::end_tx() void CC1101::end_tx() {
{ if (this->gdo0_ == this->gdo2_) {
if(this->gdo0_ == this->gdo2_)
{
#ifdef USE_ESP8266 #ifdef USE_ESP8266
#ifdef USE_ARDUINO #ifdef USE_ARDUINO
interrupts(); // NOLINT interrupts(); // NOLINT
#else // USE_ESP_IDF #else // USE_ESP_IDF
portENABLE_INTERRUPTS() portENABLE_INTERRUPTS()
#endif #endif
#endif #endif
this->gdo0_->pin_mode(gpio::FLAG_INPUT); this->gdo0_->pin_mode(gpio::FLAG_INPUT);
} }
this->set_rx(); this->set_rx();
this->set_rx(); // yes, twice (really?) this->set_rx(); // yes, twice (really?)
} }
} // namespace cc1101 } // namespace cc1101
} // namespace esphome } // namespace esphome

View file

@ -7,18 +7,17 @@
namespace esphome { namespace esphome {
namespace cc1101 { namespace cc1101 {
class CC1101 class CC1101 : public sensor::Sensor,
: public sensor::Sensor, public PollingComponent,
public PollingComponent, public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_LEADING,
public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_1KHZ> spi::DATA_RATE_1KHZ> {
{ protected:
protected: InternalGPIOPin *gdo0_;
InternalGPIOPin* gdo0_; InternalGPIOPin *gdo2_;
InternalGPIOPin* gdo2_;
uint32_t bandwidth_; uint32_t bandwidth_;
uint32_t frequency_; uint32_t frequency_;
sensor::Sensor* rssi_sensor_; sensor::Sensor *rssi_sensor_;
sensor::Sensor* lqi_sensor_; sensor::Sensor *lqi_sensor_;
uint8_t partnum_; uint8_t partnum_;
uint8_t version_; uint8_t version_;
@ -30,11 +29,11 @@ protected:
uint8_t read_register(uint8_t reg); uint8_t read_register(uint8_t reg);
uint8_t read_config_register(uint8_t reg); uint8_t read_config_register(uint8_t reg);
uint8_t read_status_register(uint8_t reg); uint8_t read_status_register(uint8_t reg);
void read_register_burst(uint8_t reg, uint8_t* buffer, size_t length); void read_register_burst(uint8_t reg, uint8_t *buffer, size_t length);
void write_register(uint8_t reg, uint8_t* value, size_t length); void write_register(uint8_t reg, uint8_t *value, size_t length);
void write_register(uint8_t reg, uint8_t value); void write_register(uint8_t reg, uint8_t value);
void write_register_burst(uint8_t reg, uint8_t* buffer, size_t length); void write_register_burst(uint8_t reg, uint8_t *buffer, size_t length);
//bool send_data(const uint8_t* data, size_t length); // bool send_data(const uint8_t* data, size_t length);
// ELECHOUSE_CC1101 stuff // ELECHOUSE_CC1101 stuff
@ -71,15 +70,15 @@ protected:
void split_MDMCFG2(); void split_MDMCFG2();
void split_MDMCFG4(); void split_MDMCFG4();
public: public:
CC1101(); CC1101();
void set_config_gdo0(InternalGPIOPin* pin); void set_config_gdo0(InternalGPIOPin *pin);
void set_config_gdo2(InternalGPIOPin* pin); void set_config_gdo2(InternalGPIOPin *pin);
void set_config_bandwidth(uint32_t bandwidth); void set_config_bandwidth(uint32_t bandwidth);
void set_config_frequency(uint32_t frequency); void set_config_frequency(uint32_t frequency);
void set_config_rssi_sensor(sensor::Sensor* rssi_sensor); void set_config_rssi_sensor(sensor::Sensor *rssi_sensor);
void set_config_lqi_sensor(sensor::Sensor* lqi_sensor); void set_config_lqi_sensor(sensor::Sensor *lqi_sensor);
void setup() override; void setup() override;
void update() override; void update() override;
@ -92,18 +91,15 @@ public:
void end_tx(); void end_tx();
}; };
template<typename... Ts> class BeginTxAction : public Action<Ts...>, public Parented<CC1101> template<typename... Ts> class BeginTxAction : public Action<Ts...>, public Parented<CC1101> {
{ public:
public:
void play(Ts... x) override { this->parent_->begin_tx(); } void play(Ts... x) override { this->parent_->begin_tx(); }
}; };
template<typename... Ts> class EndTxAction : public Action<Ts...>, public Parented<CC1101> template<typename... Ts> class EndTxAction : public Action<Ts...>, public Parented<CC1101> {
{ public:
public:
void play(Ts... x) override { this->parent_->end_tx(); } void play(Ts... x) override { this->parent_->end_tx(); }
}; };
} // namespace cc1101 } // namespace cc1101
} // namespace esphome } // namespace esphome

View file

@ -7,78 +7,78 @@ namespace cc1101 {
//***************************************CC1101 define**************************************************// //***************************************CC1101 define**************************************************//
// CC1101 CONFIG REGSITER // CC1101 CONFIG REGSITER
static const uint32_t CC1101_IOCFG2 = 0x00; // GDO2 output pin configuration static const uint32_t CC1101_IOCFG2 = 0x00; // GDO2 output pin configuration
static const uint32_t CC1101_IOCFG1 = 0x01; // GDO1 output pin configuration static const uint32_t CC1101_IOCFG1 = 0x01; // GDO1 output pin configuration
static const uint32_t CC1101_IOCFG0 = 0x02; // GDO0 output pin configuration static const uint32_t CC1101_IOCFG0 = 0x02; // GDO0 output pin configuration
static const uint32_t CC1101_FIFOTHR = 0x03; // RX FIFO and TX FIFO thresholds static const uint32_t CC1101_FIFOTHR = 0x03; // RX FIFO and TX FIFO thresholds
static const uint32_t CC1101_SYNC1 = 0x04; // Sync word, high INT8U static const uint32_t CC1101_SYNC1 = 0x04; // Sync word, high INT8U
static const uint32_t CC1101_SYNC0 = 0x05; // Sync word, low INT8U static const uint32_t CC1101_SYNC0 = 0x05; // Sync word, low INT8U
static const uint32_t CC1101_PKTLEN = 0x06; // Packet length static const uint32_t CC1101_PKTLEN = 0x06; // Packet length
static const uint32_t CC1101_PKTCTRL1 = 0x07; // Packet automation control static const uint32_t CC1101_PKTCTRL1 = 0x07; // Packet automation control
static const uint32_t CC1101_PKTCTRL0 = 0x08; // Packet automation control static const uint32_t CC1101_PKTCTRL0 = 0x08; // Packet automation control
static const uint32_t CC1101_ADDR = 0x09; // Device address static const uint32_t CC1101_ADDR = 0x09; // Device address
static const uint32_t CC1101_CHANNR = 0x0A; // Channel number static const uint32_t CC1101_CHANNR = 0x0A; // Channel number
static const uint32_t CC1101_FSCTRL1 = 0x0B; // Frequency synthesizer control static const uint32_t CC1101_FSCTRL1 = 0x0B; // Frequency synthesizer control
static const uint32_t CC1101_FSCTRL0 = 0x0C; // Frequency synthesizer control static const uint32_t CC1101_FSCTRL0 = 0x0C; // Frequency synthesizer control
static const uint32_t CC1101_FREQ2 = 0x0D; // Frequency control word, high INT8U static const uint32_t CC1101_FREQ2 = 0x0D; // Frequency control word, high INT8U
static const uint32_t CC1101_FREQ1 = 0x0E; // Frequency control word, middle INT8U static const uint32_t CC1101_FREQ1 = 0x0E; // Frequency control word, middle INT8U
static const uint32_t CC1101_FREQ0 = 0x0F; // Frequency control word, low INT8U static const uint32_t CC1101_FREQ0 = 0x0F; // Frequency control word, low INT8U
static const uint32_t CC1101_MDMCFG4 = 0x10; // Modem configuration static const uint32_t CC1101_MDMCFG4 = 0x10; // Modem configuration
static const uint32_t CC1101_MDMCFG3 = 0x11; // Modem configuration static const uint32_t CC1101_MDMCFG3 = 0x11; // Modem configuration
static const uint32_t CC1101_MDMCFG2 = 0x12; // Modem configuration static const uint32_t CC1101_MDMCFG2 = 0x12; // Modem configuration
static const uint32_t CC1101_MDMCFG1 = 0x13; // Modem configuration static const uint32_t CC1101_MDMCFG1 = 0x13; // Modem configuration
static const uint32_t CC1101_MDMCFG0 = 0x14; // Modem configuration static const uint32_t CC1101_MDMCFG0 = 0x14; // Modem configuration
static const uint32_t CC1101_DEVIATN = 0x15; // Modem deviation setting static const uint32_t CC1101_DEVIATN = 0x15; // Modem deviation setting
static const uint32_t CC1101_MCSM2 = 0x16; // Main Radio Control State Machine configuration static const uint32_t CC1101_MCSM2 = 0x16; // Main Radio Control State Machine configuration
static const uint32_t CC1101_MCSM1 = 0x17; // Main Radio Control State Machine configuration static const uint32_t CC1101_MCSM1 = 0x17; // Main Radio Control State Machine configuration
static const uint32_t CC1101_MCSM0 = 0x18; // Main Radio Control State Machine configuration static const uint32_t CC1101_MCSM0 = 0x18; // Main Radio Control State Machine configuration
static const uint32_t CC1101_FOCCFG = 0x19; // Frequency Offset Compensation configuration static const uint32_t CC1101_FOCCFG = 0x19; // Frequency Offset Compensation configuration
static const uint32_t CC1101_BSCFG = 0x1A; // Bit Synchronization configuration static const uint32_t CC1101_BSCFG = 0x1A; // Bit Synchronization configuration
static const uint32_t CC1101_AGCCTRL2 = 0x1B; // AGC control static const uint32_t CC1101_AGCCTRL2 = 0x1B; // AGC control
static const uint32_t CC1101_AGCCTRL1 = 0x1C; // AGC control static const uint32_t CC1101_AGCCTRL1 = 0x1C; // AGC control
static const uint32_t CC1101_AGCCTRL0 = 0x1D; // AGC control static const uint32_t CC1101_AGCCTRL0 = 0x1D; // AGC control
static const uint32_t CC1101_WOREVT1 = 0x1E; // High INT8U Event 0 timeout static const uint32_t CC1101_WOREVT1 = 0x1E; // High INT8U Event 0 timeout
static const uint32_t CC1101_WOREVT0 = 0x1F; // Low INT8U Event 0 timeout static const uint32_t CC1101_WOREVT0 = 0x1F; // Low INT8U Event 0 timeout
static const uint32_t CC1101_WORCTRL = 0x20; // Wake On Radio control static const uint32_t CC1101_WORCTRL = 0x20; // Wake On Radio control
static const uint32_t CC1101_FREND1 = 0x21; // Front end RX configuration static const uint32_t CC1101_FREND1 = 0x21; // Front end RX configuration
static const uint32_t CC1101_FREND0 = 0x22; // Front end TX configuration static const uint32_t CC1101_FREND0 = 0x22; // Front end TX configuration
static const uint32_t CC1101_FSCAL3 = 0x23; // Frequency synthesizer calibration static const uint32_t CC1101_FSCAL3 = 0x23; // Frequency synthesizer calibration
static const uint32_t CC1101_FSCAL2 = 0x24; // Frequency synthesizer calibration static const uint32_t CC1101_FSCAL2 = 0x24; // Frequency synthesizer calibration
static const uint32_t CC1101_FSCAL1 = 0x25; // Frequency synthesizer calibration static const uint32_t CC1101_FSCAL1 = 0x25; // Frequency synthesizer calibration
static const uint32_t CC1101_FSCAL0 = 0x26; // Frequency synthesizer calibration static const uint32_t CC1101_FSCAL0 = 0x26; // Frequency synthesizer calibration
static const uint32_t CC1101_RCCTRL1 = 0x27; // RC oscillator configuration static const uint32_t CC1101_RCCTRL1 = 0x27; // RC oscillator configuration
static const uint32_t CC1101_RCCTRL0 = 0x28; // RC oscillator configuration static const uint32_t CC1101_RCCTRL0 = 0x28; // RC oscillator configuration
static const uint32_t CC1101_FSTEST = 0x29; // Frequency synthesizer calibration control static const uint32_t CC1101_FSTEST = 0x29; // Frequency synthesizer calibration control
static const uint32_t CC1101_PTEST = 0x2A; // Production test static const uint32_t CC1101_PTEST = 0x2A; // Production test
static const uint32_t CC1101_AGCTEST = 0x2B; // AGC test static const uint32_t CC1101_AGCTEST = 0x2B; // AGC test
static const uint32_t CC1101_TEST2 = 0x2C; // Various test settings static const uint32_t CC1101_TEST2 = 0x2C; // Various test settings
static const uint32_t CC1101_TEST1 = 0x2D; // Various test settings static const uint32_t CC1101_TEST1 = 0x2D; // Various test settings
static const uint32_t CC1101_TEST0 = 0x2E; // Various test settings static const uint32_t CC1101_TEST0 = 0x2E; // Various test settings
//CC1101 Strobe commands // CC1101 Strobe commands
static const uint32_t CC1101_SRES = 0x30; // Reset chip. static const uint32_t CC1101_SRES = 0x30; // Reset chip.
static const uint32_t CC1101_SFSTXON = 0x31; // Enable and calibrate frequency synthesizer (if MCSM0.FS_AUTOCAL=1). static const uint32_t CC1101_SFSTXON = 0x31; // Enable and calibrate frequency synthesizer (if MCSM0.FS_AUTOCAL=1).
// If in RX/TX: Go to a wait state where only the synthesizer is // If in RX/TX: Go to a wait state where only the synthesizer is
// running (for quick RX / TX turnaround). // running (for quick RX / TX turnaround).
static const uint32_t CC1101_SXOFF = 0x32; // Turn off crystal oscillator. static const uint32_t CC1101_SXOFF = 0x32; // Turn off crystal oscillator.
static const uint32_t CC1101_SCAL = 0x33; // Calibrate frequency synthesizer and turn it off static const uint32_t CC1101_SCAL = 0x33; // Calibrate frequency synthesizer and turn it off
// (enables quick start). // (enables quick start).
static const uint32_t CC1101_SRX = 0x34; // Enable RX. Perform calibration first if coming from IDLE and static const uint32_t CC1101_SRX = 0x34; // Enable RX. Perform calibration first if coming from IDLE and
// MCSM0.FS_AUTOCAL=1. // MCSM0.FS_AUTOCAL=1.
static const uint32_t CC1101_STX = 0x35; // In IDLE state: Enable TX. Perform calibration first if static const uint32_t CC1101_STX = 0x35; // In IDLE state: Enable TX. Perform calibration first if
// MCSM0.FS_AUTOCAL=1. If in RX state and CCA is enabled: // MCSM0.FS_AUTOCAL=1. If in RX state and CCA is enabled:
// Only go to TX if channel is clear. // Only go to TX if channel is clear.
static const uint32_t CC1101_SIDLE = 0x36; // Exit RX / TX, turn off frequency synthesizer and exit static const uint32_t CC1101_SIDLE = 0x36; // Exit RX / TX, turn off frequency synthesizer and exit
// Wake-On-Radio mode if applicable. // Wake-On-Radio mode if applicable.
static const uint32_t CC1101_SAFC = 0x37; // Perform AFC adjustment of the frequency synthesizer static const uint32_t CC1101_SAFC = 0x37; // Perform AFC adjustment of the frequency synthesizer
static const uint32_t CC1101_SWOR = 0x38; // Start automatic RX polling sequence (Wake-on-Radio) static const uint32_t CC1101_SWOR = 0x38; // Start automatic RX polling sequence (Wake-on-Radio)
static const uint32_t CC1101_SPWD = 0x39; // Enter power down mode when CSn goes high. static const uint32_t CC1101_SPWD = 0x39; // Enter power down mode when CSn goes high.
static const uint32_t CC1101_SFRX = 0x3A; // Flush the RX FIFO buffer. static const uint32_t CC1101_SFRX = 0x3A; // Flush the RX FIFO buffer.
static const uint32_t CC1101_SFTX = 0x3B; // Flush the TX FIFO buffer. static const uint32_t CC1101_SFTX = 0x3B; // Flush the TX FIFO buffer.
static const uint32_t CC1101_SWORRST = 0x3C; // Reset real time clock. static const uint32_t CC1101_SWORRST = 0x3C; // Reset real time clock.
static const uint32_t CC1101_SNOP = 0x3D; // No operation. May be used to pad strobe commands to two static const uint32_t CC1101_SNOP = 0x3D; // No operation. May be used to pad strobe commands to two
// INT8Us for simpler software. // INT8Us for simpler software.
//CC1101 STATUS REGSITER // CC1101 STATUS REGSITER
static const uint32_t CC1101_PARTNUM = 0x30; static const uint32_t CC1101_PARTNUM = 0x30;
static const uint32_t CC1101_VERSION = 0x31; static const uint32_t CC1101_VERSION = 0x31;
static const uint32_t CC1101_FREQEST = 0x32; static const uint32_t CC1101_FREQEST = 0x32;
@ -92,19 +92,19 @@ static const uint32_t CC1101_VCO_VC_DAC = 0x39;
static const uint32_t CC1101_TXBYTES = 0x3A; static const uint32_t CC1101_TXBYTES = 0x3A;
static const uint32_t CC1101_RXBYTES = 0x3B; static const uint32_t CC1101_RXBYTES = 0x3B;
//CC1101 PATABLE,TXFIFO,RXFIFO // CC1101 PATABLE,TXFIFO,RXFIFO
static const uint32_t CC1101_PATABLE = 0x3E; static const uint32_t CC1101_PATABLE = 0x3E;
static const uint32_t CC1101_TXFIFO = 0x3F; static const uint32_t CC1101_TXFIFO = 0x3F;
static const uint32_t CC1101_RXFIFO = 0x3F; static const uint32_t CC1101_RXFIFO = 0x3F;
static const uint32_t CC1101_WRITE_BURST = 0x40; // write burst static const uint32_t CC1101_WRITE_BURST = 0x40; // write burst
static const uint32_t CC1101_READ_SINGLE = 0x80; // read single static const uint32_t CC1101_READ_SINGLE = 0x80; // read single
static const uint32_t CC1101_READ_BURST = 0xC0; // read burst static const uint32_t CC1101_READ_BURST = 0xC0; // read burst
static const uint32_t CC1101_BYTES_IN_RXFIFO = 0x7F; // byte number in RXfifo static const uint32_t CC1101_BYTES_IN_RXFIFO = 0x7F; // byte number in RXfifo
static const uint32_t CC1101_MARCSTATE_TX = 0x13; static const uint32_t CC1101_MARCSTATE_TX = 0x13;
static const uint32_t CC1101_MARCSTATE_TX_END = 0x14; static const uint32_t CC1101_MARCSTATE_TX_END = 0x14;
static const uint32_t CC1101_MARCSTATE_RXTX_SWITCH = 0x15; static const uint32_t CC1101_MARCSTATE_RXTX_SWITCH = 0x15;
} } // namespace cc1101
} } // namespace esphome

View file

@ -6,6 +6,7 @@ from esphome.components import spi
from esphome.automation import maybe_simple_id from esphome.automation import maybe_simple_id
from esphome.const import ( from esphome.const import (
CONF_ID, CONF_ID,
CONF_FREQUENCY,
UNIT_EMPTY, UNIT_EMPTY,
UNIT_DECIBEL_MILLIWATT, UNIT_DECIBEL_MILLIWATT,
DEVICE_CLASS_SIGNAL_STRENGTH, DEVICE_CLASS_SIGNAL_STRENGTH,
@ -19,7 +20,7 @@ DEPENDENCIES = ["spi"]
CONF_GDO0 = "gdo0" CONF_GDO0 = "gdo0"
CONF_GDO2 = "gdo2" CONF_GDO2 = "gdo2"
CONF_BANDWIDTH = "bandwidth" CONF_BANDWIDTH = "bandwidth"
CONF_FREQUENCY = "frequency" # CONF_FREQUENCY = "frequency"
CONF_RSSI = "rssi" CONF_RSSI = "rssi"
CONF_LQI = "lqi" CONF_LQI = "lqi"