Segments
This commit is contained in:
parent
ead55f4ea6
commit
447e936464
14 changed files with 443 additions and 23 deletions
|
|
@ -137,6 +137,31 @@ unsigned char * RGBController::GetDeviceDescription(unsigned int protocol_versio
|
|||
|
||||
data_size += sizeof(zone_matrix_len[zone_index]);
|
||||
data_size += zone_matrix_len[zone_index];
|
||||
|
||||
if(protocol_version >= 4)
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| Number of segments in zone |
|
||||
\*---------------------------------------------------------*/
|
||||
data_size += sizeof(unsigned short);
|
||||
|
||||
for(int segment_index = 0; segment_index < zones[zone_index].segments.size(); segment_index++)
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| Length of segment name string |
|
||||
\*---------------------------------------------------------*/
|
||||
data_size += sizeof(unsigned short);
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Segment name string data |
|
||||
\*---------------------------------------------------------*/
|
||||
data_size += strlen(zones[zone_index].segments[segment_index].name.c_str()) + 1;
|
||||
|
||||
data_size += sizeof(zones[zone_index].segments[segment_index].type);
|
||||
data_size += sizeof(zones[zone_index].segments[segment_index].start_idx);
|
||||
data_size += sizeof(zones[zone_index].segments[segment_index].leds_count);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data_size += sizeof(num_leds);
|
||||
|
|
@ -424,6 +449,55 @@ unsigned char * RGBController::GetDeviceDescription(unsigned int protocol_versio
|
|||
data_ptr += sizeof(zones[zone_index].matrix_map->map[matrix_idx]);
|
||||
}
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Copy in segments |
|
||||
\*---------------------------------------------------------*/
|
||||
if(protocol_version >= 4)
|
||||
{
|
||||
unsigned short num_segments = zones[zone_index].segments.size();
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Number of segments in zone |
|
||||
\*---------------------------------------------------------*/
|
||||
memcpy(&data_buf[data_ptr], &num_segments, sizeof(num_segments));
|
||||
data_ptr += sizeof(num_segments);
|
||||
|
||||
for(int segment_index = 0; segment_index < num_segments; segment_index++)
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| Length of segment name string |
|
||||
\*---------------------------------------------------------*/
|
||||
unsigned short segment_name_length = strlen(zones[zone_index].segments[segment_index].name.c_str()) + 1;
|
||||
|
||||
memcpy(&data_buf[data_ptr], &segment_name_length, sizeof(segment_name_length));
|
||||
data_ptr += sizeof(segment_name_length);
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Segment name string data |
|
||||
\*---------------------------------------------------------*/
|
||||
strcpy((char *)&data_buf[data_ptr], zones[zone_index].segments[segment_index].name.c_str());
|
||||
data_ptr += segment_name_length;
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Segment type data |
|
||||
\*---------------------------------------------------------*/
|
||||
memcpy(&data_buf[data_ptr], &zones[zone_index].segments[segment_index].type, sizeof(zones[zone_index].segments[segment_index].type));
|
||||
data_ptr += sizeof(zones[zone_index].segments[segment_index].type);
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Segment start index data |
|
||||
\*---------------------------------------------------------*/
|
||||
memcpy(&data_buf[data_ptr], &zones[zone_index].segments[segment_index].start_idx, sizeof(zones[zone_index].segments[segment_index].start_idx));
|
||||
data_ptr += sizeof(zones[zone_index].segments[segment_index].start_idx);
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Segment LED count data |
|
||||
\*---------------------------------------------------------*/
|
||||
memcpy(&data_buf[data_ptr], &zones[zone_index].segments[segment_index].leds_count, sizeof(zones[zone_index].segments[segment_index].leds_count));
|
||||
data_ptr += sizeof(zones[zone_index].segments[segment_index].leds_count);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
|
|
@ -784,6 +858,54 @@ void RGBController::ReadDeviceDescription(unsigned char* data_buf, unsigned int
|
|||
new_zone.matrix_map = NULL;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Copy in segments |
|
||||
\*---------------------------------------------------------*/
|
||||
if(protocol_version >= 4)
|
||||
{
|
||||
unsigned short num_segments = 0;
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Number of segments in zone |
|
||||
\*---------------------------------------------------------*/
|
||||
memcpy(&num_segments, &data_buf[data_ptr], sizeof(num_segments));
|
||||
data_ptr += sizeof(num_segments);
|
||||
|
||||
for(int segment_index = 0; segment_index < num_segments; segment_index++)
|
||||
{
|
||||
segment new_segment;
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Copy in segment name (size+data) |
|
||||
\*---------------------------------------------------------*/
|
||||
unsigned short segmentname_len;
|
||||
memcpy(&segmentname_len, &data_buf[data_ptr], sizeof(unsigned short));
|
||||
data_ptr += sizeof(unsigned short);
|
||||
|
||||
new_segment.name = (char *)&data_buf[data_ptr];
|
||||
data_ptr += segmentname_len;
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Segment type data |
|
||||
\*---------------------------------------------------------*/
|
||||
memcpy(&new_segment.type, &data_buf[data_ptr], sizeof(new_segment.type));
|
||||
data_ptr += sizeof(new_segment.type);
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Segment start index data |
|
||||
\*---------------------------------------------------------*/
|
||||
memcpy(&new_segment.start_idx, &data_buf[data_ptr], sizeof(new_segment.start_idx));
|
||||
data_ptr += sizeof(new_segment.start_idx);
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Segment LED count data |
|
||||
\*---------------------------------------------------------*/
|
||||
memcpy(&new_segment.leds_count, &data_buf[data_ptr], sizeof(new_segment.leds_count));
|
||||
data_ptr += sizeof(new_segment.leds_count);
|
||||
|
||||
new_zone.segments.push_back(new_segment);
|
||||
}
|
||||
}
|
||||
zones.push_back(new_zone);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -135,6 +135,17 @@ typedef struct
|
|||
unsigned int * map;
|
||||
} matrix_map_type;
|
||||
|
||||
/*------------------------------------------------------------------*\
|
||||
| Segment Struct |
|
||||
\*------------------------------------------------------------------*/
|
||||
typedef struct
|
||||
{
|
||||
std::string name; /* Segment name */
|
||||
zone_type type; /* Segment type */
|
||||
unsigned int start_idx; /* Start index within zone */
|
||||
unsigned int leds_count; /* Number of LEDs in segment*/
|
||||
} segment;
|
||||
|
||||
/*------------------------------------------------------------------*\
|
||||
| Zone Struct |
|
||||
\*------------------------------------------------------------------*/
|
||||
|
|
@ -149,6 +160,7 @@ typedef struct
|
|||
unsigned int leds_min; /* Minimum number of LEDs */
|
||||
unsigned int leds_max; /* Maximum number of LEDs */
|
||||
matrix_map_type * matrix_map; /* Matrix map pointer */
|
||||
std::vector<segment> segments; /* Segments in zone */
|
||||
} zone;
|
||||
|
||||
/*------------------------------------------------------------------*\
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue