mirror of https://github.com/arendst/Tasmota.git
Merge pull request #13124 from s-hadinger/solidified_axp192
Berry solidified AXP192 driver
This commit is contained in:
commit
070df39f84
|
@ -0,0 +1,899 @@
|
||||||
|
/********************************************************************
|
||||||
|
* Tasmota LVGL lv_signal_bars widget
|
||||||
|
*******************************************************************/
|
||||||
|
#include "be_constobj.h"
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: get_warning_level
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(get_warning_level, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
4, /* nstack */
|
||||||
|
1, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 2]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("read12", -3890326, 6),
|
||||||
|
/* K1 */ be_const_int(1),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("get_warning_level", 1737834441, 17)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[ 5]) { /* code */
|
||||||
|
0x8C040100, // 0000 GETMET R1 R0 K0
|
||||||
|
0x540E0046, // 0001 LDINT R3 71
|
||||||
|
0x7C040400, // 0002 CALL R1 2
|
||||||
|
0x2C040301, // 0003 AND R1 R1 K1
|
||||||
|
0x80040200, // 0004 RET 1 R1
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: get_vbus_current
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(get_vbus_current, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
4, /* nstack */
|
||||||
|
1, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 2]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("read12", -3890326, 6),
|
||||||
|
/* K1 */ be_const_real_hex(0x3EC00000),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("get_vbus_current", 1205347942, 16)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[ 5]) { /* code */
|
||||||
|
0x8C040100, // 0000 GETMET R1 R0 K0
|
||||||
|
0x540E005B, // 0001 LDINT R3 92
|
||||||
|
0x7C040400, // 0002 CALL R1 2
|
||||||
|
0x08040301, // 0003 MUL R1 R1 K1
|
||||||
|
0x80040200, // 0004 RET 1 R1
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: set_chg_current
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(set_chg_current, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
8, /* nstack */
|
||||||
|
2, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 2]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("write8", -1160975764, 6),
|
||||||
|
/* K1 */ be_nested_string("read8", -1492179129, 5),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("set_chg_current", 336304386, 15)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[12]) { /* code */
|
||||||
|
0x8C080100, // 0000 GETMET R2 R0 K0
|
||||||
|
0x54120032, // 0001 LDINT R4 51
|
||||||
|
0x8C140101, // 0002 GETMET R5 R0 K1
|
||||||
|
0x541E0032, // 0003 LDINT R7 51
|
||||||
|
0x7C140400, // 0004 CALL R5 2
|
||||||
|
0x541A00EF, // 0005 LDINT R6 240
|
||||||
|
0x2C140A06, // 0006 AND R5 R5 R6
|
||||||
|
0x541A000E, // 0007 LDINT R6 15
|
||||||
|
0x2C180206, // 0008 AND R6 R1 R6
|
||||||
|
0x30140A06, // 0009 OR R5 R5 R6
|
||||||
|
0x7C080600, // 000A CALL R2 3
|
||||||
|
0x80000000, // 000B RET 0
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: get_bat_current
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(get_bat_current, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
5, /* nstack */
|
||||||
|
1, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 2]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("read13", 12887293, 6),
|
||||||
|
/* K1 */ be_const_real_hex(0x3F000000),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("get_bat_current", 1912106073, 15)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[ 9]) { /* code */
|
||||||
|
0x8C040100, // 0000 GETMET R1 R0 K0
|
||||||
|
0x540E0079, // 0001 LDINT R3 122
|
||||||
|
0x7C040400, // 0002 CALL R1 2
|
||||||
|
0x8C080100, // 0003 GETMET R2 R0 K0
|
||||||
|
0x5412007B, // 0004 LDINT R4 124
|
||||||
|
0x7C080400, // 0005 CALL R2 2
|
||||||
|
0x04040202, // 0006 SUB R1 R1 R2
|
||||||
|
0x08040301, // 0007 MUL R1 R1 K1
|
||||||
|
0x80040200, // 0008 RET 1 R1
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: get_bat_power
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(get_bat_power, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
4, /* nstack */
|
||||||
|
1, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 2]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("read24", 1808533811, 6),
|
||||||
|
/* K1 */ be_const_real_hex(0x3A102DE1),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("get_bat_power", -1227592443, 13)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[ 5]) { /* code */
|
||||||
|
0x8C040100, // 0000 GETMET R1 R0 K0
|
||||||
|
0x540E006F, // 0001 LDINT R3 112
|
||||||
|
0x7C040400, // 0002 CALL R1 2
|
||||||
|
0x08040301, // 0003 MUL R1 R1 K1
|
||||||
|
0x80040200, // 0004 RET 1 R1
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: json_append
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(json_append, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
2, /* nstack */
|
||||||
|
1, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 1]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("wire", -212213352, 4),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("json_append", -1292948012, 11)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[ 5]) { /* code */
|
||||||
|
0x88040100, // 0000 GETMBR R1 R0 K0
|
||||||
|
0x74060001, // 0001 JMPT R1 #0004
|
||||||
|
0x4C040000, // 0002 LDNIL R1
|
||||||
|
0x80040200, // 0003 RET 1 R1
|
||||||
|
0x80000000, // 0004 RET 0
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: get_vbus_voltage
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(get_vbus_voltage, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
4, /* nstack */
|
||||||
|
1, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 2]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("read12", -3890326, 6),
|
||||||
|
/* K1 */ be_const_real_hex(0x3ADED28A),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("get_vbus_voltage", -1896756895, 16)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[ 5]) { /* code */
|
||||||
|
0x8C040100, // 0000 GETMET R1 R0 K0
|
||||||
|
0x540E0059, // 0001 LDINT R3 90
|
||||||
|
0x7C040400, // 0002 CALL R1 2
|
||||||
|
0x08040301, // 0003 MUL R1 R1 K1
|
||||||
|
0x80040200, // 0004 RET 1 R1
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: get_temp
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(get_temp, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
4, /* nstack */
|
||||||
|
1, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 3]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("read12", -3890326, 6),
|
||||||
|
/* K1 */ be_const_real_hex(0x3DCCCCCD),
|
||||||
|
/* K2 */ be_const_real_hex(0x4310B333),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("get_temp", -924047810, 8)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[ 6]) { /* code */
|
||||||
|
0x8C040100, // 0000 GETMET R1 R0 K0
|
||||||
|
0x540E005D, // 0001 LDINT R3 94
|
||||||
|
0x7C040400, // 0002 CALL R1 2
|
||||||
|
0x08040301, // 0003 MUL R1 R1 K1
|
||||||
|
0x04040302, // 0004 SUB R1 R1 K2
|
||||||
|
0x80040200, // 0005 RET 1 R1
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: battery_present
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(battery_present, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
6, /* nstack */
|
||||||
|
1, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 4]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("wire", -212213352, 4),
|
||||||
|
/* K1 */ be_nested_string("read", -824204347, 4),
|
||||||
|
/* K2 */ be_nested_string("addr", 1087856498, 4),
|
||||||
|
/* K3 */ be_const_int(1),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("battery_present", -706570238, 15)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[15]) { /* code */
|
||||||
|
0x88040100, // 0000 GETMBR R1 R0 K0
|
||||||
|
0x8C040301, // 0001 GETMET R1 R1 K1
|
||||||
|
0x880C0102, // 0002 GETMBR R3 R0 K2
|
||||||
|
0x58100003, // 0003 LDCONST R4 K3
|
||||||
|
0x58140003, // 0004 LDCONST R5 K3
|
||||||
|
0x7C040800, // 0005 CALL R1 4
|
||||||
|
0x540A001F, // 0006 LDINT R2 32
|
||||||
|
0x2C040202, // 0007 AND R1 R1 R2
|
||||||
|
0x78060002, // 0008 JMPF R1 #000C
|
||||||
|
0x50040200, // 0009 LDBOOL R1 1 0
|
||||||
|
0x80040200, // 000A RET 1 R1
|
||||||
|
0x70020001, // 000B JMP #000E
|
||||||
|
0x50040000, // 000C LDBOOL R1 0 0
|
||||||
|
0x80040200, // 000D RET 1 R1
|
||||||
|
0x80000000, // 000E RET 0
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: get_aps_voltage
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(get_aps_voltage, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
4, /* nstack */
|
||||||
|
1, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 2]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("read12", -3890326, 6),
|
||||||
|
/* K1 */ be_const_real_hex(0x3AB78035),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("get_aps_voltage", -2001930861, 15)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[ 5]) { /* code */
|
||||||
|
0x8C040100, // 0000 GETMET R1 R0 K0
|
||||||
|
0x540E007D, // 0001 LDINT R3 126
|
||||||
|
0x7C040400, // 0002 CALL R1 2
|
||||||
|
0x08040301, // 0003 MUL R1 R1 K1
|
||||||
|
0x80040200, // 0004 RET 1 R1
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: set_dcdc_enable
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(set_dcdc_enable, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
8, /* nstack */
|
||||||
|
3, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 5]) { /* constants */
|
||||||
|
/* K0 */ be_const_int(1),
|
||||||
|
/* K1 */ be_nested_string("write_bit", -1633976860, 9),
|
||||||
|
/* K2 */ be_const_int(0),
|
||||||
|
/* K3 */ be_const_int(2),
|
||||||
|
/* K4 */ be_const_int(3),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("set_dcdc_enable", 1594690786, 15)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[22]) { /* code */
|
||||||
|
0x1C0C0300, // 0000 EQ R3 R1 K0
|
||||||
|
0x780E0004, // 0001 JMPF R3 #0007
|
||||||
|
0x8C0C0101, // 0002 GETMET R3 R0 K1
|
||||||
|
0x54160011, // 0003 LDINT R5 18
|
||||||
|
0x58180002, // 0004 LDCONST R6 K2
|
||||||
|
0x5C1C0400, // 0005 MOVE R7 R2
|
||||||
|
0x7C0C0800, // 0006 CALL R3 4
|
||||||
|
0x1C0C0303, // 0007 EQ R3 R1 K3
|
||||||
|
0x780E0004, // 0008 JMPF R3 #000E
|
||||||
|
0x8C0C0101, // 0009 GETMET R3 R0 K1
|
||||||
|
0x54160011, // 000A LDINT R5 18
|
||||||
|
0x541A0003, // 000B LDINT R6 4
|
||||||
|
0x5C1C0400, // 000C MOVE R7 R2
|
||||||
|
0x7C0C0800, // 000D CALL R3 4
|
||||||
|
0x1C0C0304, // 000E EQ R3 R1 K4
|
||||||
|
0x780E0004, // 000F JMPF R3 #0015
|
||||||
|
0x8C0C0101, // 0010 GETMET R3 R0 K1
|
||||||
|
0x54160011, // 0011 LDINT R5 18
|
||||||
|
0x58180000, // 0012 LDCONST R6 K0
|
||||||
|
0x5C1C0400, // 0013 MOVE R7 R2
|
||||||
|
0x7C0C0800, // 0014 CALL R3 4
|
||||||
|
0x80000000, // 0015 RET 0
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: set_ldo_voltage
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(set_ldo_voltage, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
9, /* nstack */
|
||||||
|
3, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 4]) { /* constants */
|
||||||
|
/* K0 */ be_const_int(2),
|
||||||
|
/* K1 */ be_nested_string("write8", -1160975764, 6),
|
||||||
|
/* K2 */ be_nested_string("read8", -1492179129, 5),
|
||||||
|
/* K3 */ be_const_int(3),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("set_ldo_voltage", -204466136, 15)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[39]) { /* code */
|
||||||
|
0x540E0CE3, // 0000 LDINT R3 3300
|
||||||
|
0x240C0403, // 0001 GT R3 R2 R3
|
||||||
|
0x780E0001, // 0002 JMPF R3 #0005
|
||||||
|
0x540A000E, // 0003 LDINT R2 15
|
||||||
|
0x70020004, // 0004 JMP #000A
|
||||||
|
0x540E0063, // 0005 LDINT R3 100
|
||||||
|
0x0C0C0403, // 0006 DIV R3 R2 R3
|
||||||
|
0x54120011, // 0007 LDINT R4 18
|
||||||
|
0x040C0604, // 0008 SUB R3 R3 R4
|
||||||
|
0x5C080600, // 0009 MOVE R2 R3
|
||||||
|
0x1C0C0300, // 000A EQ R3 R1 K0
|
||||||
|
0x780E000C, // 000B JMPF R3 #0019
|
||||||
|
0x8C0C0101, // 000C GETMET R3 R0 K1
|
||||||
|
0x54160027, // 000D LDINT R5 40
|
||||||
|
0x8C180102, // 000E GETMET R6 R0 K2
|
||||||
|
0x54220027, // 000F LDINT R8 40
|
||||||
|
0x7C180400, // 0010 CALL R6 2
|
||||||
|
0x541E000E, // 0011 LDINT R7 15
|
||||||
|
0x2C180C07, // 0012 AND R6 R6 R7
|
||||||
|
0x541E000E, // 0013 LDINT R7 15
|
||||||
|
0x2C1C0407, // 0014 AND R7 R2 R7
|
||||||
|
0x54220003, // 0015 LDINT R8 4
|
||||||
|
0x381C0E08, // 0016 SHL R7 R7 R8
|
||||||
|
0x30180C07, // 0017 OR R6 R6 R7
|
||||||
|
0x7C0C0600, // 0018 CALL R3 3
|
||||||
|
0x1C0C0303, // 0019 EQ R3 R1 K3
|
||||||
|
0x780E000A, // 001A JMPF R3 #0026
|
||||||
|
0x8C0C0101, // 001B GETMET R3 R0 K1
|
||||||
|
0x54160027, // 001C LDINT R5 40
|
||||||
|
0x8C180102, // 001D GETMET R6 R0 K2
|
||||||
|
0x54220027, // 001E LDINT R8 40
|
||||||
|
0x7C180400, // 001F CALL R6 2
|
||||||
|
0x541E00EF, // 0020 LDINT R7 240
|
||||||
|
0x2C180C07, // 0021 AND R6 R6 R7
|
||||||
|
0x541E000E, // 0022 LDINT R7 15
|
||||||
|
0x2C1C0407, // 0023 AND R7 R2 R7
|
||||||
|
0x30180C07, // 0024 OR R6 R6 R7
|
||||||
|
0x7C0C0600, // 0025 CALL R3 3
|
||||||
|
0x80000000, // 0026 RET 0
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: init
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(init, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
5, /* nstack */
|
||||||
|
1, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 3]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("I2C_Driver", 1714501658, 10),
|
||||||
|
/* K1 */ be_nested_string("init", 380752755, 4),
|
||||||
|
/* K2 */ be_nested_string("AXP192", 757230128, 6),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("init", 380752755, 4)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[ 9]) { /* code */
|
||||||
|
0x60040014, // 0000 GETGBL R1 G20
|
||||||
|
0x5C080000, // 0001 MOVE R2 R0
|
||||||
|
0xB80E0000, // 0002 GETNGBL R3 K0
|
||||||
|
0x7C040400, // 0003 CALL R1 2
|
||||||
|
0x8C040301, // 0004 GETMET R1 R1 K1
|
||||||
|
0x580C0002, // 0005 LDCONST R3 K2
|
||||||
|
0x54120033, // 0006 LDINT R4 52
|
||||||
|
0x7C040600, // 0007 CALL R1 3
|
||||||
|
0x80000000, // 0008 RET 0
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: get_bat_voltage
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(get_bat_voltage, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
4, /* nstack */
|
||||||
|
1, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 2]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("read12", -3890326, 6),
|
||||||
|
/* K1 */ be_const_real_hex(0x3A902DE0),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("get_bat_voltage", 706676538, 15)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[ 5]) { /* code */
|
||||||
|
0x8C040100, // 0000 GETMET R1 R0 K0
|
||||||
|
0x540E0077, // 0001 LDINT R3 120
|
||||||
|
0x7C040400, // 0002 CALL R1 2
|
||||||
|
0x08040301, // 0003 MUL R1 R1 K1
|
||||||
|
0x80040200, // 0004 RET 1 R1
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: set_ldo_enable
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(set_ldo_enable, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
8, /* nstack */
|
||||||
|
3, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 3]) { /* constants */
|
||||||
|
/* K0 */ be_const_int(2),
|
||||||
|
/* K1 */ be_nested_string("write_bit", -1633976860, 9),
|
||||||
|
/* K2 */ be_const_int(3),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("set_ldo_enable", -1378465255, 14)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[15]) { /* code */
|
||||||
|
0x1C0C0300, // 0000 EQ R3 R1 K0
|
||||||
|
0x780E0004, // 0001 JMPF R3 #0007
|
||||||
|
0x8C0C0101, // 0002 GETMET R3 R0 K1
|
||||||
|
0x54160011, // 0003 LDINT R5 18
|
||||||
|
0x58180000, // 0004 LDCONST R6 K0
|
||||||
|
0x5C1C0400, // 0005 MOVE R7 R2
|
||||||
|
0x7C0C0800, // 0006 CALL R3 4
|
||||||
|
0x1C0C0302, // 0007 EQ R3 R1 K2
|
||||||
|
0x780E0004, // 0008 JMPF R3 #000E
|
||||||
|
0x8C0C0101, // 0009 GETMET R3 R0 K1
|
||||||
|
0x54160011, // 000A LDINT R5 18
|
||||||
|
0x58180002, // 000B LDCONST R6 K2
|
||||||
|
0x5C1C0400, // 000C MOVE R7 R2
|
||||||
|
0x7C0C0800, // 000D CALL R3 4
|
||||||
|
0x80000000, // 000E RET 0
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: set_dc_voltage
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(set_dc_voltage, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
11, /* nstack */
|
||||||
|
3, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 6]) { /* constants */
|
||||||
|
/* K0 */ be_const_int(1),
|
||||||
|
/* K1 */ be_const_int(3),
|
||||||
|
/* K2 */ be_const_int(0),
|
||||||
|
/* K3 */ be_const_int(2),
|
||||||
|
/* K4 */ be_nested_string("write8", -1160975764, 6),
|
||||||
|
/* K5 */ be_nested_string("read8", -1492179129, 5),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("set_dc_voltage", -2112985360, 14)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[48]) { /* code */
|
||||||
|
0x140C0300, // 0000 LT R3 R1 K0
|
||||||
|
0x740E0001, // 0001 JMPT R3 #0004
|
||||||
|
0x240C0301, // 0002 GT R3 R1 K1
|
||||||
|
0x780E0000, // 0003 JMPF R3 #0005
|
||||||
|
0x80000600, // 0004 RET 0
|
||||||
|
0x4C0C0000, // 0005 LDNIL R3
|
||||||
|
0x541202BB, // 0006 LDINT R4 700
|
||||||
|
0x14100404, // 0007 LT R4 R2 R4
|
||||||
|
0x78120001, // 0008 JMPF R4 #000B
|
||||||
|
0x580C0002, // 0009 LDCONST R3 K2
|
||||||
|
0x70020010, // 000A JMP #001C
|
||||||
|
0x54120DAB, // 000B LDINT R4 3500
|
||||||
|
0x24100404, // 000C GT R4 R2 R4
|
||||||
|
0x78120001, // 000D JMPF R4 #0010
|
||||||
|
0x540E006F, // 000E LDINT R3 112
|
||||||
|
0x7002000B, // 000F JMP #001C
|
||||||
|
0x1C100303, // 0010 EQ R4 R1 K3
|
||||||
|
0x78120004, // 0011 JMPF R4 #0017
|
||||||
|
0x541208E2, // 0012 LDINT R4 2275
|
||||||
|
0x24100404, // 0013 GT R4 R2 R4
|
||||||
|
0x78120001, // 0014 JMPF R4 #0017
|
||||||
|
0x540E003E, // 0015 LDINT R3 63
|
||||||
|
0x70020004, // 0016 JMP #001C
|
||||||
|
0x541202BB, // 0017 LDINT R4 700
|
||||||
|
0x04100404, // 0018 SUB R4 R2 R4
|
||||||
|
0x54160018, // 0019 LDINT R5 25
|
||||||
|
0x0C100805, // 001A DIV R4 R4 R5
|
||||||
|
0x5C0C0800, // 001B MOVE R3 R4
|
||||||
|
0x54120025, // 001C LDINT R4 38
|
||||||
|
0x1C140301, // 001D EQ R5 R1 K1
|
||||||
|
0x78160001, // 001E JMPF R5 #0021
|
||||||
|
0x54120026, // 001F LDINT R4 39
|
||||||
|
0x70020002, // 0020 JMP #0024
|
||||||
|
0x1C140303, // 0021 EQ R5 R1 K3
|
||||||
|
0x78160000, // 0022 JMPF R5 #0024
|
||||||
|
0x54120022, // 0023 LDINT R4 35
|
||||||
|
0x8C140104, // 0024 GETMET R5 R0 K4
|
||||||
|
0x5C1C0800, // 0025 MOVE R7 R4
|
||||||
|
0x8C200105, // 0026 GETMET R8 R0 K5
|
||||||
|
0x5C280800, // 0027 MOVE R10 R4
|
||||||
|
0x7C200400, // 0028 CALL R8 2
|
||||||
|
0x5426007F, // 0029 LDINT R9 128
|
||||||
|
0x2C201009, // 002A AND R8 R8 R9
|
||||||
|
0x5426007E, // 002B LDINT R9 127
|
||||||
|
0x2C240609, // 002C AND R9 R3 R9
|
||||||
|
0x30201009, // 002D OR R8 R8 R9
|
||||||
|
0x7C140600, // 002E CALL R5 3
|
||||||
|
0x80000000, // 002F RET 0
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: write_gpio
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(write_gpio, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
8, /* nstack */
|
||||||
|
3, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 4]) { /* constants */
|
||||||
|
/* K0 */ be_const_int(0),
|
||||||
|
/* K1 */ be_const_int(2),
|
||||||
|
/* K2 */ be_nested_string("write_bit", -1633976860, 9),
|
||||||
|
/* K3 */ be_const_int(3),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("write_gpio", -2027026962, 10)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[21]) { /* code */
|
||||||
|
0x280C0300, // 0000 GE R3 R1 K0
|
||||||
|
0x780E0007, // 0001 JMPF R3 #000A
|
||||||
|
0x180C0301, // 0002 LE R3 R1 K1
|
||||||
|
0x780E0005, // 0003 JMPF R3 #000A
|
||||||
|
0x8C0C0102, // 0004 GETMET R3 R0 K2
|
||||||
|
0x54160093, // 0005 LDINT R5 148
|
||||||
|
0x5C180200, // 0006 MOVE R6 R1
|
||||||
|
0x5C1C0400, // 0007 MOVE R7 R2
|
||||||
|
0x7C0C0800, // 0008 CALL R3 4
|
||||||
|
0x70020009, // 0009 JMP #0014
|
||||||
|
0x280C0303, // 000A GE R3 R1 K3
|
||||||
|
0x780E0007, // 000B JMPF R3 #0014
|
||||||
|
0x540E0003, // 000C LDINT R3 4
|
||||||
|
0x180C0203, // 000D LE R3 R1 R3
|
||||||
|
0x780E0004, // 000E JMPF R3 #0014
|
||||||
|
0x8C0C0102, // 000F GETMET R3 R0 K2
|
||||||
|
0x54160095, // 0010 LDINT R5 150
|
||||||
|
0x04180303, // 0011 SUB R6 R1 K3
|
||||||
|
0x5C1C0400, // 0012 MOVE R7 R2
|
||||||
|
0x7C0C0800, // 0013 CALL R3 4
|
||||||
|
0x80000000, // 0014 RET 0
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: web_sensor
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(web_sensor, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
11, /* nstack */
|
||||||
|
1, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[14]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("wire", -212213352, 4),
|
||||||
|
/* K1 */ be_nested_string("string", 398550328, 6),
|
||||||
|
/* K2 */ be_nested_string("format", -1180859054, 6),
|
||||||
|
/* K3 */ be_nested_string("{s}VBus Voltage{m}%.3f V{e}", 165651270, 27),
|
||||||
|
/* K4 */ be_nested_string("{s}VBus Current{m}%.1f mA{e}", 1032721155, 28),
|
||||||
|
/* K5 */ be_nested_string("{s}Batt Voltage{m}%.3f V{e}", -1110659097, 27),
|
||||||
|
/* K6 */ be_nested_string("{s}Batt Current{m}%.1f mA{e}", 866537156, 28),
|
||||||
|
/* K7 */ be_nested_string("{s}Temp AXP{m}%.1f °C{e}", -1990510004, 25),
|
||||||
|
/* K8 */ be_nested_string("get_vbus_voltage", -1896756895, 16),
|
||||||
|
/* K9 */ be_nested_string("get_bat_voltage", 706676538, 15),
|
||||||
|
/* K10 */ be_nested_string("get_bat_current", 1912106073, 15),
|
||||||
|
/* K11 */ be_nested_string("get_temp", -924047810, 8),
|
||||||
|
/* K12 */ be_nested_string("tasmota", 424643812, 7),
|
||||||
|
/* K13 */ be_nested_string("web_send_decimal", 1407210204, 16),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("web_sensor", -1394870324, 10)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[26]) { /* code */
|
||||||
|
0x88040100, // 0000 GETMBR R1 R0 K0
|
||||||
|
0x74060001, // 0001 JMPT R1 #0004
|
||||||
|
0x4C040000, // 0002 LDNIL R1
|
||||||
|
0x80040200, // 0003 RET 1 R1
|
||||||
|
0xA4060200, // 0004 IMPORT R1 K1
|
||||||
|
0x8C080302, // 0005 GETMET R2 R1 K2
|
||||||
|
0x40120704, // 0006 CONNECT R4 K3 K4
|
||||||
|
0x40100905, // 0007 CONNECT R4 R4 K5
|
||||||
|
0x40100906, // 0008 CONNECT R4 R4 K6
|
||||||
|
0x40100907, // 0009 CONNECT R4 R4 K7
|
||||||
|
0x8C140108, // 000A GETMET R5 R0 K8
|
||||||
|
0x7C140200, // 000B CALL R5 1
|
||||||
|
0x8C180108, // 000C GETMET R6 R0 K8
|
||||||
|
0x7C180200, // 000D CALL R6 1
|
||||||
|
0x8C1C0109, // 000E GETMET R7 R0 K9
|
||||||
|
0x7C1C0200, // 000F CALL R7 1
|
||||||
|
0x8C20010A, // 0010 GETMET R8 R0 K10
|
||||||
|
0x7C200200, // 0011 CALL R8 1
|
||||||
|
0x8C24010B, // 0012 GETMET R9 R0 K11
|
||||||
|
0x7C240200, // 0013 CALL R9 1
|
||||||
|
0x7C080E00, // 0014 CALL R2 7
|
||||||
|
0xB80E1800, // 0015 GETNGBL R3 K12
|
||||||
|
0x8C0C070D, // 0016 GETMET R3 R3 K13
|
||||||
|
0x5C140400, // 0017 MOVE R5 R2
|
||||||
|
0x7C0C0400, // 0018 CALL R3 2
|
||||||
|
0x80000000, // 0019 RET 0
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: get_bat_charge_current
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(get_bat_charge_current, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
4, /* nstack */
|
||||||
|
1, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 2]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("read13", 12887293, 6),
|
||||||
|
/* K1 */ be_const_real_hex(0x3F000000),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("get_bat_charge_current", 1385293050, 22)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[ 5]) { /* code */
|
||||||
|
0x8C040100, // 0000 GETMET R1 R0 K0
|
||||||
|
0x540E0079, // 0001 LDINT R3 122
|
||||||
|
0x7C040400, // 0002 CALL R1 2
|
||||||
|
0x08040301, // 0003 MUL R1 R1 K1
|
||||||
|
0x80040200, // 0004 RET 1 R1
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: get_battery_chargin_status
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(get_battery_chargin_status, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
6, /* nstack */
|
||||||
|
1, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 4]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("wire", -212213352, 4),
|
||||||
|
/* K1 */ be_nested_string("read", -824204347, 4),
|
||||||
|
/* K2 */ be_nested_string("addr", 1087856498, 4),
|
||||||
|
/* K3 */ be_const_int(1),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("get_battery_chargin_status", -2061725725, 26)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[ 7]) { /* code */
|
||||||
|
0x88040100, // 0000 GETMBR R1 R0 K0
|
||||||
|
0x8C040301, // 0001 GETMET R1 R1 K1
|
||||||
|
0x880C0102, // 0002 GETMBR R3 R0 K2
|
||||||
|
0x58100003, // 0003 LDCONST R4 K3
|
||||||
|
0x58140003, // 0004 LDCONST R5 K3
|
||||||
|
0x7C040800, // 0005 CALL R1 4
|
||||||
|
0x80040200, // 0006 RET 1 R1
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: get_input_power_status
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(get_input_power_status, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
6, /* nstack */
|
||||||
|
1, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 5]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("wire", -212213352, 4),
|
||||||
|
/* K1 */ be_nested_string("read", -824204347, 4),
|
||||||
|
/* K2 */ be_nested_string("addr", 1087856498, 4),
|
||||||
|
/* K3 */ be_const_int(0),
|
||||||
|
/* K4 */ be_const_int(1),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("get_input_power_status", -192138119, 22)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[ 7]) { /* code */
|
||||||
|
0x88040100, // 0000 GETMBR R1 R0 K0
|
||||||
|
0x8C040301, // 0001 GETMET R1 R1 K1
|
||||||
|
0x880C0102, // 0002 GETMBR R3 R0 K2
|
||||||
|
0x58100003, // 0003 LDCONST R4 K3
|
||||||
|
0x58140004, // 0004 LDCONST R5 K4
|
||||||
|
0x7C040800, // 0005 CALL R1 4
|
||||||
|
0x80040200, // 0006 RET 1 R1
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified class: AXP192
|
||||||
|
********************************************************************/
|
||||||
|
extern const bclass be_class_I2C_Driver;
|
||||||
|
be_local_class(AXP192,
|
||||||
|
0,
|
||||||
|
&be_class_I2C_Driver,
|
||||||
|
be_nested_map(21,
|
||||||
|
( (struct bmapnode*) &(const bmapnode[]) {
|
||||||
|
{ be_nested_key("get_warning_level", 1737834441, 17, -1), be_const_closure(get_warning_level_closure) },
|
||||||
|
{ be_nested_key("get_vbus_current", 1205347942, 16, -1), be_const_closure(get_vbus_current_closure) },
|
||||||
|
{ be_nested_key("set_chg_current", 336304386, 15, 14), be_const_closure(set_chg_current_closure) },
|
||||||
|
{ be_nested_key("get_bat_current", 1912106073, 15, -1), be_const_closure(get_bat_current_closure) },
|
||||||
|
{ be_nested_key("get_bat_power", -1227592443, 13, 9), be_const_closure(get_bat_power_closure) },
|
||||||
|
{ be_nested_key("json_append", -1292948012, 11, -1), be_const_closure(json_append_closure) },
|
||||||
|
{ be_nested_key("get_vbus_voltage", -1896756895, 16, -1), be_const_closure(get_vbus_voltage_closure) },
|
||||||
|
{ be_nested_key("get_temp", -924047810, 8, -1), be_const_closure(get_temp_closure) },
|
||||||
|
{ be_nested_key("battery_present", -706570238, 15, -1), be_const_closure(battery_present_closure) },
|
||||||
|
{ be_nested_key("get_aps_voltage", -2001930861, 15, -1), be_const_closure(get_aps_voltage_closure) },
|
||||||
|
{ be_nested_key("set_dcdc_enable", 1594690786, 15, -1), be_const_closure(set_dcdc_enable_closure) },
|
||||||
|
{ be_nested_key("set_ldo_voltage", -204466136, 15, 7), be_const_closure(set_ldo_voltage_closure) },
|
||||||
|
{ be_nested_key("init", 380752755, 4, 2), be_const_closure(init_closure) },
|
||||||
|
{ be_nested_key("get_bat_voltage", 706676538, 15, 18), be_const_closure(get_bat_voltage_closure) },
|
||||||
|
{ be_nested_key("set_ldo_enable", -1378465255, 14, -1), be_const_closure(set_ldo_enable_closure) },
|
||||||
|
{ be_nested_key("set_dc_voltage", -2112985360, 14, 13), be_const_closure(set_dc_voltage_closure) },
|
||||||
|
{ be_nested_key("write_gpio", -2027026962, 10, -1), be_const_closure(write_gpio_closure) },
|
||||||
|
{ be_nested_key("web_sensor", -1394870324, 10, -1), be_const_closure(web_sensor_closure) },
|
||||||
|
{ be_nested_key("get_bat_charge_current", 1385293050, 22, 19), be_const_closure(get_bat_charge_current_closure) },
|
||||||
|
{ be_nested_key("get_battery_chargin_status", -2061725725, 26, -1), be_const_closure(get_battery_chargin_status_closure) },
|
||||||
|
{ be_nested_key("get_input_power_status", -192138119, 22, -1), be_const_closure(get_input_power_status_closure) },
|
||||||
|
})),
|
||||||
|
(be_nested_const_str("AXP192", 757230128, 6))
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
void be_load_AXP192_class(bvm *vm) {
|
||||||
|
be_pushntvclass(vm, &be_class_AXP192);
|
||||||
|
be_setglobal(vm, "AXP192");
|
||||||
|
be_pop(vm, 1);
|
||||||
|
}
|
|
@ -389,44 +389,16 @@ be_local_closure(read32, /* name */
|
||||||
/*******************************************************************/
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#if BE_USE_PRECOMPILED_OBJECT
|
#include "../generate/be_fixed_be_class_I2C_Driver.h"
|
||||||
#include "../generate/be_fixed_be_class_tasmota_i2c_driver.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void be_load_driver_i2c_lib(bvm *vm) {
|
void be_load_driver_i2c_lib(bvm *vm) {
|
||||||
#if !BE_USE_PRECOMPILED_OBJECT
|
be_pushntvclass(vm, &be_class_I2C_Driver);
|
||||||
static const bnfuncinfo members[] = {
|
|
||||||
{ "wire", NULL },
|
|
||||||
{ "addr", NULL },
|
|
||||||
{ "name", NULL },
|
|
||||||
|
|
||||||
{ NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */
|
|
||||||
{ "init", (bntvfunc) &init_closure },
|
|
||||||
{ "write8", (bntvfunc) &write8_closure },
|
|
||||||
{ "write_bit", (bntvfunc) &write_bit_closure },
|
|
||||||
{ "read8", (bntvfunc) &read8_closure },
|
|
||||||
{ "read12", (bntvfunc) &read12_closure },
|
|
||||||
{ "read13", (bntvfunc) &read13_closure },
|
|
||||||
{ "read24", (bntvfunc) &read24_closure },
|
|
||||||
{ "read32", (bntvfunc) &read32_closure },
|
|
||||||
|
|
||||||
{ NULL, NULL }
|
|
||||||
};
|
|
||||||
|
|
||||||
be_regclass(vm, "I2C_Driver", members);
|
|
||||||
be_getglobal(vm, "I2C_Driver");
|
|
||||||
be_getglobal(vm, "Driver");
|
|
||||||
be_setsuper(vm, -2);
|
|
||||||
be_pop(vm, 2);
|
|
||||||
#else
|
|
||||||
be_pushntvclass(vm, &be_class_tasmota_i2c_driver);
|
|
||||||
be_setglobal(vm, "I2C_Driver");
|
be_setglobal(vm, "I2C_Driver");
|
||||||
be_pop(vm, 1);
|
be_pop(vm, 1);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
/* @const_object_info_begin
|
/* @const_object_info_begin
|
||||||
|
|
||||||
class be_class_tasmota_i2c_driver (scope: global, name: I2C_Driver, super: be_class_Driver) {
|
class be_class_I2C_Driver (scope: global, name: I2C_Driver, super: be_class_Driver) {
|
||||||
wire, var
|
wire, var
|
||||||
addr, var
|
addr, var
|
||||||
name, var
|
name, var
|
||||||
|
|
|
@ -108,6 +108,7 @@ extern void be_load_onewirelib(bvm *vm);
|
||||||
extern void be_load_Driver_class(bvm *vm);
|
extern void be_load_Driver_class(bvm *vm);
|
||||||
extern void be_load_Timer_class(bvm *vm);
|
extern void be_load_Timer_class(bvm *vm);
|
||||||
extern void be_load_driver_i2c_lib(bvm *vm);
|
extern void be_load_driver_i2c_lib(bvm *vm);
|
||||||
|
extern void be_load_AXP192_class(bvm *vm);
|
||||||
extern void be_load_md5_lib(bvm *vm);
|
extern void be_load_md5_lib(bvm *vm);
|
||||||
extern void be_load_webclient_lib(bvm *vm);
|
extern void be_load_webclient_lib(bvm *vm);
|
||||||
extern void be_load_crypto_lib(bvm *vm);
|
extern void be_load_crypto_lib(bvm *vm);
|
||||||
|
@ -153,6 +154,7 @@ BERRY_API void be_load_custom_libs(bvm *vm)
|
||||||
#ifdef USE_I2C
|
#ifdef USE_I2C
|
||||||
be_load_wirelib(vm);
|
be_load_wirelib(vm);
|
||||||
be_load_driver_i2c_lib(vm);
|
be_load_driver_i2c_lib(vm);
|
||||||
|
be_load_AXP192_class(vm);
|
||||||
#endif // USE_I2C
|
#endif // USE_I2C
|
||||||
#ifdef USE_WEBCLIENT
|
#ifdef USE_WEBCLIENT
|
||||||
be_load_webclient_lib(vm);
|
be_load_webclient_lib(vm);
|
||||||
|
|
|
@ -0,0 +1,176 @@
|
||||||
|
#-------------------------------------------------------------
|
||||||
|
- Generic driver for AXP192 - solidified
|
||||||
|
-------------------------------------------------------------#
|
||||||
|
class AXP192 : I2C_Driver
|
||||||
|
def init()
|
||||||
|
super(self, I2C_Driver).init("AXP192", 0x34)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Return True = Battery Exist
|
||||||
|
def battery_present()
|
||||||
|
if self.wire.read(self.addr, 0x01, 1) & 0x20 return true
|
||||||
|
else return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Input Power Status ???
|
||||||
|
def get_input_power_status()
|
||||||
|
return self.wire.read(self.addr, 0x00, 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Battery Charging Status
|
||||||
|
def get_battery_chargin_status()
|
||||||
|
return self.wire.read(self.addr, 0x01, 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
# AXP chip temperature in °C
|
||||||
|
def get_temp()
|
||||||
|
return self.read12(0x5E) * 0.1 - 144.7
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_bat_power()
|
||||||
|
return self.read24(0x70) * 0.00055
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_bat_voltage()
|
||||||
|
return self.read12(0x78) * 0.0011
|
||||||
|
end
|
||||||
|
def get_bat_current()
|
||||||
|
return (self.read13(0x7A) - self.read13(0x7C)) * 0.5
|
||||||
|
end
|
||||||
|
def get_bat_charge_current()
|
||||||
|
return self.read13(0x7A) * 0.5
|
||||||
|
end
|
||||||
|
def get_aps_voltage()
|
||||||
|
return self.read12(0x7E) * 0.0014
|
||||||
|
end
|
||||||
|
def get_vbus_voltage()
|
||||||
|
return self.read12(0x5A) * 0.0017
|
||||||
|
end
|
||||||
|
def get_vbus_current()
|
||||||
|
return self.read12(0x5C) * 0.375
|
||||||
|
end
|
||||||
|
|
||||||
|
# set LDO voltage
|
||||||
|
# ldo: 2/3
|
||||||
|
# voltage: (mV) 1800mV - 3300mV in 100mV steps
|
||||||
|
def set_ldo_voltage(ldo, voltage)
|
||||||
|
if voltage > 3300 voltage = 15
|
||||||
|
else voltage = (voltage / 100) - 18
|
||||||
|
end
|
||||||
|
|
||||||
|
if ldo == 2
|
||||||
|
self.write8(0x28, self.read8(0x28) & 0x0F | ((voltage & 0x0F) << 4))
|
||||||
|
end
|
||||||
|
if ldo == 3
|
||||||
|
self.write8(0x28, self.read8(0x28) & 0xF0 | (voltage & 0x0F))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# set DCDC enable, 1/2/3
|
||||||
|
def set_dcdc_enable(dcdc, state)
|
||||||
|
if dcdc == 1 self.write_bit(0x12, 0, state) end
|
||||||
|
if dcdc == 2 self.write_bit(0x12, 4, state) end
|
||||||
|
if dcdc == 3 self.write_bit(0x12, 1, state) end
|
||||||
|
end
|
||||||
|
|
||||||
|
# set LDO enable, 2/3 (LDO 1 is always on)
|
||||||
|
def set_ldo_enable(ldo, state)
|
||||||
|
if ldo == 2 self.write_bit(0x12, 2, state) end
|
||||||
|
if ldo == 3 self.write_bit(0x12, 3, state) end
|
||||||
|
end
|
||||||
|
|
||||||
|
# set GPIO output state 0/1/2 and 3/4
|
||||||
|
def write_gpio(gpio, state)
|
||||||
|
if gpio >= 0 && gpio <= 2
|
||||||
|
self.write_bit(0x94, gpio, state)
|
||||||
|
elif gpio >= 3 && gpio <= 4
|
||||||
|
self.write_bit(0x96, gpio - 3, state)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Set voltage on DC-DC1/2/3
|
||||||
|
# dcdc: 1/2/3 (warning some C libs start at 0)
|
||||||
|
# voltage:
|
||||||
|
def set_dc_voltage(dcdc, voltage)
|
||||||
|
if dcdc < 1 || dcdc > 3 return end
|
||||||
|
var v
|
||||||
|
if voltage < 700 v = 0
|
||||||
|
elif voltage > 3500 v = 112
|
||||||
|
elif dcdc == 2 && voltage > 2275 v = 63 # dcdc2 is limited to 2.275V
|
||||||
|
else v = (voltage - 700) / 25
|
||||||
|
end
|
||||||
|
|
||||||
|
var addr = 0x26
|
||||||
|
if dcdc == 3 addr = 0x27
|
||||||
|
elif dcdc == 2 addr = 0x23
|
||||||
|
end
|
||||||
|
|
||||||
|
self.write8(addr, self.read8(addr) & 0x80 | (v & 0x7F))
|
||||||
|
end
|
||||||
|
|
||||||
|
# Set charging current
|
||||||
|
# 100mA = 0
|
||||||
|
# 190mA = 1
|
||||||
|
# 280mA = 2
|
||||||
|
# 360mA = 3
|
||||||
|
# 450mA = 4
|
||||||
|
# 550mA = 5
|
||||||
|
# 630mA = 6
|
||||||
|
# 700mA = 7
|
||||||
|
# 780mA = 8
|
||||||
|
# 880mA = 9
|
||||||
|
# 960mA = 10
|
||||||
|
# 1000mA = 11
|
||||||
|
# 1080mA = 12
|
||||||
|
# 1160mA = 13
|
||||||
|
# 1240mA = 14
|
||||||
|
# 1320mA = 15
|
||||||
|
def set_chg_current(current_code)
|
||||||
|
self.write8(0x33, self.read8(0x33) & 0xF0 | (current_code & 0x0F))
|
||||||
|
end
|
||||||
|
|
||||||
|
# // Low Volt Level 1, when APS Volt Output < 3.4496 V
|
||||||
|
# // Low Volt Level 2, when APS Volt Output < 3.3992 V, then this flag is SET (0x01)
|
||||||
|
# // Flag will reset once battery volt is charged above Low Volt Level 1
|
||||||
|
# // Note: now AXP192 have the Shutdown Voltage of 3.0V (B100) Def in REG 31H
|
||||||
|
def get_warning_level()
|
||||||
|
return self.read12(0x47) & 1
|
||||||
|
end
|
||||||
|
|
||||||
|
#- trigger a read every second -#
|
||||||
|
# def every_second()
|
||||||
|
# if !self.wire return nil end #- exit if not initialized -#
|
||||||
|
# end
|
||||||
|
|
||||||
|
#- display sensor value in the web UI -#
|
||||||
|
def web_sensor()
|
||||||
|
if !self.wire return nil end #- exit if not initialized -#
|
||||||
|
import string
|
||||||
|
var msg = string.format(
|
||||||
|
"{s}VBus Voltage{m}%.3f V{e}"..
|
||||||
|
"{s}VBus Current{m}%.1f mA{e}"..
|
||||||
|
"{s}Batt Voltage{m}%.3f V{e}"..
|
||||||
|
"{s}Batt Current{m}%.1f mA{e}"..
|
||||||
|
#"{s}Batt Power{m}%.3f{e}"..
|
||||||
|
"{s}Temp AXP{m}%.1f °C{e}",
|
||||||
|
self.get_vbus_voltage(), self.get_vbus_voltage(),
|
||||||
|
self.get_bat_voltage(), self.get_bat_current(),
|
||||||
|
#self.get_bat_power(),
|
||||||
|
self.get_temp()
|
||||||
|
)
|
||||||
|
tasmota.web_send_decimal(msg)
|
||||||
|
end
|
||||||
|
|
||||||
|
#- add sensor value to teleperiod -#
|
||||||
|
def json_append()
|
||||||
|
if !self.wire return nil end #- exit if not initialized -#
|
||||||
|
# import string
|
||||||
|
# var ax = int(self.accel[0] * 1000)
|
||||||
|
# var ay = int(self.accel[1] * 1000)
|
||||||
|
# var az = int(self.accel[2] * 1000)
|
||||||
|
# var msg = string.format(",\"MPU6886\":{\"AX\":%i,\"AY\":%i,\"AZ\":%i,\"GX\":%i,\"GY\":%i,\"GZ\":%i}",
|
||||||
|
# ax, ay, az, self.gyro[0], self.gyro[1], self.gyro[2])
|
||||||
|
# tasmota.response_append(msg)
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,6 +1,6 @@
|
||||||
#include "be_constobj.h"
|
#include "be_constobj.h"
|
||||||
|
|
||||||
static be_define_const_map_slots(be_class_tasmota_i2c_driver_map) {
|
static be_define_const_map_slots(be_class_I2C_Driver_map) {
|
||||||
{ be_const_key(read32, -1), be_const_closure(read32_closure) },
|
{ be_const_key(read32, -1), be_const_closure(read32_closure) },
|
||||||
{ be_const_key(write8, 6), be_const_closure(write8_closure) },
|
{ be_const_key(write8, 6), be_const_closure(write8_closure) },
|
||||||
{ be_const_key(name, -1), be_const_var(0) },
|
{ be_const_key(name, -1), be_const_var(0) },
|
||||||
|
@ -15,12 +15,12 @@ static be_define_const_map_slots(be_class_tasmota_i2c_driver_map) {
|
||||||
};
|
};
|
||||||
|
|
||||||
static be_define_const_map(
|
static be_define_const_map(
|
||||||
be_class_tasmota_i2c_driver_map,
|
be_class_I2C_Driver_map,
|
||||||
11
|
11
|
||||||
);
|
);
|
||||||
|
|
||||||
BE_EXPORT_VARIABLE be_define_const_class(
|
BE_EXPORT_VARIABLE be_define_const_class(
|
||||||
be_class_tasmota_i2c_driver,
|
be_class_I2C_Driver,
|
||||||
3,
|
3,
|
||||||
(bclass *)&be_class_Driver,
|
(bclass *)&be_class_Driver,
|
||||||
I2C_Driver
|
I2C_Driver
|
|
@ -1,393 +0,0 @@
|
||||||
#-------------------------------------------------------------
|
|
||||||
- Generic driver for AXP192
|
|
||||||
-------------------------------------------------------------#
|
|
||||||
class AXP192 : I2C_Driver
|
|
||||||
def init()
|
|
||||||
super(self, I2C_Driver).init("AXP192", 0x34)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Return True = Battery Exist
|
|
||||||
def battery_present()
|
|
||||||
if self.wire.read(self.addr, 0x01, 1) & 0x20 return true
|
|
||||||
else return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Input Power Status ???
|
|
||||||
def get_input_power_status()
|
|
||||||
return self.wire.read(self.addr, 0x00, 1)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Battery Charging Status
|
|
||||||
def get_battery_chargin_status()
|
|
||||||
return self.wire.read(self.addr, 0x01, 1)
|
|
||||||
end
|
|
||||||
|
|
||||||
# AXP chip temperature in °C
|
|
||||||
def get_temp()
|
|
||||||
return self.read12(0x5E) * 0.1 - 144.7
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_bat_power()
|
|
||||||
return self.read24(0x70) * 0.00055
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_bat_voltage()
|
|
||||||
return self.read12(0x78) * 0.0011
|
|
||||||
end
|
|
||||||
def get_bat_current()
|
|
||||||
return (self.read13(0x7A) - self.read13(0x7C)) * 0.5
|
|
||||||
end
|
|
||||||
def get_bat_charge_current()
|
|
||||||
return self.read13(0x7A) * 0.5
|
|
||||||
end
|
|
||||||
def get_aps_voltage()
|
|
||||||
return self.read12(0x7E) * 0.0014
|
|
||||||
end
|
|
||||||
def get_vbus_voltage()
|
|
||||||
return self.read12(0x5A) * 0.0017
|
|
||||||
end
|
|
||||||
def get_vbus_current()
|
|
||||||
return self.read12(0x5C) * 0.375
|
|
||||||
end
|
|
||||||
|
|
||||||
# set LDO voltage
|
|
||||||
# ldo: 2/3
|
|
||||||
# voltage: (mV) 1800mV - 3300mV in 100mV steps
|
|
||||||
def set_ldo_voltage(ldo, voltage)
|
|
||||||
if voltage > 3300 voltage = 15
|
|
||||||
else voltage = (voltage / 100) - 18
|
|
||||||
end
|
|
||||||
|
|
||||||
if ldo == 2
|
|
||||||
self.write8(0x28, self.read8(0x28) & 0x0F | ((voltage & 0x0F) << 4))
|
|
||||||
end
|
|
||||||
if ldo == 3
|
|
||||||
self.write8(0x28, self.read8(0x28) & 0xF0 | (voltage & 0x0F))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# set DCDC enable, 1/2/3
|
|
||||||
def set_dcdc_enable(dcdc, state)
|
|
||||||
if dcdc == 1 self.write_bit(0x12, 0, state) end
|
|
||||||
if dcdc == 2 self.write_bit(0x12, 4, state) end
|
|
||||||
if dcdc == 3 self.write_bit(0x12, 1, state) end
|
|
||||||
end
|
|
||||||
|
|
||||||
# set LDO enable, 2/3 (LDO 1 is always on)
|
|
||||||
def set_ldo_enable(ldo, state)
|
|
||||||
if ldo == 2 self.write_bit(0x12, 2, state) end
|
|
||||||
if ldo == 3 self.write_bit(0x12, 3, state) end
|
|
||||||
end
|
|
||||||
|
|
||||||
# set GPIO output state 0/1/2 and 3/4
|
|
||||||
def write_gpio(gpio, state)
|
|
||||||
if gpio >= 0 && gpio <= 2
|
|
||||||
self.write_bit(0x94, gpio, state)
|
|
||||||
elif gpio >= 3 && gpio <= 4
|
|
||||||
self.write_bit(0x96, gpio - 3, state)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Set voltage on DC-DC1/2/3
|
|
||||||
# dcdc: 1/2/3 (warning some C libs start at 0)
|
|
||||||
# voltage:
|
|
||||||
def set_dc_voltage(dcdc, voltage)
|
|
||||||
if dcdc < 1 || dcdc > 3 return end
|
|
||||||
var v
|
|
||||||
if voltage < 700 v = 0
|
|
||||||
elif voltage > 3500 v = 112
|
|
||||||
elif dcdc == 2 && voltage > 2275 v = 63 # dcdc2 is limited to 2.275V
|
|
||||||
else v = (voltage - 700) / 25
|
|
||||||
end
|
|
||||||
|
|
||||||
var addr = 0x26
|
|
||||||
if dcdc == 3 addr = 0x27
|
|
||||||
elif dcdc == 2 addr = 0x23
|
|
||||||
end
|
|
||||||
|
|
||||||
self.write8(addr, self.read8(addr) & 0x80 | (v & 0x7F))
|
|
||||||
end
|
|
||||||
|
|
||||||
# Set charging current
|
|
||||||
# 100mA = 0
|
|
||||||
# 190mA = 1
|
|
||||||
# 280mA = 2
|
|
||||||
# 360mA = 3
|
|
||||||
# 450mA = 4
|
|
||||||
# 550mA = 5
|
|
||||||
# 630mA = 6
|
|
||||||
# 700mA = 7
|
|
||||||
# 780mA = 8
|
|
||||||
# 880mA = 9
|
|
||||||
# 960mA = 10
|
|
||||||
# 1000mA = 11
|
|
||||||
# 1080mA = 12
|
|
||||||
# 1160mA = 13
|
|
||||||
# 1240mA = 14
|
|
||||||
# 1320mA = 15
|
|
||||||
def set_chg_current(current_code)
|
|
||||||
self.write8(0x33, self.read8(0x33) & 0xF0 | (current_code & 0x0F))
|
|
||||||
end
|
|
||||||
|
|
||||||
# // Low Volt Level 1, when APS Volt Output < 3.4496 V
|
|
||||||
# // Low Volt Level 2, when APS Volt Output < 3.3992 V, then this flag is SET (0x01)
|
|
||||||
# // Flag will reset once battery volt is charged above Low Volt Level 1
|
|
||||||
# // Note: now AXP192 have the Shutdown Voltage of 3.0V (B100) Def in REG 31H
|
|
||||||
def get_warning_level()
|
|
||||||
return self.read12(0x47) & 1
|
|
||||||
end
|
|
||||||
|
|
||||||
#- trigger a read every second -#
|
|
||||||
# def every_second()
|
|
||||||
# if !self.wire return nil end #- exit if not initialized -#
|
|
||||||
# end
|
|
||||||
|
|
||||||
#- display sensor value in the web UI -#
|
|
||||||
def web_sensor()
|
|
||||||
if !self.wire return nil end #- exit if not initialized -#
|
|
||||||
import string
|
|
||||||
var msg = string.format(
|
|
||||||
"{s}VBus Voltage{m}%.3f V{e}"..
|
|
||||||
"{s}VBus Current{m}%.1f mA{e}"..
|
|
||||||
"{s}Batt Voltage{m}%.3f V{e}"..
|
|
||||||
"{s}Batt Current{m}%.1f mA{e}"..
|
|
||||||
#"{s}Batt Power{m}%.3f{e}"..
|
|
||||||
"{s}Temp AXP{m}%.1f °C{e}",
|
|
||||||
self.get_vbus_voltage(), self.get_vbus_voltage(),
|
|
||||||
self.get_bat_voltage(), self.get_bat_current(),
|
|
||||||
#self.get_bat_power(),
|
|
||||||
self.get_temp()
|
|
||||||
)
|
|
||||||
tasmota.web_send_decimal(msg)
|
|
||||||
end
|
|
||||||
|
|
||||||
#- add sensor value to teleperiod -#
|
|
||||||
def json_append()
|
|
||||||
if !self.wire return nil end #- exit if not initialized -#
|
|
||||||
# import string
|
|
||||||
# var ax = int(self.accel[0] * 1000)
|
|
||||||
# var ay = int(self.accel[1] * 1000)
|
|
||||||
# var az = int(self.accel[2] * 1000)
|
|
||||||
# var msg = string.format(",\"MPU6886\":{\"AX\":%i,\"AY\":%i,\"AZ\":%i,\"GX\":%i,\"GY\":%i,\"GZ\":%i}",
|
|
||||||
# ax, ay, az, self.gyro[0], self.gyro[1], self.gyro[2])
|
|
||||||
# tasmota.response_append(msg)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
#-------------------------------------------------------------
|
|
||||||
- Specialized driver for AXP192 of M5Stack Core 2
|
|
||||||
-------------------------------------------------------------#
|
|
||||||
class AXP192_M5Stack_Core2 : AXP192
|
|
||||||
def init()
|
|
||||||
super(self, AXP192).init()
|
|
||||||
|
|
||||||
if self.wire
|
|
||||||
# Disable vbus hold limit
|
|
||||||
self.write8(0x30, self.read8(0x30) & 0x04 | 0x02)
|
|
||||||
|
|
||||||
# AXP192 GPIO1:OD OUTPUT
|
|
||||||
self.write8(0x92, self.read8(0x92) & 0xF8)
|
|
||||||
|
|
||||||
# AXP192 GPIO2:OD OUTPUT
|
|
||||||
self.write8(0x93, self.read8(0x93) & 0xF8)
|
|
||||||
|
|
||||||
# AXP192 RTC CHG rtc battery charging enabled
|
|
||||||
self.write8(0x35, self.read8(0x35) & 0x1C | 0xA2)
|
|
||||||
|
|
||||||
# esp32 power voltage was set to 3.35v
|
|
||||||
self.set_esp_voltage(3350)
|
|
||||||
|
|
||||||
# lcd backlight voltage was set to 2.80v
|
|
||||||
self.set_lcd_voltage(2800)
|
|
||||||
|
|
||||||
# lcd logic and sdcard voltage preset to 3.3v
|
|
||||||
self.set_ldo_voltage(2, 3300)
|
|
||||||
|
|
||||||
# vibrator voltage preset to 2v
|
|
||||||
self.set_ldo_voltage(3, 2000)
|
|
||||||
|
|
||||||
# turn on logic and sdcard
|
|
||||||
self.set_ldo_enable(2, true)
|
|
||||||
|
|
||||||
# turn on lcd backlight
|
|
||||||
self.set_dcdc_enable(3, true)
|
|
||||||
|
|
||||||
# turn green led on
|
|
||||||
self.set_led(true)
|
|
||||||
|
|
||||||
# set charging current to 100mA
|
|
||||||
self.set_chg_current(0) # 0 = 100mA
|
|
||||||
|
|
||||||
# AXP192 GPIO4 - TBC what this does really?
|
|
||||||
self.write8(0x95, self.read8(0X95) & 0x72 | 0x84)
|
|
||||||
|
|
||||||
# Button parameter setting
|
|
||||||
# Current:
|
|
||||||
# Boot time = 512ms
|
|
||||||
# Long key press time setting = 1s
|
|
||||||
# Automatic shutdown function setting when the key duration is longer than the shutdown duration = turn on
|
|
||||||
# PWROK signal delay after power on = 64ms
|
|
||||||
# Shutdown duration setting = 4s
|
|
||||||
self.write8(0x34, 0x4C)
|
|
||||||
|
|
||||||
# ADC all-on
|
|
||||||
# Bit 7: Battery voltage ADC enable
|
|
||||||
# Bit 6: Battery current ADC enable
|
|
||||||
# Bit 5: ACIN voltage ADC enable
|
|
||||||
# Bit 4: ACIN current ADC enable
|
|
||||||
# Bit 3: VBUS voltage ADC enable
|
|
||||||
# Bit 2: VBUS current ADC enable
|
|
||||||
# Bit 1: APS voltage ADC enable
|
|
||||||
# Bit 0: TS pin ADC function enable
|
|
||||||
self.write8(0x82, 0xFF)
|
|
||||||
|
|
||||||
# Reset LCD Controller
|
|
||||||
self.set_lcd_reset(false)
|
|
||||||
self.get_tasmota().delay(100) # wait for 100ms
|
|
||||||
self.set_lcd_reset(true)
|
|
||||||
self.get_tasmota().delay(100) # wait for 100ms
|
|
||||||
|
|
||||||
# bus power mode_output
|
|
||||||
self.set_buf_power_mode(false)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# set ESP voltage on DCDC1
|
|
||||||
def set_esp_voltage(voltage)
|
|
||||||
if voltage >= 3000 && voltage <= 3400
|
|
||||||
self.set_dc_voltage(1, voltage)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# set LCD backlight voltage on DCDC3
|
|
||||||
def set_lcd_voltage(voltage)
|
|
||||||
if voltage < 2500 voltage = 2500 end
|
|
||||||
if voltage > 3300 voltage = 3300 end
|
|
||||||
self.set_dc_voltage(3, voltage)
|
|
||||||
end
|
|
||||||
|
|
||||||
# set state of the green led, GPIO 1
|
|
||||||
def set_led(state)
|
|
||||||
self.write_gpio(1, !state)
|
|
||||||
end
|
|
||||||
|
|
||||||
# LCD Controller Reset pin
|
|
||||||
def set_lcd_reset(state)
|
|
||||||
self.write_gpio(4, state)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Speaker enable
|
|
||||||
def set_speaker_enable(state)
|
|
||||||
self.write_gpio(2, state)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Bus Power Mode
|
|
||||||
def set_buf_power_mode(state)
|
|
||||||
if (state)
|
|
||||||
self.write8(0x12, self.read8(0x12) & 0xBF) # set EXTEN to disable 5v boost
|
|
||||||
self.write8(0x90, self.read8(0x90) & 0xF8 | 0x01) # set GPIO0 to float, using enternal pulldown resistor to enable supply from BUS_5VS
|
|
||||||
else
|
|
||||||
self.write8(0x91, self.read8(0x91) & 0x0F | 0xF0)
|
|
||||||
self.write8(0x90, self.read8(0x90) & 0xF8 | 0x02) # set GPIO0 to LDO OUTPUT , pullup N_VBUSEN to disable supply from BUS_5V
|
|
||||||
self.write8(0x12, self.read8(0x12) | 0x40) # set EXTEN to enable 5v boost
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
#-------------------------------------------------------------
|
|
||||||
- Specialized driver for AXP192 of M5StickC
|
|
||||||
-------------------------------------------------------------#
|
|
||||||
class AXP192_M5StickC : AXP192
|
|
||||||
def init()
|
|
||||||
super(self, AXP192).init()
|
|
||||||
if self.wire
|
|
||||||
# Disable vbus hold limit
|
|
||||||
self.write8(0x30, 0x80)
|
|
||||||
|
|
||||||
# lcd backlight voltage was set to 2.80v
|
|
||||||
self.set_lcd_voltage(2800)
|
|
||||||
|
|
||||||
# set LDO3 3.0V TFT
|
|
||||||
self.set_ldo_voltage(3, 3000)
|
|
||||||
|
|
||||||
# Set ADC sample rate to 200hz
|
|
||||||
self.write8(0x84, 0xF2)
|
|
||||||
|
|
||||||
# set charging current to 100mA
|
|
||||||
self.set_chg_current(0) # 0 = 100mA
|
|
||||||
|
|
||||||
# esp32 power voltage was set to 3.3v
|
|
||||||
self.set_esp_voltage(3300)
|
|
||||||
|
|
||||||
# PEK key parameter setting
|
|
||||||
# Current:
|
|
||||||
# Boot time setting = 512ms
|
|
||||||
# Long press time setting = 1s
|
|
||||||
# Automatic shutdown function setting when the key duration is longer than the shutdown duration = turn on
|
|
||||||
# PWROK signal delay after power on = 64ms
|
|
||||||
# Shutdown duration setting = 4s
|
|
||||||
self.write8(0x36, 0x4C)
|
|
||||||
|
|
||||||
# Mic GPIO0 - floating
|
|
||||||
self.write8(0x90, 0x07)
|
|
||||||
|
|
||||||
# enable LDO2, LDO3, DCDC1, DCDC3
|
|
||||||
self.set_ldo_enable(2, true)
|
|
||||||
self.set_ldo_enable(3, true)
|
|
||||||
self.set_dcdc_enable(1, true)
|
|
||||||
self.set_dcdc_enable(3, true)
|
|
||||||
|
|
||||||
# Set temperature protection
|
|
||||||
self.write8(0x39, 0xFC)
|
|
||||||
|
|
||||||
# Enable RTC BAT charge
|
|
||||||
self.write8(0x35, 0xA2)
|
|
||||||
# Write1Byte(0x35, 0xa2 & (disableRTC ? 0x7F : 0xFF));
|
|
||||||
|
|
||||||
# Enable bat detection
|
|
||||||
self.write8(0x32, 0x46)
|
|
||||||
|
|
||||||
# Set Power off voltage 3.0v
|
|
||||||
self.write8(0x31, self.read8(0x31) & 0xF8 | 0x04)
|
|
||||||
|
|
||||||
# ADC all-on
|
|
||||||
# Bit 7: Battery voltage ADC enable
|
|
||||||
# Bit 6: Battery current ADC enable
|
|
||||||
# Bit 5: ACIN voltage ADC enable
|
|
||||||
# Bit 4: ACIN current ADC enable
|
|
||||||
# Bit 3: VBUS voltage ADC enable
|
|
||||||
# Bit 2: VBUS current ADC enable
|
|
||||||
# Bit 1: APS voltage ADC enable
|
|
||||||
# Bit 0: TS pin ADC function enable
|
|
||||||
self.write8(0x82, 0xFF)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# set ESP voltage on DCDC1
|
|
||||||
def set_esp_voltage(voltage)
|
|
||||||
if voltage >= 3000 && voltage <= 3400
|
|
||||||
self.set_dc_voltage(1, voltage)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# set LCD backlight voltage on DCDC3
|
|
||||||
def set_lcd_voltage(voltage)
|
|
||||||
if voltage < 2500 voltage = 2500 end
|
|
||||||
if voltage > 3300 voltage = 3300 end
|
|
||||||
self.set_ldo_voltage(2, voltage)
|
|
||||||
end
|
|
||||||
|
|
||||||
# LCD Controller Reset pin
|
|
||||||
def set_lcd_reset(state)
|
|
||||||
self.set_ldo_enable(3, state)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
# axp = AXP192_M5Stack_Core2()
|
|
||||||
# tasmota.add_driver(axp)
|
|
||||||
|
|
||||||
|
|
||||||
axp = AXP192_M5StickC()
|
|
||||||
tasmota.add_driver(axp)
|
|
|
@ -0,0 +1,122 @@
|
||||||
|
#-------------------------------------------------------------
|
||||||
|
- Specialized driver for AXP192 of M5Stack Core 2
|
||||||
|
-------------------------------------------------------------#
|
||||||
|
class AXP192_M5Stack_Core2 : AXP192
|
||||||
|
def init()
|
||||||
|
super(self, AXP192).init()
|
||||||
|
|
||||||
|
if self.wire
|
||||||
|
# Disable vbus hold limit
|
||||||
|
self.write8(0x30, self.read8(0x30) & 0x04 | 0x02)
|
||||||
|
|
||||||
|
# AXP192 GPIO1:OD OUTPUT
|
||||||
|
self.write8(0x92, self.read8(0x92) & 0xF8)
|
||||||
|
|
||||||
|
# AXP192 GPIO2:OD OUTPUT
|
||||||
|
self.write8(0x93, self.read8(0x93) & 0xF8)
|
||||||
|
|
||||||
|
# AXP192 RTC CHG rtc battery charging enabled
|
||||||
|
self.write8(0x35, self.read8(0x35) & 0x1C | 0xA2)
|
||||||
|
|
||||||
|
# esp32 power voltage was set to 3.35v
|
||||||
|
self.set_esp_voltage(3350)
|
||||||
|
|
||||||
|
# lcd backlight voltage was set to 2.80v
|
||||||
|
self.set_lcd_voltage(2800)
|
||||||
|
|
||||||
|
# lcd logic and sdcard voltage preset to 3.3v
|
||||||
|
self.set_ldo_voltage(2, 3300)
|
||||||
|
|
||||||
|
# vibrator voltage preset to 2v
|
||||||
|
self.set_ldo_voltage(3, 2000)
|
||||||
|
|
||||||
|
# turn on logic and sdcard
|
||||||
|
self.set_ldo_enable(2, true)
|
||||||
|
|
||||||
|
# turn on lcd backlight
|
||||||
|
self.set_dcdc_enable(3, true)
|
||||||
|
|
||||||
|
# turn green led on
|
||||||
|
self.set_led(true)
|
||||||
|
|
||||||
|
# set charging current to 100mA
|
||||||
|
self.set_chg_current(0) # 0 = 100mA
|
||||||
|
|
||||||
|
# AXP192 GPIO4 - TBC what this does really?
|
||||||
|
self.write8(0x95, self.read8(0X95) & 0x72 | 0x84)
|
||||||
|
|
||||||
|
# Button parameter setting
|
||||||
|
# Current:
|
||||||
|
# Boot time = 512ms
|
||||||
|
# Long key press time setting = 1s
|
||||||
|
# Automatic shutdown function setting when the key duration is longer than the shutdown duration = turn on
|
||||||
|
# PWROK signal delay after power on = 64ms
|
||||||
|
# Shutdown duration setting = 4s
|
||||||
|
self.write8(0x34, 0x4C)
|
||||||
|
|
||||||
|
# ADC all-on
|
||||||
|
# Bit 7: Battery voltage ADC enable
|
||||||
|
# Bit 6: Battery current ADC enable
|
||||||
|
# Bit 5: ACIN voltage ADC enable
|
||||||
|
# Bit 4: ACIN current ADC enable
|
||||||
|
# Bit 3: VBUS voltage ADC enable
|
||||||
|
# Bit 2: VBUS current ADC enable
|
||||||
|
# Bit 1: APS voltage ADC enable
|
||||||
|
# Bit 0: TS pin ADC function enable
|
||||||
|
self.write8(0x82, 0xFF)
|
||||||
|
|
||||||
|
# Reset LCD Controller
|
||||||
|
self.set_lcd_reset(false)
|
||||||
|
self.get_tasmota().delay(100) # wait for 100ms
|
||||||
|
self.set_lcd_reset(true)
|
||||||
|
self.get_tasmota().delay(100) # wait for 100ms
|
||||||
|
|
||||||
|
# bus power mode_output
|
||||||
|
self.set_buf_power_mode(false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# set ESP voltage on DCDC1
|
||||||
|
def set_esp_voltage(voltage)
|
||||||
|
if voltage >= 3000 && voltage <= 3400
|
||||||
|
self.set_dc_voltage(1, voltage)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# set LCD backlight voltage on DCDC3
|
||||||
|
def set_lcd_voltage(voltage)
|
||||||
|
if voltage < 2500 voltage = 2500 end
|
||||||
|
if voltage > 3300 voltage = 3300 end
|
||||||
|
self.set_dc_voltage(3, voltage)
|
||||||
|
end
|
||||||
|
|
||||||
|
# set state of the green led, GPIO 1
|
||||||
|
def set_led(state)
|
||||||
|
self.write_gpio(1, !state)
|
||||||
|
end
|
||||||
|
|
||||||
|
# LCD Controller Reset pin
|
||||||
|
def set_lcd_reset(state)
|
||||||
|
self.write_gpio(4, state)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Speaker enable
|
||||||
|
def set_speaker_enable(state)
|
||||||
|
self.write_gpio(2, state)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Bus Power Mode
|
||||||
|
def set_buf_power_mode(state)
|
||||||
|
if (state)
|
||||||
|
self.write8(0x12, self.read8(0x12) & 0xBF) # set EXTEN to disable 5v boost
|
||||||
|
self.write8(0x90, self.read8(0x90) & 0xF8 | 0x01) # set GPIO0 to float, using enternal pulldown resistor to enable supply from BUS_5VS
|
||||||
|
else
|
||||||
|
self.write8(0x91, self.read8(0x91) & 0x0F | 0xF0)
|
||||||
|
self.write8(0x90, self.read8(0x90) & 0xF8 | 0x02) # set GPIO0 to LDO OUTPUT , pullup N_VBUSEN to disable supply from BUS_5V
|
||||||
|
self.write8(0x12, self.read8(0x12) | 0x40) # set EXTEN to enable 5v boost
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
axp = AXP192_M5Stack_Core2()
|
||||||
|
tasmota.add_driver(axp)
|
|
@ -0,0 +1,91 @@
|
||||||
|
#-------------------------------------------------------------
|
||||||
|
- Specialized driver for AXP192 of M5StickC
|
||||||
|
-------------------------------------------------------------#
|
||||||
|
class AXP192_M5StickC : AXP192
|
||||||
|
def init()
|
||||||
|
super(self, AXP192).init()
|
||||||
|
if self.wire
|
||||||
|
# Disable vbus hold limit
|
||||||
|
self.write8(0x30, 0x80)
|
||||||
|
|
||||||
|
# lcd backlight voltage was set to 2.80v
|
||||||
|
self.set_lcd_voltage(2800)
|
||||||
|
|
||||||
|
# set LDO3 3.0V TFT
|
||||||
|
self.set_ldo_voltage(3, 3000)
|
||||||
|
|
||||||
|
# Set ADC sample rate to 200hz
|
||||||
|
self.write8(0x84, 0xF2)
|
||||||
|
|
||||||
|
# set charging current to 100mA
|
||||||
|
self.set_chg_current(0) # 0 = 100mA
|
||||||
|
|
||||||
|
# esp32 power voltage was set to 3.3v
|
||||||
|
self.set_esp_voltage(3300)
|
||||||
|
|
||||||
|
# PEK key parameter setting
|
||||||
|
# Current:
|
||||||
|
# Boot time setting = 512ms
|
||||||
|
# Long press time setting = 1s
|
||||||
|
# Automatic shutdown function setting when the key duration is longer than the shutdown duration = turn on
|
||||||
|
# PWROK signal delay after power on = 64ms
|
||||||
|
# Shutdown duration setting = 4s
|
||||||
|
self.write8(0x36, 0x4C)
|
||||||
|
|
||||||
|
# Mic GPIO0 - floating
|
||||||
|
self.write8(0x90, 0x07)
|
||||||
|
|
||||||
|
# enable LDO2, LDO3, DCDC1, DCDC3
|
||||||
|
self.set_ldo_enable(2, true)
|
||||||
|
self.set_ldo_enable(3, true)
|
||||||
|
self.set_dcdc_enable(1, true)
|
||||||
|
self.set_dcdc_enable(3, true)
|
||||||
|
|
||||||
|
# Set temperature protection
|
||||||
|
self.write8(0x39, 0xFC)
|
||||||
|
|
||||||
|
# Enable RTC BAT charge
|
||||||
|
self.write8(0x35, 0xA2)
|
||||||
|
# Write1Byte(0x35, 0xa2 & (disableRTC ? 0x7F : 0xFF));
|
||||||
|
|
||||||
|
# Enable bat detection
|
||||||
|
self.write8(0x32, 0x46)
|
||||||
|
|
||||||
|
# Set Power off voltage 3.0v
|
||||||
|
self.write8(0x31, self.read8(0x31) & 0xF8 | 0x04)
|
||||||
|
|
||||||
|
# ADC all-on
|
||||||
|
# Bit 7: Battery voltage ADC enable
|
||||||
|
# Bit 6: Battery current ADC enable
|
||||||
|
# Bit 5: ACIN voltage ADC enable
|
||||||
|
# Bit 4: ACIN current ADC enable
|
||||||
|
# Bit 3: VBUS voltage ADC enable
|
||||||
|
# Bit 2: VBUS current ADC enable
|
||||||
|
# Bit 1: APS voltage ADC enable
|
||||||
|
# Bit 0: TS pin ADC function enable
|
||||||
|
self.write8(0x82, 0xFF)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# set ESP voltage on DCDC1
|
||||||
|
def set_esp_voltage(voltage)
|
||||||
|
if voltage >= 3000 && voltage <= 3400
|
||||||
|
self.set_dc_voltage(1, voltage)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# set LCD backlight voltage on DCDC3
|
||||||
|
def set_lcd_voltage(voltage)
|
||||||
|
if voltage < 2500 voltage = 2500 end
|
||||||
|
if voltage > 3300 voltage = 3300 end
|
||||||
|
self.set_ldo_voltage(2, voltage)
|
||||||
|
end
|
||||||
|
|
||||||
|
# LCD Controller Reset pin
|
||||||
|
def set_lcd_reset(state)
|
||||||
|
self.set_ldo_enable(3, state)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
axp = AXP192_M5StickC()
|
||||||
|
tasmota.add_driver(axp)
|
Loading…
Reference in New Issue