307 lines
12 KiB
C
307 lines
12 KiB
C
#pragma once
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#include "esp_err.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);
|
|
|
|
typedef enum {
|
|
DOMAIN_POWER_EVENT_SHUTDOWN_REQUEST = 0,
|
|
} domain_power_event_t;
|
|
|
|
typedef void (*domain_power_event_cb_t)(domain_power_event_t event, void *user_data);
|
|
|
|
esp_err_t system_runtime_set_power_event_callback(domain_power_event_cb_t cb, void *user_data);
|
|
esp_err_t system_runtime_power_off(void);
|
|
|
|
bool system_runtime_wifi_ready(void);
|
|
void system_runtime_get_ip(char *buf, size_t buf_len);
|
|
|
|
// ---------- domain_policy ----------
|
|
uint32_t domain_policy_lifecycle_start_retry_count(void);
|
|
uint32_t domain_policy_lifecycle_retry_backoff_ms(uint32_t attempt);
|
|
bool domain_policy_is_retryable_error(esp_err_t err);
|
|
|
|
uint32_t domain_policy_printer_stop_timeout_ms(void);
|
|
|
|
uint32_t domain_policy_image_generation_timeout_default_ms(void);
|
|
uint32_t domain_policy_image_generation_timeout_min_ms(void);
|
|
uint32_t domain_policy_image_generation_timeout_max_ms(void);
|
|
|
|
uint32_t domain_policy_image_download_timeout_default_ms(void);
|
|
uint32_t domain_policy_image_download_timeout_min_ms(void);
|
|
uint32_t domain_policy_image_download_timeout_max_ms(void);
|
|
|
|
// ---------- 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);
|
|
|
|
// ---------- 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 ----------
|
|
typedef enum {
|
|
SCREEN_PREVIEW_EVENT_BOOTING = 0,
|
|
SCREEN_PREVIEW_EVENT_RUNTIME_READY,
|
|
SCREEN_PREVIEW_EVENT_RUNTIME_ERROR,
|
|
SCREEN_PREVIEW_EVENT_WIFI_PROVISIONING,
|
|
SCREEN_PREVIEW_EVENT_WIFI_CONNECTING,
|
|
SCREEN_PREVIEW_EVENT_WIFI_CONNECTED,
|
|
SCREEN_PREVIEW_EVENT_WIFI_FAILED,
|
|
SCREEN_PREVIEW_EVENT_WIFI_DISCONNECTED,
|
|
SCREEN_PREVIEW_EVENT_DEVICE_BUSY,
|
|
SCREEN_PREVIEW_EVENT_VOICE_CONNECTING,
|
|
SCREEN_PREVIEW_EVENT_VOICE_LISTENING,
|
|
SCREEN_PREVIEW_EVENT_VOICE_PROCESSING,
|
|
SCREEN_PREVIEW_EVENT_VOICE_RESPONDING,
|
|
SCREEN_PREVIEW_EVENT_VOICE_ERROR,
|
|
SCREEN_PREVIEW_EVENT_IMAGE_GENERATING,
|
|
SCREEN_PREVIEW_EVENT_IMAGE_READY,
|
|
SCREEN_PREVIEW_EVENT_IMAGE_FAILED,
|
|
SCREEN_PREVIEW_EVENT_PRINT_QUEUED,
|
|
SCREEN_PREVIEW_EVENT_PRINT_RUNNING,
|
|
SCREEN_PREVIEW_EVENT_PRINT_SUCCESS,
|
|
SCREEN_PREVIEW_EVENT_PRINT_FAILED,
|
|
SCREEN_PREVIEW_EVENT_PRINT_CANCELED,
|
|
SCREEN_PREVIEW_EVENT_SHUTDOWN,
|
|
} screen_preview_event_t;
|
|
|
|
typedef struct {
|
|
const char *detail;
|
|
uint8_t progress;
|
|
} screen_preview_context_t;
|
|
|
|
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);
|
|
esp_err_t screen_preview_show_png(const uint8_t *png,
|
|
size_t png_len,
|
|
uint32_t timeout_ms,
|
|
char *err,
|
|
size_t err_len);
|
|
esp_err_t screen_preview_show_text(const char *text,
|
|
uint32_t timeout_ms,
|
|
char *err,
|
|
size_t err_len);
|
|
esp_err_t screen_preview_show_event(screen_preview_event_t event,
|
|
const screen_preview_context_t *ctx);
|
|
esp_err_t screen_preview_start_runtime_feedback(void);
|
|
void screen_preview_stop_runtime_feedback(void);
|
|
|
|
// ---------- 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 enum {
|
|
PRINTER_JOB_EVENT_QUEUED = 0,
|
|
PRINTER_JOB_EVENT_RUNNING,
|
|
PRINTER_JOB_EVENT_PROGRESS,
|
|
PRINTER_JOB_EVENT_FINISHED,
|
|
} printer_job_event_type_t;
|
|
|
|
typedef struct {
|
|
printer_job_event_type_t type;
|
|
print_job_info_t job;
|
|
} printer_job_event_t;
|
|
|
|
typedef void (*printer_job_event_cb_t)(const printer_job_event_t *event, void *user_data);
|
|
|
|
typedef struct {
|
|
// Printer-only option: bypass paper/temp/battery precheck for this print job.
|
|
bool ignore_precheck;
|
|
} printer_print_options_t;
|
|
|
|
typedef struct {
|
|
bool busy;
|
|
bool has_paper;
|
|
int8_t paper_gpio_level;
|
|
uint8_t paper_present_level;
|
|
bool battery_adc_ready;
|
|
bool ntc_adc_ready;
|
|
int battery_adc_raw;
|
|
int ntc_adc_raw;
|
|
uint16_t battery_mv;
|
|
uint8_t battery_percent;
|
|
float temperature;
|
|
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);
|
|
|
|
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_set_event_callback(printer_job_event_cb_t cb, void *user_data);
|
|
|
|
esp_err_t printer_protocol_gap_move(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_with_timeout(uint32_t timeout_ms, char *err, size_t err_len);
|
|
esp_err_t voice_interaction_start(char *err, size_t err_len);
|
|
esp_err_t voice_interaction_stop_with_timeout(uint32_t timeout_ms, 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);
|
|
esp_err_t voice_interaction_schedule_session_prewarm(void);
|
|
|
|
void voice_interaction_get_status(voice_interaction_status_t *out_status);
|
|
const char *voice_interaction_dialog_state_str(voice_dialog_state_t state);
|
|
|
|
// ---------- product_test_service ----------
|
|
esp_err_t product_test_service_start(void);
|
|
esp_err_t product_test_service_stop(uint32_t timeout_ms);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|