71 auto bits = color_to_bwr(color);
79 for (
size_t i = 0; i < half_buffer; i++)
81 for (
size_t i = 0; i < half_buffer; i++)
82 this->
buffer_[half_buffer + i] = 0xFF;
85 for (
size_t i = 0; i < half_buffer; i++)
87 for (
size_t i = 0; i < half_buffer; i++)
88 this->
buffer_[half_buffer + i] = 0x00;
101 uint16_t x_start = 0;
102 uint16_t x_end = this->
width_ - 1;
103 uint16_t y_start = 0;
104 uint16_t y_end = this->
height_ - 1;
108 this->
cmd_data(0x44, {(uint8_t) (x_start / 8), (uint8_t) (x_end / 8)});
112 this->
cmd_data(0x45, {(uint8_t) y_start, (uint8_t) (y_start >> 8), (uint8_t) (y_end & 0xFF), (uint8_t) (y_end >> 8)});
115 this->
cmd_data(0x4E, {(uint8_t) (x_start / 8)});
118 this->
cmd_data(0x4F, {(uint8_t) y_start, (uint8_t) (y_start >> 8)});
122 const uint32_t start_time =
millis();
124 const size_t half_buffer = buffer_length / 2u;
126 ESP_LOGV(TAG,
"transfer_data: buffer_length=%u, half_buffer=%u", buffer_length, half_buffer);
129 uint8_t bytes_to_send[MAX_TRANSFER_SIZE];
136 ESP_LOGV(TAG,
"transfer_data: sending RED buffer (0x26)");
142 size_t red_offset = half_buffer;
144 size_t bytes_to_copy = std::min(MAX_TRANSFER_SIZE, half_buffer - this->
current_data_index_);
146 for (
size_t i = 0; i < bytes_to_copy; i++) {
154 if (
millis() - start_time > MAX_TRANSFER_TIME) {
167 ESP_LOGV(TAG,
"transfer_data: finished red buffer, sending BLACK buffer (0x24)");
178 size_t bytes_to_copy = std::min(MAX_TRANSFER_SIZE, remaining);
182 size_t buffer_offset = this->current_data_index_ - half_buffer;
184 for (
size_t i = 0; i < bytes_to_copy; i++) {
185 bytes_to_send[i] = this->
buffer_[buffer_offset + i];
190 this->current_data_index_ += bytes_to_copy;
192 if (
millis() - start_time > MAX_TRANSFER_TIME) {
202 ESP_LOGV(TAG,
"transfer_data: completed (red=%u, black=%u bytes)", half_buffer, half_buffer);