Add LED alternate names field to SDK protocol

This commit is contained in:
Adam Honse 2024-04-06 22:14:42 -05:00
parent 1d9779d80e
commit e634a77860

View file

@ -145,6 +145,7 @@ unsigned char * RGBController::GetDeviceDescription(unsigned int protocol_versio
unsigned short num_zones = (unsigned short)zones.size();
unsigned short num_leds = (unsigned short)leds.size();
unsigned short num_colors = (unsigned short)colors.size();
unsigned short num_led_alt_names= (unsigned short)led_alt_names.size();
unsigned short *mode_name_len = new unsigned short[num_modes];
unsigned short *zone_name_len = new unsigned short[num_zones];
@ -267,6 +268,26 @@ unsigned char * RGBController::GetDeviceDescription(unsigned int protocol_versio
data_size += sizeof(leds[led_index].value);
}
/*---------------------------------------------------------*\
| LED alternate names |
\*---------------------------------------------------------*/
if(protocol_version >= 5)
{
/*-----------------------------------------------------*\
| Number of LED alternate names |
\*-----------------------------------------------------*/
data_size += sizeof(num_led_alt_names);
/*-----------------------------------------------------*\
| LED alternate name strings |
\*-----------------------------------------------------*/
for(int led_idx = 0; led_idx < led_alt_names.size(); led_idx++)
{
data_size += sizeof(unsigned short);
data_size += strlen(led_alt_names[led_idx].c_str()) + 1;
}
}
data_size += sizeof(num_colors);
data_size += num_colors * sizeof(RGBColor);
@ -684,6 +705,32 @@ unsigned char * RGBController::GetDeviceDescription(unsigned int protocol_versio
data_ptr += sizeof(colors[color_index]);
}
/*---------------------------------------------------------*\
| LED alternate names data |
\*---------------------------------------------------------*/
if(protocol_version >= 5)
{
/*---------------------------------------------------------*\
| Number of LED alternate name strings |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &num_led_alt_names, sizeof(num_led_alt_names));
data_ptr += sizeof(num_led_alt_names);
for(int led_idx = 0; led_idx < led_alt_names.size(); led_idx++)
{
/*---------------------------------------------------------*\
| Copy in LED alternate name (size+data) |
\*---------------------------------------------------------*/
unsigned short string_length = strlen(led_alt_names[led_idx].c_str()) + 1;
memcpy(&data_buf[data_ptr], &string_length, sizeof(string_length));
data_ptr += sizeof(string_length);
strcpy((char *)&data_buf[data_ptr], led_alt_names[led_idx].c_str());
data_ptr += string_length;
}
}
delete[] mode_name_len;
delete[] zone_name_len;
delete[] led_name_len;
@ -1113,6 +1160,34 @@ void RGBController::ReadDeviceDescription(unsigned char* data_buf, unsigned int
colors.push_back(new_color);
}
/*---------------------------------------------------------*\
| Copy in LED alternate names data |
\*---------------------------------------------------------*/
if(protocol_version >= 5)
{
/*---------------------------------------------------------*\
| Copy in number of LED alternate names |
\*---------------------------------------------------------*/
unsigned short num_led_alt_names;
memcpy(&num_led_alt_names, &data_buf[data_ptr], sizeof(num_led_alt_names));
data_ptr += sizeof(num_led_alt_names);
for(int led_idx = 0; led_idx < num_led_alt_names; led_idx++)
{
unsigned short string_length = 0;
/*---------------------------------------------------------*\
| Copy in LED alternate name string (size+data) |
\*---------------------------------------------------------*/
memcpy(&string_length, &data_buf[data_ptr], sizeof(string_length));
data_ptr += sizeof(string_length);
led_alt_names.push_back((char *)&data_buf[data_ptr]);
data_ptr += string_length;
}
}
/*---------------------------------------------------------*\
| Setup colors |
\*---------------------------------------------------------*/