#pragma once #include #include #include #include "esp_err.h" typedef enum { PRINT_JOB_STATE_NONE = 0, PRINT_JOB_STATE_QUEUED, PRINT_JOB_STATE_RUNNING, PRINT_JOB_STATE_SUCCESS, PRINT_JOB_STATE_FAILED, PRINT_JOB_STATE_CANCELED, } print_job_state_t; typedef struct { 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; } print_job_info_t; typedef struct { uint8_t major; uint8_t minor; uint8_t patch; } printer_ota_version_t; typedef struct { bool connected; bool notify_ready; bool busy; bool has_paper; uint8_t battery_percent; float temperature; uint16_t mtu; uint32_t queue_depth; int64_t last_status_ms; } printer_runtime_status_t; typedef uint32_t printer_status_poll_pause_token_t; esp_err_t printer_protocol_init(void); esp_err_t printer_protocol_stop(uint32_t timeout_ms); esp_err_t printer_protocol_connect(const char *target_name, uint32_t timeout_ms); void printer_protocol_disconnect(void); void printer_protocol_get_runtime_status(printer_runtime_status_t *out_status); printer_status_poll_pause_token_t printer_protocol_status_poll_pause_acquire(void); void printer_protocol_status_poll_pause_release(printer_status_poll_pause_token_t *token); esp_err_t printer_protocol_submit_raster_job(const uint8_t *raster, size_t raster_len, uint16_t width, uint16_t height, const char *density, uint32_t *out_job_id, char *err, size_t err_len); bool printer_protocol_get_job(uint32_t job_id, print_job_info_t *out_info); esp_err_t printer_protocol_list_jobs(print_job_info_t *out_jobs, size_t max_jobs, size_t *out_count); esp_err_t printer_protocol_cancel_job(uint32_t job_id, char *err, size_t err_len); size_t printer_protocol_cleanup_jobs(bool include_success, bool include_failed, bool include_canceled); esp_err_t printer_protocol_gap_move(uint32_t timeout_ms, char *err, size_t err_len); esp_err_t printer_protocol_get_label_offset(uint8_t *out_offset, uint32_t timeout_ms, char *err, size_t err_len); esp_err_t printer_protocol_set_label_offset(uint8_t offset, uint32_t timeout_ms, char *err, size_t err_len); esp_err_t printer_protocol_ota_jump_boot(uint32_t timeout_ms, char *err, size_t err_len); esp_err_t printer_protocol_ota_jump_app(uint32_t timeout_ms, char *err, size_t err_len); esp_err_t printer_protocol_ota_erase_page(uint16_t page_num, uint32_t timeout_ms, char *err, size_t err_len); esp_err_t printer_protocol_ota_write_frame(uint16_t packet_num, bool is_last_frame, const uint8_t *data, size_t data_len, uint32_t timeout_ms, char *err, size_t err_len); esp_err_t printer_protocol_ota_get_version(printer_ota_version_t *out_version, uint32_t timeout_ms, char *err, size_t err_len); const char *printer_protocol_job_state_str(print_job_state_t state);