diff --git a/src/builder/b-private.h b/src/builder/b-private.h
index 3464789..38e2bae 100644
--- a/src/builder/b-private.h
+++ b/src/builder/b-private.h
@@ -99,6 +99,8 @@ struct sai_builder {
lws_dll2_owner_t sai_plat_server_owner; /* servers we connect to */
lws_dll2_owner_t devices_owner; /* sai_serial_t */
+ struct lws_ss_handle *ss_stay;
+
struct sai_nspawn suspend_nspawn;
struct lwsac *conf_head;
@@ -127,6 +129,7 @@ struct sai_builder {
sai_mirror_instance_t mi;
+ char path[256];
char stay;
};
diff --git a/src/builder/b-sai.c b/src/builder/b-sai.c
index a3a786e..c29a08a 100644
--- a/src/builder/b-sai.c
+++ b/src/builder/b-sai.c
@@ -280,7 +280,7 @@ saib_power_stay_rx(void *userobj, const uint8_t *buf, size_t len, int flags)
builder.stay = *buf == '1';
- lwsl_err("%s: stay %d\n", __func__, builder.stay);
+// lwsl_err("%s: stay %d\n", __func__, builder.stay);
if (builder.stay) {
/*
@@ -334,16 +334,15 @@ sai_power_stay_state(void *userobj, void *sh, lws_ss_constate_t state,
{
saib_power_stay_t *g = (saib_power_stay_t *)userobj;
lws_ss_state_return_t r;
- char path[256];
// lwsl_ss_user(lws_ss_from_user(g), "state %s", lws_ss_state_name(state));
switch ((int)state) {
case LWSSSCS_CREATING:
- snprintf(path, sizeof(path) - 1, "%s/stay/%s",
+ snprintf(builder.path, sizeof(builder.path) - 1, "%s/stay/%s",
builder.url_sai_power, builder.host);
- r = lws_ss_set_metadata(lws_ss_from_user(g), "url", path, strlen(path));
+ r = lws_ss_set_metadata(lws_ss_from_user(g), "url", builder.path, strlen(builder.path));
if (r)
lwsl_err("%s: set_metadata said %d\n", __func__, (int)r);
@@ -368,16 +367,10 @@ LWS_SS_INFO("sai_power", saib_power_stay_t)
void
sul_stay_cb(lws_sorted_usec_list_t *sul)
{
+ lws_ss_state_return_t r = lws_ss_client_connect(builder.ss_stay);
- /*
- * Trigger sampling it again
- */
-
- if (lws_ss_create(builder.context, 0, &ssi_saib_power_stay_t,
- NULL, NULL, NULL, NULL)) {
- lwsl_err("%s: failed to create sai-power-stay ss\n", __func__);
- return;
- }
+ if (r)
+ lwsl_ss_err(builder.ss_stay, "Unable to start stay connection (%d)", (int)r);
lws_sul_schedule(builder.context, 0, &builder.sul_stay,
sul_stay_cb, SAI_STAY_POLL_US);
@@ -519,6 +512,16 @@ app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link,
} lws_end_foreach_dll(pxx);
+ /*
+ * ss used to query sai-power about stay situation
+ */
+
+ if (lws_ss_create(builder.context, 0, &ssi_saib_power_stay_t,
+ NULL, &builder.ss_stay, NULL, NULL)) {
+ lwsl_err("%s: failed to create sai-power-stay ss\n", __func__);
+ return 1;
+ }
+
lws_sul_schedule(builder.context, 0, &builder.sul_stay,
sul_stay_cb, 1000);