Skip to content

Commit

Permalink
setChannel(ch, v) in Berry
Browse files Browse the repository at this point in the history
  • Loading branch information
niteria committed Feb 23, 2025
1 parent 80111be commit ff76551
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/berry
Submodule berry added at d2214a
65 changes: 65 additions & 0 deletions src/cmnds/cmd_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ int g_sleepfactor = 1;
#include "wlan_ui_pub.h"
#endif

#include "../berry/src/berry.h"
#include "../berry/src/be_repl.h"
#include "../berry/src/be_vm.h"

#define HASH_SIZE 128

static int generateHashValue(const char* fname) {
Expand Down Expand Up @@ -406,6 +410,62 @@ static commandResult_t CMD_Echo(const void* context, const char* cmd, const char

return CMD_RES_OK;
}

static void be_ChannelSet(bvm *vm) {
int top = be_top(vm);
ADDLOG_INFO(LOG_FEATURE_CMD, "be_ChannelSet top = %d", top);
/* check the arguments are all integers */

if (top == 2 && be_isint(vm, 1) && be_isint(vm, 2)) {
int ch = be_toint(vm, 1);
int v = be_toint(vm, 2);
ADDLOG_INFO(LOG_FEATURE_CMD, "be_ChannelSet ch = %d, v = %d", ch, v);
CHANNEL_Set(ch, v, 0);
}
be_pushnil(vm); /* push the nil to the stack */
be_return(vm); /* return calculation result */
}

static commandResult_t CMD_Berry(const void* context, const char* cmd, const char* args, int cmdFlags) {

ADDLOG_INFO(LOG_FEATURE_CMD, "[berry start]");
bvm *vm = be_vm_new(); /* create a virtual machine instance */
be_regfunc(vm, "channelSet", be_ChannelSet);
int ret_code1 = be_loadstring(vm, args);
if (ret_code1 != 0) {
ADDLOG_INFO(LOG_FEATURE_CMD, "be_loadstring fail");
goto err;
}

int ret_code2 = be_pcall(vm, 0);
if (ret_code1 != 0) {
ADDLOG_INFO(LOG_FEATURE_CMD, "be_pcall fail");
goto err;
}

int top = be_top(vm);
ADDLOG_INFO(LOG_FEATURE_CMD, "top = %d", top);
for (int i = 0; i < top; ++i) {
ADDLOG_INFO(LOG_FEATURE_CMD, "stack[%d] = isnumber = %d", i, be_isnumber(vm, i));
ADDLOG_INFO(LOG_FEATURE_CMD, "stack[%d] = isnil = %d", i, be_isnil(vm, i));
ADDLOG_INFO(LOG_FEATURE_CMD, "stack[%d] = isbool = %d", i, be_isbool(vm, i));
ADDLOG_INFO(LOG_FEATURE_CMD, "stack[%d] = isint = %d", i, be_isint(vm, i));
ADDLOG_INFO(LOG_FEATURE_CMD, "stack[%d] = isreal = %d", i, be_isreal(vm, i));
if (be_isint(vm, i)) {
ADDLOG_INFO(LOG_FEATURE_CMD, "stack[%d] = %d", i, be_toint(vm, i));
}
}

err:
be_vm_delete(vm); /* free all objects and vm */

ADDLOG_INFO(LOG_FEATURE_CMD, "[berry end]");
return CMD_RES_OK;
}




static commandResult_t CMD_StartupCommand(const void* context, const char* cmd, const char* args, int cmdFlags) {
const char *cmdToSet;

Expand Down Expand Up @@ -807,6 +867,11 @@ void CMD_Init_Early() {
//cmddetail:"descr":"Sends given message back to console. This command expands variables, so writing $CH12 will print value of channel 12, etc. Remember that you can also use special channel indices to access persistant flash variables and to access LED variables like dimmer, etc.",
//cmddetail:"fn":"CMD_Echo","file":"cmnds/cmd_main.c","requires":"",
//cmddetail:"examples":""}
CMD_RegisterCommand("berry", CMD_Berry, NULL);
//cmddetail:{"name":"berry","args":"[Berry code]",
//cmddetail:"descr":"Execute Berry code",
//cmddetail:"fn":"CMD_Berry","file":"cmnds/cmd_main.c","requires":"",
//cmddetail:"examples":"berry 1+2"}
CMD_RegisterCommand("echo", CMD_Echo, NULL);
//cmddetail:{"name":"restart","args":"",
//cmddetail:"descr":"Reboots the module",
Expand Down

0 comments on commit ff76551

Please sign in to comment.