diff options
Diffstat (limited to 'stmhal/bufhelper.c')
-rw-r--r-- | stmhal/bufhelper.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/stmhal/bufhelper.c b/stmhal/bufhelper.c new file mode 100644 index 0000000000..5612a048dc --- /dev/null +++ b/stmhal/bufhelper.c @@ -0,0 +1,29 @@ +#include "misc.h" +#include "mpconfig.h" +#include "qstr.h" +#include "obj.h" +#include "bufhelper.h" + +void pyb_buf_get_for_send(mp_obj_t o, mp_buffer_info_t *bufinfo, uint8_t *tmp_data) { + if (MP_OBJ_IS_INT(o)) { + tmp_data[0] = mp_obj_get_int(o); + bufinfo->buf = tmp_data; + bufinfo->len = 1; + bufinfo->typecode = 'B'; + } else { + mp_get_buffer_raise(o, bufinfo, MP_BUFFER_READ); + } +} + +mp_obj_t pyb_buf_get_for_recv(mp_obj_t o, mp_buffer_info_t *bufinfo) { + if (MP_OBJ_IS_INT(o)) { + // allocate a new bytearray of given length + bufinfo->len = mp_obj_get_int(o); + bufinfo->typecode = 'B'; + return mp_obj_str_builder_start(&mp_type_bytes, bufinfo->len, (byte**)&bufinfo->buf); + } else { + // get the existing buffer + mp_get_buffer_raise(o, bufinfo, MP_BUFFER_WRITE); + return MP_OBJ_NULL; + } +} |