Skip to content

Commit

Permalink
Merge pull request #73 from sidoh/fix_rgbw_lt8900
Browse files Browse the repository at this point in the history
Fix RGBW bulbs not working on boot with LT8900 radio
  • Loading branch information
sidoh committed Apr 29, 2017
2 parents d92a2c7 + e5b47c2 commit 644bb74
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 67 deletions.
124 changes: 60 additions & 64 deletions lib/MiLight/LT8900MiLightRadio.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,10 +90,8 @@ bool LT8900MiLightRadio::bCheckRadioConnection(void)
/**************************************************************************/
// Initialize radio module
/**************************************************************************/
void LT8900MiLightRadio::vInitRadioModule(MiLightRadioType type)
{
if (type == RGB_CCT)
{
void LT8900MiLightRadio::vInitRadioModule(MiLightRadioType type) {
if (type == RGB_CCT) {
bool bWriteDefaultDefault = true; // Is it okay to use the default power up values, without setting them

regWrite16(0x00, 0x6F, 0xE0, 7); // Recommended value by PMmicro
Expand Down Expand Up @@ -124,8 +122,7 @@ void LT8900MiLightRadio::vInitRadioModule(MiLightRadioType type)
regWrite16(0x29, 0xB0, 0x00, 7); // Recommended value by PMmicro
regWrite16(0x2A, 0xFD, 0xB0, 7); // Recommended value by PMmicro

if (bWriteDefaultDefault == true)
{
if (bWriteDefaultDefault == true) {
regWrite16(0x01, 0x56, 0x81, 7); // Recommended value by PMmicro
regWrite16(0x0A, 0x7F, 0xFD, 7); // Recommended value by PMmicro
regWrite16(0x0C, 0x00, 0x00, 7); // Recommended value by PMmicro
Expand All @@ -137,65 +134,64 @@ void LT8900MiLightRadio::vInitRadioModule(MiLightRadioType type)
regWrite16(0x26, 0x00, 0x00, 7); // Recommended value by PMmicro
regWrite16(0x2B, 0x00, 0x0F, 7); // Recommended value by PMmicro
}
}
else if((type == RGBW) || (type == CCT) || (type == RGB) )
{
regWrite16(0, 111, 224, 7); // Recommended value by PMmicro
regWrite16(1, 86, 129, 7); // Recommended value by PMmicro
regWrite16(2, 102, 23, 7); // Recommended value by PMmicro
regWrite16(4, 156, 201, 7); // Recommended value by PMmicro
regWrite16(5, 102, 55, 7); // Recommended value by PMmicro
regWrite16(7, 0, 76, 7); // PL1167's TX/RX Enable and Channel Register
regWrite16(8, 108, 144, 7); // Recommended value by PMmicro
regWrite16(9, 72, 0, 7); // PL1167's PA Control Register
regWrite16(10, 127, 253, 7); // Recommended value by PMmicro
regWrite16(11, 0, 8, 7); // PL1167's RSSI OFF Control Register -- ???
regWrite16(12, 0, 0, 7); // Recommended value by PMmicro
regWrite16(13, 72, 189, 7); // Recommended value by PMmicro
regWrite16(22, 0, 255, 7); // Recommended value by PMmicro
regWrite16(23, 128, 5, 7); // PL1167's VCO Calibration Enable Register
regWrite16(24, 0, 103, 7); // Recommended value by PMmicro
regWrite16(25, 22, 89, 7); // Recommended value by PMmicro
regWrite16(26, 25, 224, 7); // Recommended value by PMmicro
regWrite16(27, 19, 0, 7); // Recommended value by PMmicro
regWrite16(28, 24, 0, 7); // Recommended value by PMmicro
regWrite16(32, 72, 0, 7); // PL1167's Data Configure Register: LEN_PREAMBLE = 010 -> (0xAAAAAA) 3 bytes, LEN_SYNCWORD = 01 -> 32 bits, LEN_TRAILER = 000 -> (0x05) 4 bits, TYPE_PKT_DAT = 00 -> NRZ law data, TYPE_FEC = 00 -> No FEC
regWrite16(33, 63, 199, 7); // PL1167's Delay Time Control Register 0
regWrite16(34, 32, 0, 7); // PL1167's Delay Time Control Register 1
regWrite16(35, 3, 0, 7); // PL1167's Power Management and Miscellaneous Register
regWrite16(40, 68, 2, 7); // PL1167's FIFO and SYNCWORD Threshold Register
regWrite16(41, 176, 0, 7); // PL1167's Miscellaneous Register: CRC_ON = 1 -> ON, SCR_ON = 0 -> OFF, EN_PACK_LEN = 1 -> ON, FW_TERM_TX = 1 -> ON, AUTO_ACK = 0 -> OFF, PKT_LEVEL = 0 -> PKT active high, CRC_INIT_DAT = 0
regWrite16(42, 253, 176, 7); // PL1167's SCAN RSSI Register 0
regWrite16(43, 0, 15, 7); // PL1167's SCAN RSSI Register 1
} else if( (type == RGBW) || (type == CCT) || (type == RGB) ) {
regWrite16(0x00, 0x6F, 0xE0, 7); // Recommended value by PMmicro
regWrite16(0x01, 0x56, 0x81, 7); // Recommended value by PMmicro
regWrite16(0x02, 0x66, 0x17, 7); // Recommended value by PMmicro
regWrite16(0x04, 0x9C, 0xC9, 7); // Recommended value by PMmicro
regWrite16(0x05, 0x66, 0x37, 7); // Recommended value by PMmicro
regWrite16(0x07, 0x00, 0x4C, 7); // PL1167's TX/RX Enable and Channel Register
regWrite16(0x08, 0x6C, 0x90, 7); // Recommended value by PMmicro
regWrite16(0x09, 0x48, 0x00, 7); // PL1167's PA Control Register
regWrite16(0x0A, 0x7F, 0xFD, 7); // Recommended value by PMmicro
regWrite16(0x0B, 0x00, 0x08, 7); // PL1167's RSSI OFF Control Register -- ???
regWrite16(0x0C, 0x00, 0x00, 7); // Recommended value by PMmicro
regWrite16(0x0D, 0x48, 0xBD, 7); // Recommended value by PMmicro
regWrite16(0x16, 0x00, 0xFF, 7); // Recommended value by PMmicro
regWrite16(0x17, 0x80, 0x05, 7); // PL1167's VCO Calibration Enable Register
regWrite16(0x18, 0x00, 0x67, 7); // Recommended value by PMmicro
regWrite16(0x19, 0x16, 0x59, 7); // Recommended value by PMmicro
regWrite16(0x1A, 0x19, 0xE0, 7); // Recommended value by PMmicro
regWrite16(0x1B, 0x13, 0x00, 7); // Recommended value by PMmicro
regWrite16(0x1C, 0x18, 0x00, 7); // Recommended value by PMmicro
regWrite16(0x20, 0x48, 0x00, 7); // PL1167's Data Configure Register: LEN_PREAMBLE = 010 -> (0xAAAAAA) 3 bytes, LEN_SYNCWORD = 01 -> 32 bits, LEN_TRAILER = 000 -> (0x05) 4 bits, TYPE_PKT_DAT = 00 -> NRZ law data, TYPE_FEC = 00 -> No FEC
regWrite16(0x21, 0x3F, 0xC7, 7); // PL1167's Delay Time Control Register 0
regWrite16(0x22, 0x20, 0x00, 7); // PL1167's Delay Time Control Register 1
regWrite16(0x23, 0x03, 0x00, 7); // PL1167's Power Management and Miscellaneous Register

regWrite16(0x28, 0x44, 0x02, 7); // PL1167's FIFO and SYNCWORD Threshold Register
regWrite16(0x29, 0xB0, 0x00, 7); // PL1167's Miscellaneous Register: CRC_ON = 1 -> ON, SCR_ON = 0 -> OFF, EN_PACK_LEN = 1 -> ON, FW_TERM_TX = 1 -> ON, AUTO_ACK = 0 -> OFF, PKT_LEVEL = 0 -> PKT active high, CRC_INIT_DAT = 0
regWrite16(0x2A, 0xFD, 0xB0, 7); // PL1167's SCAN RSSI Register 0
regWrite16(0x2B, 0x00, 0x0F, 7); // PL1167's SCAN RSSI Register 1
delay(200);
regWrite16(128, 0, 0, 7);
regWrite16(129, 255, 255, 7);
regWrite16(130, 0, 0, 7);
regWrite16(132, 0, 0, 7);
regWrite16(133, 255, 255, 7);
regWrite16(135, 255, 255, 7);
regWrite16(136, 0, 0, 7);
regWrite16(137, 255, 255, 7);
regWrite16(138, 0, 0, 7);
regWrite16(139, 255, 255, 7);
regWrite16(140, 0, 0, 7);
regWrite16(141, 255, 255, 7);
regWrite16(150, 0, 0, 7);
regWrite16(151, 255, 255, 7);
regWrite16(152, 0, 0, 7);
regWrite16(153, 255, 255, 7);
regWrite16(154, 0, 0, 7);
regWrite16(155, 255, 255, 7);
regWrite16(156, 0, 0, 7);
regWrite16(160, 0, 0, 7);
regWrite16(161, 255, 255, 7);
regWrite16(162, 0, 0, 7);
regWrite16(163, 255, 255, 7);
regWrite16(168, 0, 0, 7);
regWrite16(169, 255, 255, 7);
regWrite16(170, 0, 0, 7);
regWrite16(171, 255, 255, 7);
regWrite16(7, 0, 0, 7); // Disable TX/RX and set radio channel to 0
regWrite16(0x80, 0x00, 0x00, 7);
regWrite16(0x81, 0xFF, 0xFF, 7);
regWrite16(0x82, 0x00, 0x00, 7);
regWrite16(0x84, 0x00, 0x00, 7);
regWrite16(0x85, 0xFF, 0xFF, 7);
regWrite16(0x87, 0xFF, 0xFF, 7);
regWrite16(0x88, 0x00, 0x00, 7);
regWrite16(0x89, 0xFF, 0xFF, 7);
regWrite16(0x8A, 0x00, 0x00, 7);
regWrite16(0x8B, 0xFF, 0xFF, 7);
regWrite16(0x8C, 0x00, 0x00, 7);
regWrite16(0x8D, 0xFF, 0xFF, 7);
regWrite16(0x96, 0x00, 0x00, 7);
regWrite16(0x97, 0xFF, 0xFF, 7);
regWrite16(0x98, 0x00, 0x00, 7);
regWrite16(0x99, 0xFF, 0xFF, 7);
regWrite16(0x9A, 0x00, 0x00, 7);
regWrite16(0x9B, 0xFF, 0xFF, 7);
regWrite16(0x9C, 0x00, 0x00, 7);
regWrite16(0xA0, 0x00, 0x00, 7);
regWrite16(0xA1, 0xFF, 0xFF, 7);
regWrite16(0xA2, 0x00, 0x00, 7);
regWrite16(0xA3, 0xFF, 0xFF, 7);
regWrite16(0xA8, 0x00, 0x00, 7);
regWrite16(0xA9, 0xFF, 0xFF, 7);
regWrite16(0xAA, 0x00, 0x00, 7);
regWrite16(0xAB, 0xFF, 0xFF, 7);
regWrite16(0x07, 0x00, 0x00, 7); // Disable TX/RX and set radio channel to 0
}
}

Expand Down
6 changes: 3 additions & 3 deletions lib/MiLight/MiLightClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ MiLightClient::MiLightClient(MiLightRadioFactory* radioFactory)
for (size_t i = 0; i < numRadios; i++) {
radios[i] = radioFactory->create(*MiLightRadioConfig::ALL_CONFIGS[i]);
}

this->currentRadio = radios[0];
this->currentRadio->configure();
}

void MiLightClient::begin() {
for (size_t i = 0; i < numRadios; i++) {
radios[i]->begin();
}

this->currentRadio = radios[0];
this->currentRadio->configure();
}

void MiLightClient::setHeld(bool held) {
Expand Down

0 comments on commit 644bb74

Please sign in to comment.