Berry LVGL improvements to allow custom widgets

This commit is contained in:
Stephan Hadinger 2021-07-22 20:21:18 +02:00
parent 3d37712b27
commit 6cd3e37ed5
19 changed files with 1450 additions and 887 deletions

View File

@ -14,379 +14,370 @@ extern bclass* be_class_tasmota_driver; // Parent class
/********************************************************************
** Solidified function: init
********************************************************************/
/********** Solidified proto: init */
be_define_local_const_str(init_str_name, "init", 380752755, 4);
be_define_local_const_str(init_str_source, "input", -103256197, 5);
be_define_local_const_str(init_str_0, "get_tasmota", 334356779, 11);
be_define_local_const_str(init_str_1, "i2c_enabled", 218388101, 11);
be_define_local_const_str(init_str_2, "addr", 1087856498, 4);
be_define_local_const_str(init_str_3, "wire", -212213352, 4);
be_define_local_const_str(init_str_4, "wire_scan", -1623691416, 9);
be_define_local_const_str(init_str_5, "function", -1630125495, 8);
be_define_local_const_str(init_str_6, "name", -1925595674, 4);
be_define_local_const_str(init_str_7, "I2C:", 813483371, 4);
be_define_local_const_str(init_str_8, "detected on bus", 1432002650, 15);
be_define_local_const_str(init_str_9, "bus", 1607822841, 3);
static const bvalue init_ktab[10] = {
{ { .s=be_local_const_str(init_str_0) }, BE_STRING},
{ { .s=be_local_const_str(init_str_1) }, BE_STRING},
{ { .s=be_local_const_str(init_str_2) }, BE_STRING},
{ { .s=be_local_const_str(init_str_3) }, BE_STRING},
{ { .s=be_local_const_str(init_str_4) }, BE_STRING},
{ { .s=be_local_const_str(init_str_5) }, BE_STRING},
{ { .s=be_local_const_str(init_str_6) }, BE_STRING},
{ { .s=be_local_const_str(init_str_7) }, BE_STRING},
{ { .s=be_local_const_str(init_str_8) }, BE_STRING},
{ { .s=be_local_const_str(init_str_9) }, BE_STRING},
};
static const uint32_t init_code[44] = {
0x8C100100, // 0000 GETMET R4 R0 R256
0x7C100200, // 0001 CALL R4 1
0x4C140000, // 0002 LDNIL 5
0x20140605, // 0003 NE R5 R3 R5
0x78160004, // 0004 JMPF R5 #000A
0x8C140901, // 0005 GETMET R5 R4 R257
0x5C1C0600, // 0006 MOVE R7 R3
0x7C140400, // 0007 CALL R5 2
0x74160000, // 0008 JMPT R5 #000A
0x80000A00, // 0009 RET 0 R5
0x90020402, // 000A SETMBR R0 R258 R2
0x8C140904, // 000B GETMET R5 R4 R260
0x881C0102, // 000C GETMBR R7 R0 R258
0x7C140400, // 000D CALL R5 2
0x90020605, // 000E SETMBR R0 R259 R5
0x88140103, // 000F GETMBR R5 R0 R259
0x78160019, // 0010 JMPF R5 #002B
0x60140015, // 0011 GETGBL R5 G21
0x5C180200, // 0012 MOVE R6 R1
0x7C140200, // 0013 CALL R5 1
0x1C140B05, // 0014 EQ R5 R5 R261
0x78160004, // 0015 JMPF R5 #001B
0x5C140200, // 0016 MOVE R5 R1
0x5C180000, // 0017 MOVE R6 R0
0x7C140200, // 0018 CALL R5 1
0x90020C05, // 0019 SETMBR R0 R262 R5
0x70020000, // 001A JMP #001C
0x90020C01, // 001B SETMBR R0 R262 R1
0x88140106, // 001C GETMBR R5 R0 R262
0x4C180000, // 001D LDNIL 6
0x1C140A06, // 001E EQ R5 R5 R6
0x78160001, // 001F JMPF R5 #0022
0x4C140000, // 0020 LDNIL 5
0x90020605, // 0021 SETMBR R0 R259 R5
0x88140103, // 0022 GETMBR R5 R0 R259
0x78160006, // 0023 JMPF R5 #002B
0x6014000F, // 0024 GETGBL R5 G15
0x58180007, // 0025 LDCONST R6 K7
0x881C0106, // 0026 GETMBR R7 R0 R262
0x58200008, // 0027 LDCONST R8 K8
0x88240103, // 0028 GETMBR R9 R0 R259
0x88241309, // 0029 GETMBR R9 R9 R265
0x7C140800, // 002A CALL R5 4
0x80000000, // 002B RET 0 R0
};
be_define_local_proto(init, 10, 4, 1, 0, 0);
be_define_local_closure(init);
be_local_closure(init, /* name */
be_nested_proto(
10, /* nstack */
4, /* argc */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[10]) { /* constants */
be_nested_string("get_tasmota", 334356779, 11),
be_nested_string("i2c_enabled", 218388101, 11),
be_nested_string("addr", 1087856498, 4),
be_nested_string("wire", -212213352, 4),
be_nested_string("wire_scan", -1623691416, 9),
be_nested_string("function", -1630125495, 8),
be_nested_string("name", -1925595674, 4),
be_nested_string("I2C:", 813483371, 4),
be_nested_string("detected on bus", 1432002650, 15),
be_nested_string("bus", 1607822841, 3),
}),
(be_nested_const_str("init", 380752755, 4)),
(be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[44]) { /* code */
0x8C100100, // 0000 GETMET R4 R0 R256
0x7C100200, // 0001 CALL R4 1
0x4C140000, // 0002 LDNIL 5
0x20140605, // 0003 NE R5 R3 R5
0x78160004, // 0004 JMPF R5 #000A
0x8C140901, // 0005 GETMET R5 R4 R257
0x5C1C0600, // 0006 MOVE R7 R3
0x7C140400, // 0007 CALL R5 2
0x74160000, // 0008 JMPT R5 #000A
0x80000A00, // 0009 RET 0 R5
0x90020402, // 000A SETMBR R0 R258 R2
0x8C140904, // 000B GETMET R5 R4 R260
0x881C0102, // 000C GETMBR R7 R0 R258
0x7C140400, // 000D CALL R5 2
0x90020605, // 000E SETMBR R0 R259 R5
0x88140103, // 000F GETMBR R5 R0 R259
0x78160019, // 0010 JMPF R5 #002B
0x60140015, // 0011 GETGBL R5 G21
0x5C180200, // 0012 MOVE R6 R1
0x7C140200, // 0013 CALL R5 1
0x1C140B05, // 0014 EQ R5 R5 R261
0x78160004, // 0015 JMPF R5 #001B
0x5C140200, // 0016 MOVE R5 R1
0x5C180000, // 0017 MOVE R6 R0
0x7C140200, // 0018 CALL R5 1
0x90020C05, // 0019 SETMBR R0 R262 R5
0x70020000, // 001A JMP #001C
0x90020C01, // 001B SETMBR R0 R262 R1
0x88140106, // 001C GETMBR R5 R0 R262
0x4C180000, // 001D LDNIL 6
0x1C140A06, // 001E EQ R5 R5 R6
0x78160001, // 001F JMPF R5 #0022
0x4C140000, // 0020 LDNIL 5
0x90020605, // 0021 SETMBR R0 R259 R5
0x88140103, // 0022 GETMBR R5 R0 R259
0x78160006, // 0023 JMPF R5 #002B
0x6014000F, // 0024 GETGBL R5 G15
0x58180007, // 0025 LDCONST R6 K7
0x881C0106, // 0026 GETMBR R7 R0 R262
0x58200008, // 0027 LDCONST R8 K8
0x88240103, // 0028 GETMBR R9 R0 R259
0x88241309, // 0029 GETMBR R9 R9 R265
0x7C140800, // 002A CALL R5 4
0x80000000, // 002B RET 0 R0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: write8
********************************************************************/
/********** Solidified proto: write8 */
be_define_local_const_str(write8_str_name, "write8", -1160975764, 6);
be_define_local_const_str(write8_str_source, "input", -103256197, 5);
be_define_local_const_str(write8_str_0, "wire", -212213352, 4);
be_define_local_const_str(write8_str_1, "write", -1104765092, 5);
be_define_local_const_str(write8_str_2, "addr", 1087856498, 4);
static const bvalue write8_ktab[4] = {
{ { .s=be_local_const_str(write8_str_0) }, BE_STRING},
{ { .s=be_local_const_str(write8_str_1) }, BE_STRING},
{ { .s=be_local_const_str(write8_str_2) }, BE_STRING},
{ { .i=1 }, BE_INT},
};
static const uint32_t write8_code[8] = {
0x880C0100, // 0000 GETMBR R3 R0 R256
0x8C0C0701, // 0001 GETMET R3 R3 R257
0x88140102, // 0002 GETMBR R5 R0 R258
0x5C180200, // 0003 MOVE R6 R1
0x5C1C0400, // 0004 MOVE R7 R2
0x58200003, // 0005 LDCONST R8 K3
0x7C0C0A00, // 0006 CALL R3 5
0x80040600, // 0007 RET 1 R3
};
be_define_local_proto(write8, 9, 3, 1, 0, 0);
be_define_local_closure(write8);
be_local_closure(write8, /* name */
be_nested_proto(
9, /* nstack */
3, /* argc */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 4]) { /* constants */
be_nested_string("wire", -212213352, 4),
be_nested_string("write", -1104765092, 5),
be_nested_string("addr", 1087856498, 4),
be_const_int(1),
}),
(be_nested_const_str("write8", -1160975764, 6)),
(be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[ 8]) { /* code */
0x880C0100, // 0000 GETMBR R3 R0 R256
0x8C0C0701, // 0001 GETMET R3 R3 R257
0x88140102, // 0002 GETMBR R5 R0 R258
0x5C180200, // 0003 MOVE R6 R1
0x5C1C0400, // 0004 MOVE R7 R2
0x58200003, // 0005 LDCONST R8 K3
0x7C0C0A00, // 0006 CALL R3 5
0x80040600, // 0007 RET 1 R3
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: write_bit
********************************************************************/
/********** Solidified proto: write_bit */
be_define_local_const_str(write_bit_str_name, "write_bit", -1633976860, 9);
be_define_local_const_str(write_bit_str_source, "input", -103256197, 5);
be_define_local_const_str(write_bit_str_2, "write8", -1160975764, 6);
be_define_local_const_str(write_bit_str_3, "read8", -1492179129, 5);
static const bvalue write_bit_ktab[4] = {
{ { .i=0 }, BE_INT},
{ { .i=1 }, BE_INT},
{ { .s=be_local_const_str(write_bit_str_2) }, BE_STRING},
{ { .s=be_local_const_str(write_bit_str_3) }, BE_STRING},
};
static const uint32_t write_bit_code[26] = {
0x14100500, // 0000 LT R4 R2 R256
0x74120002, // 0001 JMPT R4 #0005
0x54120006, // 0002 LDINT R4 7
0x24100404, // 0003 GT R4 R2 R4
0x78120000, // 0004 JMPF R4 #0006
0x80000800, // 0005 RET 0 R4
0x38120202, // 0006 SHL R4 R257 R2
0x780E0007, // 0007 JMPF R3 #0010
0x8C140102, // 0008 GETMET R5 R0 R258
0x5C1C0200, // 0009 MOVE R7 R1
0x8C200103, // 000A GETMET R8 R0 R259
0x5C280200, // 000B MOVE R10 R1
0x7C200400, // 000C CALL R8 2
0x30201004, // 000D OR R8 R8 R4
0x7C140600, // 000E CALL R5 3
0x70020008, // 000F JMP #0019
0x8C140102, // 0010 GETMET R5 R0 R258
0x5C1C0200, // 0011 MOVE R7 R1
0x8C200103, // 0012 GETMET R8 R0 R259
0x5C280200, // 0013 MOVE R10 R1
0x7C200400, // 0014 CALL R8 2
0x542600FE, // 0015 LDINT R9 255
0x4241204, // 0016 SUB R9 R9 R4
0x2C201009, // 0017 AND R8 R8 R9
0x7C140600, // 0018 CALL R5 3
0x80000000, // 0019 RET 0 R0
};
be_define_local_proto(write_bit, 11, 4, 1, 0, 0);
be_define_local_closure(write_bit);
be_local_closure(write_bit, /* name */
be_nested_proto(
11, /* nstack */
4, /* argc */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 4]) { /* constants */
be_const_int(0),
be_const_int(1),
be_nested_string("write8", -1160975764, 6),
be_nested_string("read8", -1492179129, 5),
}),
(be_nested_const_str("write_bit", -1633976860, 9)),
(be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[26]) { /* code */
0x14100500, // 0000 LT R4 R2 R256
0x74120002, // 0001 JMPT R4 #0005
0x54120006, // 0002 LDINT R4 7
0x24100404, // 0003 GT R4 R2 R4
0x78120000, // 0004 JMPF R4 #0006
0x80000800, // 0005 RET 0 R4
0x38120202, // 0006 SHL R4 R257 R2
0x780E0007, // 0007 JMPF R3 #0010
0x8C140102, // 0008 GETMET R5 R0 R258
0x5C1C0200, // 0009 MOVE R7 R1
0x8C200103, // 000A GETMET R8 R0 R259
0x5C280200, // 000B MOVE R10 R1
0x7C200400, // 000C CALL R8 2
0x30201004, // 000D OR R8 R8 R4
0x7C140600, // 000E CALL R5 3
0x70020008, // 000F JMP #0019
0x8C140102, // 0010 GETMET R5 R0 R258
0x5C1C0200, // 0011 MOVE R7 R1
0x8C200103, // 0012 GETMET R8 R0 R259
0x5C280200, // 0013 MOVE R10 R1
0x7C200400, // 0014 CALL R8 2
0x542600FE, // 0015 LDINT R9 255
0x04241204, // 0016 SUB R9 R9 R4
0x2C201009, // 0017 AND R8 R8 R9
0x7C140600, // 0018 CALL R5 3
0x80000000, // 0019 RET 0 R0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: read8
********************************************************************/
/********** Solidified proto: read8 */
be_define_local_const_str(read8_str_name, "read8", -1492179129, 5);
be_define_local_const_str(read8_str_source, "input", -103256197, 5);
be_define_local_const_str(read8_str_0, "wire", -212213352, 4);
be_define_local_const_str(read8_str_1, "read", -824204347, 4);
be_define_local_const_str(read8_str_2, "addr", 1087856498, 4);
static const bvalue read8_ktab[4] = {
{ { .s=be_local_const_str(read8_str_0) }, BE_STRING},
{ { .s=be_local_const_str(read8_str_1) }, BE_STRING},
{ { .s=be_local_const_str(read8_str_2) }, BE_STRING},
{ { .i=1 }, BE_INT},
};
static const uint32_t read8_code[7] = {
0x88080100, // 0000 GETMBR R2 R0 R256
0x8C080501, // 0001 GETMET R2 R2 R257
0x88100102, // 0002 GETMBR R4 R0 R258
0x5C140200, // 0003 MOVE R5 R1
0x58180003, // 0004 LDCONST R6 K3
0x7C080800, // 0005 CALL R2 4
0x80040400, // 0006 RET 1 R2
};
be_define_local_proto(read8, 7, 2, 1, 0, 0);
be_define_local_closure(read8);
be_local_closure(read8, /* name */
be_nested_proto(
7, /* nstack */
2, /* argc */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 4]) { /* constants */
be_nested_string("wire", -212213352, 4),
be_nested_string("read", -824204347, 4),
be_nested_string("addr", 1087856498, 4),
be_const_int(1),
}),
(be_nested_const_str("read8", -1492179129, 5)),
(be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[ 7]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 R256
0x8C080501, // 0001 GETMET R2 R2 R257
0x88100102, // 0002 GETMBR R4 R0 R258
0x5C140200, // 0003 MOVE R5 R1
0x58180003, // 0004 LDCONST R6 K3
0x7C080800, // 0005 CALL R2 4
0x80040400, // 0006 RET 1 R2
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: read12
********************************************************************/
/********** Solidified proto: read12 */
be_define_local_const_str(read12_str_name, "read12", -3890326, 6);
be_define_local_const_str(read12_str_source, "input", -103256197, 5);
be_define_local_const_str(read12_str_0, "wire", -212213352, 4);
be_define_local_const_str(read12_str_1, "read_bytes", -718234123, 10);
be_define_local_const_str(read12_str_2, "addr", 1087856498, 4);
static const bvalue read12_ktab[6] = {
{ { .s=be_local_const_str(read12_str_0) }, BE_STRING},
{ { .s=be_local_const_str(read12_str_1) }, BE_STRING},
{ { .s=be_local_const_str(read12_str_2) }, BE_STRING},
{ { .i=2 }, BE_INT},
{ { .i=0 }, BE_INT},
{ { .i=1 }, BE_INT},
};
static const uint32_t read12_code[12] = {
0x88080100, // 0000 GETMBR R2 R0 R256
0x8C080501, // 0001 GETMET R2 R2 R257
0x88100102, // 0002 GETMBR R4 R0 R258
0x5C140200, // 0003 MOVE R5 R1
0x58180003, // 0004 LDCONST R6 K3
0x7C080800, // 0005 CALL R2 4
0x940C0504, // 0006 GETIDX R3 R2 R260
0x54120003, // 0007 LDINT R4 4
0x380C0604, // 0008 SHL R3 R3 R4
0x94100505, // 0009 GETIDX R4 R2 R261
0xC0604, // 000A ADD R3 R3 R4
0x80040600, // 000B RET 1 R3
};
be_define_local_proto(read12, 7, 2, 1, 0, 0);
be_define_local_closure(read12);
be_local_closure(read12, /* name */
be_nested_proto(
7, /* nstack */
2, /* argc */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 6]) { /* constants */
be_nested_string("wire", -212213352, 4),
be_nested_string("read_bytes", -718234123, 10),
be_nested_string("addr", 1087856498, 4),
be_const_int(2),
be_const_int(0),
be_const_int(1),
}),
(be_nested_const_str("read12", -3890326, 6)),
(be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[12]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 R256
0x8C080501, // 0001 GETMET R2 R2 R257
0x88100102, // 0002 GETMBR R4 R0 R258
0x5C140200, // 0003 MOVE R5 R1
0x58180003, // 0004 LDCONST R6 K3
0x7C080800, // 0005 CALL R2 4
0x940C0504, // 0006 GETIDX R3 R2 R260
0x54120003, // 0007 LDINT R4 4
0x380C0604, // 0008 SHL R3 R3 R4
0x94100505, // 0009 GETIDX R4 R2 R261
0x000C0604, // 000A ADD R3 R3 R4
0x80040600, // 000B RET 1 R3
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: read13
********************************************************************/
/********** Solidified proto: read13 */
be_define_local_const_str(read13_str_name, "read13", 12887293, 6);
be_define_local_const_str(read13_str_source, "input", -103256197, 5);
be_define_local_const_str(read13_str_0, "wire", -212213352, 4);
be_define_local_const_str(read13_str_1, "read_bytes", -718234123, 10);
be_define_local_const_str(read13_str_2, "addr", 1087856498, 4);
static const bvalue read13_ktab[6] = {
{ { .s=be_local_const_str(read13_str_0) }, BE_STRING},
{ { .s=be_local_const_str(read13_str_1) }, BE_STRING},
{ { .s=be_local_const_str(read13_str_2) }, BE_STRING},
{ { .i=2 }, BE_INT},
{ { .i=0 }, BE_INT},
{ { .i=1 }, BE_INT},
};
static const uint32_t read13_code[12] = {
0x88080100, // 0000 GETMBR R2 R0 R256
0x8C080501, // 0001 GETMET R2 R2 R257
0x88100102, // 0002 GETMBR R4 R0 R258
0x5C140200, // 0003 MOVE R5 R1
0x58180003, // 0004 LDCONST R6 K3
0x7C080800, // 0005 CALL R2 4
0x940C0504, // 0006 GETIDX R3 R2 R260
0x54120004, // 0007 LDINT R4 5
0x380C0604, // 0008 SHL R3 R3 R4
0x94100505, // 0009 GETIDX R4 R2 R261
0xC0604, // 000A ADD R3 R3 R4
0x80040600, // 000B RET 1 R3
};
be_define_local_proto(read13, 7, 2, 1, 0, 0);
be_define_local_closure(read13);
be_local_closure(read13, /* name */
be_nested_proto(
7, /* nstack */
2, /* argc */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 6]) { /* constants */
be_nested_string("wire", -212213352, 4),
be_nested_string("read_bytes", -718234123, 10),
be_nested_string("addr", 1087856498, 4),
be_const_int(2),
be_const_int(0),
be_const_int(1),
}),
(be_nested_const_str("read13", 12887293, 6)),
(be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[12]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 R256
0x8C080501, // 0001 GETMET R2 R2 R257
0x88100102, // 0002 GETMBR R4 R0 R258
0x5C140200, // 0003 MOVE R5 R1
0x58180003, // 0004 LDCONST R6 K3
0x7C080800, // 0005 CALL R2 4
0x940C0504, // 0006 GETIDX R3 R2 R260
0x54120004, // 0007 LDINT R4 5
0x380C0604, // 0008 SHL R3 R3 R4
0x94100505, // 0009 GETIDX R4 R2 R261
0x000C0604, // 000A ADD R3 R3 R4
0x80040600, // 000B RET 1 R3
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: read24
********************************************************************/
/********** Solidified proto: read24 */
be_define_local_const_str(read24_str_name, "read24", 1808533811, 6);
be_define_local_const_str(read24_str_source, "input", -103256197, 5);
be_define_local_const_str(read24_str_0, "wire", -212213352, 4);
be_define_local_const_str(read24_str_1, "read_bytes", -718234123, 10);
be_define_local_const_str(read24_str_2, "addr", 1087856498, 4);
static const bvalue read24_ktab[7] = {
{ { .s=be_local_const_str(read24_str_0) }, BE_STRING},
{ { .s=be_local_const_str(read24_str_1) }, BE_STRING},
{ { .s=be_local_const_str(read24_str_2) }, BE_STRING},
{ { .i=3 }, BE_INT},
{ { .i=0 }, BE_INT},
{ { .i=1 }, BE_INT},
{ { .i=2 }, BE_INT},
};
static const uint32_t read24_code[16] = {
0x88080100, // 0000 GETMBR R2 R0 R256
0x8C080501, // 0001 GETMET R2 R2 R257
0x88100102, // 0002 GETMBR R4 R0 R258
0x5C140200, // 0003 MOVE R5 R1
0x58180003, // 0004 LDCONST R6 K3
0x7C080800, // 0005 CALL R2 4
0x940C0504, // 0006 GETIDX R3 R2 R260
0x5412000F, // 0007 LDINT R4 16
0x380C0604, // 0008 SHL R3 R3 R4
0x94100505, // 0009 GETIDX R4 R2 R261
0x54160007, // 000A LDINT R5 8
0x38100805, // 000B SHL R4 R4 R5
0xC0604, // 000C ADD R3 R3 R4
0x94100506, // 000D GETIDX R4 R2 R262
0xC0604, // 000E ADD R3 R3 R4
0x80040600, // 000F RET 1 R3
};
be_define_local_proto(read24, 7, 2, 1, 0, 0);
be_define_local_closure(read24);
be_local_closure(read24, /* name */
be_nested_proto(
7, /* nstack */
2, /* argc */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 7]) { /* constants */
be_nested_string("wire", -212213352, 4),
be_nested_string("read_bytes", -718234123, 10),
be_nested_string("addr", 1087856498, 4),
be_const_int(3),
be_const_int(0),
be_const_int(1),
be_const_int(2),
}),
(be_nested_const_str("read24", 1808533811, 6)),
(be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[16]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 R256
0x8C080501, // 0001 GETMET R2 R2 R257
0x88100102, // 0002 GETMBR R4 R0 R258
0x5C140200, // 0003 MOVE R5 R1
0x58180003, // 0004 LDCONST R6 K3
0x7C080800, // 0005 CALL R2 4
0x940C0504, // 0006 GETIDX R3 R2 R260
0x5412000F, // 0007 LDINT R4 16
0x380C0604, // 0008 SHL R3 R3 R4
0x94100505, // 0009 GETIDX R4 R2 R261
0x54160007, // 000A LDINT R5 8
0x38100805, // 000B SHL R4 R4 R5
0x000C0604, // 000C ADD R3 R3 R4
0x94100506, // 000D GETIDX R4 R2 R262
0x000C0604, // 000E ADD R3 R3 R4
0x80040600, // 000F RET 1 R3
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: read32
********************************************************************/
/********** Solidified proto: read32 */
be_define_local_const_str(read32_str_name, "read32", 1741276240, 6);
be_define_local_const_str(read32_str_source, "input", -103256197, 5);
be_define_local_const_str(read32_str_0, "wire", -212213352, 4);
be_define_local_const_str(read32_str_1, "read_bytes", -718234123, 10);
be_define_local_const_str(read32_str_2, "addr", 1087856498, 4);
static const bvalue read32_ktab[7] = {
{ { .s=be_local_const_str(read32_str_0) }, BE_STRING},
{ { .s=be_local_const_str(read32_str_1) }, BE_STRING},
{ { .s=be_local_const_str(read32_str_2) }, BE_STRING},
{ { .i=0 }, BE_INT},
{ { .i=1 }, BE_INT},
{ { .i=2 }, BE_INT},
{ { .i=3 }, BE_INT},
};
static const uint32_t read32_code[20] = {
0x88080100, // 0000 GETMBR R2 R0 R256
0x8C080501, // 0001 GETMET R2 R2 R257
0x88100102, // 0002 GETMBR R4 R0 R258
0x5C140200, // 0003 MOVE R5 R1
0x541A0003, // 0004 LDINT R6 4
0x7C080800, // 0005 CALL R2 4
0x940C0503, // 0006 GETIDX R3 R2 R259
0x54120017, // 0007 LDINT R4 24
0x380C0604, // 0008 SHL R3 R3 R4
0x94100504, // 0009 GETIDX R4 R2 R260
0x5416000F, // 000A LDINT R5 16
0x38100805, // 000B SHL R4 R4 R5
0xC0604, // 000C ADD R3 R3 R4
0x94100505, // 000D GETIDX R4 R2 R261
0x54160007, // 000E LDINT R5 8
0x38100805, // 000F SHL R4 R4 R5
0xC0604, // 0010 ADD R3 R3 R4
0x94100506, // 0011 GETIDX R4 R2 R262
0xC0604, // 0012 ADD R3 R3 R4
0x80040600, // 0013 RET 1 R3
};
be_define_local_proto(read32, 7, 2, 1, 0, 0);
be_define_local_closure(read32);
be_local_closure(read32, /* name */
be_nested_proto(
7, /* nstack */
2, /* argc */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 7]) { /* constants */
be_nested_string("wire", -212213352, 4),
be_nested_string("read_bytes", -718234123, 10),
be_nested_string("addr", 1087856498, 4),
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(3),
}),
(be_nested_const_str("read32", 1741276240, 6)),
(be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[20]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 R256
0x8C080501, // 0001 GETMET R2 R2 R257
0x88100102, // 0002 GETMBR R4 R0 R258
0x5C140200, // 0003 MOVE R5 R1
0x541A0003, // 0004 LDINT R6 4
0x7C080800, // 0005 CALL R2 4
0x940C0503, // 0006 GETIDX R3 R2 R259
0x54120017, // 0007 LDINT R4 24
0x380C0604, // 0008 SHL R3 R3 R4
0x94100504, // 0009 GETIDX R4 R2 R260
0x5416000F, // 000A LDINT R5 16
0x38100805, // 000B SHL R4 R4 R5
0x000C0604, // 000C ADD R3 R3 R4
0x94100505, // 000D GETIDX R4 R2 R261
0x54160007, // 000E LDINT R5 8
0x38100805, // 000F SHL R4 R4 R5
0x000C0604, // 0010 ADD R3 R3 R4
0x94100506, // 0011 GETIDX R4 R2 R262
0x000C0604, // 0012 ADD R3 R3 R4
0x80040600, // 0013 RET 1 R3
})
)
);
/*******************************************************************/

View File

@ -34,6 +34,7 @@ static int lv_get_ver_res(void) {
/* `lv` methods */
const lvbe_call_c_t lv_func[] = {
{ "color_mix", (void*) &lv_color_mix, "lv_color", "(lv_color)(lv_color)i" },
{ "draw_arc", (void*) &lv_draw_arc, "", "iiiii(lv_area)(lv_draw_line_dsc)" },
{ "draw_img", (void*) &lv_draw_img, "", "(lv_area)(lv_area).(lv_draw_img_dsc)" },
{ "draw_img_dsc_init", (void*) &lv_draw_img_dsc_init, "", "(lv_draw_img_dsc)" },
@ -54,6 +55,7 @@ const lvbe_call_c_t lv_func[] = {
{ "draw_polygon", (void*) &lv_draw_polygon, "", "ii(lv_area)(lv_draw_rect_dsc)" },
{ "draw_px", (void*) &lv_draw_px, "", "(lv_point)(lv_area)(lv_style)" },
{ "draw_rect", (void*) &lv_draw_rect, "", "(lv_area)(lv_area)(lv_draw_rect_dsc)" },
{ "draw_rect_dsc_init", (void*) &lv_draw_rect_dsc_init, "", "(lv_draw_rect_dsc)" },
{ "draw_triangle", (void*) &lv_draw_triangle, "", "i(lv_area)(lv_draw_rect_dsc)" },
{ "event_get_data", (void*) &lv_event_get_data, ".", "" },
{ "event_send", (void*) &lv_event_send, "i", "(lv_obj)i." },

View File

@ -9,6 +9,7 @@
extern int lco_init(bvm *vm); // generic function
extern int lco_tostring(bvm *vm); // generic function
extern int lco_toint(bvm *vm); // generic function
#if BE_USE_PRECOMPILED_OBJECT
@ -21,6 +22,7 @@ void be_load_lvgl_color_lib(bvm *vm) {
{ ".p", NULL }, // keeping track of styles to avoid GC
{ "init", lco_init },
{ "tostring", lco_tostring },
{ "toint", lco_toint },
// { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */
@ -39,6 +41,7 @@ class be_class_lv_color (scope: global, name: lv_color) {
.p, var
init, func(lco_init)
tostring, func(lco_tostring)
toint, func(lco_toint)
}
@const_object_info_end */

View File

@ -38,7 +38,6 @@ int32_t bin_search_ctypes(const char * needle, const void * table, size_t elt_si
enum {
ctypes_i32 = 14,
ctypes_i16 = 12,
ctypes_i8 = 11,
@ -62,7 +61,8 @@ typedef struct be_ctypes_structure_item_t {
uint16_t offset_bytes;
uint8_t offset_bits : 3;
uint8_t len_bits : 5;
int8_t type;
int8_t type : 5;
uint8_t mapping : 3;
} be_ctypes_structure_item_t;
typedef struct be_ctypes_structure_t {
@ -78,6 +78,7 @@ typedef struct be_ctypes_class_t {
typedef struct be_ctypes_classes_t {
uint16_t size;
const char **instance_mapping; /* array of instance class names for automatic instanciation of class */
const be_ctypes_class_t * classes;
} be_ctypes_classes_t;
@ -176,7 +177,7 @@ int be_ctypes_member(bvm *vm) {
be_pushint(vm, member->len_bits);
be_call(vm, 3);
be_pop(vm, 3);
be_return(vm);
// int result at top of stack
} else {
// general int support
int size = member->type; // eventually 1/2/4, positive if little endian, negative if big endian
@ -196,8 +197,28 @@ int be_ctypes_member(bvm *vm) {
be_pushint(vm, size);
be_call(vm, 3);
be_pop(vm, 3);
be_return(vm);
// int result at top of stack
}
// the int result is at top of the stack
// check if we need an instance mapping
if (member->mapping > 0) {
// find the name of the class
// get global array of classes from global variable '.ctypes_classes'
be_getglobal(vm, ".ctypes_classes");
const be_ctypes_classes_t * be_ctypes_classes = (const be_ctypes_classes_t *) be_tocomptr(vm, -1);
be_pop(vm, 1);
const char * mapping_name = be_ctypes_classes->instance_mapping[member->mapping - 1];
if (mapping_name) {
be_getglobal(vm, mapping_name); // stack: class
be_pushvalue(vm, -2); // stack: class, value
be_pushint(vm, -1); // stack; class, value, -1
be_call(vm, 2); // call constructor with 2 parameters
be_pop(vm, 2); // leave new instance on top of stack
}
}
be_return(vm);
}
be_return_nil(vm);
@ -209,6 +230,22 @@ int be_ctypes_member(bvm *vm) {
// 3: value
int be_ctypes_setmember(bvm *vm) {
int argc = be_top(vm);
// If the value is an instance, we call 'toint()' and replace the value
if (be_isinstance(vm, 3)) {
be_getmember(vm, 3, "toint");
if (!be_isnil(vm, -1)) {
be_pushvalue(vm, 3);
be_call(vm, 1);
be_pop(vm, 1);
be_moveto(vm, -1, 3);
} else {
be_raise(vm, "value_error", "Value is an instance without 'toint()' method");
}
be_pop(vm, 1);
}
be_getmember(vm, 1, ".def");
const be_ctypes_structure_t *definitions;
definitions = (const be_ctypes_structure_t *) be_tocomptr(vm, -1);

View File

@ -7,8 +7,11 @@
#include "lvgl.h"
enum {
/********************************************************************
* Generated code, don't edit
*******************************************************************/
enum {
ctypes_i32 = 14,
ctypes_i16 = 12,
ctypes_i8 = 11,
@ -32,7 +35,8 @@ typedef struct be_ctypes_structure_item_t {
uint16_t offset_bytes;
uint8_t offset_bits : 3;
uint8_t len_bits : 5;
int8_t type;
int8_t type : 5;
uint8_t mapping : 3;
} be_ctypes_structure_item_t;
typedef struct be_ctypes_structure_t {
@ -48,368 +52,337 @@ typedef struct be_ctypes_class_t {
typedef struct be_ctypes_classes_t {
uint16_t size;
const char **instance_mapping; /* array of instance class names for automatic instanciation of class */
const be_ctypes_class_t * classes;
} be_ctypes_classes_t;
// extern const be_ctypes_class_t *g_ctypes_classes;
BE_EXPORT_VARIABLE extern const bclass be_class_lv_ctypes;
// const be_ctypes_structure_t be_lv_area_t = {
// 4,
// (const be_ctypes_structure_item_t[4]) {
// { "x1", 0, 16, ctypes_int },
// { "x2", 32, 16, ctypes_int },
// { "y1", 16, 16, ctypes_int },
// { "y2", 48, 16, ctypes_int },
// // }};
// #if BE_USE_PRECOMPILED_OBJECT
// #include "../generate/be_fixed_be_class_lv_area_t.h"
// #endif
// void be_load_lvgl_lv_area_t_lib(bvm *vm) {
// #if !BE_USE_PRECOMPILED_OBJECT
// static const bnfuncinfo members[] = {
// { NULL, NULL }
// };
// be_regclass(vm, "lv_area_t", members);
// be_getglobal(vm, "lv_area_t");
// be_getglobal(vm, "lv_ctypes");
// be_setsuper(vm, -2);
// be_pop(vm, 2);
// #else
// be_pushntvclass(vm, &be_class_lv_area_t);
// be_setglobal(vm, "lv_area_t");
// be_pop(vm, 1);
// #endif
// }
void ctypes_register_class(bvm *vm, const bclass * ctypes_class, const be_ctypes_structure_t * definitions) {
be_pushntvclass(vm, ctypes_class);
be_setglobal(vm, str(ctypes_class->name));
be_pop(vm, 1);
}
/********************************************************************
* Generated code, don't edit
*******************************************************************/
/********************************************************************/
const be_ctypes_structure_t be_lv_point = {
4, /* size in bytes */
2, /* number of elements */
(const be_ctypes_structure_item_t[2]) {
{ "x", 0, 0, 0, 12 },
{ "y", 2, 0, 0, 12 },
{ "x", 0, 0, 0, 12, 0 },
{ "y", 2, 0, 0, 12, 0 },
}};
const be_ctypes_structure_t be_lv_area = {
8, /* size in bytes */
4, /* number of elements */
(const be_ctypes_structure_item_t[4]) {
{ "x1", 0, 0, 0, 12 },
{ "x2", 4, 0, 0, 12 },
{ "y1", 2, 0, 0, 12 },
{ "y2", 6, 0, 0, 12 },
{ "x1", 0, 0, 0, 12, 0 },
{ "x2", 4, 0, 0, 12, 0 },
{ "y1", 2, 0, 0, 12, 0 },
{ "y2", 6, 0, 0, 12, 0 },
}};
const be_ctypes_structure_t be_lv_draw_rect_dsc = {
77, /* size in bytes */
43, /* number of elements */
(const be_ctypes_structure_item_t[43]) {
{ "bg_blend_mode", 12, 0, 0, 1 },
{ "bg_color", 2, 0, 0, 2 },
{ "bg_grad_color", 4, 0, 0, 2 },
{ "bg_grad_color_stop", 9, 0, 0, 12 },
{ "bg_grad_dir", 6, 0, 0, 1 },
{ "bg_main_color_stop", 7, 0, 0, 12 },
{ "bg_opa", 11, 0, 0, 1 },
{ "border_blend_mode", 20, 0, 0, 1 },
{ "border_color", 13, 0, 0, 2 },
{ "border_opa", 19, 0, 0, 1 },
{ "border_post", 21, 0, 1, 0 },
{ "border_side", 17, 0, 0, 12 },
{ "border_width", 15, 0, 0, 12 },
{ "outline_blend_mode", 29, 0, 0, 1 },
{ "outline_color", 22, 0, 0, 2 },
{ "outline_opa", 28, 0, 0, 1 },
{ "outline_pad", 26, 0, 0, 12 },
{ "outline_width", 24, 0, 0, 12 },
{ "pattern_blend_mode", 55, 0, 0, 1 },
{ "pattern_font", 46, 0, 0, 4 },
{ "pattern_image", 42, 0, 0, 4 },
{ "pattern_opa", 52, 0, 0, 1 },
{ "pattern_recolor", 50, 0, 0, 2 },
{ "pattern_recolor_opa", 53, 0, 0, 1 },
{ "pattern_repeat", 54, 0, 1, 0 },
{ "radius", 0, 0, 0, 12 },
{ "shadow_blend_mode", 41, 0, 0, 1 },
{ "shadow_color", 30, 0, 0, 2 },
{ "shadow_ofs_x", 34, 0, 0, 12 },
{ "shadow_ofs_y", 36, 0, 0, 12 },
{ "shadow_opa", 40, 0, 0, 1 },
{ "shadow_spread", 38, 0, 0, 12 },
{ "shadow_width", 32, 0, 0, 12 },
{ "value_align", 75, 0, 0, 1 },
{ "value_blend_mode", 76, 0, 0, 1 },
{ "value_color", 65, 0, 0, 2 },
{ "value_font", 60, 0, 0, 4 },
{ "value_letter_space", 71, 0, 0, 12 },
{ "value_line_space", 73, 0, 0, 12 },
{ "value_ofs_x", 67, 0, 0, 12 },
{ "value_ofs_y", 69, 0, 0, 12 },
{ "value_opa", 64, 0, 0, 1 },
{ "value_str", 56, 0, 0, 4 },
{ "bg_blend_mode", 12, 0, 0, 1, 0 },
{ "bg_color", 2, 0, 0, 2, 1 },
{ "bg_grad_color", 4, 0, 0, 2, 1 },
{ "bg_grad_color_stop", 9, 0, 0, 12, 0 },
{ "bg_grad_dir", 6, 0, 0, 1, 0 },
{ "bg_main_color_stop", 7, 0, 0, 12, 0 },
{ "bg_opa", 11, 0, 0, 1, 0 },
{ "border_blend_mode", 20, 0, 0, 1, 0 },
{ "border_color", 13, 0, 0, 2, 1 },
{ "border_opa", 19, 0, 0, 1, 0 },
{ "border_post", 21, 0, 1, 0, 0 },
{ "border_side", 17, 0, 0, 12, 0 },
{ "border_width", 15, 0, 0, 12, 0 },
{ "outline_blend_mode", 29, 0, 0, 1, 0 },
{ "outline_color", 22, 0, 0, 2, 1 },
{ "outline_opa", 28, 0, 0, 1, 0 },
{ "outline_pad", 26, 0, 0, 12, 0 },
{ "outline_width", 24, 0, 0, 12, 0 },
{ "pattern_blend_mode", 55, 0, 0, 1, 0 },
{ "pattern_font", 46, 0, 0, 4, 0 },
{ "pattern_image", 42, 0, 0, 4, 0 },
{ "pattern_opa", 52, 0, 0, 1, 0 },
{ "pattern_recolor", 50, 0, 0, 2, 1 },
{ "pattern_recolor_opa", 53, 0, 0, 1, 0 },
{ "pattern_repeat", 54, 0, 1, 0, 0 },
{ "radius", 0, 0, 0, 12, 0 },
{ "shadow_blend_mode", 41, 0, 0, 1, 0 },
{ "shadow_color", 30, 0, 0, 2, 1 },
{ "shadow_ofs_x", 34, 0, 0, 12, 0 },
{ "shadow_ofs_y", 36, 0, 0, 12, 0 },
{ "shadow_opa", 40, 0, 0, 1, 0 },
{ "shadow_spread", 38, 0, 0, 12, 0 },
{ "shadow_width", 32, 0, 0, 12, 0 },
{ "value_align", 75, 0, 0, 1, 0 },
{ "value_blend_mode", 76, 0, 0, 1, 0 },
{ "value_color", 65, 0, 0, 2, 1 },
{ "value_font", 60, 0, 0, 4, 0 },
{ "value_letter_space", 71, 0, 0, 12, 0 },
{ "value_line_space", 73, 0, 0, 12, 0 },
{ "value_ofs_x", 67, 0, 0, 12, 0 },
{ "value_ofs_y", 69, 0, 0, 12, 0 },
{ "value_opa", 64, 0, 0, 1, 0 },
{ "value_str", 56, 0, 0, 4, 0 },
}};
const be_ctypes_structure_t be_lv_draw_line_dsc = {
10, /* size in bytes */
9, /* number of elements */
(const be_ctypes_structure_item_t[9]) {
{ "blend_mode", 9, 0, 2, 0 },
{ "color", 0, 0, 0, 2 },
{ "dash_gap", 6, 0, 0, 12 },
{ "dash_width", 4, 0, 0, 12 },
{ "opa", 8, 0, 0, 1 },
{ "raw_end", 9, 4, 1, 0 },
{ "round_end", 9, 3, 1, 0 },
{ "round_start", 9, 2, 1, 0 },
{ "width", 2, 0, 0, 12 },
{ "blend_mode", 9, 0, 2, 0, 0 },
{ "color", 0, 0, 0, 2, 1 },
{ "dash_gap", 6, 0, 0, 12, 0 },
{ "dash_width", 4, 0, 0, 12, 0 },
{ "opa", 8, 0, 0, 1, 0 },
{ "raw_end", 9, 4, 1, 0, 0 },
{ "round_end", 9, 3, 1, 0, 0 },
{ "round_start", 9, 2, 1, 0, 0 },
{ "width", 2, 0, 0, 12, 0 },
}};
const be_ctypes_structure_t be_lv_draw_img_dsc = {
14, /* size in bytes */
9, /* number of elements */
(const be_ctypes_structure_item_t[9]) {
{ "angle", 1, 0, 0, 2 },
{ "antialias", 13, 0, 1, 0 },
{ "blend_mode", 12, 0, 0, 1 },
{ "opa", 0, 0, 0, 1 },
{ "pivot_x", 3, 0, 0, 12 },
{ "pivot_y", 5, 0, 0, 12 },
{ "recolor", 10, 0, 0, 2 },
{ "recolor_opa", 9, 0, 0, 1 },
{ "zoom", 7, 0, 0, 2 },
{ "angle", 1, 0, 0, 2, 0 },
{ "antialias", 13, 0, 1, 0, 0 },
{ "blend_mode", 12, 0, 0, 1, 0 },
{ "opa", 0, 0, 0, 1, 0 },
{ "pivot_x", 3, 0, 0, 12, 0 },
{ "pivot_y", 5, 0, 0, 12, 0 },
{ "recolor", 10, 0, 0, 2, 1 },
{ "recolor_opa", 9, 0, 0, 1, 0 },
{ "zoom", 7, 0, 0, 2, 0 },
}};
const be_ctypes_structure_t be_lv_draw_label_dsc = {
31, /* size in bytes */
15, /* number of elements */
(const be_ctypes_structure_item_t[15]) {
{ "bidi_dir", 27, 0, 0, 1 },
{ "blend_mode", 30, 0, 0, 1 },
{ "color", 0, 0, 0, 2 },
{ "decor", 29, 0, 0, 1 },
{ "flag", 28, 0, 0, 1 },
{ "font", 6, 0, 0, 4 },
{ "letter_space", 13, 0, 0, 12 },
{ "line_space", 11, 0, 0, 12 },
{ "ofs_x", 23, 0, 0, 12 },
{ "ofs_y", 25, 0, 0, 12 },
{ "opa", 10, 0, 0, 1 },
{ "sel_bg_color", 4, 0, 0, 2 },
{ "sel_color", 2, 0, 0, 2 },
{ "sel_end", 19, 0, 0, 4 },
{ "sel_start", 15, 0, 0, 4 },
{ "bidi_dir", 27, 0, 0, 1, 0 },
{ "blend_mode", 30, 0, 0, 1, 0 },
{ "color", 0, 0, 0, 2, 1 },
{ "decor", 29, 0, 0, 1, 0 },
{ "flag", 28, 0, 0, 1, 0 },
{ "font", 6, 0, 0, 4, 0 },
{ "letter_space", 13, 0, 0, 12, 0 },
{ "line_space", 11, 0, 0, 12, 0 },
{ "ofs_x", 23, 0, 0, 12, 0 },
{ "ofs_y", 25, 0, 0, 12, 0 },
{ "opa", 10, 0, 0, 1, 0 },
{ "sel_bg_color", 4, 0, 0, 2, 1 },
{ "sel_color", 2, 0, 0, 2, 1 },
{ "sel_end", 19, 0, 0, 4, 0 },
{ "sel_start", 15, 0, 0, 4, 0 },
}};
const be_ctypes_structure_t be_lv_draw_mask_common_dsc = {
5, /* size in bytes */
2, /* number of elements */
(const be_ctypes_structure_item_t[2]) {
{ "cb", 0, 0, 0, 4 },
{ "type", 4, 0, 0, 1 },
{ "cb", 0, 0, 0, 4, 0 },
{ "type", 4, 0, 0, 1, 0 },
}};
const be_ctypes_structure_t be_lv_draw_mask_line_param_cfg = {
9, /* size in bytes */
5, /* number of elements */
(const be_ctypes_structure_item_t[5]) {
{ "p1_x", 0, 0, 0, 12 },
{ "p1_y", 2, 0, 0, 12 },
{ "p2_x", 4, 0, 0, 12 },
{ "p2_y", 6, 0, 0, 12 },
{ "side", 8, 0, 2, 0 },
{ "p1_x", 0, 0, 0, 12, 0 },
{ "p1_y", 2, 0, 0, 12, 0 },
{ "p2_x", 4, 0, 0, 12, 0 },
{ "p2_y", 6, 0, 0, 12, 0 },
{ "side", 8, 0, 2, 0, 0 },
}};
const be_ctypes_structure_t be_lv_draw_mask_line_param = {
35, /* size in bytes */
15, /* number of elements */
(const be_ctypes_structure_item_t[15]) {
{ "cfg_p1_x", 5, 0, 0, 12 },
{ "cfg_p1_y", 7, 0, 0, 12 },
{ "cfg_p2_x", 9, 0, 0, 12 },
{ "cfg_p2_y", 11, 0, 0, 12 },
{ "cfg_side", 13, 0, 2, 0 },
{ "dsc_cb", 0, 0, 0, 4 },
{ "dsc_type", 4, 0, 0, 1 },
{ "flat", 34, 0, 1, 0 },
{ "inv", 34, 1, 1, 0 },
{ "origo_x", 14, 0, 0, 12 },
{ "origo_y", 16, 0, 0, 12 },
{ "spx", 30, 0, 0, 14 },
{ "steep", 26, 0, 0, 14 },
{ "xy_steep", 18, 0, 0, 14 },
{ "yx_steep", 22, 0, 0, 14 },
{ "cfg_p1_x", 5, 0, 0, 12, 0 },
{ "cfg_p1_y", 7, 0, 0, 12, 0 },
{ "cfg_p2_x", 9, 0, 0, 12, 0 },
{ "cfg_p2_y", 11, 0, 0, 12, 0 },
{ "cfg_side", 13, 0, 2, 0, 0 },
{ "dsc_cb", 0, 0, 0, 4, 0 },
{ "dsc_type", 4, 0, 0, 1, 0 },
{ "flat", 34, 0, 1, 0, 0 },
{ "inv", 34, 1, 1, 0, 0 },
{ "origo_x", 14, 0, 0, 12, 0 },
{ "origo_y", 16, 0, 0, 12, 0 },
{ "spx", 30, 0, 0, 14, 0 },
{ "steep", 26, 0, 0, 14, 0 },
{ "xy_steep", 18, 0, 0, 14, 0 },
{ "yx_steep", 22, 0, 0, 14, 0 },
}};
const be_ctypes_structure_t be_lv_draw_mask_angle_param_cfg = {
8, /* size in bytes */
4, /* number of elements */
(const be_ctypes_structure_item_t[4]) {
{ "end_angle", 6, 0, 0, 12 },
{ "start_angle", 4, 0, 0, 12 },
{ "vertex_p_x", 0, 0, 0, 12 },
{ "vertex_p_y", 2, 0, 0, 12 },
{ "end_angle", 6, 0, 0, 12, 0 },
{ "start_angle", 4, 0, 0, 12, 0 },
{ "vertex_p_x", 0, 0, 0, 12, 0 },
{ "vertex_p_y", 2, 0, 0, 12, 0 },
}};
const be_ctypes_structure_t be_lv_draw_mask_angle_param = {
85, /* size in bytes */
37, /* number of elements */
(const be_ctypes_structure_item_t[37]) {
{ "cfg_end_angle", 11, 0, 0, 12 },
{ "cfg_start_angle", 9, 0, 0, 12 },
{ "cfg_vertex_p_x", 5, 0, 0, 12 },
{ "cfg_vertex_p_y", 7, 0, 0, 12 },
{ "delta_deg", 83, 0, 0, 2 },
{ "dsc_cb", 0, 0, 0, 4 },
{ "dsc_type", 4, 0, 0, 1 },
{ "end_line_cfg_p1_x", 53, 0, 0, 12 },
{ "end_line_cfg_p1_y", 55, 0, 0, 12 },
{ "end_line_cfg_p2_x", 57, 0, 0, 12 },
{ "end_line_cfg_p2_y", 59, 0, 0, 12 },
{ "end_line_cfg_side", 61, 0, 2, 0 },
{ "end_line_dsc_cb", 48, 0, 0, 4 },
{ "end_line_dsc_type", 52, 0, 0, 1 },
{ "end_line_flat", 82, 0, 1, 0 },
{ "end_line_inv", 82, 1, 1, 0 },
{ "end_line_origo_x", 62, 0, 0, 12 },
{ "end_line_origo_y", 64, 0, 0, 12 },
{ "end_line_spx", 78, 0, 0, 14 },
{ "end_line_steep", 74, 0, 0, 14 },
{ "end_line_xy_steep", 66, 0, 0, 14 },
{ "end_line_yx_steep", 70, 0, 0, 14 },
{ "start_line_cfg_p1_x", 18, 0, 0, 12 },
{ "start_line_cfg_p1_y", 20, 0, 0, 12 },
{ "start_line_cfg_p2_x", 22, 0, 0, 12 },
{ "start_line_cfg_p2_y", 24, 0, 0, 12 },
{ "start_line_cfg_side", 26, 0, 2, 0 },
{ "start_line_dsc_cb", 13, 0, 0, 4 },
{ "start_line_dsc_type", 17, 0, 0, 1 },
{ "start_line_flat", 47, 0, 1, 0 },
{ "start_line_inv", 47, 1, 1, 0 },
{ "start_line_origo_x", 27, 0, 0, 12 },
{ "start_line_origo_y", 29, 0, 0, 12 },
{ "start_line_spx", 43, 0, 0, 14 },
{ "start_line_steep", 39, 0, 0, 14 },
{ "start_line_xy_steep", 31, 0, 0, 14 },
{ "start_line_yx_steep", 35, 0, 0, 14 },
{ "cfg_end_angle", 11, 0, 0, 12, 0 },
{ "cfg_start_angle", 9, 0, 0, 12, 0 },
{ "cfg_vertex_p_x", 5, 0, 0, 12, 0 },
{ "cfg_vertex_p_y", 7, 0, 0, 12, 0 },
{ "delta_deg", 83, 0, 0, 2, 0 },
{ "dsc_cb", 0, 0, 0, 4, 0 },
{ "dsc_type", 4, 0, 0, 1, 0 },
{ "end_line_cfg_p1_x", 53, 0, 0, 12, 0 },
{ "end_line_cfg_p1_y", 55, 0, 0, 12, 0 },
{ "end_line_cfg_p2_x", 57, 0, 0, 12, 0 },
{ "end_line_cfg_p2_y", 59, 0, 0, 12, 0 },
{ "end_line_cfg_side", 61, 0, 2, 0, 0 },
{ "end_line_dsc_cb", 48, 0, 0, 4, 0 },
{ "end_line_dsc_type", 52, 0, 0, 1, 0 },
{ "end_line_flat", 82, 0, 1, 0, 0 },
{ "end_line_inv", 82, 1, 1, 0, 0 },
{ "end_line_origo_x", 62, 0, 0, 12, 0 },
{ "end_line_origo_y", 64, 0, 0, 12, 0 },
{ "end_line_spx", 78, 0, 0, 14, 0 },
{ "end_line_steep", 74, 0, 0, 14, 0 },
{ "end_line_xy_steep", 66, 0, 0, 14, 0 },
{ "end_line_yx_steep", 70, 0, 0, 14, 0 },
{ "start_line_cfg_p1_x", 18, 0, 0, 12, 0 },
{ "start_line_cfg_p1_y", 20, 0, 0, 12, 0 },
{ "start_line_cfg_p2_x", 22, 0, 0, 12, 0 },
{ "start_line_cfg_p2_y", 24, 0, 0, 12, 0 },
{ "start_line_cfg_side", 26, 0, 2, 0, 0 },
{ "start_line_dsc_cb", 13, 0, 0, 4, 0 },
{ "start_line_dsc_type", 17, 0, 0, 1, 0 },
{ "start_line_flat", 47, 0, 1, 0, 0 },
{ "start_line_inv", 47, 1, 1, 0, 0 },
{ "start_line_origo_x", 27, 0, 0, 12, 0 },
{ "start_line_origo_y", 29, 0, 0, 12, 0 },
{ "start_line_spx", 43, 0, 0, 14, 0 },
{ "start_line_steep", 39, 0, 0, 14, 0 },
{ "start_line_xy_steep", 31, 0, 0, 14, 0 },
{ "start_line_yx_steep", 35, 0, 0, 14, 0 },
}};
const be_ctypes_structure_t be_lv_draw_mask_radius_param_cfg = {
11, /* size in bytes */
6, /* number of elements */
(const be_ctypes_structure_item_t[6]) {
{ "outer", 10, 0, 1, 0 },
{ "radius", 8, 0, 0, 12 },
{ "rect_x1", 0, 0, 0, 12 },
{ "rect_x2", 4, 0, 0, 12 },
{ "rect_y1", 2, 0, 0, 12 },
{ "rect_y2", 6, 0, 0, 12 },
{ "outer", 10, 0, 1, 0, 0 },
{ "radius", 8, 0, 0, 12, 0 },
{ "rect_x1", 0, 0, 0, 12, 0 },
{ "rect_x2", 4, 0, 0, 12, 0 },
{ "rect_y1", 2, 0, 0, 12, 0 },
{ "rect_y2", 6, 0, 0, 12, 0 },
}};
const be_ctypes_structure_t be_lv_sqrt_res = {
4, /* size in bytes */
2, /* number of elements */
(const be_ctypes_structure_item_t[2]) {
{ "f", 2, 0, 0, 2 },
{ "i", 0, 0, 0, 2 },
{ "f", 2, 0, 0, 2, 0 },
{ "i", 0, 0, 0, 2, 0 },
}};
const be_ctypes_structure_t be_lv_draw_mask_radius_param = {
24, /* size in bytes */
11, /* number of elements */
(const be_ctypes_structure_item_t[11]) {
{ "cfg_outer", 15, 0, 1, 0 },
{ "cfg_radius", 13, 0, 0, 12 },
{ "cfg_rect_x1", 5, 0, 0, 12 },
{ "cfg_rect_x2", 9, 0, 0, 12 },
{ "cfg_rect_y1", 7, 0, 0, 12 },
{ "cfg_rect_y2", 11, 0, 0, 12 },
{ "dsc_cb", 0, 0, 0, 4 },
{ "dsc_type", 4, 0, 0, 1 },
{ "y_prev", 16, 0, 0, 14 },
{ "y_prev_x_f", 22, 0, 0, 2 },
{ "y_prev_x_i", 20, 0, 0, 2 },
{ "cfg_outer", 15, 0, 1, 0, 0 },
{ "cfg_radius", 13, 0, 0, 12, 0 },
{ "cfg_rect_x1", 5, 0, 0, 12, 0 },
{ "cfg_rect_x2", 9, 0, 0, 12, 0 },
{ "cfg_rect_y1", 7, 0, 0, 12, 0 },
{ "cfg_rect_y2", 11, 0, 0, 12, 0 },
{ "dsc_cb", 0, 0, 0, 4, 0 },
{ "dsc_type", 4, 0, 0, 1, 0 },
{ "y_prev", 16, 0, 0, 14, 0 },
{ "y_prev_x_f", 22, 0, 0, 2, 0 },
{ "y_prev_x_i", 20, 0, 0, 2, 0 },
}};
const be_ctypes_structure_t be_lv_draw_mask_fade_param_cfg = {
14, /* size in bytes */
8, /* number of elements */
(const be_ctypes_structure_item_t[8]) {
{ "coords_x1", 0, 0, 0, 12 },
{ "coords_x2", 4, 0, 0, 12 },
{ "coords_y1", 2, 0, 0, 12 },
{ "coords_y2", 6, 0, 0, 12 },
{ "opa_bottom", 13, 0, 0, 1 },
{ "opa_top", 12, 0, 0, 1 },
{ "y_bottom", 10, 0, 0, 12 },
{ "y_top", 8, 0, 0, 12 },
{ "coords_x1", 0, 0, 0, 12, 0 },
{ "coords_x2", 4, 0, 0, 12, 0 },
{ "coords_y1", 2, 0, 0, 12, 0 },
{ "coords_y2", 6, 0, 0, 12, 0 },
{ "opa_bottom", 13, 0, 0, 1, 0 },
{ "opa_top", 12, 0, 0, 1, 0 },
{ "y_bottom", 10, 0, 0, 12, 0 },
{ "y_top", 8, 0, 0, 12, 0 },
}};
const be_ctypes_structure_t be_lv_draw_mask_fade_param = {
19, /* size in bytes */
10, /* number of elements */
(const be_ctypes_structure_item_t[10]) {
{ "cfg_coords_x1", 5, 0, 0, 12 },
{ "cfg_coords_x2", 9, 0, 0, 12 },
{ "cfg_coords_y1", 7, 0, 0, 12 },
{ "cfg_coords_y2", 11, 0, 0, 12 },
{ "cfg_opa_bottom", 18, 0, 0, 1 },
{ "cfg_opa_top", 17, 0, 0, 1 },
{ "cfg_y_bottom", 15, 0, 0, 12 },
{ "cfg_y_top", 13, 0, 0, 12 },
{ "dsc_cb", 0, 0, 0, 4 },
{ "dsc_type", 4, 0, 0, 1 },
{ "cfg_coords_x1", 5, 0, 0, 12, 0 },
{ "cfg_coords_x2", 9, 0, 0, 12, 0 },
{ "cfg_coords_y1", 7, 0, 0, 12, 0 },
{ "cfg_coords_y2", 11, 0, 0, 12, 0 },
{ "cfg_opa_bottom", 18, 0, 0, 1, 0 },
{ "cfg_opa_top", 17, 0, 0, 1, 0 },
{ "cfg_y_bottom", 15, 0, 0, 12, 0 },
{ "cfg_y_top", 13, 0, 0, 12, 0 },
{ "dsc_cb", 0, 0, 0, 4, 0 },
{ "dsc_type", 4, 0, 0, 1, 0 },
}};
const be_ctypes_structure_t be_lv_draw_mask_map_param_cfg = {
12, /* size in bytes */
5, /* number of elements */
(const be_ctypes_structure_item_t[5]) {
{ "coords_x1", 0, 0, 0, 12 },
{ "coords_x2", 4, 0, 0, 12 },
{ "coords_y1", 2, 0, 0, 12 },
{ "coords_y2", 6, 0, 0, 12 },
{ "map", 8, 0, 0, 4 },
{ "coords_x1", 0, 0, 0, 12, 0 },
{ "coords_x2", 4, 0, 0, 12, 0 },
{ "coords_y1", 2, 0, 0, 12, 0 },
{ "coords_y2", 6, 0, 0, 12, 0 },
{ "map", 8, 0, 0, 4, 0 },
}};
const be_ctypes_structure_t be_lv_draw_mask_map_param = {
17, /* size in bytes */
7, /* number of elements */
(const be_ctypes_structure_item_t[7]) {
{ "cfg_coords_x1", 5, 0, 0, 12 },
{ "cfg_coords_x2", 9, 0, 0, 12 },
{ "cfg_coords_y1", 7, 0, 0, 12 },
{ "cfg_coords_y2", 11, 0, 0, 12 },
{ "cfg_map", 13, 0, 0, 4 },
{ "dsc_cb", 0, 0, 0, 4 },
{ "dsc_type", 4, 0, 0, 1 },
{ "cfg_coords_x1", 5, 0, 0, 12, 0 },
{ "cfg_coords_x2", 9, 0, 0, 12, 0 },
{ "cfg_coords_y1", 7, 0, 0, 12, 0 },
{ "cfg_coords_y2", 11, 0, 0, 12, 0 },
{ "cfg_map", 13, 0, 0, 4, 0 },
{ "dsc_cb", 0, 0, 0, 4, 0 },
{ "dsc_type", 4, 0, 0, 1, 0 },
}};
const be_ctypes_structure_t be_lv_draw_mask_saved = {
8, /* size in bytes */
2, /* number of elements */
(const be_ctypes_structure_item_t[2]) {
{ "custom_id", 4, 0, 0, 4 },
{ "param", 0, 0, 0, 4 },
{ "custom_id", 4, 0, 0, 4, 0 },
{ "param", 0, 0, 0, 4, 0 },
}};
const char * be_ctypes_instance_mappings[] = {
"lv_color",
NULL
};
const be_ctypes_classes_t be_ctypes_classes[] = {
19,
be_ctypes_instance_mappings,
(const be_ctypes_class_t[19]) {
{ "lv_area", &be_lv_area },
{ "lv_draw_img_dsc", &be_lv_draw_img_dsc },
@ -500,8 +473,6 @@ void be_load_ctypes_definitions_lib(bvm *vm) {
static be_define_const_empty_class(be_class_lv_sqrt_res, &be_class_lv_ctypes, lv_sqrt_res);
ctypes_register_class(vm, &be_class_lv_sqrt_res, &be_lv_sqrt_res);
}
/*******************************************************************/
/********************************************************************/
#endif // USE_LVGL

View File

@ -0,0 +1,369 @@
/********************************************************************
* Tasmota LVGL lv_signal_bars widget
*******************************************************************/
#include "be_constobj.h"
#ifdef USE_LVGL
#include "lvgl.h"
/********************************************************************
** Solidified function: my_design_cb
********************************************************************/
be_local_closure(my_design_cb, /* name */
be_nested_proto(
23, /* nstack */
3, /* argc */
0, /* has upvals */
NULL, /* no upvals */
1, /* has sup protos */
be_nested_proto(
2, /* nstack */
1, /* argc */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 1]) { /* constants */
be_const_int(1),
}),
(be_nested_const_str("atleast1", 1956331672, 8)),
(be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[ 6]) { /* code */
0x28040100, // 0000 GE R1 R0 R256
0x78060001, // 0001 JMPF R1 #0004
0x80040000, // 0002 RET 1 R0
0x70020000, // 0003 JMP #0005
0x80060000, // 0004 RET 1 R256
0x80000000, // 0005 RET 0 R0
})
),
1, /* has constants */
( &(const bvalue[34]) { /* constants */
be_nested_string("global", 503252654, 6),
be_nested_string("lv", 1529997255, 2),
be_nested_string("get_height", -723211773, 10),
be_nested_string("get_width", -1001549996, 9),
be_const_int(3),
be_const_int(2),
be_nested_string("DESIGN_COVER_CHK", -1298406708, 16),
be_nested_string("ancestor_design", 421545719, 15),
be_nested_string("call", -1276017495, 4),
be_nested_string("DESIGN_DRAW_MAIN", -904475754, 16),
be_nested_string("get_coords", 1044089006, 10),
be_nested_string("x1", 274927234, 2),
be_nested_string("y1", -1939865569, 2),
be_nested_string("draw_line_dsc_init", -428273650, 18),
be_nested_string("line_dsc", -200476318, 8),
be_nested_string("init_draw_line_dsc", -1787031256, 18),
be_nested_string("OBJ_PART_MAIN", 658062838, 13),
be_nested_string("round_start", -1345482912, 11),
be_const_int(1),
be_nested_string("round_end", 985288225, 9),
be_nested_string("width", -1786286561, 5),
be_nested_string("get_style_line_color", 805371932, 20),
be_nested_string("STATE_DEFAULT", 712406428, 13),
be_nested_string("get_style_bg_color", 964794381, 18),
be_const_int(0),
be_nested_string("color", 1031692888, 5),
be_nested_string("percentage", -1756136011, 10),
be_nested_string("p1", -1605446022, 2),
be_nested_string("y", -66302220, 1),
be_nested_string("x", -49524601, 1),
be_nested_string("p2", -1622223641, 2),
be_nested_string("draw_line", 1634465686, 9),
be_nested_string("stop_iteration", -121173395, 14),
be_nested_string("DESIGN_RES_OK", -1265307123, 13),
}),
(be_nested_const_str("my_design_cb", -1173588798, 12)),
(be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[111]) { /* code */
0xA40E0000, // 0000 IMPORT R3 R256
0x88100701, // 0001 GETMBR R4 R3 R257
0x84140000, // 0002 CLOSURE R5 P0
0x8C180102, // 0003 GETMET R6 R0 R258
0x7C180200, // 0004 CALL R6 1
0x8C1C0103, // 0005 GETMET R7 R0 R259
0x7C1C0200, // 0006 CALL R7 1
0x5C200A00, // 0007 MOVE R8 R5
0x5426000E, // 0008 LDINT R9 15
0x0C240E09, // 0009 DIV R9 R7 R9
0x7C200200, // 000A CALL R8 1
0x5C240A00, // 000B MOVE R9 R5
0x08281104, // 000C MUL R10 R8 R260
0x04280E0A, // 000D SUB R10 R7 R10
0x542E0003, // 000E LDINT R11 4
0x0C28140B, // 000F DIV R10 R10 R11
0x7C240200, // 0010 CALL R9 1
0x0C281305, // 0011 DIV R10 R9 R261
0x882C0906, // 0012 GETMBR R11 R4 R262
0x1C2C040B, // 0013 EQ R11 R2 R11
0x782E0007, // 0014 JMPF R11 #001D
0x882C0107, // 0015 GETMBR R11 R0 R263
0x8C2C1708, // 0016 GETMET R11 R11 R264
0x5C340000, // 0017 MOVE R13 R0
0x5C380200, // 0018 MOVE R14 R1
0x5C3C0400, // 0019 MOVE R15 R2
0x7C2C0800, // 001A CALL R11 4
0x80041600, // 001B RET 1 R11
0x7002004F, // 001C JMP #006D
0x882C0909, // 001D GETMBR R11 R4 R265
0x1C2C040B, // 001E EQ R11 R2 R11
0x782E004C, // 001F JMPF R11 #006D
0x8C2C010A, // 0020 GETMET R11 R0 R266
0x5C340200, // 0021 MOVE R13 R1
0x7C2C0400, // 0022 CALL R11 2
0x882C030B, // 0023 GETMBR R11 R1 R267
0x8830030C, // 0024 GETMBR R12 R1 R268
0x8C34090D, // 0025 GETMET R13 R4 R269
0x883C010E, // 0026 GETMBR R15 R0 R270
0x7C340400, // 0027 CALL R13 2
0x8C34010F, // 0028 GETMET R13 R0 R271
0x883C0910, // 0029 GETMBR R15 R4 R272
0x8840010E, // 002A GETMBR R16 R0 R270
0x7C340600, // 002B CALL R13 3
0x8834010E, // 002C GETMBR R13 R0 R270
0x90362312, // 002D SETMBR R13 R273 R274
0x8834010E, // 002E GETMBR R13 R0 R270
0x90362712, // 002F SETMBR R13 R275 R274
0x8834010E, // 0030 GETMBR R13 R0 R270
0x90362809, // 0031 SETMBR R13 R276 R9
0x8C340115, // 0032 GETMET R13 R0 R277
0x883C0910, // 0033 GETMBR R15 R4 R272
0x88400916, // 0034 GETMBR R16 R4 R278
0x7C340600, // 0035 CALL R13 3
0x8C380117, // 0036 GETMET R14 R0 R279
0x88400910, // 0037 GETMBR R16 R4 R272
0x88440916, // 0038 GETMBR R17 R4 R278
0x7C380600, // 0039 CALL R14 3
0x603C0000, // 003A GETGBL R15 G0
0x40423104, // 003B CONNECT R16 R280 R260
0x7C3C0200, // 003C CALL R15 1
0xA802002B, // 003D EXBLK 0 #006A
0x5C401E00, // 003E MOVE R16 R15
0x7C400000, // 003F CALL R16 0
0x8844010E, // 0040 GETMBR R17 R0 R270
0x8848011A, // 0041 GETMBR R18 R0 R282
0x004C2112, // 0042 ADD R19 R16 R274
0x54520013, // 0043 LDINT R20 20
0x084C2614, // 0044 MUL R19 R19 R20
0x28482413, // 0045 GE R18 R18 R19
0x784A0001, // 0046 JMPF R18 #0049
0x5C481A00, // 0047 MOVE R18 R13
0x70020000, // 0048 JMP #004A
0x5C481C00, // 0049 MOVE R18 R14
0x90463212, // 004A SETMBR R17 R281 R18
0x8844011B, // 004B GETMBR R17 R0 R283
0x00481806, // 004C ADD R18 R12 R6
0x04482512, // 004D SUB R18 R18 R274
0x0448240A, // 004E SUB R18 R18 R10
0x90463812, // 004F SETMBR R17 R284 R18
0x8844011B, // 0050 GETMBR R17 R0 R283
0x00481208, // 0051 ADD R18 R9 R8
0x08482012, // 0052 MUL R18 R16 R18
0x00481612, // 0053 ADD R18 R11 R18
0x0048240A, // 0054 ADD R18 R18 R10
0x90463A12, // 0055 SETMBR R17 R285 R18
0x8844011E, // 0056 GETMBR R17 R0 R286
0x044A0810, // 0057 SUB R18 R260 R16
0x044C0C09, // 0058 SUB R19 R6 R9
0x08482413, // 0059 MUL R18 R18 R19
0x544E0003, // 005A LDINT R19 4
0x0C482413, // 005B DIV R18 R18 R19
0x00481812, // 005C ADD R18 R12 R18
0x0048240A, // 005D ADD R18 R18 R10
0x90463812, // 005E SETMBR R17 R284 R18
0x8844011E, // 005F GETMBR R17 R0 R286
0x8848011B, // 0060 GETMBR R18 R0 R283
0x8848251D, // 0061 GETMBR R18 R18 R285
0x90463A12, // 0062 SETMBR R17 R285 R18
0x8C44091F, // 0063 GETMET R17 R4 R287
0x884C011B, // 0064 GETMBR R19 R0 R283
0x8850011E, // 0065 GETMBR R20 R0 R286
0x5C540200, // 0066 MOVE R21 R1
0x8858010E, // 0067 GETMBR R22 R0 R270
0x7C440A00, // 0068 CALL R17 5
0x7001FFD3, // 0069 JMP #003E
0x583C0020, // 006A LDCONST R15 K32
0xAC3C0200, // 006B CATCH R15 1 0
0xB0080000, // 006C RAISE 2 R0 R0
0x882C0921, // 006D GETMBR R11 R4 R289
0x80041600, // 006E RET 1 R11
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: get_percentage
********************************************************************/
be_local_closure(get_percentage, /* name */
be_nested_proto(
2, /* nstack */
1, /* argc */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 1]) { /* constants */
be_nested_string("percentage", -1756136011, 10),
}),
(be_nested_const_str("get_percentage", -1414483304, 14)),
(be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[ 2]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 R256
0x80040200, // 0001 RET 1 R1
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: init
********************************************************************/
be_local_closure(init, /* name */
be_nested_proto(
9, /* nstack */
3, /* argc */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[16]) { /* constants */
be_nested_string("global", 503252654, 6),
be_nested_string("lv", 1529997255, 2),
be_nested_string("lv_obj", -37134147, 6),
be_nested_string("init", 380752755, 4),
be_nested_string("ancestor_design", 421545719, 15),
be_nested_string("get_design_cb", -825649242, 13),
be_nested_string("set_design_cb", 1469311634, 13),
be_nested_string("my_design_cb", -1173588798, 12),
be_nested_string("percentage", -1756136011, 10),
be_nested_string("p1", -1605446022, 2),
be_nested_string("lv_point", -174745506, 8),
be_nested_string("p2", -1622223641, 2),
be_nested_string("line_dsc", -200476318, 8),
be_nested_string("lv_draw_line_dsc", -1872162060, 16),
be_nested_string("area", -1693507260, 4),
be_nested_string("lv_area", -1773816895, 7),
}),
(be_nested_const_str("init", 380752755, 4)),
(be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[31]) { /* code */
0xA40E0000, // 0000 IMPORT R3 R256
0x88100701, // 0001 GETMBR R4 R3 R257
0x60140014, // 0002 GETGBL R5 G20
0x5C180000, // 0003 MOVE R6 R0
0x881C0702, // 0004 GETMBR R7 R3 R258
0x7C140400, // 0005 CALL R5 2
0x8C140B03, // 0006 GETMET R5 R5 R259
0x5C1C0200, // 0007 MOVE R7 R1
0x5C200400, // 0008 MOVE R8 R2
0x7C140600, // 0009 CALL R5 3
0x8C140105, // 000A GETMET R5 R0 R261
0x7C140200, // 000B CALL R5 1
0x90020805, // 000C SETMBR R0 R260 R5
0x8C140106, // 000D GETMET R5 R0 R262
0x881C0107, // 000E GETMBR R7 R0 R263
0x7C140400, // 000F CALL R5 2
0x54160063, // 0010 LDINT R5 100
0x90021005, // 0011 SETMBR R0 R264 R5
0x8C14070A, // 0012 GETMET R5 R3 R266
0x7C140200, // 0013 CALL R5 1
0x90021205, // 0014 SETMBR R0 R265 R5
0x8C14070A, // 0015 GETMET R5 R3 R266
0x7C140200, // 0016 CALL R5 1
0x90021605, // 0017 SETMBR R0 R267 R5
0x8C14070D, // 0018 GETMET R5 R3 R269
0x7C140200, // 0019 CALL R5 1
0x90021805, // 001A SETMBR R0 R268 R5
0x8C14070F, // 001B GETMET R5 R3 R271
0x7C140200, // 001C CALL R5 1
0x90021C05, // 001D SETMBR R0 R270 R5
0x80000000, // 001E RET 0 R0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: set_percentage
********************************************************************/
be_local_closure(set_percentage, /* name */
be_nested_proto(
5, /* nstack */
2, /* argc */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 3]) { /* constants */
be_nested_string("percentage", -1756136011, 10),
be_const_int(0),
be_nested_string("invalidate", -1645232368, 10),
}),
(be_nested_const_str("set_percentage", -1342944572, 14)),
(be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[18]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 R256
0x540E0004, // 0001 LDINT R3 5
0x0C080403, // 0002 DIV R2 R2 R3
0x540E0063, // 0003 LDINT R3 100
0x240C0203, // 0004 GT R3 R1 R3
0x780E0000, // 0005 JMPF R3 #0007
0x54060063, // 0006 LDINT R1 100
0x140C0301, // 0007 LT R3 R1 R257
0x780E0000, // 0008 JMPF R3 #000A
0x58040001, // 0009 LDCONST R1 K1
0x90020001, // 000A SETMBR R0 R256 R1
0x540E0004, // 000B LDINT R3 5
0x0C0C0203, // 000C DIV R3 R1 R3
0x200C0403, // 000D NE R3 R2 R3
0x780E0001, // 000E JMPF R3 #0011
0x8C0C0102, // 000F GETMET R3 R0 R258
0x7C0C0200, // 0010 CALL R3 1
0x80000000, // 0011 RET 0 R0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified class: lv_signal_bars
********************************************************************/
extern const bclass be_class_lv_obj;
be_local_class(lv_signal_bars,
6,
&be_class_lv_obj,
be_nested_map(10,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_nested_key("p1", -1605446022, 2, -1), be_const_index(2) },
{ be_nested_key("my_design_cb", -1173588798, 12, -1), be_const_closure(my_design_cb_closure) },
{ be_nested_key("get_percentage", -1414483304, 14, -1), be_const_closure(get_percentage_closure) },
{ be_nested_key("init", 380752755, 4, 7), be_const_closure(init_closure) },
{ be_nested_key("set_percentage", -1342944572, 14, 0), be_const_closure(set_percentage_closure) },
{ be_nested_key("percentage", -1756136011, 10, 3), be_const_index(1) },
{ be_nested_key("area", -1693507260, 4, -1), be_const_index(5) },
{ be_nested_key("p2", -1622223641, 2, -1), be_const_index(3) },
{ be_nested_key("line_dsc", -200476318, 8, 1), be_const_index(4) },
{ be_nested_key("ancestor_design", 421545719, 15, -1), be_const_index(0) },
})),
(be_nested_const_str("lv_signal_bars", -780994737, 14))
);
/*******************************************************************/
void be_load_lv_signal_bars_class(bvm *vm) {
be_pushntvclass(vm, &be_lv_signal_bars_class);
be_setglobal(vm, "lv_signal_bars");
be_pop(vm, 1);
}
#endif // USE_LVGL

View File

@ -112,6 +112,8 @@ extern void be_load_lvgl_cb_lib(bvm *vm);
extern void be_load_lvgl_cb_all_lib(bvm *vm);
extern void be_load_lvgl_ctypes_lib(bvm *vm);
extern void be_load_ctypes_definitions_lib(bvm *vm);
// custom widgets
extern void be_load_lv_signal_bars_class(bvm *vm);
#endif// USE_LVGL
/* this code loads the native class definitions */
@ -143,6 +145,8 @@ BERRY_API void be_load_custom_libs(bvm *vm)
be_load_lvgl_cb_all_lib(vm);
be_load_lvgl_ctypes_lib(vm);
be_load_ctypes_definitions_lib(vm);
// custom widgets
be_load_lv_signal_bars_class(vm);
#endif // USE_LVGL
}
#endif

View File

@ -1851,54 +1851,47 @@ static const bclosure wire_scan_closure = {
/********************************************************************
** Solidified function: time_str
********************************************************************/
/********** Solidified proto: time_str */
be_define_local_const_str(time_str_str_name, "time_str", -1681139684, 8);
be_define_local_const_str(time_str_str_source, "input", -103256197, 5);
be_define_local_const_str(time_str_str_0, "string", 398550328, 6);
be_define_local_const_str(time_str_str_1, "time_dump", -964556549, 9);
be_define_local_const_str(time_str_str_2, "format", -1180859054, 6);
be_define_local_const_str(time_str_str_3, "%04d-%02d-%02dT%02d:%02d:%02d", -869438695, 29);
be_define_local_const_str(time_str_str_4, "year", -1367388900, 4);
be_define_local_const_str(time_str_str_5, "month", -696646139, 5);
be_define_local_const_str(time_str_str_6, "day", -464576003, 3);
be_define_local_const_str(time_str_str_7, "hour", -1241306097, 4);
be_define_local_const_str(time_str_str_8, "min", -913357481, 3);
be_define_local_const_str(time_str_str_9, "sec", -1155074638, 3);
static const bvalue time_str_ktab[10] = {
{ { .s=be_local_const_str(time_str_str_0) }, BE_STRING},
{ { .s=be_local_const_str(time_str_str_1) }, BE_STRING},
{ { .s=be_local_const_str(time_str_str_2) }, BE_STRING},
{ { .s=be_local_const_str(time_str_str_3) }, BE_STRING},
{ { .s=be_local_const_str(time_str_str_4) }, BE_STRING},
{ { .s=be_local_const_str(time_str_str_5) }, BE_STRING},
{ { .s=be_local_const_str(time_str_str_6) }, BE_STRING},
{ { .s=be_local_const_str(time_str_str_7) }, BE_STRING},
{ { .s=be_local_const_str(time_str_str_8) }, BE_STRING},
{ { .s=be_local_const_str(time_str_str_9) }, BE_STRING},
};
static const uint32_t time_str_code[14] = {
0xA40A0000, // 0000 IMPORT R2 R256
0x8C0C0101, // 0001 GETMET R3 R0 R257
0x5C140200, // 0002 MOVE R5 R1
0x7C0C0400, // 0003 CALL R3 2
0x8C100502, // 0004 GETMET R4 R2 R258
0x58180003, // 0005 LDCONST R6 K3
0x941C0704, // 0006 GETIDX R7 R3 R260
0x94200705, // 0007 GETIDX R8 R3 R261
0x94240706, // 0008 GETIDX R9 R3 R262
0x94280707, // 0009 GETIDX R10 R3 R263
0x942C0708, // 000A GETIDX R11 R3 R264
0x94300709, // 000B GETIDX R12 R3 R265
0x7C101000, // 000C CALL R4 8
0x80040800, // 000D RET 1 R4
};
be_define_local_proto(time_str, 13, 2, 1, 0, 0);
be_define_local_closure(time_str);
be_local_closure(time_str, /* name */
be_nested_proto(
13, /* nstack */
2, /* argc */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[10]) { /* constants */
be_nested_string("string", 398550328, 6),
be_nested_string("time_dump", -964556549, 9),
be_nested_string("format", -1180859054, 6),
be_nested_string("%04d-%02d-%02dT%02d:%02d:%02d", -869438695, 29),
be_nested_string("year", -1367388900, 4),
be_nested_string("month", -696646139, 5),
be_nested_string("day", -464576003, 3),
be_nested_string("hour", -1241306097, 4),
be_nested_string("min", -913357481, 3),
be_nested_string("sec", -1155074638, 3),
}),
(be_nested_const_str("time_str", -1681139684, 8)),
(be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[14]) { /* code */
0xA40A0000, // 0000 IMPORT R2 R256
0x8C0C0101, // 0001 GETMET R3 R0 R257
0x5C140200, // 0002 MOVE R5 R1
0x7C0C0400, // 0003 CALL R3 2
0x8C100502, // 0004 GETMET R4 R2 R258
0x58180003, // 0005 LDCONST R6 K3
0x941C0704, // 0006 GETIDX R7 R3 R260
0x94200705, // 0007 GETIDX R8 R3 R261
0x94240706, // 0008 GETIDX R9 R3 R262
0x94280707, // 0009 GETIDX R10 R3 R263
0x942C0708, // 000A GETIDX R11 R3 R264
0x94300709, // 000B GETIDX R12 R3 R265
0x7C101000, // 000C CALL R4 8
0x80040800, // 000D RET 1 R4
})
)
);
/*******************************************************************/
/********************************************************************
@ -2174,115 +2167,112 @@ static const bclosure set_light_closure = {
/*******************************************************************/
/********************************************************************
** Solidified function: cb_dispatch
********************************************************************/
/********** Solidified proto: cb_dispatch */
be_define_local_const_str(cb_dispatch_str_name, "cb_dispatch", 1741510499, 11);
be_define_local_const_str(cb_dispatch_str_source, "input", -103256197, 5);
be_define_local_const_str(cb_dispatch_str_0, "_cb", -251666929, 3);
be_define_local_const_str(cb_dispatch_str_2, "find", -1108310694, 4);
static const bvalue cb_dispatch_ktab[3] = {
{ { .s=be_local_const_str(cb_dispatch_str_0) }, BE_STRING},
{ { .i=0 }, BE_INT},
{ { .s=be_local_const_str(cb_dispatch_str_2) }, BE_STRING},
};
static const uint32_t cb_dispatch_code[20] = {
0x88180100, // 0000 GETMBR R6 R0 R256
0x4C1C0000, // 0001 LDNIL 7
0x1C180C07, // 0002 EQ R6 R6 R7
0x781A0000, // 0003 JMPF R6 #0005
0x80060200, // 0004 RET 1 R257
0x88180100, // 0005 GETMBR R6 R0 R256
0x8C180D02, // 0006 GETMET R6 R6 R258
0x5C200200, // 0007 MOVE R8 R1
0x7C180400, // 0008 CALL R6 2
0x4C1C0000, // 0009 LDNIL 7
0x201C0C07, // 000A NE R7 R6 R7
0x781E0006, // 000B JMPF R7 #0013
0x5C1C0C00, // 000C MOVE R7 R6
0x5C200400, // 000D MOVE R8 R2
0x5C240600, // 000E MOVE R9 R3
0x5C280800, // 000F MOVE R10 R4
0x5C2C0A00, // 0010 MOVE R11 R5
0x7C1C0800, // 0011 CALL R7 4
0x80040E00, // 0012 RET 1 R7
0x80060200, // 0013 RET 1 R257
};
be_define_local_proto(cb_dispatch, 12, 6, 1, 0, 0);
be_define_local_closure(cb_dispatch);
be_local_closure(cb_dispatch, /* name */
be_nested_proto(
12, /* nstack */
6, /* argc */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 3]) { /* constants */
be_nested_string("_cb", -251666929, 3),
be_const_int(0),
be_nested_string("find", -1108310694, 4),
}),
(be_nested_const_str("cb_dispatch", 1741510499, 11)),
(be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[20]) { /* code */
0x88180100, // 0000 GETMBR R6 R0 R256
0x4C1C0000, // 0001 LDNIL 7
0x1C180C07, // 0002 EQ R6 R6 R7
0x781A0000, // 0003 JMPF R6 #0005
0x80060200, // 0004 RET 1 R257
0x88180100, // 0005 GETMBR R6 R0 R256
0x8C180D02, // 0006 GETMET R6 R6 R258
0x5C200200, // 0007 MOVE R8 R1
0x7C180400, // 0008 CALL R6 2
0x4C1C0000, // 0009 LDNIL 7
0x201C0C07, // 000A NE R7 R6 R7
0x781E0006, // 000B JMPF R7 #0013
0x5C1C0C00, // 000C MOVE R7 R6
0x5C200400, // 000D MOVE R8 R2
0x5C240600, // 000E MOVE R9 R3
0x5C280800, // 000F MOVE R10 R4
0x5C2C0A00, // 0010 MOVE R11 R5
0x7C1C0800, // 0011 CALL R7 4
0x80040E00, // 0012 RET 1 R7
0x80060200, // 0013 RET 1 R257
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: gen_cb
********************************************************************/
/********** Solidified proto: gen_cb */
be_define_local_const_str(gen_cb_str_name, "gen_cb", -1049739745, 6);
be_define_local_const_str(gen_cb_str_source, "input", -103256197, 5);
be_define_local_const_str(gen_cb_str_0, "_cb", -251666929, 3);
be_define_local_const_str(gen_cb_str_2, "find", -1108310694, 4);
be_define_local_const_str(gen_cb_str_3, "_get_cb", 1448849122, 7);
be_define_local_const_str(gen_cb_str_4, "stop_iteration", -121173395, 14);
be_define_local_const_str(gen_cb_str_5, "internal_error", -1775809127, 14);
be_define_local_const_str(gen_cb_str_6, "No callback available", 633786138, 21);
static const bvalue gen_cb_ktab[7] = {
{ { .s=be_local_const_str(gen_cb_str_0) }, BE_STRING},
{ { .i=0 }, BE_INT},
{ { .s=be_local_const_str(gen_cb_str_2) }, BE_STRING},
{ { .s=be_local_const_str(gen_cb_str_3) }, BE_STRING},
{ { .s=be_local_const_str(gen_cb_str_4) }, BE_STRING},
{ { .s=be_local_const_str(gen_cb_str_5) }, BE_STRING},
{ { .s=be_local_const_str(gen_cb_str_6) }, BE_STRING},
};
static const uint32_t gen_cb_code[34] = {
0x88080100, // 0000 GETMBR R2 R0 R256
0x4C0C0000, // 0001 LDNIL 3
0x1C080403, // 0002 EQ R2 R2 R3
0x780A0002, // 0003 JMPF R2 #0007
0x6008000B, // 0004 GETGBL R2 G11
0x7C080000, // 0005 CALL R2 0
0x90020002, // 0006 SETMBR R0 R256 R2
0x60080000, // 0007 GETGBL R2 G0
0x540E0012, // 0008 LDINT R3 19
0x400E0203, // 0009 CONNECT R3 R257 R3
0x7C080200, // 000A CALL R2 1
0xA8020010, // 000B EXBLK 0 #001D
0x5C0C0400, // 000C MOVE R3 R2
0x7C0C0000, // 000D CALL R3 0
0x88100100, // 000E GETMBR R4 R0 R256
0x8C100902, // 000F GETMET R4 R4 R258
0x5C180600, // 0010 MOVE R6 R3
0x7C100400, // 0011 CALL R4 2
0x4C140000, // 0012 LDNIL 5
0x1C100805, // 0013 EQ R4 R4 R5
0x78120006, // 0014 JMPF R4 #001C
0x88100100, // 0015 GETMBR R4 R0 R256
0x98100601, // 0016 SETIDX R4 R3 R1
0x8C100103, // 0017 GETMET R4 R0 R259
0x5C180600, // 0018 MOVE R6 R3
0x7C100400, // 0019 CALL R4 2
0xA8040001, // 001A EXBLK 1 1
0x80040800, // 001B RET 1 R4
0x7001FFEE, // 001C JMP #000C
0x58080004, // 001D LDCONST R2 K4
0xAC080200, // 001E CATCH R2 1 0
0xB0080000, // 001F RAISE 2 R0 R0
0xB0060B06, // 0020 RAISE 1 R261 R262
0x80000000, // 0021 RET 0 R0
};
be_define_local_proto(gen_cb, 7, 2, 1, 0, 0);
be_define_local_closure(gen_cb);
be_local_closure(gen_cb, /* name */
be_nested_proto(
7, /* nstack */
2, /* argc */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 7]) { /* constants */
be_nested_string("_cb", -251666929, 3),
be_const_int(0),
be_nested_string("find", -1108310694, 4),
be_nested_string("_get_cb", 1448849122, 7),
be_nested_string("stop_iteration", -121173395, 14),
be_nested_string("internal_error", -1775809127, 14),
be_nested_string("No callback available", 633786138, 21),
}),
(be_nested_const_str("gen_cb", -1049739745, 6)),
(be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[34]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 R256
0x4C0C0000, // 0001 LDNIL 3
0x1C080403, // 0002 EQ R2 R2 R3
0x780A0002, // 0003 JMPF R2 #0007
0x6008000B, // 0004 GETGBL R2 G11
0x7C080000, // 0005 CALL R2 0
0x90020002, // 0006 SETMBR R0 R256 R2
0x60080000, // 0007 GETGBL R2 G0
0x540E0012, // 0008 LDINT R3 19
0x400E0203, // 0009 CONNECT R3 R257 R3
0x7C080200, // 000A CALL R2 1
0xA8020010, // 000B EXBLK 0 #001D
0x5C0C0400, // 000C MOVE R3 R2
0x7C0C0000, // 000D CALL R3 0
0x88100100, // 000E GETMBR R4 R0 R256
0x8C100902, // 000F GETMET R4 R4 R258
0x5C180600, // 0010 MOVE R6 R3
0x7C100400, // 0011 CALL R4 2
0x4C140000, // 0012 LDNIL 5
0x1C100805, // 0013 EQ R4 R4 R5
0x78120006, // 0014 JMPF R4 #001C
0x88100100, // 0015 GETMBR R4 R0 R256
0x98100601, // 0016 SETIDX R4 R3 R1
0x8C100103, // 0017 GETMET R4 R0 R259
0x5C180600, // 0018 MOVE R6 R3
0x7C100400, // 0019 CALL R4 2
0xA8040001, // 001A EXBLK 1 1
0x80040800, // 001B RET 1 R4
0x7001FFEE, // 001C JMP #000C
0x58080004, // 001D LDCONST R2 K4
0xAC080200, // 001E CATCH R2 1 0
0xB0080000, // 001F RAISE 2 R0 R0
0xB0060B06, // 0020 RAISE 1 R261 R262
0x80000000, // 0021 RET 0 R0
})
)
);
/*******************************************************************/

View File

@ -266,6 +266,7 @@ extern const bcstring be_const_str_load_freetype_font;
extern const bcstring be_const_str_lv_draw_mask_map_param;
extern const bcstring be_const_str_lv_draw_mask_radius_param;
extern const bcstring be_const_str_write;
extern const bcstring be_const_str_toint;
extern const bcstring be_const_str_BACKLIGHT;
extern const bcstring be_const_str_FALLING;
extern const bcstring be_const_str_ROT1B_NP;

View File

@ -266,6 +266,7 @@ be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18
be_define_const_str(lv_draw_mask_map_param, "lv_draw_mask_map_param", 1666886804u, 0, 22, &be_const_str_lv_draw_mask_radius_param);
be_define_const_str(lv_draw_mask_radius_param, "lv_draw_mask_radius_param", 3777679220u, 0, 25, &be_const_str_write);
be_define_const_str(write, "write", 3190202204u, 0, 5, NULL);
be_define_const_str(toint, "toint", 3613182909u, 0, 5, NULL);
be_define_const_str(BACKLIGHT, "BACKLIGHT", 3147761926u, 0, 9, &be_const_str_FALLING);
be_define_const_str(FALLING, "FALLING", 2851701064u, 0, 7, &be_const_str_ROT1B_NP);
be_define_const_str(ROT1B_NP, "ROT1B_NP", 3710079736u, 0, 8, &be_const_str_ZIGBEE_RX);
@ -787,7 +788,7 @@ static const bstring* const m_string_table[] = {
(const bstring *)&be_const_str_gamma8,
(const bstring *)&be_const_str_BUZZER,
(const bstring *)&be_const_str_RDM6300_RX,
NULL,
(const bstring *)&be_const_str_toint,
(const bstring *)&be_const_str_BACKLIGHT,
(const bstring *)&be_const_str_ILI9341_CS,
(const bstring *)&be_const_str_SYMBOL_WARNING,
@ -980,6 +981,6 @@ static const bstring* const m_string_table[] = {
static const struct bconststrtab m_const_string_table = {
.size = 318,
.count = 636,
.count = 637,
.table = m_string_table
};

View File

@ -3,12 +3,13 @@
static be_define_const_map_slots(be_class_lv_color_map) {
{ be_const_key(init, -1), be_const_func(lco_init) },
{ be_const_key(tostring, 2), be_const_func(lco_tostring) },
{ be_const_key(dot_p, -1), be_const_index(0) },
{ be_const_key(toint, -1), be_const_func(lco_toint) },
{ be_const_key(dot_p, 0), be_const_index(0) },
};
static be_define_const_map(
be_class_lv_color_map,
3
4
);
BE_EXPORT_VARIABLE be_define_const_class(

View File

@ -43,10 +43,18 @@ static void m_solidify_bvalue(bvm *vm, bvalue * value)
logfmt("be_const_bool(%i)", var_tobool(value));
break;
case BE_INT:
#if BE_INTGER_TYPE == 2
logfmt("be_const_int(%lli)", var_toint(value));
#else
logfmt("be_const_int(%i)", var_toint(value));
#endif
break;
case BE_INDEX:
#if BE_INTGER_TYPE == 2
logfmt("be_const_index(%lli)", var_toint(value));
#else
logfmt("be_const_index(%i)", var_toint(value));
#endif
break;
case BE_REAL:
#if BE_USE_SINGLE_FLOAT
@ -199,11 +207,14 @@ static void m_solidify_class(bvm *vm, bclass *cl, int builtins)
logfmt("** Solidified class: %s\n", class_name);
logfmt("********************************************************************/\n");
if (cl->super) {
logfmt("extern const bclass be_class_%s;\n", str(cl->super->name));
}
logfmt("be_local_class(%s,\n", class_name);
logfmt(" %i,\n", cl->nvar);
if (cl->super) {
logfmt(" &be_%s_class,\n", str(cl->super->name));
logfmt(" &be_class_%s,\n", str(cl->super->name));
} else {
logfmt(" NULL,\n");
}

View File

@ -352,20 +352,9 @@ typedef struct bntvmodule {
PROTO_VAR_INFO_BLOCK \
}
#define be_define_local_closure(_name) \
const bclosure _name##_closure = { \
NULL, /* bgcobject *next */ \
BE_CLOSURE, /* type BE_CLOSURE */ \
GC_CONST, /* marked GC_CONST */ \
0, /* nupvals */ \
NULL, /* bgcobject *gray */ \
(bproto*) &_name##_proto, /* proto */ \
{ NULL } /* upvals */ \
}
/* new version for more compact literals */
#define be_local_closure(_name, _proto) \
const bclosure _name##_closure = { \
static const bclosure _name##_closure = { \
NULL, /* bgcobject *next */ \
BE_CLOSURE, /* type BE_CLOSURE */ \
GC_CONST, /* marked GC_CONST */ \

View File

@ -0,0 +1,159 @@
lv.start()
hres = lv.get_hor_res()
vres = lv.get_ver_res()
scr = lv.scr_act()
f20 = lv.montserrat_font(20)
scr.set_style_local_bg_color(lv.OBJ_PART_MAIN, lv.STATE_DEFAULT, lv_color(0x0000A0))
scr.set_style_local_bg_grad_color(lv.OBJ_PART_MAIN, lv.STATE_DEFAULT, lv_color(0x000000))
scr.set_style_local_bg_grad_dir(lv.OBJ_PART_MAIN, lv.STATE_DEFAULT, lv.GRAD_DIR_VER)
log = lv_label(scr)
if f20 != nil log.set_style_local_text_font(lv.OBJ_PART_MAIN, lv.STATE_DEFAULT, f20) end
log.set_long_mode(lv.LABEL_LONG_SROLL)
log.set_width(hres)
log.set_align(lv.LABEL_ALIGN_LEFT)
log.set_style_local_bg_color(lv.OBJ_PART_MAIN, lv.STATE_DEFAULT, lv_color(0xD00000))
log.set_style_local_bg_opa(lv.OBJ_PART_MAIN, lv.STATE_DEFAULT, lv.OPA_COVER)
log.set_style_local_text_color(lv.OBJ_PART_MAIN, lv.STATE_DEFAULT, lv_color(0xFFFFFF))
log.set_text("Welcome to Tasmota")
tastyle = lv_style()
tastyle.set_bg_color(lv.STATE_DEFAULT, lv_color(0x1fa3ec))
tastyle.set_border_color(lv.STATE_DEFAULT, lv_color(0x0000FF))
tastyle.set_bg_color(lv.STATE_FOCUSED, lv_color(0x0000FF))
tastyle.set_border_color(lv.STATE_FOCUSED, lv_color(0xFFFFFF))
tastyle.set_text_color(lv.STATE_DEFAULT, lv_color(0xFFFFFF))
tastyle.set_radius(lv.STATE_DEFAULT, 10)
tastyle.set_bg_opa(lv.STATE_DEFAULT, lv.OPA_COVER)
if f20 != nil tastyle.set_text_font(lv.STATE_DEFAULT, f20) end
prev_btn = lv_btn(scr)
prev_btn.set_pos(20,vres-40)
prev_btn.set_size(80, 30)
prev_btn.add_style(lv.OBJ_PART_MAIN, tastyle)
prev_label = lv_label(prev_btn)
prev_label.set_text("<")
next_btn = lv_btn(scr)
next_btn.set_pos(220,vres-40)
next_btn.set_size(80, 30)
next_btn.add_style(lv.OBJ_PART_MAIN, tastyle)
next_label = lv_label(next_btn)
next_label.set_text(">")
home_btn = lv_btn(scr)
home_btn.set_pos(120,vres-40)
home_btn.set_size(80, 30)
home_btn.add_style(lv.OBJ_PART_MAIN, tastyle)
home_label = lv_label(home_btn)
home_label.set_text(lv.SYMBOL_OK)
class lv_signal_bars : lv_obj
var ancestor_design # previous design_cb
var percentage
var p1, p2, line_dsc, area
def init(parent, copy)
import global
var lv = global.lv
# init parent object
super(self, global.lv_obj).init(parent, copy)
# keep a copy of
self.ancestor_design = self.get_design_cb()
self.set_design_cb(self.my_design_cb)
# own values
self.percentage = 100
# pre-allocate buffers
self.p1 = global.lv_point()
self.p2 = global.lv_point()
self.line_dsc = global.lv_draw_line_dsc()
self.area = global.lv_area()
end
def my_design_cb(area, mode)
import global
var lv = global.lv
def atleast1(x) if x >= 1 return x else return 1 end end
# the model is that we have 4 bars and inter-bar (1/4 of width)
var height = self.get_height()
var width = self.get_width()
var inter_bar = atleast1(width / 15)
var bar = atleast1((width - inter_bar * 3) / 4)
var bar_offset = bar / 2
if mode == lv.DESIGN_COVER_CHK
#- Return false if the object is not covers the clip_area area -#
return self.ancestor_design.call(self, area, mode)
elif mode == lv.DESIGN_DRAW_MAIN
#self.ancestor_design.call(self, area, mode) - don't draw a background
# get coordinates of area
self.get_coords(area)
var x_ofs = area.x1
var y_ofs = area.y1
lv.draw_line_dsc_init(self.line_dsc)
self.init_draw_line_dsc(lv.OBJ_PART_MAIN, self.line_dsc)
self.line_dsc.round_start = 1
self.line_dsc.round_end = 1
self.line_dsc.width = bar
var on_color = self.get_style_line_color(lv.OBJ_PART_MAIN, lv.STATE_DEFAULT)
var off_color = self.get_style_bg_color(lv.OBJ_PART_MAIN, lv.STATE_DEFAULT)
for i:0..3
self.line_dsc.color = self.percentage >= (i+1)*20 ? on_color : off_color
self.p1.y = y_ofs + height - 1 - bar_offset
self.p1.x = x_ofs + i * (bar + inter_bar) + bar_offset
self.p2.y = y_ofs + ((3 - i) * (height - bar)) / 4 + bar_offset
self.p2.x = self.p1.x
lv.draw_line(self.p1, self.p2, area, self.line_dsc)
end
#elif mode == lv.DESIGN_DRAW_POST # we don't want a frame around this object
#self.ancestor_design.call(self, area, mode)
end
return lv.DESIGN_RES_OK
end
def set_percentage(v)
var old_bars = self.percentage / 5
if v > 100 v = 100 end
if v < 0 v = 0 end
self.percentage = v
if old_bars != v / 5
self.invalidate() # be frugal and avoid updating the widget if it's not needed
end
end
def get_percentage()
return self.percentage
end
end
log_height = log.get_height()
# log.get_style_pad_right(lv.OBJ_PART_MAIN, lv.STATE_DEFAULT)
log.set_style_local_pad_right(lv.OBJ_PART_MAIN, lv.STATE_DEFAULT, log_height+1)
bars = lv_signal_bars(log)
bars.set_style_local_bg_color(lv.OBJ_PART_MAIN, lv.STATE_DEFAULT, lv_color(lv.BLACK))
bars.set_height(log_height)
bars.set_width(log_height)
bars.set_x(log.get_width() - log_height)
#bars.get_style_transform_width(lv.OBJ_PART_MAIN)
#bars.get_style_transform_height(lv.OBJ_PART_MAIN)

View File

@ -5,31 +5,38 @@
lv.start()
def max(a,b) if a > b return a else return b end end
class lv_signal_bars : lv_obj
var ancestor_design # previous design_cb
var percentage
var p1, p2, line_dsc, area
def init(parent, copy)
import global
var lv = global.lv
# init parent object
super(self, lv_obj).init(parent, copy)
super(self, global.lv_obj).init(parent, copy)
# keep a copy of
self.ancestor_design = self.get_design_cb()
self.set_design_cb(self.my_design_cb)
# own values
self.percentage = 100
# set default style
self.set_style_local_bg_opa(lv.OBJ_PART_MAIN, lv.STATE_DEFAULT, lv.OPA_TRANSP)
# pre-allocate buffers
self.p1 = global.lv_point()
self.p2 = global.lv_point()
self.line_dsc = global.lv_draw_line_dsc()
self.area = global.lv_area()
end
def my_design_cb(area, mode)
import global
var lv = global.lv
def atleast1(x) if x >= 1 return x else return 1 end end
# the model is that we have 4 bars and inter-bar (1/4 of width)
var height = self.get_height()
var width = self.get_width()
var inter_bar = max(width / 15, 1)
var bar = max((width - inter_bar * 3) / 4, 1)
var inter_bar = atleast1(width / 15)
var bar = atleast1((width - inter_bar * 3) / 4)
var bar_offset = bar / 2
if mode == lv.DESIGN_COVER_CHK
@ -37,29 +44,53 @@ class lv_signal_bars : lv_obj
return self.ancestor_design.call(self, area, mode)
elif mode == lv.DESIGN_DRAW_MAIN
self.ancestor_design.call(self, area, mode)
var line_dsc = lv_draw_line_dsc()
lv.draw_line_dsc_init(line_dsc)
#self.ancestor_design.call(self, area, mode) - don't draw a background
# get coordinates of area
self.get_coords(area)
var x_ofs = area.x1
var y_ofs = area.y1
line_dsc.round_start = 1
line_dsc.round_end = 1
line_dsc.width = bar
line_dsc.color = 0xF0F
var p1 = lv_point()
var p2 = lv_point()
lv.draw_line_dsc_init(self.line_dsc)
self.init_draw_line_dsc(lv.OBJ_PART_MAIN, self.line_dsc)
self.line_dsc.round_start = 1
self.line_dsc.round_end = 1
self.line_dsc.width = bar
var on_color = self.get_style_line_color(lv.OBJ_PART_MAIN, lv.STATE_DEFAULT)
var off_color = self.get_style_bg_color(lv.OBJ_PART_MAIN, lv.STATE_DEFAULT)
for i:0..3
p1.y = height - 1 - bar_offset
p1.x = i * (bar + inter_bar) + bar_offset
p2.y = ((3 - i) * (height - bar)) / 4 + bar_offset
p2.x = p1.x
lv.draw_line(p1, p2, area, line_dsc)
self.line_dsc.color = self.percentage >= (i+1)*20 ? on_color : off_color
self.p1.y = y_ofs + height - 1 - bar_offset
self.p1.x = x_ofs + i * (bar + inter_bar) + bar_offset
self.p2.y = y_ofs + ((3 - i) * (height - bar)) / 4 + bar_offset
self.p2.x = self.p1.x
lv.draw_line(self.p1, self.p2, area, self.line_dsc)
end
#elif mode == lv.DESIGN_DRAW_POST # we don't want a frame around this object
#self.ancestor_design.call(self, area, mode)
end
return lv.DESIGN_RES_OK
end
def set_percentage(v)
var old_bars = self.percentage / 5
if v > 100 v = 100 end
if v < 0 v = 0 end
self.percentage = v
if old_bars != v / 5
self.invalidate() # be frugal and avoid updating the widget if it's not needed
end
end
def get_percentage()
return self.percentage
end
end
bars = lv_signal_bars(lv.scr_act())
bars.set_height(16)
bars.set_width(16)
bars.set_percentage(45)
bars.set_style_local_line_color(lv.OBJ_PART_MAIN, lv.STATE_DEFAULT, lv_color(0xFF8000))

View File

@ -59,6 +59,13 @@ ctypes.bf_13 = 113
ctypes.bf_14 = 114
ctypes.bf_15 = 115
def findinlist(l, x)
for i:0..size(l)-1
if l[i] == x
return i
end
end
end
#-------------------------------------------------------------
#- 'get_bits' function
@ -151,34 +158,87 @@ end
#- print the C types -#1
ctypes.print_types = def ()
print("/********************************************************************")
print(" * Generated code, don't edit")
print(" *******************************************************************/")
print()
print("enum {")
print(" ctypes_ptr = 0,")
print(" ctypes_uint = 1,")
print(" ctypes_int = 2,")
print(" ctypes_str = 3,")
print(" ctypes_i32 = 14,")
print(" ctypes_i16 = 12,")
print(" ctypes_i8 = 11,")
print(" ctypes_u32 = 4,")
print(" ctypes_u16 = 2,")
print(" ctypes_u8 = 1,")
print("")
print(" // big endian")
print(" ctypes_be_i32 = -14,")
print(" ctypes_be_i16 = -12,")
print(" ctypes_be_i8 = -11,")
print(" ctypes_be_u32 = -4,")
print(" ctypes_be_u16 = -2,")
print(" ctypes_be_u8 = -1,")
print()
print(" ctypes_bf = 0, //bif-field")
print("};")
print()
print("typedef struct be_ctypes_structure_item_t {")
print(" const char * name;")
print(" uint16_t offset_bits;")
print(" uint16_t len_bits : 13;")
print(" uint16_t type : 3;")
print(" const char * name;")
print(" uint16_t offset_bytes;")
print(" uint8_t offset_bits : 3;")
print(" uint8_t len_bits : 5;")
print(" int8_t type : 5;")
print(" uint8_t mapping : 3;")
print("} be_ctypes_structure_item_t;")
print()
print("typedef struct be_ctypes_structure_t {")
print(" uint16_t size_bytes; /* size in bytes */")
print(" uint16_t size_elt; /* number of elements */")
print(" const be_ctypes_structure_item_t * items;")
print(" uint16_t size_bytes; /* size in bytes */")
print(" uint16_t size_elt; /* number of elements */")
print(" const be_ctypes_structure_item_t * items;")
print("} be_ctypes_structure_t;")
print()
print("typedef struct be_ctypes_class_t {")
print(" const char * name;")
print(" const be_ctypes_structure_t * definitions;")
print("} be_ctypes_class_t;")
print("")
print("typedef struct be_ctypes_classes_t {")
print(" uint16_t size;")
print(" const char **instance_mapping; /* array of instance class names for automatic instanciation of class */")
print(" const be_ctypes_class_t * classes;")
print("} be_ctypes_classes_t;")
print()
print("BE_EXPORT_VARIABLE extern const bclass be_class_lv_ctypes;")
print()
print("void ctypes_register_class(bvm *vm, const bclass * ctypes_class, const be_ctypes_structure_t * definitions) {")
print(" be_pushntvclass(vm, ctypes_class);")
print(" be_setglobal(vm, str(ctypes_class->name));")
print(" be_pop(vm, 1);")
print("}")
print()
print("/********************************************************************/")
end
global_classes = [] # track the list of all classes and
global_classes = [] # track the list of all classes and
global_mappings = [] # mapping to Berry classes, ex: lv_color
ctypes.print_classes = def ()
# print mappings
if size(global_mappings) > 7
raise "internal_error", "too many mappings, 7 max"
end
print("const char * be_ctypes_instance_mappings[] = {")
for n:global_mappings.iter()
print(string.format(" \"%s\",", n))
end
print(" NULL")
print("};")
print()
ctypes.sort(global_classes)
print("const be_ctypes_classes_t be_ctypes_classes[] = {")
print(string.format(" %i,", size(global_classes)))
print(string.format(" be_ctypes_instance_mappings,"))
print(string.format(" (const be_ctypes_class_t[%i]) {", size(global_classes)))
for elt:global_classes
@ -207,6 +267,8 @@ ctypes.print_classes = def ()
end
print("}")
print("/********************************************************************/")
print()
end
#-------------------------------------------------------------
@ -261,7 +323,7 @@ class structure
ctypes.sort(names)
for n:names
var args = self.mapping[n]
print(string.format(" { \"%s\", %i, %i, %i, %i },", n, args[0], args[1], args[2], args[3]))
print(string.format(" { \"%s\", %i, %i, %i, %i, %i },", n, args[0], args[1], args[2], args[3], args[4]))
end
print("}};")
print()
@ -285,14 +347,29 @@ class structure
if isinstance(type_obj, ctypes.structure)
# nested structure
self.nested(name, type_obj)
elif type(type_obj) == 'int'
end
var mapping_idx = 0 # mapping starts at 1
if isinstance(type_obj, list)
# it may be a list to denote a mapping to an instance
var mapping_name = type_obj[1]
if findinlist(global_mappings, mapping_name) == nil
global_mappings.push(mapping_name)
end
mapping_idx = findinlist(global_mappings, mapping_name) + 1
type_obj = type_obj[0] # take the simple value of first element in the list
end
if type(type_obj) == 'int'
# simple attibute
# TODO check actual type
if type_obj > ctypes.bf_0
# bit field
self.get_bitfield_closure(name, type_obj - ctypes.bf_0)
self.get_bitfield_closure(name, type_obj - ctypes.bf_0, mapping_idx)
else
# multi-bytes
self.get_int_closure(name, type_obj)
self.get_int_closure(name, type_obj, mapping_idx)
end
end
end
@ -329,7 +406,7 @@ class structure
# include nested
for subname:type_obj.mapping.keys()
var val = type_obj.mapping[subname]
self.mapping[name+"_"+subname] = [val[0] + offset, val[1], val[2], val[3]]
self.mapping[name+"_"+subname] = [val[0] + offset, val[1], val[2], val[3], val[4]]
end
# self.mapping[name] = [offset << 3, sub_size << 3]
@ -339,7 +416,7 @@ class structure
self.cur_offset += sub_size
end
def get_int_closure(name, type) # can be 1/2/4
def get_int_closure(name, type, instance_mapping) # can be 1/2/4
#- abs size -#
var size_in_bytes = type < 0 ? - type : type
var signed = size_in_bytes > 10
@ -349,7 +426,7 @@ class structure
self.align(size_in_bytes) # force alignment
var offset = self.cur_offset # prepare variable for capture in closure
self.mapping[name] = [offset, 0, 0, type]
self.mapping[name] = [offset, 0, 0, type, instance_mapping]
#- add closures -#
if signed
@ -363,10 +440,10 @@ class structure
end
def get_bitfield_closure(name, size_in_bits) # can be 1..32
def get_bitfield_closure(name, size_in_bits, instance_mapping) # can be 1..32
var cur_offset = self.cur_offset # prepare variable for capture in closure
var bit_offset = self.bit_offset
self.mapping[name] = [cur_offset, bit_offset, size_in_bits, 0]
self.mapping[name] = [cur_offset, bit_offset, size_in_bits, 0, instance_mapping]
self.get_closures[name] = def (b, p) return ctypes.get_bits(b, cur_offset + p, bit_offset, size_in_bits) end
self.set_closures[name] = def (b, p, v) return ctypes.set_bits(b, cur_offset+ p, bit_offset, size_in_bits, v) end
@ -520,93 +597,3 @@ return ctypes
16777472
-#
# def get_bits(b, offset_bytes, offset_bits, len_bits)
# if !isinstance(b, bytes) raise "value_error", "first argument must be of type 'bytes'" end
# if offset_bits < 0 || offset_bits > 7 raise "value_error", "offset_bits must be between 0 and 7" end
# if len_bits <= 0 || len_bits > 32 raise "value_error", "length in bits must be between 0 and 32" end
# var ret = 0
# var bit_shift = 0 # bit number to wrtie to
# while (len_bits > 0)
# var block_bits = 8 - offset_bits # bit number to read in current block (block = byte)
# if block_bits > len_bits block_bits = len_bits end
# var mask = ( (1<<block_bits) - 1) << offset_bits
# # print(string.format("mask = %02X", mask))
# ret = ret | ( ((b[offset_bytes] & mask) >> offset_bits) << bit_shift)
# # move the input window
# bit_shift += block_bits
# len_bits -= block_bits
# offset_bits = 0 # start at full next byte
# offset_bytes += 1
# end
# return ret
# end
# Test
# b=bytes("AAFF10")
# assert(get_bits(b, 0, 0, 1) == 0)
# assert(get_bits(b, 0, 1, 1) == 1)
# assert(get_bits(b, 0, 2, 1) == 0)
# assert(get_bits(b, 0, 3, 1) == 1)
# assert(get_bits(b, 0, 0, 2) == 2)
# assert(get_bits(b, 0, 1, 2) == 1)
# assert(get_bits(b, 0, 2, 2) == 2)
# assert(get_bits(b, 0, 0, 8) == 0xAA)
# assert(get_bits(b, 0, 0, 10) == 0x3AA)
# assert(get_bits(b, 0, 2, 8) == 0xEA)
# assert(get_bits(b, 1, 0, 8) == 0xFF)
# assert(get_bits(b, 1, 0, 10) == 0x0FF)
# assert(get_bits(b, 1, 0, 16) == 0x10FF)
# assert(get_bits(b, 1, 7, 4) == 0x01)
# assert(get_bits(b, 1, 7, 6) == 0x21)
# def set_bits(b, offset_bytes, offset_bits, len_bits, val)
# if !isinstance(b, bytes) raise "value_error", "first argument must be of type 'bytes'" end
# if offset_bits < 0 || offset_bits > 7 raise "value_error", "offset_bits must be between 0 and 7" end
# if len_bits <= 0 || len_bits > 32 raise "value_error", "length in bits must be between 0 and 32" end
# while (len_bits > 0)
# var block_bits = 8 - offset_bits # how many bits to write in the current block (block = byte)
# if block_bits > len_bits block_bits = len_bits end
# var mask_val = (1<<block_bits) - 1 # mask to the n bits to get for this block
# var mask_b_inv = 0xFF - (mask_val << offset_bits)
# b[offset_bytes] = (b[offset_bytes] & mask_b_inv) | ((val & mask_val) << offset_bits)
# # move the input window
# val >>= block_bits
# len_bits -= block_bits
# offset_bits = 0 # start at full next byte
# offset_bytes += 1
# end
# return b
# end
# b=bytes("00000000")
# assert(set_bits(b,0,0,1,1) == bytes('01000000'))
# assert(set_bits(b,1,0,1,1) == bytes('01010000'))
# assert(set_bits(b,0,0,1,2) == bytes('00010000'))
# assert(set_bits(b,0,4,1,1) == bytes('10010000'))
# assert(set_bits(b,0,4,1,0) == bytes('00010000'))
# b=bytes("FF000000")
# assert(set_bits(b,0,4,1,0) == bytes('EF000000'))
# assert(set_bits(b,0,4,1,1) == bytes('FF000000'))
# b=bytes("00000000")
# assert(set_bits(b,2,6,1,-1) == bytes('00004000'))
# b=bytes("00000000")
# assert(set_bits(b,2,1,6,-1) == bytes('00007E00'))

View File

@ -11,7 +11,7 @@ import ctypes
ctypes.print_types()
lv_style_int = ctypes.i16
lv_color = ctypes.u16 # depends on colors
lv_color = [ctypes.u16, "lv_color"] # cast to the class instance, constructor is called with 2 args: (nil, value)
lv_grad_dir = ctypes.u8
lv_opa = ctypes.u8
lv_blend_mode = ctypes.u8

View File

@ -439,18 +439,24 @@ extern "C" {
return *col;
}
inline uint32_t lv_color_to_uint32(lv_color_t col) {
uint32_t *p = (uint32_t*) &col;
uint16_t *p = (uint16_t*) &col;
return *p;
}
// lv_color
// First arg is a 24 bits RGB color
// If first arg is `nil` second arg is the native value of color
int lco_init(bvm *vm) {
int argc = be_top(vm);
uint32_t color = 0x0000; // default to black
if (argc > 1 && be_isint(vm, 2)) {
color = be_toint(vm, 2);
uint32_t color32 = 0x000000; // default to black
if (argc > 1) {
color32 = be_toint(vm, 2);
}
lv_color_t lv_color = lv_color_hex(color32);
if (argc > 2 && be_toint(vm, 3) == -1) {
lv_color.full = be_toint(vm, 2);
}
lv_color_t lv_color = lv_color_hex(color);
be_pushint(vm, lv_color_to_uint32(lv_color));
be_setmember(vm, 1, ".p");
be_return_nil(vm);
@ -461,7 +467,7 @@ extern "C" {
be_getmember(vm, 1, ".p");
uint32_t ntv_color = be_toint(vm, -1);
lv_color = lv_color_from_uint32(ntv_color);
uint32_t color = lv_color_to32(lv_color);
uint32_t color = lv_color_to32(lv_color) & 0xFFFFFF;
be_pop(vm, 1); // remove attribute
char s[48];
snprintf(s, sizeof(s), "lv_color(0x%06x - native:0x%04x)", color, ntv_color);
@ -469,6 +475,14 @@ extern "C" {
be_return(vm);
}
int lco_toint(bvm *vm) {
lv_color_t lv_color = {};
be_getmember(vm, 1, ".p");
uint32_t ntv_color = be_toint(vm, -1);
be_pushint(vm, ntv_color);
be_return(vm);
}
/*********************************************************************************************\
* Support for lv

View File

@ -1223,6 +1223,7 @@ void lv_draw_mask_radius_init(lv_draw_mask_radius_param_t * param, const lv_area
void lv_draw_mask_fade_init(lv_draw_mask_fade_param_t * param, const lv_area_t * coords, lv_opa_t opa_top, lv_coord_t y_top, lv_opa_t opa_bottom, lv_coord_t y_bottom);
void lv_draw_mask_map_init(lv_draw_mask_map_param_t * param, const lv_area_t * coords, const lv_opa_t * map);
LV_ATTRIBUTE_FAST_MEM void lv_draw_rect_dsc_init(lv_draw_rect_dsc_t * dsc);
void lv_draw_rect(const lv_area_t * coords, const lv_area_t * mask, const lv_draw_rect_dsc_t * dsc);
void lv_draw_px(const lv_point_t * point, const lv_area_t * clip_area, const lv_style_t * style);
@ -1247,3 +1248,4 @@ uint32_t lv_img_buf_get_img_size(lv_coord_t w, lv_coord_t h, lv_img_cf_t cf);
// ======================================================================
void lv_refr_now(void);
lv_color_t lv_color_mix(lv_color_t c1, lv_color_t c2, uint8_t mix);