Merge pull request #11405 from s-hadinger/berry_mar_20

Berry add wire read/write_bytes
This commit is contained in:
s-hadinger 2021-03-21 10:16:27 +01:00 committed by GitHub
commit a6eea02398
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 46 deletions

View File

@ -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

View File

@ -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) {

View File

@ -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) "