chore(repo): keep only current main snapshot
History squashed to one root commit to permanently drop old branch history and objects.
This commit is contained in:
0
components/domain/internal/.gitkeep
Normal file
0
components/domain/internal/.gitkeep
Normal file
124
components/domain/internal/printer_protocol_internal.h
Normal file
124
components/domain/internal/printer_protocol_internal.h
Normal file
@@ -0,0 +1,124 @@
|
||||
#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 PROTO_ADDR 0x01
|
||||
|
||||
#define CMD_POWER 0x00
|
||||
#define CMD_GET_STATUS 0x01
|
||||
#define CMD_SET_DISTANCE 0x02
|
||||
#define CMD_SET_PARAM 0x03
|
||||
#define CMD_SEND_DATA 0x04
|
||||
#define CMD_GAP_MOVE 0x05
|
||||
#define CMD_GET_OFFSET 0x06
|
||||
#define CMD_SET_OFFSET 0x07
|
||||
#define CMD_BOOT_JUMP_BOOT 0xA0
|
||||
#define CMD_BOOT_ERASE_PAGE 0xA1
|
||||
#define CMD_BOOT_WRITE_DATA 0xA2
|
||||
#define CMD_BOOT_JUMP_APP 0xA3
|
||||
#define CMD_BOOT_GET_VERSION 0xA4
|
||||
|
||||
#define EVT_ACK BIT0
|
||||
#define EVT_SHUTDOWN BIT1
|
||||
#define EVT_WORKER_EXITED BIT2
|
||||
#define EVT_STATUS_POLL_EXITED BIT3
|
||||
|
||||
#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
|
||||
|
||||
#define OTA_MAX_DATA_PER_FRAME 236u
|
||||
|
||||
typedef struct {
|
||||
bool used;
|
||||
bool cancel_requested;
|
||||
bool direct_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 uint8_t s_last_rsp_cmd;
|
||||
extern uint16_t s_last_rsp_payload_len;
|
||||
extern uint8_t s_last_rsp_payload[252];
|
||||
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;
|
||||
|
||||
bool printer_protocol_acquire_control_lane(uint32_t timeout_ms, char *err, size_t err_len);
|
||||
void printer_protocol_release_control_lane(void);
|
||||
esp_err_t printer_protocol_send_cmd_wait_response(uint8_t cmd,
|
||||
const uint8_t *payload,
|
||||
uint16_t payload_len,
|
||||
bool with_checksum,
|
||||
uint32_t timeout_ms,
|
||||
bool expect_ack,
|
||||
bool reset_transport_on_timeout,
|
||||
uint8_t *out_payload,
|
||||
size_t out_payload_cap,
|
||||
uint16_t *out_payload_len,
|
||||
char *err,
|
||||
size_t err_len);
|
||||
esp_err_t printer_protocol_send_frame(uint8_t cmd,
|
||||
const uint8_t *payload,
|
||||
uint16_t payload_len,
|
||||
bool with_checksum);
|
||||
bool printer_protocol_wait_response(uint8_t cmd,
|
||||
uint8_t *out_payload,
|
||||
size_t out_payload_cap,
|
||||
uint16_t *out_payload_len,
|
||||
uint32_t timeout_ms);
|
||||
bool printer_protocol_send_cmd_with_ack(uint8_t cmd,
|
||||
const uint8_t *payload,
|
||||
uint16_t payload_len,
|
||||
bool with_checksum,
|
||||
uint32_t timeout_ms,
|
||||
bool reset_transport_on_timeout);
|
||||
|
||||
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);
|
||||
134
components/domain/internal/voice_interaction_internal.h
Normal file
134
components/domain/internal/voice_interaction_internal.h
Normal file
@@ -0,0 +1,134 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "esp_opus_dec.h"
|
||||
#include "esp_opus_enc.h"
|
||||
#include "esp_websocket_client.h"
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/semphr.h"
|
||||
#include "freertos/task.h"
|
||||
#include "domain.h"
|
||||
#include "platform.h"
|
||||
|
||||
#define VOICE_STREAMING_MODE "duplex"
|
||||
#define VOICE_TASK_GROUP "aigc"
|
||||
#define VOICE_TASK_NAME "multimodal-generation"
|
||||
#define VOICE_FUNCTION_NAME "generation"
|
||||
#define VOICE_MODEL_NAME "multimodal-dialog"
|
||||
|
||||
#define VOICE_SAMPLE_BYTES 2
|
||||
#define VOICE_STATUS_LOCK_TIMEOUT_MS 1000
|
||||
#define VOICE_WS_SEND_TIMEOUT_MS 1000
|
||||
#define VOICE_WS_TASK_STACK 24576
|
||||
#define VOICE_UPLINK_TASK_STACK 32768
|
||||
#define VOICE_HEARTBEAT_TASK_STACK 4096
|
||||
#define VOICE_START_CONNECT_TIMEOUT_MS 8000
|
||||
#define VOICE_AUDIO_IO_TIMEOUT_MS 1200
|
||||
#define VOICE_AUDIO_DRAIN_MARGIN_MS 120
|
||||
#define VOICE_AUDIO_DRAIN_QUIET_MS 180
|
||||
#define VOICE_AUDIO_DRAIN_WAIT_MS 2200
|
||||
#define VOICE_AUDIO_DRAIN_WAIT_ON_STOP_MS 3500
|
||||
|
||||
typedef struct {
|
||||
SemaphoreHandle_t lock;
|
||||
esp_websocket_client_handle_t ws;
|
||||
|
||||
TaskHandle_t uplink_task;
|
||||
TaskHandle_t heartbeat_task;
|
||||
bool uplink_task_with_caps;
|
||||
bool heartbeat_task_with_caps;
|
||||
|
||||
void *opus_enc;
|
||||
void *opus_dec;
|
||||
int opus_enc_in_size;
|
||||
int opus_enc_out_size;
|
||||
|
||||
uint8_t *opus_tx_buf;
|
||||
int16_t *pcm_tx_buf;
|
||||
|
||||
uint8_t *pcm_rx_buf;
|
||||
size_t pcm_rx_buf_size;
|
||||
|
||||
uint8_t *text_agg;
|
||||
size_t text_agg_size;
|
||||
|
||||
uint8_t *bin_agg;
|
||||
size_t bin_agg_size;
|
||||
|
||||
bool ready;
|
||||
bool session_active;
|
||||
bool ws_connected;
|
||||
bool started;
|
||||
bool tap_active;
|
||||
bool stop_requested;
|
||||
bool ws_low_stack_warned;
|
||||
bool response_first_sentence_checked;
|
||||
|
||||
voice_dialog_state_t dialog_state;
|
||||
|
||||
char task_id[40];
|
||||
char dialog_id[40];
|
||||
char device_uuid[40];
|
||||
char last_error[128];
|
||||
|
||||
int64_t last_event_ms;
|
||||
int64_t last_downstream_ms;
|
||||
int64_t playback_deadline_ms;
|
||||
uint32_t upstream_packets;
|
||||
uint32_t downstream_packets;
|
||||
} voice_context_t;
|
||||
|
||||
extern voice_context_t s_voice;
|
||||
|
||||
int64_t voice_now_ms(void);
|
||||
void voice_fill_err(char *err, size_t err_len, const char *msg);
|
||||
void voice_set_last_error_locked(const char *msg);
|
||||
bool voice_lock(uint32_t timeout_ms);
|
||||
void voice_unlock(void);
|
||||
void voice_log_status_snapshot(const char *stage);
|
||||
void voice_log_heap_snapshot(const char *stage);
|
||||
void voice_wait_audio_playback_done(uint32_t timeout_ms, const char *stage);
|
||||
void voice_close_audio_with_drain(uint32_t timeout_ms, const char *stage);
|
||||
|
||||
void *voice_malloc_prefer_psram(size_t size);
|
||||
void *voice_calloc_prefer_psram(size_t n, size_t size);
|
||||
void *voice_realloc_prefer_psram(void *ptr, size_t size);
|
||||
|
||||
BaseType_t voice_create_task_prefer_psram(TaskFunction_t task_fn,
|
||||
const char *name,
|
||||
uint32_t stack_size,
|
||||
UBaseType_t priority,
|
||||
TaskHandle_t *out_task,
|
||||
bool *out_with_caps);
|
||||
void voice_delete_task(TaskHandle_t task, bool with_caps);
|
||||
void voice_delete_self_task(bool with_caps);
|
||||
|
||||
void voice_make_uuid(char out[40]);
|
||||
void voice_make_device_uuid(char out[40]);
|
||||
const char *voice_safe_user_id(void);
|
||||
|
||||
esp_err_t voice_setup_opus(char *err, size_t err_len);
|
||||
esp_err_t voice_open_audio_for_dialog(char *err, size_t err_len);
|
||||
void voice_release_runtime_resources(void);
|
||||
|
||||
esp_err_t voice_send_directive(const char *action,
|
||||
const char *directive,
|
||||
bool with_dialog_id);
|
||||
|
||||
void voice_ws_protocol_handle_text_message(const char *text, size_t len);
|
||||
void voice_ws_audio_handle_downstream_packet(const uint8_t *data, size_t len);
|
||||
void voice_marker_try_trigger_image_generation(const char *dialog_id, const char *final_text);
|
||||
bool voice_marker_image_generation_is_running(void);
|
||||
|
||||
void voice_websocket_event_handler(void *handler_args,
|
||||
esp_event_base_t base,
|
||||
int32_t event_id,
|
||||
void *event_data);
|
||||
|
||||
void voice_interaction_ws_init_cjson_hooks(void);
|
||||
|
||||
void voice_uplink_task(void *arg);
|
||||
void voice_heartbeat_task(void *arg);
|
||||
Reference in New Issue
Block a user