/*void NXPUart::UartCb(const struct device* dev, void* user_data)
{
NXPUart* instance = static_cast<NXPUart*>(user_data);
auto& logger = Logger::GetInstance();
if (!instance->uart_dev_)
{
logger.Error("UART device not initialized");
return;
}
uint8_t buffer[UART_FIFO_SIZE];
std::lock_guard<std::mutex> lock(instance->data_mutex_);
int total_bytes_read = 0;
while (uart_irq_update(dev) && uart_irq_is_pending(dev))
{
// Check if RX IRQ is ready
if (uart_irq_rx_ready(dev))
{
int l_num_bytes_read = 0;
do
{
// Read data in chunks into the buffer
l_num_bytes_read = uart_fifo_read(dev, buffer, UART_FIFO_SIZE);
total_bytes_read += l_num_bytes_read;
if (l_num_bytes_read > 0)
{
// Insert the chunk of data into accumulated_data_
instance->accumulated_data_.insert(instance->accumulated_data_.end(), buffer, buffer + l_num_bytes_read);
logger.Info("Received chunk: %s", std::string(buffer, buffer + l_num_bytes_read).c_str());
}
} while (l_num_bytes_read > 0);
// Debug: Check accumulated data
logger.Info("Accumulated Data so far: %s", std::string(instance->accumulated_data_.begin(), instance->accumulated_data_.end()).c_str());
// Check if accumulated data contains a complete response
if (instance->is_complete_response_callback_)
{
bool is_complete = instance->is_complete_response_callback_(instance->accumulated_data_);
if (is_complete)
{
// If response is complete, process the accumulated data
if (instance->data_received_callback_)
{
instance->data_received_callback_(
instance->accumulated_data_.data(),
instance->accumulated_data_.size()
);
}
// Clear the accumulated data after processing the complete response
instance->accumulated_data_.clear();
}
}
}