mirror of https://github.com/arendst/Tasmota.git
Merge pull request #11405 from s-hadinger/berry_mar_20
Berry add wire read/write_bytes
This commit is contained in:
commit
a6eea02398
|
@ -20,8 +20,6 @@ extern int b_wire_scan(bvm *vm);
|
||||||
|
|
||||||
extern int b_wire_validwrite(bvm *vm);
|
extern int b_wire_validwrite(bvm *vm);
|
||||||
extern int b_wire_validread(bvm *vm);
|
extern int b_wire_validread(bvm *vm);
|
||||||
extern int b_wire_readbytes(bvm *vm);
|
|
||||||
extern int b_wire_writebytes(bvm *vm);
|
|
||||||
extern int b_wire_detect(bvm *vm);
|
extern int b_wire_detect(bvm *vm);
|
||||||
|
|
||||||
// #if !BE_USE_PRECOMPILED_OBJECT
|
// #if !BE_USE_PRECOMPILED_OBJECT
|
||||||
|
@ -40,13 +38,11 @@ void be_load_wirelib(bvm *vm)
|
||||||
{ "scan", b_wire_scan },
|
{ "scan", b_wire_scan },
|
||||||
{ "write", b_wire_validwrite },
|
{ "write", b_wire_validwrite },
|
||||||
{ "read", b_wire_validread },
|
{ "read", b_wire_validread },
|
||||||
{ "read_bytes", b_wire_validread },
|
|
||||||
{ "write_bytes", b_wire_validread },
|
|
||||||
{ "detect", b_wire_detect },
|
{ "detect", b_wire_detect },
|
||||||
|
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
be_regclass(vm, "Wire", members);
|
be_regclass(vm, "Wire_ntv", members);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
/* @const_object_info_begin
|
/* @const_object_info_begin
|
||||||
|
|
|
@ -138,7 +138,7 @@ extern "C" {
|
||||||
const void * buf;
|
const void * buf;
|
||||||
size_t len;
|
size_t len;
|
||||||
TwoWire & myWire = getWire(vm);
|
TwoWire & myWire = getWire(vm);
|
||||||
if (top == 2 && (be_isint(vm, 2) || be_isstring(vm, 2))) {
|
if (top == 2 && (be_isint(vm, 2) || be_isstring(vm, 2) || be_isinstance(vm, 2))) {
|
||||||
if (be_isint(vm, 2)) {
|
if (be_isint(vm, 2)) {
|
||||||
int32_t value = be_toint(vm, 2);
|
int32_t value = be_toint(vm, 2);
|
||||||
myWire.write(value);
|
myWire.write(value);
|
||||||
|
@ -226,46 +226,6 @@ extern "C" {
|
||||||
be_raise(vm, kTypeError, nullptr);
|
be_raise(vm, kTypeError, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Berry: `read_bytes(address:int, reg:int, size:int) -> bytes() or nil`
|
|
||||||
int32_t b_wire_readbytes(struct bvm *vm);
|
|
||||||
int32_t b_wire_readbytes(struct bvm *vm) {
|
|
||||||
// int32_t top = be_top(vm); // Get the number of arguments
|
|
||||||
// int32_t bus = getBus(vm);
|
|
||||||
// if (top == 4 && be_isint(vm, 2) && be_isint(vm, 3) && be_isint(vm, 4)) {
|
|
||||||
// uint8_t addr = be_toint(vm, 2);
|
|
||||||
// uint8_t reg = be_toint(vm, 3);
|
|
||||||
// uint8_t size = be_toint(vm, 4);
|
|
||||||
// bool ok = I2cValidRead(addr, reg, size, bus); // TODO
|
|
||||||
// if (ok) {
|
|
||||||
// be_pushint(vm, i2c_buffer);
|
|
||||||
// } else {
|
|
||||||
// be_pushnil(vm);
|
|
||||||
// }
|
|
||||||
// be_return(vm); // Return
|
|
||||||
// }
|
|
||||||
be_raise(vm, kTypeError, nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Berry: `write_bytes(address:int, reg:int, val:bytes()) -> bool or nil`
|
|
||||||
int32_t b_wire_writebytes(struct bvm *vm);
|
|
||||||
int32_t b_wire_writebytes(struct bvm *vm) {
|
|
||||||
// int32_t top = be_top(vm); // Get the number of arguments
|
|
||||||
// int32_t bus = getBus(vm);
|
|
||||||
// if (top == 4 && be_isint(vm, 2) && be_isint(vm, 3) && be_isint(vm, 4)) {
|
|
||||||
// uint8_t addr = be_toint(vm, 2);
|
|
||||||
// uint8_t reg = be_toint(vm, 3);
|
|
||||||
// uint8_t size = be_toint(vm, 4);
|
|
||||||
// bool ok = I2cValidRead(addr, reg, size, bus); // TODO
|
|
||||||
// if (ok) {
|
|
||||||
// be_pushint(vm, i2c_buffer);
|
|
||||||
// } else {
|
|
||||||
// be_pushnil(vm);
|
|
||||||
// }
|
|
||||||
// be_return(vm); // Return
|
|
||||||
// }
|
|
||||||
be_raise(vm, kTypeError, nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Berry: `find(address:int) -> bool` true if device responds
|
// Berry: `find(address:int) -> bool` true if device responds
|
||||||
int32_t b_wire_detect(struct bvm *vm);
|
int32_t b_wire_detect(struct bvm *vm);
|
||||||
int32_t b_wire_detect(struct bvm *vm) {
|
int32_t b_wire_detect(struct bvm *vm) {
|
||||||
|
|
|
@ -256,6 +256,30 @@ const char berry_prog[] =
|
||||||
|
|
||||||
// Instantiate tasmota object
|
// Instantiate tasmota object
|
||||||
"tasmota = Tasmota() "
|
"tasmota = Tasmota() "
|
||||||
|
|
||||||
|
// Wire class
|
||||||
|
"class Wire : Wire_ntv "
|
||||||
|
// read bytes as `bytes()` object
|
||||||
|
"def read_bytes(addr,reg,size) "
|
||||||
|
"self._begin_transmission(addr) "
|
||||||
|
"self._write(reg) "
|
||||||
|
"self._end_transmission(false) "
|
||||||
|
"self._request_from(addr,size) "
|
||||||
|
"var ret=bytes(size) "
|
||||||
|
"while (self._available()) "
|
||||||
|
"ret..self._read() "
|
||||||
|
"end "
|
||||||
|
"return ret "
|
||||||
|
"end "
|
||||||
|
// write bytes from `bytes` object
|
||||||
|
"def write_bytes(addr,reg,b) "
|
||||||
|
"self._begin_transmission(addr) "
|
||||||
|
"self._write(reg) "
|
||||||
|
"self._write(b) "
|
||||||
|
"self._end_transmission() "
|
||||||
|
"end "
|
||||||
|
"end "
|
||||||
|
|
||||||
"wire = Wire(0) "
|
"wire = Wire(0) "
|
||||||
"wire1 = wire "
|
"wire1 = wire "
|
||||||
"wire2 = Wire(1) "
|
"wire2 = Wire(1) "
|
||||||
|
|
Loading…
Reference in New Issue