684,6 → 684,8 |
// Ensure that the length of the string does not exceed the storage buffer |
if (length > CUBE_STRING_MAX_LENGTH) length = CUBE_STRING_MAX_LENGTH; |
|
Cube_Overlay_Clear(); |
|
// Copy the passed data into the buffer |
int i; |
for (i = 0; i < length; i++) |
745,8 → 747,10 |
cube_data_ptr->frame_index = 0; |
cube_data_ptr->frame_checksum = 0; |
cube_data_ptr->frame_command = 0; |
cube_data_ptr->frame_escape = 0; |
cube_data_ptr->frame_state = READ_LENGTH_MSB; |
} else { |
return; |
} |
// If the input is the escape char, XOR the next char received |
if (c == CUBE_ESCAPE_CHAR) { |
cube_data_ptr->frame_escape = 1; |
774,6 → 778,9 |
case READ_COMMAND: // Store the command byte |
cube_data_ptr->frame_checksum += c; |
cube_data_ptr->frame_command = c; |
if (cube_data_ptr->frame_length == 1) |
cube_data_ptr->frame_state = READ_CHECKSUM; |
else |
cube_data_ptr->frame_state = READ_DATA; |
break; |
case READ_DATA: // Read the passed data into the buffer |
789,20 → 796,49 |
Cube_Data_In_Process_Frame(); |
} |
cube_data_ptr->frame_state = IDLE; |
cube_data_ptr->frame_index = 0; |
cube_data_ptr->frame_length = 0; |
break; |
default: |
break; |
} |
} |
} |
|
void Cube_Data_In_Process_Frame(void) { |
// Here we process received frames depending on the command |
char *frame = cube_data_ptr->frame_buffer; |
switch (cube_data_ptr->frame_command) { |
case CUBE_COMMAND_SET_BC: |
TIMER5_Stop(); |
Delay_MS(1); // Need to wait for all SPI writes to complete |
Cube_Write_DCS(frame[0]); |
TIMER5_Start(); |
break; |
case CUBE_COMMAND_CLEAR: |
Cube_Clear(); |
break; |
case CUBE_COMMAND_SET_PIXEL: |
Cube_Set_Pixel(frame[0], frame[1], frame[2], frame[3], frame[4], frame[5]); |
break; |
case CUBE_COMMAND_SET_LAYER: |
Cube_Data_Direct_Write(frame[0], &frame[1]); |
break; |
case CUBE_COMMAND_START_TEXT: |
Cube_Text_Init(&frame[3], cube_data_ptr->frame_length - 4, frame[0], frame[1], frame[2]); |
TIMER4_Start(); |
break; |
case CUBE_COMMAND_STOP_TEXT: |
TIMER4_Stop(); |
Cube_Overlay_Clear(); |
break; |
default: |
break; |
} |
} |
|
void Cube_Data_Direct_Write(char layer, char *buffer) { |
int i; |
for (i = 0; i < GCS_LAYER_SIZE; i++) { |
cube_data_ptr->GCS[layer][i] = buffer[i]; |
} |
} |