All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
js_modules.h
1#pragma once
2
3#include <stdint.h>
4#include "js_thread_i.h"
5#include "js_value.h"
7#include <flipper_application/plugins/plugin_manager.h>
8#include <flipper_application/plugins/composite_resolver.h>
9
10#ifdef __cplusplus
11extern "C" {
12#endif
13
14#define PLUGIN_APP_ID "js"
15#define PLUGIN_API_VERSION 1
16
17#define JS_SDK_VENDOR "flipperdevices"
18#define JS_SDK_MAJOR 0
19#define JS_SDK_MINOR 3
20
24#define JS_GET_INST(mjs, obj) mjs_get_ptr(mjs, mjs_get(mjs, obj, INST_PROP_NAME, ~0))
28#define JS_GET_CONTEXT(mjs) JS_GET_INST(mjs, mjs_get_this(mjs))
29
41#define JS_ASSIGN_MULTI(mjs, object) \
42 for(struct { \
43 struct mjs* mjs; \
44 mjs_val_t val; \
45 int i; \
46 } _ass_multi = {mjs, object, 0}; \
47 _ass_multi.i == 0; \
48 _ass_multi.i++)
49#define JS_FIELD(name, value) mjs_set(_ass_multi.mjs, _ass_multi.val, name, ~0, value)
50
66typedef enum {
67 JsForeignMagicStart = 0x15BAD000,
68 JsForeignMagic_JsEventLoopContract,
69} JsForeignMagic;
70
76#define JS_ERROR_AND_RETURN(mjs, error_code, ...) \
77 do { \
78 mjs_prepend_errorf(mjs, error_code, __VA_ARGS__); \
79 mjs_return(mjs, MJS_UNDEFINED); \
80 return; \
81 } while(0)
82
88#define JS_ERROR_AND_RETURN_VAL(mjs, error_code, ret_val, ...) \
89 do { \
90 mjs_prepend_errorf(mjs, error_code, __VA_ARGS__); \
91 mjs_return(mjs, MJS_UNDEFINED); \
92 return ret_val; \
93 } while(0)
94
95typedef struct JsModules JsModules;
96
97typedef void* (*JsModuleConstructor)(struct mjs* mjs, mjs_val_t* object, JsModules* modules);
98typedef void (*JsModuleDestructor)(void* inst);
99
100typedef struct {
101 char* name;
102 JsModuleConstructor create;
103 JsModuleDestructor destroy;
104 const ElfApiInterface* api_interface;
106
107JsModules* js_modules_create(struct mjs* mjs, CompositeApiResolver* resolver);
108
109void js_modules_destroy(JsModules* modules);
110
111mjs_val_t js_module_require(JsModules* modules, const char* name, size_t name_len);
112
119void* js_module_get(JsModules* modules, const char* name);
120
124void js_sdk_compatibility_status(struct mjs* mjs);
125
129void js_is_sdk_compatible(struct mjs* mjs);
130
134void js_check_sdk_compatibility(struct mjs* mjs);
135
139void js_does_sdk_support(struct mjs* mjs);
140
144void js_check_sdk_features(struct mjs* mjs);
145
146#ifdef __cplusplus
147}
148#endif
Flipper application.
Definition composite_resolver.c:10
Interface for ELF loader to resolve symbols.
Definition elf_api_interface.h:9
Definition js_modules.h:100
Definition js_modules.c:40
Definition mjs_core.h:63