mirror of
https://github.com/CalcProgrammer1/OpenRGB.git
synced 2026-10-26 10:29:22 -04:00
Add TPM2 protocol support for LED Strip controller
This commit is contained in:
1 parent
4a1a6cde5d
commit
5503560775
3 files changed
+111
-3
No files matched your search
@@ -20,13 +20,16 @@ LEDStripController::~LEDStripController()
|
||||
{
|
||||
}
|
||||
|
||||
void LEDStripController::Initialize(char* ledstring)
|
||||
void LEDStripController::Initialize(char* ledstring, led_protocol proto)
|
||||
{
|
||||
LPSTR numleds = NULL;
|
||||
LPSTR source = NULL;
|
||||
LPSTR udpport_baud = NULL;
|
||||
LPSTR next = NULL;
|
||||
|
||||
//Set the protocol
|
||||
protocol = proto;
|
||||
|
||||
//Assume serial device unless a different protocol is specified
|
||||
bool serial = TRUE;
|
||||
|
||||
@@ -123,6 +126,23 @@ char* LEDStripController::GetLEDString()
|
||||
}
|
||||
|
||||
void LEDStripController::SetLEDs(std::vector<RGBColor> colors)
|
||||
{
|
||||
switch(protocol)
|
||||
{
|
||||
case LED_PROTOCOL_KEYBOARD_VISUALIZER:
|
||||
SetLEDsKeyboardVisualizer(colors);
|
||||
break;
|
||||
|
||||
case LED_PROTOCOL_ADALIGHT:
|
||||
break;
|
||||
|
||||
case LED_PROTOCOL_TPM2:
|
||||
SetLEDsTPM2(colors);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void LEDStripController::SetLEDsKeyboardVisualizer(std::vector<RGBColor> colors)
|
||||
{
|
||||
unsigned char *serial_buf;
|
||||
|
||||
@@ -160,3 +180,53 @@ void LEDStripController::SetLEDs(std::vector<RGBColor> colors)
|
||||
|
||||
delete[] serial_buf;
|
||||
}
|
||||
|
||||
void LEDStripController::SetLEDsTPM2(std::vector<RGBColor> colors)
|
||||
{
|
||||
unsigned char *serial_buf;
|
||||
|
||||
/*-------------------------------------------------------------*\
|
||||
| TPM2 Protocol |
|
||||
| |
|
||||
| Packet size: Number of data bytes + 5 |
|
||||
| |
|
||||
| 0: Packet Start Byte (0xC9) |
|
||||
| 1: Packet Type (0xDA - Data, 0xC0 - Command, 0xAA - Read) |
|
||||
| 2: Payload Size MSB |
|
||||
| 3: Payload Size LSB |
|
||||
| 4-n: Data Bytes |
|
||||
| n+1: Packet End Byte (0x36) |
|
||||
\*-------------------------------------------------------------*/
|
||||
unsigned int payload_size = (colors.size() * 3);
|
||||
unsigned int packet_size = payload_size + 5;
|
||||
|
||||
serial_buf = new unsigned char[packet_size];
|
||||
|
||||
/*-------------------------------------------------------------*\
|
||||
| Set up header and end byte |
|
||||
\*-------------------------------------------------------------*/
|
||||
serial_buf[0x00] = 0xC9;
|
||||
serial_buf[0x01] = 0xDA;
|
||||
serial_buf[0x02] = (payload_size >> 8);
|
||||
serial_buf[0x03] = (payload_size & 0xFF);
|
||||
serial_buf[packet_size - 1] = 0x36;
|
||||
|
||||
/*-------------------------------------------------------------*\
|
||||
| Copy in color data in RGB order |
|
||||
\*-------------------------------------------------------------*/
|
||||
for(unsigned int color_idx = 0; color_idx < colors.size(); color_idx++)
|
||||
{
|
||||
unsigned int color_offset = color_idx * 3;
|
||||
|
||||
serial_buf[0x04 + color_offset] = RGBGetRValue(colors[color_idx]);
|
||||
serial_buf[0x05 + color_offset] = RGBGetGValue(colors[color_idx]);
|
||||
serial_buf[0x06 + color_offset] = RGBGetBValue(colors[color_idx]);
|
||||
}
|
||||
|
||||
if (serialport != NULL)
|
||||
{
|
||||
serialport->serial_write((char *)serial_buf, packet_size);
|
||||
}
|
||||
|
||||
delete[] serial_buf;
|
||||
}
|
||||
Reference in new issue
Block a user