mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-05-29 13:07:10 +00:00

Apply clang-format for C source files in folder core/app-mgr, core/app-framework, and test-tools. And rename folder component_test to component-test, update zephyr build document. Signed-off-by: Wenyong Huang <wenyong.huang@intel.com>
302 lines
7.6 KiB
C
302 lines
7.6 KiB
C
/*
|
|
* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
|
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <pthread.h>
|
|
#include <unistd.h>
|
|
#include "host_api.h"
|
|
#include "bi-inc/attr_container.h"
|
|
#include "er-coap-constants.h"
|
|
|
|
static char *
|
|
read_file_to_buffer(const char *filename, int *ret_size);
|
|
int send_request_to_applet_success = 0;
|
|
const char *label_for_request = "request1";
|
|
int event_listener_counter = 0;
|
|
char *applet_buf[1024 * 1024];
|
|
const char *host_agent_ip = "127.0.0.1";
|
|
void
|
|
f_aee_response_handler(void *usr_ctx, aee_response_t *response)
|
|
{
|
|
if (response == NULL) {
|
|
printf("########## request timeout!!! \n");
|
|
}
|
|
else {
|
|
char *str = (char *)usr_ctx;
|
|
printf("#### dump response ####\n");
|
|
printf("#### user data: %s \n", str);
|
|
printf("#### status: %d \n", response->status);
|
|
if (response->payload != NULL)
|
|
attr_container_dump((attr_container_t *)response->payload);
|
|
}
|
|
}
|
|
|
|
void
|
|
f_aee_event_listener(const char *url, void *event, int fmt)
|
|
{
|
|
printf("######## event is received. url: %s, fmt:%d ############\n", url,
|
|
fmt);
|
|
|
|
attr_container_t *attr_obj = (attr_container_t *)event;
|
|
|
|
attr_container_dump(attr_obj);
|
|
/*
|
|
if (0 == strcmp(url, "alert/overheat"))
|
|
{
|
|
event_listener_counter++;
|
|
printf("event :%d \n", event_listener_counter);
|
|
}
|
|
*/
|
|
}
|
|
|
|
static int
|
|
print_menu_and_select(void)
|
|
{
|
|
char s[256];
|
|
int choice;
|
|
do {
|
|
printf("\n");
|
|
printf("1. Install TestApplet1\n");
|
|
printf("2. Install TestApplet2\n");
|
|
printf("3. Install TestApplet3\n");
|
|
printf("4. Uninstall TestApplet1\n");
|
|
printf("5. Uninstall TestApplet2\n");
|
|
printf("6. Uninstall TestApplet3\n");
|
|
printf("7. Send Request to TestApplet1\n");
|
|
printf("8. Register Event to TestApplet1\n");
|
|
printf("9. UnRegister Event to TestApplet1\n");
|
|
printf("a. Query Applets\n");
|
|
printf("t. Auto Test\n");
|
|
printf("q. Exit\n");
|
|
printf("Please Select: ");
|
|
|
|
if (fgets(s, sizeof(s), stdin)) {
|
|
if (!strncmp(s, "q", 1))
|
|
return 0;
|
|
if (!strncmp(s, "a", 1))
|
|
return 10;
|
|
if (!strncmp(s, "t", 1))
|
|
return 20;
|
|
choice = atoi(s);
|
|
if (choice >= 1 && choice <= 9)
|
|
return choice;
|
|
}
|
|
} while (1);
|
|
return 0;
|
|
}
|
|
|
|
static void
|
|
install_applet(int index)
|
|
{
|
|
char applet_name[64];
|
|
char applet_file_name[64];
|
|
char *buf;
|
|
int size;
|
|
int ret;
|
|
|
|
printf("Installing TestApplet%d...\n", index);
|
|
snprintf(applet_name, sizeof(applet_name), "TestApplet%d", index);
|
|
snprintf(applet_file_name, sizeof(applet_file_name), "./TestApplet%d.wasm",
|
|
index);
|
|
buf = read_file_to_buffer(applet_file_name, &size);
|
|
if (!buf) {
|
|
printf("Install Applet failed: read file %s error.\n",
|
|
applet_file_name);
|
|
return;
|
|
}
|
|
|
|
// step2. install applet
|
|
ret = aee_applet_install(buf, "wasm", size, applet_name, 5000);
|
|
if (ret) {
|
|
printf("%s install success\n", applet_name);
|
|
}
|
|
free(buf);
|
|
}
|
|
|
|
static void
|
|
uninstall_applet(int index)
|
|
{
|
|
int ret;
|
|
char applet_name[64];
|
|
snprintf(applet_name, sizeof(applet_name), "TestApplet%d", index);
|
|
ret = aee_applet_uninstall(applet_name, "wasm", 5000);
|
|
if (ret) {
|
|
printf("uninstall %s success\n", applet_name);
|
|
}
|
|
else {
|
|
printf("uninstall %s failed\n", applet_name);
|
|
}
|
|
}
|
|
|
|
static void
|
|
send_request(int index)
|
|
{
|
|
char url[64];
|
|
int ret;
|
|
aee_request_t req;
|
|
const char *user_context = "label for request";
|
|
attr_container_t *attr_obj =
|
|
attr_container_create("Send Request to Applet");
|
|
attr_container_set_string(&attr_obj, "String key", "Hello");
|
|
attr_container_set_int(&attr_obj, "Int key", 1000);
|
|
attr_container_set_int64(&attr_obj, "Int64 key", 0x77BBCCDD11223344LL);
|
|
|
|
// specify the target wasm app
|
|
snprintf(url, sizeof(url), "/app/TestApplet%d/url1", index);
|
|
|
|
// not specify the target wasm app
|
|
// snprintf(url, sizeof(url), "url1");
|
|
aee_request_init(&req, url, COAP_PUT);
|
|
aee_request_set_payload(&req, attr_obj,
|
|
attr_container_get_serialize_length(attr_obj),
|
|
PAYLOAD_FORMAT_ATTRIBUTE_OBJECT);
|
|
ret = aee_request_send(&req, f_aee_response_handler, (void *)user_context,
|
|
10000);
|
|
|
|
if (ret) {
|
|
printf("send request to TestApplet1 success\n");
|
|
}
|
|
}
|
|
|
|
static void
|
|
register_event(const char *event_path)
|
|
{
|
|
hostclient_register_event(event_path, f_aee_event_listener);
|
|
}
|
|
|
|
static void
|
|
unregister_event(const char *event_path)
|
|
{
|
|
hostclient_unregister_event(event_path);
|
|
}
|
|
|
|
static void
|
|
query_applets()
|
|
{
|
|
aee_applet_list_t applet_lst;
|
|
aee_applet_list_init(&applet_lst);
|
|
aee_applet_list(5000, &applet_lst);
|
|
aee_applet_list_clean(&applet_lst);
|
|
}
|
|
|
|
static char *
|
|
read_file_to_buffer(const char *filename, int *ret_size)
|
|
{
|
|
FILE *fl = NULL;
|
|
char *buffer = NULL;
|
|
int file_size = 0;
|
|
if (!(fl = fopen(filename, "rb"))) {
|
|
printf("file open failed\n");
|
|
return NULL;
|
|
}
|
|
|
|
fseek(fl, 0, SEEK_END);
|
|
file_size = ftell(fl);
|
|
|
|
if (file_size == 0) {
|
|
printf("file length 0\n");
|
|
return NULL;
|
|
}
|
|
|
|
if (!(buffer = (char *)malloc(file_size))) {
|
|
fclose(fl);
|
|
return NULL;
|
|
}
|
|
|
|
fseek(fl, 0, SEEK_SET);
|
|
|
|
if (!fread(buffer, 1, file_size, fl)) {
|
|
printf("file read failed\n");
|
|
return NULL;
|
|
}
|
|
|
|
fclose(fl);
|
|
*ret_size = file_size;
|
|
return buffer;
|
|
}
|
|
|
|
static void
|
|
auto_test()
|
|
{
|
|
int i;
|
|
int interval = 1000; /* ms */
|
|
while (1) {
|
|
uninstall_applet(1);
|
|
uninstall_applet(2);
|
|
uninstall_applet(3);
|
|
install_applet(1);
|
|
install_applet(2);
|
|
install_applet(3);
|
|
|
|
for (i = 0; i < 60 * 1000 / interval; i++) {
|
|
query_applets();
|
|
send_request(1);
|
|
send_request(2);
|
|
send_request(3);
|
|
usleep(interval * 1000);
|
|
}
|
|
}
|
|
}
|
|
|
|
void
|
|
exit_program()
|
|
{
|
|
hostclient_shutdown();
|
|
exit(0);
|
|
}
|
|
|
|
int
|
|
|
|
main()
|
|
{
|
|
bool ret;
|
|
|
|
// step1. host client init
|
|
ret = hostclient_initialize(host_agent_ip, 3456);
|
|
|
|
if (!ret) {
|
|
printf("host client initialize failed\n");
|
|
return -1;
|
|
}
|
|
|
|
do {
|
|
int choice = print_menu_and_select();
|
|
printf("\n");
|
|
|
|
if (choice == 0)
|
|
exit_program();
|
|
if (choice <= 3)
|
|
install_applet(choice);
|
|
else if (choice <= 6)
|
|
uninstall_applet(choice - 3);
|
|
else if (choice <= 7)
|
|
send_request(1);
|
|
else if (choice <= 8)
|
|
register_event("alert/overheat");
|
|
else if (choice <= 9)
|
|
unregister_event("alert/overheat");
|
|
else if (choice == 10)
|
|
query_applets();
|
|
else if (choice == 20)
|
|
auto_test();
|
|
} while (1);
|
|
|
|
return 0;
|
|
}
|
|
|
|
// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
|
|
// Debug program: F5 or Debug > Start Debugging menu
|
|
|
|
// Tips for Getting Started:
|
|
// 1. Use the Solution Explorer window to add/manage files
|
|
// 2. Use the Team Explorer window to connect to source control
|
|
// 3. Use the Output window to see build output and other messages
|
|
// 4. Use the Error List window to view errors
|
|
// 5. Go to Project > Add New Item to create new code files, or
|
|
// Project > Add Existing Item to add existing code files to the project
|
|
// 6. In the future, to open this project again, go to File > Open > Project
|
|
// and select the .sln file
|