Files
2026-08-13 16:50:52 +08:00

174 lines
3.7 KiB
C

#include "lisa_mem.h"
#define TAG "main"
#include "lsc.h"
#include "lsc_objrec.h"
#include "lsc_stream_text.h"
#include "lisa_log.h"
#include "lisa_thread.h"
#include "lisa_semaphore.h"
#include <stdint.h>
#include <stddef.h>
#define PID "ce1dda98-f2b8-46f9-a7b9-8aee214a459b"
#define SID "c684eb9e-ff8f-4264-ad03-0369b38ab793"
#ifndef DEVICE_ID_STRING
#error "Please define DEVICE_ID_STRING first"
#endif
const uint8_t test_img[] = {
#include "test.jpg.inc"
};
static void lsc_event_cb(lsc_event_e evt, void *data, uint32_t size, void *usr)
{
LISA_NLOGI("lsc event:%d", evt);
if (evt == LSC_CONNECTED) {
lisa_semaphore_t *sem = usr;
if (sem) {
lisa_semaphore_give(sem);
}
}
}
static void lsc_sse_evt_cb_handle(int evt, const char *data, void *user)
{
LISA_NLOGI("sse evt:%d, data:%s", evt, data);
}
void sample_session_objrec_sync(void)
{
int err;
session_objrec_t objrec = session_objrec_new();
if (objrec == NULL) {
LISA_NLOGE("session_objrec_init failed");
return;
}
struct session_objrec_result *result = lisa_mem_alloc(sizeof(struct session_objrec_result));
if (result == NULL) {
LISA_NLOGE("session_objrec_result alloc failed");
session_objrec_delete(objrec);
return;
}
err = session_objrec_run(objrec, test_img, sizeof(test_img), result, 10 * 1000);
if (err) {
LISA_NLOGE("session_objrec_run failed, err:%d", err);
session_objrec_delete(objrec);
lisa_mem_free(result);
return;
}
/* got result, request the text */
struct lsc_stream_text_request_ctx *ctx =
lsc_stream_text_request_new(result->text_url, lsc_sse_evt_cb_handle, NULL);
if (ctx) {
err = lsc_stream_text_request_start(ctx, 10);
if (err) {
LISA_NLOGE("lsc_stream_text_request failed, err:%d", err);
}
lsc_stream_text_request_delete(ctx);
} else {
LISA_NLOGE("lsc_stream_text_request_ctx new failed");
}
session_objrec_delete(objrec);
lisa_mem_free(result);
LISA_NLOGI("session object sync run done");
}
static void sample_session_objrec_evt_cb_handle(session_objrec_t s, int evt, void *data, uint32_t data_len, void *user)
{
LISA_NLOGI("sample session objrec, evt:%d, data:%s", evt, (char *)data);
}
void sample_session_objrec_async(void)
{
int err;
session_objrec_t objrec = session_objrec_new();
if (objrec == NULL) {
LISA_NLOGE("session_objrec_init failed");
return;
}
err = session_objrec_run_async(objrec, test_img, sizeof(test_img), sample_session_objrec_evt_cb_handle, NULL);
if (err) {
LISA_NLOGE("session_objrec_run failed, err:%d", err);
session_objrec_delete(objrec);
return;
}
LISA_NLOGI("session object async run successfully");
}
__attribute__((weak)) int net_down(void)
{
return 0;
}
__attribute__((weak)) int net_up(void)
{
return 0;
}
__attribute__((weak)) int net_init(void)
{
return 0;
}
int main(void)
{
int err;
lisa_semaphore_t *connected_sem = NULL;
connected_sem = lisa_semaphore_create(1);
if (connected_sem == NULL) {
LISA_NLOGE("connected semaphore creation failed");
return -1;
}
/* network connection */
net_init();
net_up();
lsc_config_t cfg = {
.device_id = DEVICE_ID_STRING,
.product_id = PID,
.secret_id = SID,
};
err = lsc_init(&cfg);
if (err) {
LISA_NLOGE("lsc_init failed, err:%d", err);
return -1;
}
err = lsc_add_callback(LSC_CONNECTED | LSC_DISCONNECTED | LSC_CLOUD_AUTH_FAILD | LSC_GOT_TOKEN, lsc_event_cb,
connected_sem);
if (err) {
LISA_NLOGE("lsc_add_callback failed, err:%d", err);
return -1;
}
err = lsc_connect();
if (err) {
LISA_NLOGE("lsc_connect failed, err:%d", err);
return -1;
}
err = lisa_semaphore_take(connected_sem, 10 * 1000);
if (err) {
LISA_NLOGE("lisa_semaphore_take failed, err:%d", err);
return -1;
}
sample_session_objrec_sync();
sample_session_objrec_async();
}