73 lines
1.8 KiB
C
73 lines
1.8 KiB
C
#pragma once
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#include "domain.h"
|
|
#include "esp_err.h"
|
|
#include "platform.h"
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/event_groups.h"
|
|
#include "freertos/queue.h"
|
|
#include "freertos/semphr.h"
|
|
#include "freertos/task.h"
|
|
|
|
#define EVT_SHUTDOWN BIT0
|
|
#define EVT_WORKER_EXITED BIT1
|
|
#define EVT_STATUS_POLL_EXITED BIT2
|
|
|
|
#define JOB_QUEUE_LEN 8
|
|
#define JOB_SLOT_MAX 16
|
|
#define MAX_RASTER_BYTES (384 * 3000 / 8)
|
|
#define STATUS_POLL_PAUSE_SLOT_MAX 8
|
|
#define PRINTER_JOB_SENTINEL_STOP 0u
|
|
|
|
typedef struct {
|
|
bool used;
|
|
bool cancel_requested;
|
|
bool ignore_precheck;
|
|
uint32_t id;
|
|
print_job_state_t state;
|
|
uint8_t progress;
|
|
uint16_t width;
|
|
uint16_t height;
|
|
size_t data_len;
|
|
char density[16];
|
|
char error[96];
|
|
int64_t created_ms;
|
|
int64_t started_ms;
|
|
int64_t finished_ms;
|
|
uint8_t *data;
|
|
} job_slot_t;
|
|
|
|
typedef struct {
|
|
bool has_paper;
|
|
int8_t paper_gpio_level;
|
|
uint8_t paper_present_level;
|
|
uint8_t battery;
|
|
float temperature;
|
|
int64_t updated_ms;
|
|
} parsed_status_t;
|
|
|
|
extern SemaphoreHandle_t s_mutex;
|
|
extern QueueHandle_t s_job_queue;
|
|
extern EventGroupHandle_t s_evt;
|
|
extern uint32_t s_busy_refcnt;
|
|
extern parsed_status_t s_status;
|
|
extern uint32_t s_status_poll_pause_next_token;
|
|
extern uint32_t s_status_poll_pause_tokens[STATUS_POLL_PAUSE_SLOT_MAX];
|
|
extern uint32_t s_next_job_id;
|
|
extern job_slot_t s_jobs[JOB_SLOT_MAX];
|
|
extern TaskHandle_t s_worker_task;
|
|
extern TaskHandle_t s_status_poll_task_handle;
|
|
extern bool s_protocol_initialized;
|
|
extern bool s_protocol_stopping;
|
|
|
|
int printer_protocol_find_job_idx_locked(uint32_t id);
|
|
int printer_protocol_alloc_job_slot_locked(void);
|
|
bool printer_protocol_is_terminal_state(print_job_state_t state);
|
|
|
|
void printer_protocol_worker_task(void *arg);
|
|
bool printer_protocol_is_stopping(void);
|