/*
 * Copyright (c) 2026 Martin Javier Klöckner <mklockner@fi.uba.ar>
 *
 * See file `LICENSE` for full details
 */

#ifndef TASK_INC_TASK_REMOTE_H_
#define TASK_INC_TASK_REMOTE_H_

#ifdef __cplusplus
extern "C" {
#endif

#define G_TASK_REMOTE_QUEUE_LEN 255

typedef struct {
    uint8_t head;
    uint8_t tail;
    uint8_t count;
    uint8_t data[G_TASK_REMOTE_QUEUE_LEN];
} queue_t;

extern uint32_t g_task_remote_cnt;
extern volatile uint32_t g_task_remote_tick_cnt;

extern uint8_t task_remote_uart_rx_byte;
extern queue_t task_remote_rx_queue;

void task_remote_init(void *parameters);
void task_remote_update(void *parameters);

void task_remote_queue_enqueue(queue_t *queue, uint8_t value);

#ifdef __cplusplus
}
#endif

#endif /* TASK_INC_TASK_REMOTE_H_ */
