Files
AI_Printer/components/domain/include/domain.h
2026-02-27 18:39:22 +08:00

282 lines
11 KiB
C

#pragma once
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include "esp_err.h"
#include "platform.h"
#ifdef __cplusplus
extern "C" {
#endif
// ---------- system_runtime ----------
esp_err_t system_runtime_start(void);
esp_err_t system_runtime_shutdown(void);
esp_err_t system_runtime_bootstrap(void);
bool system_runtime_wifi_ready(void);
void system_runtime_get_ip(char *buf, size_t buf_len);
// ---------- raster_tools ----------
esp_err_t raster_tools_render_text_384(const char *text,
uint8_t scale,
uint8_t line_spacing,
uint16_t max_height,
uint16_t *out_width,
uint16_t *out_height,
uint8_t **out_raster,
size_t *out_len,
char *err,
size_t err_len);
esp_err_t raster_tools_convert_gray8_to_raster_384(const uint8_t *gray,
uint16_t src_width,
uint16_t src_height,
bool scale_to_width,
uint8_t threshold,
bool invert,
uint16_t max_height,
uint16_t *out_width,
uint16_t *out_height,
uint8_t **out_raster,
size_t *out_len,
char *err,
size_t err_len);
esp_err_t raster_tools_convert_png_to_raster_384(const uint8_t *png,
size_t png_len,
bool scale_to_width,
uint8_t threshold,
bool invert,
uint16_t max_height,
uint16_t *out_width,
uint16_t *out_height,
uint8_t **out_raster,
size_t *out_len,
char *err,
size_t err_len);
esp_err_t raster_tools_render_qr_384(const char *text,
uint8_t module_scale,
uint8_t margin_modules,
uint8_t ecc_level,
uint16_t max_height,
uint16_t *out_width,
uint16_t *out_height,
uint8_t **out_raster,
size_t *out_len,
char *err,
size_t err_len);
// ---------- image_generation ----------
typedef struct {
const char *prompt;
const char *size;
bool prompt_extend;
bool has_seed;
uint32_t seed;
uint32_t generation_timeout_ms;
uint32_t download_timeout_ms;
} image_generation_request_t;
typedef struct {
uint8_t *png;
size_t png_len;
char image_url[1024];
char output_prompt[256];
char request_id[80];
uint16_t width;
uint16_t height;
} image_generation_result_t;
void image_generation_result_reset(image_generation_result_t *result);
void image_generation_result_free(image_generation_result_t *result);
void image_generation_schedule_prewarm(void);
esp_err_t image_generation_generate_png(const image_generation_request_t *req,
image_generation_result_t *out_result,
char *err,
size_t err_len);
// ---------- screen_preview ----------
esp_err_t screen_preview_show_raster(const uint8_t *raster,
size_t raster_len,
uint16_t width,
uint16_t height,
uint32_t timeout_ms,
char *err,
size_t err_len);
// ---------- printer_protocol ----------
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 enum {
PRINTER_BACKEND_BLE = 0,
PRINTER_BACKEND_DIRECT = 1,
} printer_backend_t;
typedef struct {
printer_backend_t backend;
const char *name;
uint32_t timeout_ms;
} printer_connect_options_t;
typedef struct {
// Direct backend only: bypass paper/temp/battery precheck for this print job.
bool direct_ignore_precheck;
} printer_print_options_t;
typedef struct {
bool supports_connect;
bool supports_gap_move;
bool supports_label_offset;
bool supports_ota;
} printer_capabilities_t;
typedef struct {
printer_backend_t backend;
bool connected;
bool transport_ready;
bool notify_ready;
bool busy;
bool has_paper;
int8_t paper_gpio_level;
uint8_t paper_present_level;
uint8_t battery_percent;
float temperature;
uint16_t mtu;
bool supports_gap_move;
bool supports_label_offset;
bool supports_ota;
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_set_backend(printer_backend_t backend, char *err, size_t err_len);
printer_backend_t printer_protocol_get_backend(void);
esp_err_t printer_protocol_connect(const char *target_name, uint32_t timeout_ms);
esp_err_t printer_protocol_connect_ex(const printer_connect_options_t *opt, char *err, size_t err_len);
void printer_protocol_disconnect(void);
void printer_protocol_get_capabilities(printer_capabilities_t *out_capabilities);
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);
esp_err_t printer_protocol_submit_raster_job_ex(const uint8_t *raster,
size_t raster_len,
uint16_t width,
uint16_t height,
const char *density,
const printer_print_options_t *options,
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);
// ---------- voice_interaction ----------
typedef enum {
VOICE_DIALOG_STATE_IDLE = 0,
VOICE_DIALOG_STATE_LISTENING,
VOICE_DIALOG_STATE_THINKING,
VOICE_DIALOG_STATE_RESPONDING,
} voice_dialog_state_t;
typedef struct {
bool ready;
bool session_active;
bool ws_connected;
bool started;
bool tap_active;
bool marker_image_gen_running;
voice_dialog_state_t dialog_state;
char task_id[40];
char dialog_id[40];
char last_error[128];
int64_t last_event_ms;
uint32_t upstream_packets;
uint32_t downstream_packets;
} voice_interaction_status_t;
esp_err_t voice_interaction_init(void);
esp_err_t voice_interaction_start(char *err, size_t err_len);
esp_err_t voice_interaction_stop(char *err, size_t err_len);
esp_err_t voice_interaction_tap_start(char *err, size_t err_len);
esp_err_t voice_interaction_tap_cancel(char *err, size_t err_len);
void voice_interaction_get_status(voice_interaction_status_t *out_status);
const char *voice_interaction_dialog_state_str(voice_dialog_state_t state);
#ifdef __cplusplus
}
#endif