18#include "wasm_export.h"
33#define W(name, fn, sig) { name, (void*)fn, sig, nullptr }
42static inline bool wbuf_ok(wasm_exec_env_t env,
const void* ptr,
size_t len)
44 if (len == 0)
return true;
45 wasm_module_inst_t inst = wasm_runtime_get_module_inst(env);
46 return ptr && wasm_runtime_validate_native_addr(inst,
const_cast<void*
>(ptr),
47 static_cast<uint64_t
>(len));
52static void w_host_log(wasm_exec_env_t, uint32_t level,
const char* tag,
const char* msg)
53{
host_log(
static_cast<uint8_t
>(level), tag, msg); }
86int translate_and_call(wasm_exec_env_t exec_env,
const char* title,
const ui_item_t* items,
87 uint32_t count, uint32_t sel, uint32_t menu,
bool replace)
89 if (count == 0 || !items) {
93 wasm_module_inst_t inst = wasm_runtime_get_module_inst(exec_env);
95 if (!wasm_runtime_validate_native_addr(inst,
const_cast<ui_item_t*
>(items),
96 static_cast<uint64_t
>(count) *
sizeof(
ui_item_t)))
100 for (uint32_t i = 0; i < count; ++i) {
101 native[i] = items[i];
102 uint32_t off =
static_cast<uint32_t
>(
reinterpret_cast<uintptr_t
>(items[i].
label));
103 if (off != 0 && wasm_runtime_validate_app_str_addr(inst, off)) {
104 native[i].label =
static_cast<const char*
>(wasm_runtime_addr_app_to_native(inst, off));
106 native[i].label =
"";
109 return replace ?
host_ui_replace_list(title, native.get(),
static_cast<uint16_t
>(count), sel, menu)
110 :
host_ui_push_list (title, native.get(), static_cast<uint16_t>(count), sel, menu);
115 uint32_t count, uint32_t sel, uint32_t menu)
117 return translate_and_call(exec_env, title, items, count, sel, menu,
false);
121 uint32_t count, uint32_t sel, uint32_t menu)
123 return translate_and_call(exec_env, title, items, count, sel, menu,
true);
137 uint32_t show_action_id)
146 wasm_module_inst_t inst = wasm_runtime_get_module_inst(exec_env);
147 if (!wasm_runtime_validate_native_addr(inst,
const_cast<ui_item_t*
>(item),
sizeof(
ui_item_t)))
150 uint32_t off =
static_cast<uint32_t
>(
reinterpret_cast<uintptr_t
>(item->
label));
151 if (off != 0 && wasm_runtime_validate_app_str_addr(inst, off)) {
152 native.
label =
static_cast<const char*
>(wasm_runtime_addr_app_to_native(inst, off));
163 wasm_module_inst_t inst = wasm_runtime_get_module_inst(exec_env);
164 if (!wasm_runtime_validate_native_addr(inst,
const_cast<ui_item_t*
>(item),
sizeof(
ui_item_t)))
167 uint32_t off =
static_cast<uint32_t
>(
reinterpret_cast<uintptr_t
>(item->
label));
168 if (off != 0 && wasm_runtime_validate_app_str_addr(inst, off)) {
169 native.
label =
static_cast<const char*
>(wasm_runtime_addr_app_to_native(inst, off));
182 const ui_item_t* items, uint32_t count, uint32_t sel)
185 wasm_module_inst_t inst = wasm_runtime_get_module_inst(exec_env);
187 if (count > kMaxItems) count = kMaxItems;
188 if (!wasm_runtime_validate_native_addr(inst,
const_cast<ui_item_t*
>(items),
189 static_cast<uint64_t
>(count) *
sizeof(
ui_item_t)))
192 for (uint32_t i = 0; i < count; ++i) {
193 native[i] = items[i];
194 uint32_t off =
static_cast<uint32_t
>(
reinterpret_cast<uintptr_t
>(items[i].
label));
195 if (off != 0 && wasm_runtime_validate_app_str_addr(inst, off)) {
196 native[i].
label =
static_cast<const char*
>(wasm_runtime_addr_app_to_native(inst, off));
198 native[i].
label =
"";
207static int32_t
w_host_ui_wink(wasm_exec_env_t, uint32_t count, uint32_t period_ms)
208{
return host_ui_wink(
static_cast<uint8_t
>(count),
static_cast<uint16_t
>(period_ms)); }
211 uint32_t max_len, uint32_t action_id)
215 uint32_t max_len, uint32_t action_id)
219 uint32_t max_attempts, uint32_t action_id)
221 static_cast<uint8_t
>(max_attempts), action_id); }
224 int32_t init, int32_t step,
const char* unit, uint32_t action_id)
228 uint32_t b, uint32_t action_id)
230 static_cast<uint8_t
>(b), action_id); }
244 uint32_t key_action_id, uint32_t widget_action_id)
249 if (!
wbuf_ok(exec_env, w,
sizeof(uint16_t)) || !
wbuf_ok(exec_env, h,
sizeof(uint16_t)))
270 const uint8_t* candidates, uint32_t count,
271 uint8_t* out_font_id)
274 candidates, count, out_font_id);
281 int32_t w,
const char* text, uint32_t align)
283 static_cast<int16_t
>(w), text,
284 static_cast<uint8_t
>(align)); }
287 int32_t w, int32_t h, uint32_t filled)
289 static_cast<int16_t
>(w),
static_cast<int16_t
>(h),
293 int32_t w, int32_t h)
295 static_cast<int16_t
>(w),
static_cast<int16_t
>(h)); }
299 static_cast<int16_t
>(w)); }
303 static_cast<int16_t
>(h)); }
309 int32_t min, int32_t max, int32_t initial, int32_t step)
313 uint32_t max_len,
const char* initial)
335 char* out, uint32_t cap)
349 static_cast<uint16_t
>(repeat_ms)); }
365 size_t len = buf_size;
367 return rc ==
HOST_OK ?
static_cast<int32_t
>(len) : rc;
397 size_t len = buf_size;
399 return rc ==
HOST_OK ?
static_cast<int32_t
>(len) : rc;
408 return rc ==
HOST_OK ?
static_cast<int32_t
>(sz) : rc;
413 size_t len = out_size;
415 return rc ==
HOST_OK ?
static_cast<int32_t
>(len) : rc;
425static int32_t
w_host_sha256(wasm_exec_env_t exec_env,
const uint8_t* data, uint32_t len, uint8_t* out)
432 const uint8_t* data, uint32_t dlen, uint8_t* out)
438static int32_t
w_host_base32_encode(wasm_exec_env_t,
const uint8_t* in, uint32_t in_len,
char* out, uint32_t out_size)
441static int32_t
w_host_base32_decode(wasm_exec_env_t,
const char* in, uint32_t in_len, uint8_t* out, uint32_t out_size)
444static int32_t
w_host_hex_encode(wasm_exec_env_t,
const uint8_t* in, uint32_t in_len,
char* out, uint32_t out_size)
449static int32_t
w_host_http_open(wasm_exec_env_t, uint32_t method,
const char* url, uint32_t timeout)
450{
return host_http_open(
static_cast<uint8_t
>(method), url, timeout); }
466 return rc ==
HOST_OK ?
static_cast<int32_t
>(out_len) : rc;
472 uint32_t port, uint32_t timeout)
474 static_cast<uint16_t
>(port), timeout); }
477 uint32_t len, uint32_t timeout)
481 uint32_t cap, uint32_t timeout)
499 uint8_t* buf, uint32_t buf_size)
501 size_t len = buf_size;
503 return rc ==
HOST_OK ?
static_cast<int32_t
>(len) : rc;
507 const uint8_t* buf, uint32_t len)
535static int32_t
w_host_ecdsa_sign(wasm_exec_env_t exec_env,
const char*
name,
const uint8_t* msg, uint32_t len, uint8_t* sig)
540static int32_t
w_host_eddsa_sign(wasm_exec_env_t exec_env,
const char*
name,
const uint8_t* msg, uint32_t len, uint8_t* sig)
565 if (rc ==
HOST_OK) *out = level ? 1 : 0;
571{
return host_gpio_pwm_start(
static_cast<uint8_t
>(pin), freq,
static_cast<uint16_t
>(duty)); }
578 uint32_t m, uint32_t y, uint32_t action_id)
579{
return host_ui_push_date(title,
static_cast<uint8_t
>(d),
static_cast<uint8_t
>(m),
580 static_cast<uint16_t
>(y), action_id); }
583 uint32_t m, uint32_t action_id)
584{
return host_ui_push_time(title,
static_cast<uint8_t
>(h),
static_cast<uint8_t
>(m), action_id); }
590 uint32_t out_size, uint32_t target)
613 char* mime_out, uint32_t mime_size)
616 const uint8_t* data, uint32_t len)
618static int32_t
w_host_msg_send(wasm_exec_env_t exec_env,
const uint8_t* addr, uint32_t addr_type,
619 const char* mime,
const uint8_t* data, uint32_t len)
623 return host_msg_send(addr,
static_cast<uint8_t
>(addr_type), mime, data, len);
635 static_cast<uint16_t
>(num),
636 static_cast<uint8_t
>(format)); }
639 uint32_t r, uint32_t g, uint32_t b)
641 static_cast<uint8_t
>(r),
642 static_cast<uint8_t
>(g),
643 static_cast<uint8_t
>(b)); }
646 static_cast<uint8_t
>(g),
647 static_cast<uint8_t
>(b)); }
656 const char* label_key,
664 uint32_t icon, uint32_t action_id)
671static int32_t
w_host_base64_encode(wasm_exec_env_t,
const uint8_t* in, uint32_t in_len,
char* out, uint32_t out_size)
673static int32_t
w_host_base64_decode(wasm_exec_env_t,
const char* in, uint32_t in_len, uint8_t* out, uint32_t out_size)
675static int32_t
w_host_hex_decode(wasm_exec_env_t,
const char* in, uint32_t in_len, uint8_t* out, uint32_t out_size)
678 const uint8_t* aad, uint32_t aad_len,
679 const uint8_t* pt, uint32_t pt_len, uint8_t* ct, uint8_t* tag)
687 const uint8_t* aad, uint32_t aad_len,
688 const uint8_t* ct, uint32_t ct_len,
const uint8_t* tag, uint8_t* pt)
705 const uint8_t* data, uint32_t len)
712 size_t len = *out_len;
715 *out_len =
static_cast<uint32_t
>(len);
730 size_t cap = c > 32 ? 32 : c;
733 *count =
static_cast<uint32_t
>(c);
741static int32_t
w_host_adc_read(wasm_exec_env_t exec_env, uint32_t pin, uint16_t* raw, uint16_t* mv)
743 if (!
wbuf_ok(exec_env, raw,
sizeof(uint16_t)) || !
wbuf_ok(exec_env, mv,
sizeof(uint16_t)))
748static int32_t
w_host_i2c_write(wasm_exec_env_t, uint32_t bus, uint32_t addr,
const uint8_t* data, uint32_t len)
749{
return host_i2c_write(
static_cast<uint8_t
>(bus),
static_cast<uint8_t
>(addr), data, len); }
750static int32_t
w_host_i2c_read(wasm_exec_env_t, uint32_t bus, uint32_t addr, uint8_t* data, uint32_t len)
751{
return host_i2c_read(
static_cast<uint8_t
>(bus),
static_cast<uint8_t
>(addr), data, len); }
753 const uint8_t* wr, uint32_t wr_len, uint8_t* rd, uint32_t rd_len)
754{
return host_i2c_write_read(
static_cast<uint8_t
>(bus),
static_cast<uint8_t
>(addr), wr, wr_len, rd, rd_len); }
755static int32_t
w_host_i2c_scan(wasm_exec_env_t exec_env, uint32_t bus, uint8_t* found, uint32_t* count)
759 size_t cap = c > 112 ? 112 : c;
761 int rc =
host_i2c_scan(
static_cast<uint8_t
>(bus), found, &c);
762 *count =
static_cast<uint32_t
>(c);
782 size_t cap = l > 16 ? 16 : l;
785 *len =
static_cast<uint32_t
>(l);
800{
return host_display_draw_pixel(
static_cast<int16_t
>(x),
static_cast<int16_t
>(y),
static_cast<uint16_t
>(color)); }
803 static_cast<int16_t
>(x1),
static_cast<int16_t
>(y1),
static_cast<uint16_t
>(color)); }
806 static_cast<int16_t
>(w),
static_cast<int16_t
>(h),
static_cast<uint16_t
>(color)); }
809 static_cast<int16_t
>(w),
static_cast<int16_t
>(h),
static_cast<uint16_t
>(color)); }
812 static_cast<uint8_t
>(size),
static_cast<uint16_t
>(color)); }
832 size_t nchars = num > 6 ? 6 : num;
853 size_t cap = c > 32 ? 32 : c;
856 *count =
static_cast<uint32_t
>(c);
869 size_t cap = c > 8 ? 8 : c;
872 *count =
static_cast<uint32_t
>(c);
880 const uint8_t* data, uint32_t len, uint32_t wr)
881{
return host_ble_write_char(conn,
static_cast<uint16_t
>(vh), data, len,
static_cast<uint8_t
>(wr)); }
1144 plg_log_error(
"WAMR: PSRAM alloc for host symbol table failed");
1149 if (!wasm_runtime_register_natives(
"cdc",
s_symbols_ram.get(), n)) {
1154 std::snprintf(buf,
sizeof(buf),
"WAMR: %u host imports registered",
static_cast<unsigned>(n));
void plg_log_error(const char *msg)
void plg_log_info(const char *msg)
char name[cdc::hal::ISecureElement::RMEM_NAME_LEN]
void plg_log_warn(const char *msg)
void plg_log_error(const char *msg)
void plg_log_info(const char *msg)
Registers the host API as WAMR native imports under module "cdc".
Shared RAII wrappers for firmware resources.
static constexpr uint16_t MAX_ITEMS
int host_ble_consume_write(uint32_t char_handle, uint8_t *buf, size_t buf_size)
Pull the next queued inbound write for char_handle.
int host_ble_scan_start(uint32_t duration_ms)
Start a central scan for duration_ms milliseconds.
int host_ble_connect(const uint8_t addr[6], uint8_t addr_type)
Connect to a peer. Completion arrives as a BLE_CONNECTED event; read the resulting handle with host_b...
int host_ble_subscribe(uint32_t conn, uint16_t cccd_handle, uint32_t action_id)
Subscribe to notifications on a peer characteristic (by CCCD handle). Each notification fires action_...
int host_ble_send_notification(uint32_t char_handle, const uint8_t *data, size_t len)
Notify subscribers of a value on one of the plugin's characteristics.
int host_ble_discover(uint32_t conn, const uint8_t uuid[16], uint32_t action_id)
Discover the characteristics of one service on a connected peer. Completion fires action_id; read ent...
bool host_ble_scan_done(void)
True when the scan started by host_ble_scan_start() has finished.
int host_ble_read_char(uint32_t conn, uint16_t value_handle, uint32_t action_id)
Start reading a peer characteristic by value handle. Completion fires action_id; read the value with ...
int host_ble_disconnect(uint32_t conn)
Disconnect a connection.
int host_ble_device_name(char *out, size_t out_size)
Copy the local BLE device name into out.
int8_t host_ble_rssi(void)
Signal strength of the active BLE link in dBm, or 0 when idle.
int host_ble_unregister_service(uint32_t service_handle)
Tear down the plugin's registered GATT service.
int host_ble_scan_results(ble_scan_result_t *out, size_t *count)
Read results from the last central scan.
int host_ble_send_indication(uint32_t char_handle, const uint8_t *data, size_t len)
Indicate (acknowledged notify) a value on a plugin characteristic.
bool host_ble_is_enabled(void)
True when the BLE stack is initialised and advertising or connectable.
int host_ble_consume_notification(uint16_t *value_handle_out, uint8_t *buf, size_t buf_size)
Pull the next queued inbound notification.
int host_ble_register_service(ble_service_def_t *def, ble_char_def_t *chars, uint32_t num_chars)
Register the plugin's GATT service and its characteristics.
int host_ble_write_char(uint32_t conn, uint16_t value_handle, const uint8_t *data, size_t len, uint8_t with_response)
Write a value to a peer characteristic by value handle.
int host_ble_consume_discovery(ble_remote_char_t *out, size_t *count)
Pull discovered characteristics after a discovery action fires.
int host_ble_mac(uint8_t out[6])
Read the local BLE MAC address.
int host_ble_consume_read(uint8_t *buf, size_t buf_size)
Pull the value delivered by the last read action.
uint32_t host_ble_conn_handle(void)
Current connection handle (central or peripheral), or 0 when idle.
int host_cmd_consume(char *out, size_t out_size)
Copy the pending command string into out, clearing it.
int host_hex_encode(const uint8_t *in, size_t in_len, char *out, size_t out_size)
Lowercase-hex-encode in into NUL-terminated out.
int host_random_strict(uint8_t *buf, size_t len)
Fill buf with hardware-RNG bytes only; fails without TRNG.
int host_base64_decode(const char *in, size_t in_len, uint8_t *out, size_t out_size)
Base64-decode in into raw bytes in out.
int host_base32_encode(const uint8_t *in, size_t in_len, char *out, size_t out_size)
Base32-encode in into NUL-terminated out.
int host_random(uint8_t *buf, size_t len)
Fill buf with hardware-RNG bytes; may fall back to PRNG.
int host_aes_gcm_decrypt(const uint8_t *key, const uint8_t *iv, const uint8_t *aad, size_t aad_len, const uint8_t *ct, size_t ct_len, const uint8_t tag[16], uint8_t *pt)
AES-256-GCM decrypt and verify.
int host_base64_encode(const uint8_t *in, size_t in_len, char *out, size_t out_size)
Base64-encode in into NUL-terminated out.
int host_aes_gcm_encrypt(const uint8_t *key, const uint8_t *iv, const uint8_t *aad, size_t aad_len, const uint8_t *pt, size_t pt_len, uint8_t *ct, uint8_t tag[16])
AES-256-GCM encrypt.
int host_sha256(const uint8_t *data, size_t len, uint8_t out[32])
SHA-256 hash of data into the 32-byte out.
int host_hmac_sha256(const uint8_t *key, size_t klen, const uint8_t *data, size_t dlen, uint8_t out[32])
HMAC-SHA-256 of data under key into the 32-byte out.
int host_base32_decode(const char *in, size_t in_len, uint8_t *out, size_t out_size)
Base32-decode in into raw bytes in out.
int host_hex_decode(const char *in, size_t in_len, uint8_t *out, size_t out_size)
Hex-decode in (case-insensitive) into raw bytes in out.
int host_event_publish(uint32_t module_event_subtype, uint32_t value)
Publish an EVENT_MODULE_EVENT carrying subtype and value.
int host_event_unsubscribe(uint32_t subscription_id)
Cancel a subscription returned by host_event_subscribe.
int host_event_subscribe(uint32_t event_mask, uint32_t action_id)
Subscribe to one or more events.
int host_i2c_write(uint8_t bus, uint8_t addr, const uint8_t *data, size_t len)
I2C write transaction.
int host_adc_read(uint8_t pin, uint16_t *raw, uint16_t *millivolt)
Single-shot ADC read.
int host_i2c_scan(uint8_t bus, uint8_t *found_addrs, size_t *count)
Scan the I2C bus for responding addresses.
int host_gpio_write(uint8_t pin, bool level)
Drive a digital output high/low.
int host_gpio_set_direction(uint8_t pin, uint8_t direction)
Configure pin direction (one of GPIO_DIR_*).
int host_gpio_set_pull(uint8_t pin, uint8_t pull)
Configure internal pull resistor (one of GPIO_PULL_*).
int host_sao_eeprom_write(uint16_t offset, const uint8_t *buf, size_t len)
Write to the SAO addon EEPROM at byte offset.
int host_gpio_pwm_start(uint8_t pin, uint32_t freq_hz, uint16_t duty_per_mille)
Start LEDC PWM on pin.
int host_gpio_read(uint8_t pin, bool *level)
Sample a digital input.
int host_i2c_write_read(uint8_t bus, uint8_t addr, const uint8_t *wr, size_t wr_len, uint8_t *rd, size_t rd_len)
I2C write-then-read transaction with repeated start.
int host_gpio_pwm_set_duty(uint8_t pin, uint16_t duty_per_mille)
Update PWM duty without restarting the timer.
int host_gpio_release(uint8_t pin)
Release the pin claim so other plugins can use it.
int host_gpio_pwm_stop(uint8_t pin)
Stop PWM and release the LEDC channel.
int host_sao_eeprom_read(uint16_t offset, uint8_t *buf, size_t len)
Read from the SAO addon EEPROM at byte offset.
int host_i2c_read(uint8_t bus, uint8_t addr, uint8_t *data, size_t len)
I2C read transaction.
int host_http_close(int handle)
Release a request handle.
int host_http_read_chunk(int handle, uint8_t *buf, size_t buf_size, size_t *out_len)
Stream one response chunk into buf.
int host_http_set_body(int handle, const uint8_t *body, size_t len)
Stage a request body before perform().
int host_http_status(int handle)
HTTP response status code, or negative on error.
int host_http_perform(int handle)
Send the request and read response headers.
size_t host_http_content_length(int handle)
Response Content-Length, or 0 when unknown / chunked.
int host_http_set_header(int handle, const char *key, const char *value)
Add a request header before perform().
int host_http_open(uint8_t method, const char *url, uint32_t timeout_ms)
Open an HTTP request.
uint8_t host_i18n_current_language(void)
Active language code (HOST_LANG_*).
int host_i18n_tr_core(const char *key, char *out, uint32_t out_cap)
Translate a core.* key from the firmware string table.
int host_i18n_tr_meta(const char *field, char *out, uint32_t out_cap)
Read a metadata field (name, description, ...) from the plugin manifest.
int host_i18n_tr_key(const char *key, char *out, uint32_t out_cap)
Translate a plugin-local key into the current language.
int host_key_consume_next(uint8_t *out_key)
Pop the next queued key press, if any.
bool host_key_pressed(uint8_t key)
True while key is currently held down.
int host_lockscreen_alert(const char *text, uint8_t icon, uint32_t action_id)
Raise a persistent Y/N alert over whatever is on screen, lock screen included, that stays until the u...
int host_lockscreen_register_action(const char *label_key, uint32_t action_id)
Publish (or replace) the plugin's lockscreen quick-action.
int host_lockscreen_unregister_action(void)
Remove the plugin's lockscreen quick-action.
void host_log_hex(const char *tag, const char *label, const uint8_t *data, size_t len)
Write a labelled hex dump of a binary buffer at debug level.
void host_log(uint8_t level, const char *tag, const char *msg)
Write a single log line at the given level.
int host_msg_send(const uint8_t addr[6], uint8_t addr_type, const char *mime_type, const uint8_t *data, size_t len)
Send a typed payload directly to a known peer address (no picker).
int host_msg_unregister_handler(const char *mime_type)
Drop a previously registered handler.
int host_msg_send_interactive(const char *mime_type, const uint8_t *data, size_t len)
Send a typed payload via the firmware-owned interactive peer picker.
int host_msg_consume(uint8_t *buf, size_t buf_size, char *mime_out, size_t mime_size)
Pull the payload delivered by the most recent inbound message action.
int host_msg_register_handler(const char *mime_type, uint32_t action_id)
Register that this plugin handles an incoming MIME type.
int host_nvs_list_keys(char *out, size_t *out_len)
Enumerate the keys in the plugin's namespace.
int host_nvs_erase(const char *key)
Delete a single key.
int host_nvs_set_u32(const char *key, uint32_t value)
Write a uint32 value.
int host_nvs_get_blob(const char *key, uint8_t *buf, size_t *len)
Read a binary blob from NVS.
int host_nvs_get_str(const char *key, char *buf, size_t buf_size)
Read a NUL-terminated string.
int host_nvs_get_u32(const char *key, uint32_t *out)
Read a uint32 value.
int host_nvs_erase_all(void)
Erase every key in the plugin's namespace.
int host_nvs_set_blob(const char *key, const uint8_t *buf, size_t len)
Write a binary blob to NVS.
int host_nvs_set_str(const char *key, const char *value)
Write a NUL-terminated string.
int host_pixel_strip_refresh(void)
Push the strip buffer out over the RMT bus.
int host_pixel_strip_clear(void)
Clear every pixel to off (0, 0, 0).
uint16_t host_pixel_strip_length(void)
Number of pixels the strip was initialised with.
int host_pixel_strip_fill(uint8_t r, uint8_t g, uint8_t b)
Fill every pixel with the same RGB colour.
int host_pixel_strip_set(uint16_t index, uint8_t r, uint8_t g, uint8_t b)
Set one pixel's RGB colour in the strip buffer.
int host_pixel_strip_init(uint8_t gpio_pin, uint16_t num_pixels, uint8_t format)
Initialise or reconfigure the global pixel strip.
int host_pixel_strip_deinit(void)
Tear down the global pixel strip.
bool host_pixel_strip_ready(void)
True when the strip has been successfully initialised.
uint8_t host_charge_status(void)
Charger state machine value - one of CHARGE_*.
uint8_t host_power_source(void)
Active power source - one of POWER_SRC_*.
bool host_is_battery_low(void)
True when battery has crossed the low-warning threshold.
bool host_is_battery_critical(void)
True when battery has crossed the critical-shutdown threshold.
void host_set_sleep_inhibit(uint32_t on)
Hold or release a light-sleep inhibitor for the calling plugin. While any inhibitor is held the badge...
bool host_is_usb_connected(void)
True when USB VBUS is detected.
uint16_t host_battery_mv(void)
Battery voltage in millivolts.
uint8_t host_battery_pct(void)
Battery state of charge as 0..100 percent.
int host_ecc_delete(const char *name)
Erase the named ECC key and free its pool slot.
int host_se_fw_version(uint8_t *riscv, uint8_t *spect)
Read TROPIC01 firmware versions for the RISC-V CPU and SPECT core.
int host_se_chip_id(uint8_t *serial, size_t *len)
Read the TROPIC01 chip serial / identity blob.
int host_rmem_read_named(const char *name, uint8_t *buf, size_t *len)
Read a named retained-memory slot.
int host_rmem_write_named(const char *name, const uint8_t *buf, size_t len)
Write up to host_rmem_slot_size() bytes into a named rmem slot.
uint16_t host_rmem_slot_size(void)
Maximum payload bytes per rmem slot.
int host_ecc_pubkey(const char *name, uint8_t *pub, uint8_t curve)
Export the public key for the named slot.
int host_ecdsa_sign(const char *name, const uint8_t *msg, size_t len, uint8_t sig[64])
ECDSA-sign msg with the P-256 named key; writes 64-byte raw sig.
bool host_rmem_name_used(const char *name)
True if the named rmem slot currently holds data.
int host_eddsa_sign(const char *name, const uint8_t *msg, size_t len, uint8_t sig[64])
Ed25519-sign msg with the named key; writes 64-byte signature.
int host_rmem_erase_named(const char *name)
Erase the contents of a named rmem slot.
int host_ecc_generate(const char *name, uint8_t curve)
Generate a fresh ECC key for the named slot.
int host_ecc_import(const char *name, const uint8_t *priv, uint8_t curve)
Import an externally-generated private key for the named slot.
bool host_ecc_exists(const char *name)
True when the named ECC key currently holds a key.
int host_socket_read(int handle, uint8_t *out, size_t cap, uint32_t timeout_ms)
Read bytes from the stream / receive a datagram from the connected peer.
int host_socket_close(int handle)
Close a socket handle.
int host_socket_write(int handle, const uint8_t *data, size_t len, uint32_t timeout_ms)
Write bytes to the stream / send a datagram to the connected peer.
int host_socket_open(uint8_t proto, const char *host, uint16_t port, uint32_t timeout_ms)
Open an outbound connection to a single remote endpoint.
int host_str_to_utf8(const char *in, char *out, size_t out_size)
Convert CP437 display bytes in in to a UTF-8 string in out.
int host_str_to_display(const char *in, char *out, size_t out_size, uint32_t target)
Decode HTML entities + UTF-8 in in into single-byte display characters in out.
int host_get_build_profile(char *out, size_t out_size)
Copy the build profile name (e.g. "release", "debug") into out.
uint8_t host_cpu_load(void)
Aggregate CPU load across all cores as 0..100 percent. Sampled on demand from FreeRTOS run-time stats...
bool host_feature_enabled(uint16_t feature_id)
True when the firmware was built with the given feature id enabled.
int host_get_firmware_version(char *out, size_t out_size)
Copy the firmware semver string into out.
int host_local_time(struct host_tm *out)
Fill out with the current local time broken into fields.
bool host_is_time_set(void)
True when the RTC has been synchronised at least once.
uint64_t host_uptime_ms(void)
Monotonic milliseconds since boot.
int64_t host_unix_time(void)
Current Unix timestamp in seconds, or 0 if RTC not set.
int32_t host_timezone_offset(void)
Configured timezone offset from UTC in seconds.
int host_view_canvas_get_value(uint32_t widget_id, int32_t *out)
Read the integer value of a slider widget.
int host_view_canvas_invert_rect(int16_t x, int16_t y, int16_t w, int16_t h)
Invert all pixels inside the rectangle.
int host_view_canvas_push(const char *title, uint32_t key_action_id, uint32_t widget_action_id)
Push a new canvas view.
int host_view_canvas_get_focus(uint32_t *out)
Read the currently focused widget id, 0 if none.
int host_view_canvas_hline(int16_t x, int16_t y, int16_t w)
Draw a horizontal line.
int host_view_canvas_vline(int16_t x, int16_t y, int16_t h)
Draw a vertical line.
int host_view_canvas_clear(void)
Clear all draw state and widgets.
int host_view_canvas_draw_rect(int16_t x, int16_t y, int16_t w, int16_t h, bool filled)
Draw a rectangle outline or filled rectangle.
int host_view_canvas_set_text_color(bool inverted)
Switch between normal and inverted (white on black) text.
int host_view_canvas_set_font(uint8_t font_id)
Switch the canvas font to one of the canonical HOST_FONT_* ids.
int host_view_canvas_add_button(uint32_t widget_id)
Add a focusable button widget bound to widget_id.
int host_view_canvas_set_focus(uint32_t widget_id)
Move keyboard focus to the given widget.
int host_view_canvas_get_text(uint32_t widget_id, char *out, size_t cap)
Read the text of a text-input widget.
int host_view_canvas_set_text_size(uint8_t size)
Set text size multiplier (Adafruit-GFX semantics).
int host_view_canvas_set_key_repeat(uint16_t initial_ms, uint16_t repeat_ms)
Configure key auto-repeat timing for the canvas.
int host_view_canvas_draw_text_aligned(int16_t x, int16_t y, int16_t w, const char *text, uint8_t align)
Draw text within a horizontal box.
int host_view_canvas_set_footer(const char *hint)
Override the footer hint of the canvas.
int host_view_canvas_draw_text(int16_t x, int16_t y, const char *text)
Draw text at (x, y) using the current text size/colour.
int host_view_canvas_remove_widget(uint32_t widget_id)
Remove a widget previously added to the canvas.
int host_text_pick_font_that_fits(const char *text, int16_t max_width_px, const uint8_t *candidates, uint32_t count, uint8_t *out_font_id)
Pick the largest HOST_FONT_* whose rendered text fits within max_width_px. Candidates are evaluated i...
int host_view_canvas_add_text(uint32_t widget_id, uint16_t max_len, const char *initial)
Add a T9 text input widget bound to widget_id.
int host_view_canvas_set_text(uint32_t widget_id, const char *text)
Set the text of a text-input widget.
int host_view_canvas_set_long_press_action(uint32_t action_id)
Set the action id fired on a canvas long-press.
int host_view_canvas_set_value(uint32_t widget_id, int32_t value)
Set the integer value of a slider widget.
int host_view_canvas_get_body_size(uint16_t *w, uint16_t *h)
Read the drawable body region (excluding header/footer).
int host_view_canvas_commit(bool full_refresh)
Flush draw state to the panel.
int host_view_canvas_add_slider(uint32_t widget_id, int32_t min, int32_t max, int32_t initial, int32_t step)
Add an integer slider widget bound to widget_id.
int host_display_draw_rect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)
Draw a rectangle outline.
bool host_display_is_busy(void)
True while the panel is processing a previous refresh.
int host_display_draw_pixel(int16_t x, int16_t y, uint16_t color)
Set a single pixel.
int host_display_draw_line(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color)
Draw a line between two points.
uint16_t host_display_width(void)
Display width in pixels.
int host_display_flush(uint8_t refresh_mode)
Push the framebuffer to the panel using the given refresh mode.
int host_display_fill_rect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)
Draw a filled rectangle.
int host_display_draw_text(int16_t x, int16_t y, const char *text, uint8_t size, uint16_t color)
Draw text using the default GFX font.
uint16_t host_display_height(void)
Display height in pixels.
int host_display_clear(void)
Clear the framebuffer to background.
int host_ui_set_inactivity(uint32_t timeout_ms, uint32_t action_id)
Arm an inactivity timer for the plugin's current view.
int host_ui_pop(void)
Pop the topmost view.
int host_ui_set_view_lifecycle(uint32_t hide_action_id, uint32_t show_action_id)
Register hide/show callbacks for the plugin's current top view.
int host_ui_remove_list_item(uint16_t index)
Remove the list row at index (partial redraw).
int host_ui_acquire_exclusive(void)
Claim exclusive UI ownership (block other plugins from pushing views).
int host_ui_push_time(const char *title, uint8_t h, uint8_t m, uint32_t action_id)
Show a time-of-day picker.
int host_ui_repaint(void)
Force a repaint of the current view.
int host_ui_set_view_empty(const char *text)
Override the empty-state text shown by an empty list view.
int host_ui_push_message(const char *text, uint8_t icon, uint32_t duration_ms)
Show a blocking message view that auto-dismisses after duration_ms.
int host_ui_push_t9_input(const char *title, const char *initial, uint16_t max_len, uint32_t action_id)
Show a T9-style text entry.
int host_ui_push_date(const char *title, uint8_t d, uint8_t m, uint16_t y, uint32_t action_id)
Show a date picker.
int host_ui_push_info(const char *title, const char *body)
Show a scrollable info screen with title and body.
int host_ui_release_exclusive(void)
Release a previously acquired exclusive UI lock.
int host_ui_consume_input_text(char *out, size_t out_size)
Read text input committed by the most recent input view.
int host_ui_consume_input_int(int32_t *out)
Read integer input committed by the most recent input view.
int host_ui_push_context_menu(const char *title, const ui_item_t *items, uint16_t count, uint32_t select_action_id)
Show a context menu.
int host_ui_push_confirm(const char *text, uint8_t icon, uint32_t action_id)
Show a Y/N confirmation.
int host_ui_push_slider(const char *title, int32_t min, int32_t max, int32_t init, int32_t step, const char *unit, uint32_t action_id)
Show an integer slider.
int host_ui_push_color_picker(uint8_t initial_r, uint8_t initial_g, uint8_t initial_b, uint32_t action_id)
Show an RGB color picker.
int host_ui_push_toast(const char *text, uint8_t icon, uint16_t duration_ms)
Show a transient toast overlay.
int host_ui_insert_list_item(uint16_t index, const ui_item_t *item)
Insert a list row at index (partial redraw).
int host_ui_push_pin_entry(const char *title, uint8_t max_len, uint8_t max_attempts, uint32_t action_id)
Show a numeric PIN entry.
int host_ui_pop_to_plugin(void)
Pop back to the plugin's first view.
int host_ui_push_list(const char *title, const ui_item_t *items, uint16_t count, uint32_t select_action_id, uint32_t menu_action_id)
Show a list view.
int host_ui_push_password(const char *title, const char *initial, uint16_t max_len, uint32_t action_id)
Show a password entry (masked T9).
int host_ui_update_list_item(uint16_t index, const ui_item_t *item)
Update one list row in place (partial redraw).
int host_ui_wink(uint8_t count, uint16_t period_ms)
Blink the backlight as a visual identification signal.
int host_ui_replace_list(const char *title, const ui_item_t *items, uint16_t count, uint32_t select_action_id, uint32_t menu_action_id)
Replace the plugin's top list view in place; falls back to push when none.
int host_ui_set_view_footer(const char *hint)
Override the footer hint of the plugin's current top view.
int host_usb_cdc_write(const uint8_t *data, size_t len)
Write raw bytes to the USB-CDC TX stream.
int host_fs_view(const char *name)
Open one of the plugin's own files in a scrollable on-screen text viewer (same as opening the file in...
int host_fs_size(const char *name, size_t *out)
Write the byte size of name to *out.
int host_fs_read(const char *name, uint8_t *buf, size_t *len)
Read name into buf.
int host_fs_remove(const char *name)
Delete name.
int host_fs_write(const char *name, const uint8_t *data, size_t len)
Create or overwrite name with len bytes.
int host_fs_list(char *out, size_t *out_len)
Enumerate the plugin's own files.
bool host_wifi_scan_done(void)
True when the scan started by host_wifi_start_scan has finished.
int host_wifi_scan_results(wifi_scan_result_t *out, size_t *count)
Read results from the last completed scan.
int host_wifi_mac(uint8_t out[6])
Read the station MAC address.
int host_wifi_request(uint32_t timeout_ms)
Request the shared WiFi radio and wait up to timeout_ms for join.
int host_wifi_ip(char *out, size_t out_size)
Copy the current IPv4 address as dotted decimal into out.
bool host_wifi_is_connected(void)
True when WiFi STA is associated and has an IP.
int host_wifi_release(void)
Release the WiFi radio held by this plugin.
int8_t host_wifi_rssi(void)
Current AP signal strength in dBm.
int host_wifi_start_scan(void)
Start an asynchronous WiFi scan.
int host_wifi_ssid(char *out, size_t out_size)
Copy the currently joined SSID into out.
CDC Badge OS plugin host API - canonical C ABI contract.
#define HOST_ERR_INVALID_ARG
#define HOST_ERR_NO_MEMORY
std::unique_ptr< T[], CapsFreeDeleter > PsramUniquePtr
PsramUniquePtr< T > psramAlloc(std::size_t count) noexcept
Allocate count elements of T in PSRAM (8-bit capable region).
static int32_t w_host_ble_scan_done(wasm_exec_env_t)
static int32_t w_host_base32_encode(wasm_exec_env_t, const uint8_t *in, uint32_t in_len, char *out, uint32_t out_size)
static int32_t w_host_view_canvas_clear(wasm_exec_env_t)
static int32_t w_host_nvs_set_blob(wasm_exec_env_t, const char *key, const uint8_t *buf, uint32_t len)
static int32_t w_host_view_canvas_set_value(wasm_exec_env_t, uint32_t widget_id, int32_t value)
static int32_t w_host_ui_update_list_item(wasm_exec_env_t exec_env, uint32_t index, const ui_item_t *item)
static int32_t w_host_ble_send_indication(wasm_exec_env_t, uint32_t ch, const uint8_t *data, uint32_t len)
static int32_t w_host_event_unsubscribe(wasm_exec_env_t, uint32_t sub)
static int32_t w_host_msg_register_handler(wasm_exec_env_t, const char *mime, uint32_t aid)
static int32_t w_host_ecc_generate(wasm_exec_env_t, const char *name, uint32_t curve)
static int32_t w_host_display_clear(wasm_exec_env_t)
static int32_t w_host_is_battery_low(wasm_exec_env_t)
static int32_t w_host_ui_push_toast(wasm_exec_env_t, const char *t, uint32_t icon, uint32_t ms)
static uint32_t w_host_pixel_strip_length(wasm_exec_env_t)
static int32_t w_host_hex_encode(wasm_exec_env_t, const uint8_t *in, uint32_t in_len, char *out, uint32_t out_size)
static int32_t w_host_ble_unregister_service(wasm_exec_env_t, uint32_t h)
static int32_t w_host_i2c_read(wasm_exec_env_t, uint32_t bus, uint32_t addr, uint8_t *data, uint32_t len)
static int32_t w_host_ui_pop_to_plugin(wasm_exec_env_t)
static int32_t w_host_str_to_display(wasm_exec_env_t, const char *in, char *out, uint32_t out_size, uint32_t target)
static int32_t w_host_msg_unregister_handler(wasm_exec_env_t, const char *mime)
static int32_t w_host_ecc_import(wasm_exec_env_t exec_env, const char *name, const uint8_t *priv, uint32_t curve)
static bool wbuf_ok(wasm_exec_env_t env, const void *ptr, size_t len)
static int32_t w_host_msg_send(wasm_exec_env_t exec_env, const uint8_t *addr, uint32_t addr_type, const char *mime, const uint8_t *data, uint32_t len)
static int32_t w_host_ble_consume_read(wasm_exec_env_t, uint8_t *buf, uint32_t size)
static int32_t w_host_get_firmware_version(wasm_exec_env_t, char *out, uint32_t out_size)
static int32_t w_host_se_chip_id(wasm_exec_env_t exec_env, uint8_t *serial, uint32_t *len)
static int32_t w_host_ui_push_t9_input(wasm_exec_env_t, const char *title, const char *initial, uint32_t max_len, uint32_t action_id)
static int32_t w_host_ui_repaint(wasm_exec_env_t)
static int32_t w_host_ble_discover(wasm_exec_env_t, uint32_t conn, const uint8_t *uuid, uint32_t aid)
static int32_t w_host_key_consume_next(wasm_exec_env_t, uint8_t *out)
static int32_t w_host_view_canvas_set_long_press_action(wasm_exec_env_t, uint32_t action_id)
static int32_t w_host_ui_remove_list_item(wasm_exec_env_t, uint32_t index)
static int32_t w_host_ble_consume_write(wasm_exec_env_t, uint32_t ch, uint8_t *buf, uint32_t size)
static int32_t w_host_wifi_ssid(wasm_exec_env_t, char *out, uint32_t sz)
static uint32_t w_host_display_width(wasm_exec_env_t)
static int32_t w_host_sha256(wasm_exec_env_t exec_env, const uint8_t *data, uint32_t len, uint8_t *out)
static int32_t w_host_ui_replace_list(wasm_exec_env_t exec_env, const char *title, const ui_item_t *items, uint32_t count, uint32_t sel, uint32_t menu)
static int32_t w_host_nvs_erase(wasm_exec_env_t, const char *key)
static int32_t w_host_gpio_pwm_start(wasm_exec_env_t, uint32_t pin, uint32_t freq, uint32_t duty)
static int32_t w_host_ble_device_name(wasm_exec_env_t, char *out, uint32_t size)
static int32_t w_host_ui_set_view_footer(wasm_exec_env_t, const char *hint)
static int32_t w_host_ui_insert_list_item(wasm_exec_env_t exec_env, uint32_t index, const ui_item_t *item)
static int32_t w_host_pixel_strip_fill(wasm_exec_env_t, uint32_t r, uint32_t g, uint32_t b)
static int32_t w_host_ble_write_char(wasm_exec_env_t, uint32_t conn, uint32_t vh, const uint8_t *data, uint32_t len, uint32_t wr)
static int32_t w_host_aes_gcm_encrypt(wasm_exec_env_t exec_env, const uint8_t *key, const uint8_t *iv, const uint8_t *aad, uint32_t aad_len, const uint8_t *pt, uint32_t pt_len, uint8_t *ct, uint8_t *tag)
static cdc::core::PsramUniquePtr< NativeSymbol > s_symbols_ram
static int32_t w_host_nvs_set_str(wasm_exec_env_t, const char *key, const char *value)
static int32_t w_host_ui_push_password(wasm_exec_env_t, const char *title, const char *initial, uint32_t max_len, uint32_t action_id)
static int32_t w_host_ble_scan_start(wasm_exec_env_t, uint32_t dur)
static int32_t w_host_nvs_get_str(wasm_exec_env_t, const char *key, char *buf, uint32_t buf_size)
static int32_t w_host_aes_gcm_decrypt(wasm_exec_env_t exec_env, const uint8_t *key, const uint8_t *iv, const uint8_t *aad, uint32_t aad_len, const uint8_t *ct, uint32_t ct_len, const uint8_t *tag, uint8_t *pt)
static int32_t w_host_adc_read(wasm_exec_env_t exec_env, uint32_t pin, uint16_t *raw, uint16_t *mv)
static int32_t w_host_pixel_strip_ready(wasm_exec_env_t)
static int32_t w_host_view_canvas_add_text(wasm_exec_env_t, uint32_t widget_id, uint32_t max_len, const char *initial)
static int32_t w_host_ecc_pubkey(wasm_exec_env_t exec_env, const char *name, uint8_t *pub, uint32_t curve)
static int32_t w_host_view_canvas_set_focus(wasm_exec_env_t, uint32_t widget_id)
static int32_t w_host_wifi_is_connected(wasm_exec_env_t)
static int32_t w_host_http_set_header(wasm_exec_env_t, int32_t h, const char *k, const char *v)
static int32_t w_host_ble_subscribe(wasm_exec_env_t, uint32_t conn, uint32_t cccd, uint32_t aid)
static int32_t w_host_fs_view(wasm_exec_env_t, const char *name)
static int32_t w_host_lockscreen_register_action(wasm_exec_env_t, const char *label_key, uint32_t action_id)
static uint32_t w_host_battery_pct(wasm_exec_env_t)
static uint32_t w_host_battery_mv(wasm_exec_env_t)
static int32_t w_host_lockscreen_alert(wasm_exec_env_t, const char *text, uint32_t icon, uint32_t action_id)
static int32_t w_host_is_usb_connected(wasm_exec_env_t)
static int32_t w_host_gpio_pwm_stop(wasm_exec_env_t, uint32_t pin)
void unregister_host_imports()
Unregister the imports (called from PluginManager::deinit()).
static int32_t w_host_wifi_release(wasm_exec_env_t)
static int32_t w_host_gpio_write(wasm_exec_env_t, uint32_t pin, int32_t level)
static int32_t w_host_gpio_read(wasm_exec_env_t exec_env, uint32_t pin, int32_t *out)
static int32_t w_host_nvs_get_blob(wasm_exec_env_t, const char *key, uint8_t *buf, uint32_t buf_size)
static int32_t w_host_pixel_strip_set(wasm_exec_env_t, uint32_t idx, uint32_t r, uint32_t g, uint32_t b)
static int32_t w_host_socket_close(wasm_exec_env_t, int32_t h)
static int32_t w_host_view_canvas_set_text_color(wasm_exec_env_t, uint32_t inverted)
static int32_t w_host_ble_scan_results(wasm_exec_env_t exec_env, void *out, uint32_t *count)
static uint32_t w_host_i18n_current_language(wasm_exec_env_t)
static int32_t w_host_view_canvas_push(wasm_exec_env_t, const char *title, uint32_t key_action_id, uint32_t widget_action_id)
static int32_t w_host_msg_send_interactive(wasm_exec_env_t, const char *mime, const uint8_t *data, uint32_t len)
static int32_t w_host_random(wasm_exec_env_t, uint8_t *buf, uint32_t len)
static int32_t w_host_rmem_name_used(wasm_exec_env_t, const char *name)
static void w_host_log(wasm_exec_env_t, uint32_t level, const char *tag, const char *msg)
static int32_t w_host_view_canvas_set_footer(wasm_exec_env_t, const char *hint)
static uint32_t w_host_cpu_load(wasm_exec_env_t)
static int32_t w_host_display_is_busy(wasm_exec_env_t)
static int32_t w_host_ble_consume_discovery(wasm_exec_env_t exec_env, void *out, uint32_t *count)
static int32_t w_host_pixel_strip_deinit(wasm_exec_env_t)
static int32_t w_host_fs_size(wasm_exec_env_t, const char *name)
static void w_host_log_hex(wasm_exec_env_t, const char *tag, const char *label, const uint8_t *data, uint32_t len)
static int64_t w_host_unix_time(wasm_exec_env_t)
static int32_t w_host_ui_push_color_picker(wasm_exec_env_t, uint32_t r, uint32_t g, uint32_t b, uint32_t action_id)
static int32_t w_host_ecdsa_sign(wasm_exec_env_t exec_env, const char *name, const uint8_t *msg, uint32_t len, uint8_t *sig)
static int32_t w_host_gpio_release(wasm_exec_env_t, uint32_t pin)
static int32_t w_host_http_read_chunk(wasm_exec_env_t, int32_t h, uint8_t *buf, uint32_t buf_size)
static int32_t w_host_rmem_write_named(wasm_exec_env_t, const char *name, const uint8_t *buf, uint32_t len)
static int32_t w_host_view_canvas_get_body_size(wasm_exec_env_t exec_env, uint16_t *w, uint16_t *h)
static int32_t w_host_ui_push_time(wasm_exec_env_t, const char *title, uint32_t h, uint32_t m, uint32_t action_id)
static int32_t w_host_se_fw_version(wasm_exec_env_t exec_env, uint8_t *riscv, uint8_t *spect)
static int32_t w_host_view_canvas_commit(wasm_exec_env_t, uint32_t full_refresh)
static int32_t w_host_ui_wink(wasm_exec_env_t, uint32_t count, uint32_t period_ms)
static int32_t w_host_http_close(wasm_exec_env_t, int32_t h)
static int32_t w_host_view_canvas_get_text(wasm_exec_env_t, uint32_t widget_id, char *out, uint32_t cap)
static int32_t w_host_ui_set_view_empty(wasm_exec_env_t, const char *text)
static int32_t w_host_display_flush(wasm_exec_env_t, uint32_t mode)
static int32_t w_host_base32_decode(wasm_exec_env_t, const char *in, uint32_t in_len, uint8_t *out, uint32_t out_size)
static int32_t w_host_ui_pop(wasm_exec_env_t)
static int32_t w_host_ui_push_date(wasm_exec_env_t, const char *title, uint32_t d, uint32_t m, uint32_t y, uint32_t action_id)
static int32_t w_host_eddsa_sign(wasm_exec_env_t exec_env, const char *name, const uint8_t *msg, uint32_t len, uint8_t *sig)
static int32_t w_host_view_canvas_set_key_repeat(wasm_exec_env_t, uint32_t initial_ms, uint32_t repeat_ms)
static int32_t w_host_is_battery_critical(wasm_exec_env_t)
static int32_t w_host_ui_push_info(wasm_exec_env_t, const char *title, const char *body)
static int32_t w_host_ui_release_exclusive(wasm_exec_env_t)
static int32_t w_host_get_build_profile(wasm_exec_env_t, char *out, uint32_t out_size)
static int32_t w_host_view_canvas_draw_rect(wasm_exec_env_t, int32_t x, int32_t y, int32_t w, int32_t h, uint32_t filled)
static int32_t w_host_ble_register_service(wasm_exec_env_t exec_env, void *def, void *chars, uint32_t num)
static int32_t w_host_usb_cdc_write(wasm_exec_env_t, const uint8_t *data, uint32_t len)
static int32_t w_host_ble_connect(wasm_exec_env_t, const uint8_t *addr, uint32_t type)
static int32_t w_host_fs_read(wasm_exec_env_t, const char *name, uint8_t *buf, uint32_t buf_size)
static int32_t w_host_view_canvas_draw_text_aligned(wasm_exec_env_t, int32_t x, int32_t y, int32_t w, const char *text, uint32_t align)
static uint32_t w_host_power_source(wasm_exec_env_t)
static int32_t w_host_rmem_read_named(wasm_exec_env_t, const char *name, uint8_t *buf, uint32_t buf_size)
static int32_t w_host_ui_set_view_lifecycle(wasm_exec_env_t, uint32_t hide_action_id, uint32_t show_action_id)
static int32_t w_host_gpio_set_pull(wasm_exec_env_t, uint32_t pin, uint32_t pull)
static int32_t w_host_wifi_request(wasm_exec_env_t, uint32_t t)
static int32_t w_host_i18n_tr_core(wasm_exec_env_t, const char *k, char *o, uint32_t c)
static int32_t w_host_view_canvas_get_value(wasm_exec_env_t exec_env, uint32_t widget_id, int32_t *out)
static int32_t w_host_ble_rssi(wasm_exec_env_t)
static int32_t w_host_ecc_delete(wasm_exec_env_t, const char *name)
static int32_t w_host_nvs_set_u32(wasm_exec_env_t, const char *key, uint32_t value)
static int32_t w_host_ble_disconnect(wasm_exec_env_t, uint32_t conn)
static int32_t w_host_rmem_erase_named(wasm_exec_env_t, const char *name)
static int32_t w_host_fs_list(wasm_exec_env_t, char *out, uint32_t out_size)
static int32_t w_host_view_canvas_draw_text(wasm_exec_env_t, int32_t x, int32_t y, const char *text)
static int32_t w_host_socket_write(wasm_exec_env_t, int32_t h, const uint8_t *data, uint32_t len, uint32_t timeout)
static int32_t w_host_pixel_strip_refresh(wasm_exec_env_t)
static int32_t w_host_display_fill_rect(wasm_exec_env_t, int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color)
static int32_t w_host_fs_remove(wasm_exec_env_t, const char *name)
static int32_t w_host_display_draw_rect(wasm_exec_env_t, int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color)
static int32_t w_host_text_pick_font_that_fits(wasm_exec_env_t, const char *text, int32_t max_width_px, const uint8_t *candidates, uint32_t count, uint8_t *out_font_id)
static int32_t w_host_hmac_sha256(wasm_exec_env_t exec_env, const uint8_t *key, uint32_t klen, const uint8_t *data, uint32_t dlen, uint8_t *out)
static int32_t w_host_wifi_mac(wasm_exec_env_t exec_env, uint8_t *out)
static uint64_t w_host_uptime_ms(wasm_exec_env_t)
static int32_t w_host_ecc_exists(wasm_exec_env_t, const char *name)
static int32_t w_host_view_canvas_add_slider(wasm_exec_env_t, uint32_t widget_id, int32_t min, int32_t max, int32_t initial, int32_t step)
static int32_t w_host_base64_encode(wasm_exec_env_t, const uint8_t *in, uint32_t in_len, char *out, uint32_t out_size)
static int32_t w_host_ui_push_list(wasm_exec_env_t exec_env, const char *title, const ui_item_t *items, uint32_t count, uint32_t sel, uint32_t menu)
static int32_t w_host_sao_eeprom_read(wasm_exec_env_t, uint32_t off, uint8_t *buf, uint32_t len)
static int32_t w_host_hex_decode(wasm_exec_env_t, const char *in, uint32_t in_len, uint8_t *out, uint32_t out_size)
static int32_t w_host_ui_acquire_exclusive(wasm_exec_env_t)
static int32_t w_host_timezone_offset(wasm_exec_env_t)
static int32_t w_host_view_canvas_set_text(wasm_exec_env_t, uint32_t widget_id, const char *text)
static int32_t w_host_fs_write(wasm_exec_env_t, const char *name, const uint8_t *data, uint32_t len)
static int32_t w_host_view_canvas_get_focus(wasm_exec_env_t exec_env, uint32_t *out)
static int32_t w_host_i18n_tr_key(wasm_exec_env_t, const char *k, char *o, uint32_t c)
static uint32_t w_host_http_content_length(wasm_exec_env_t, int32_t h)
static int32_t w_host_ble_is_enabled(wasm_exec_env_t)
static int32_t w_host_event_subscribe(wasm_exec_env_t, uint32_t mask, uint32_t action_id)
static int32_t w_host_pixel_strip_clear(wasm_exec_env_t)
static int32_t w_host_gpio_set_direction(wasm_exec_env_t, uint32_t pin, uint32_t dir)
static int32_t w_host_ui_push_confirm(wasm_exec_env_t, const char *text, uint32_t icon, uint32_t action_id)
static int32_t w_host_view_canvas_vline(wasm_exec_env_t, int32_t x, int32_t y, int32_t h)
static int32_t w_host_view_canvas_hline(wasm_exec_env_t, int32_t x, int32_t y, int32_t w)
static int32_t w_host_socket_read(wasm_exec_env_t, int32_t h, uint8_t *out, uint32_t cap, uint32_t timeout)
static int32_t w_host_display_draw_line(wasm_exec_env_t, int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t color)
static int32_t w_host_lockscreen_unregister_action(wasm_exec_env_t)
static int32_t w_host_view_canvas_set_text_size(wasm_exec_env_t, uint32_t size)
static int32_t w_host_display_draw_pixel(wasm_exec_env_t, int32_t x, int32_t y, uint32_t color)
static void w_host_set_sleep_inhibit(wasm_exec_env_t, uint32_t on)
static int32_t w_host_ble_read_char(wasm_exec_env_t, uint32_t conn, uint32_t vh, uint32_t aid)
static int32_t w_host_ui_push_slider(wasm_exec_env_t, const char *title, int32_t min, int32_t max, int32_t init, int32_t step, const char *unit, uint32_t action_id)
static int32_t w_host_gpio_pwm_set_duty(wasm_exec_env_t, uint32_t pin, uint32_t duty)
static uint32_t w_host_rmem_slot_size(wasm_exec_env_t)
static int32_t w_host_view_canvas_set_font(wasm_exec_env_t, uint32_t font_id)
static int32_t w_host_ui_push_pin_entry(wasm_exec_env_t, const char *title, uint32_t max_len, uint32_t max_attempts, uint32_t action_id)
static int32_t w_host_nvs_get_u32(wasm_exec_env_t exec_env, const char *key, uint32_t *out)
static int32_t w_host_ble_send_notification(wasm_exec_env_t, uint32_t ch, const uint8_t *data, uint32_t len)
static int32_t w_host_ble_consume_notification(wasm_exec_env_t exec_env, uint16_t *vh_out, uint8_t *buf, uint32_t size)
static int32_t w_host_view_canvas_invert_rect(wasm_exec_env_t, int32_t x, int32_t y, int32_t w, int32_t h)
static int32_t w_host_nvs_list_keys(wasm_exec_env_t exec_env, char *out, uint32_t *out_len)
static const NativeSymbol s_symbols[]
static int32_t w_host_ble_mac(wasm_exec_env_t exec_env, uint8_t *out)
static int32_t w_host_display_draw_text(wasm_exec_env_t, int32_t x, int32_t y, const char *text, uint32_t size, uint32_t color)
static int32_t w_host_wifi_scan_done(wasm_exec_env_t)
static int32_t w_host_http_status(wasm_exec_env_t, int32_t h)
static int32_t w_host_http_perform(wasm_exec_env_t, int32_t h)
static int32_t w_host_wifi_scan_results(wasm_exec_env_t exec_env, void *out, uint32_t *count)
static int32_t w_host_i2c_write(wasm_exec_env_t, uint32_t bus, uint32_t addr, const uint8_t *data, uint32_t len)
static int32_t w_host_i2c_scan(wasm_exec_env_t exec_env, uint32_t bus, uint8_t *found, uint32_t *count)
static int32_t w_host_view_canvas_remove_widget(wasm_exec_env_t, uint32_t widget_id)
static int32_t w_host_is_time_set(wasm_exec_env_t)
static int32_t w_host_local_time(wasm_exec_env_t exec_env, void *out)
static int32_t w_host_msg_consume(wasm_exec_env_t, uint8_t *buf, uint32_t buf_size, char *mime_out, uint32_t mime_size)
static int32_t w_host_http_open(wasm_exec_env_t, uint32_t method, const char *url, uint32_t timeout)
static uint32_t w_host_display_height(wasm_exec_env_t)
static int32_t w_host_i2c_write_read(wasm_exec_env_t, uint32_t bus, uint32_t addr, const uint8_t *wr, uint32_t wr_len, uint8_t *rd, uint32_t rd_len)
static int32_t w_host_ui_push_message(wasm_exec_env_t, const char *t, uint32_t icon, uint32_t ms)
static int32_t w_host_random_strict(wasm_exec_env_t, uint8_t *buf, uint32_t len)
static uint32_t w_host_charge_status(wasm_exec_env_t)
static int32_t w_host_i18n_tr_meta(wasm_exec_env_t, const char *f, char *o, uint32_t c)
static int32_t w_host_ui_consume_input_int(wasm_exec_env_t exec_env, int32_t *out)
static int32_t w_host_ui_consume_input_text(wasm_exec_env_t, char *out, uint32_t out_size)
static int32_t w_host_sao_eeprom_write(wasm_exec_env_t, uint32_t off, const uint8_t *buf, uint32_t len)
static int32_t w_host_event_publish(wasm_exec_env_t, uint32_t subtype, uint32_t value)
static int32_t w_host_pixel_strip_init(wasm_exec_env_t, uint32_t gpio, uint32_t num, uint32_t format)
static uint32_t w_host_ble_conn_handle(wasm_exec_env_t)
bool register_host_imports()
Register the "cdc" import namespace with WAMR.
static int32_t w_host_cmd_consume(wasm_exec_env_t, char *out, uint32_t out_size)
static int32_t w_host_ui_set_inactivity(wasm_exec_env_t, uint32_t timeout_ms, uint32_t action_id)
static int32_t w_host_feature_enabled(wasm_exec_env_t, uint32_t feature_id)
static int32_t w_host_nvs_erase_all(wasm_exec_env_t)
static int32_t w_host_http_set_body(wasm_exec_env_t, int32_t h, const uint8_t *body, uint32_t len)
static int32_t w_host_wifi_rssi(wasm_exec_env_t)
static int32_t w_host_key_pressed(wasm_exec_env_t, uint32_t key)
static int32_t w_host_socket_open(wasm_exec_env_t, uint32_t proto, const char *host, uint32_t port, uint32_t timeout)
static int32_t w_host_wifi_start_scan(wasm_exec_env_t)
static int32_t w_host_wifi_ip(wasm_exec_env_t, char *out, uint32_t sz)
static int32_t w_host_ui_push_context_menu(wasm_exec_env_t exec_env, const char *title, const ui_item_t *items, uint32_t count, uint32_t sel)
static int32_t w_host_view_canvas_add_button(wasm_exec_env_t, uint32_t widget_id)
static int32_t w_host_base64_decode(wasm_exec_env_t, const char *in, uint32_t in_len, uint8_t *out, uint32_t out_size)
static int32_t w_host_str_to_utf8(wasm_exec_env_t, const char *in, char *out, uint32_t out_size)
One characteristic of a plugin GATT service (peripheral role).
One characteristic discovered on a connected peer (central role).
One device from a central scan.
A plugin GATT service definition (peripheral role). Always primary.