Quellcode durchsuchen

fix RGBW bulbs not working on boot with LT8900 radio

Chris Mullins vor 8 Jahren
Ursprung
Commit
e5b47c25f4
2 geänderte Dateien mit 63 neuen und 67 gelöschten Zeilen
  1. 60 64
      lib/MiLight/LT8900MiLightRadio.cpp
  2. 3 3
      lib/MiLight/MiLightClient.cpp

+ 60 - 64
lib/MiLight/LT8900MiLightRadio.cpp

@@ -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
@@ -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
@@ -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
 	}
 }
 

+ 3 - 3
lib/MiLight/MiLightClient.cpp

@@ -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) {