2525 */
2626
2727#include <stdio.h>
28+ #include <string.h>
2829
2930#include "py/runtime.h"
3031#include "extmod/machine_spi.h"
3132
3233#if MICROPY_PY_MACHINE_SPI
3334
34- STATIC void mp_machine_spi_transfer (mp_obj_t self , size_t slen , const uint8_t * src , size_t dlen , uint8_t * dest ) {
35+ STATIC void mp_machine_spi_transfer (mp_obj_t self , size_t len , const void * src , void * dest ) {
3536 mp_obj_base_t * s = (mp_obj_base_t * )MP_OBJ_TO_PTR (self );
3637 mp_machine_spi_p_t * spi_p = (mp_machine_spi_p_t * )s -> type -> protocol ;
37- spi_p -> transfer (s , slen , src , dlen , dest );
38+ spi_p -> transfer (s , len , src , dest );
3839}
3940
4041STATIC mp_obj_t mp_machine_spi_read (size_t n_args , const mp_obj_t * args ) {
41- uint8_t write_byte = 0 ;
42- if (n_args == 3 ) {
43- write_byte = mp_obj_get_int (args [2 ]);
44- }
4542 vstr_t vstr ;
4643 vstr_init_len (& vstr , mp_obj_get_int (args [1 ]));
47- mp_machine_spi_transfer (args [0 ], 1 , & write_byte , vstr .len , (uint8_t * )vstr .buf );
44+ memset (vstr .buf , n_args == 3 ? mp_obj_get_int (args [2 ]) : 0 , vstr .len );
45+ mp_machine_spi_transfer (args [0 ], vstr .len , vstr .buf , vstr .buf );
4846 return mp_obj_new_str_from_vstr (& mp_type_bytes , & vstr );
4947}
5048MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (mp_machine_spi_read_obj , 2 , 3 , mp_machine_spi_read );
5149
5250STATIC mp_obj_t mp_machine_spi_readinto (size_t n_args , const mp_obj_t * args ) {
5351 mp_buffer_info_t bufinfo ;
5452 mp_get_buffer_raise (args [1 ], & bufinfo , MP_BUFFER_WRITE );
55- uint8_t write_byte = 0 ;
56- if (n_args == 3 ) {
57- write_byte = mp_obj_get_int (args [2 ]);
58- }
59- mp_machine_spi_transfer (args [0 ], 1 , & write_byte , bufinfo .len , (uint8_t * )bufinfo .buf );
53+ memset (bufinfo .buf , n_args == 3 ? mp_obj_get_int (args [2 ]) : 0 , bufinfo .len );
54+ mp_machine_spi_transfer (args [0 ], bufinfo .len , bufinfo .buf , bufinfo .buf );
6055 return mp_const_none ;
6156}
6257MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (mp_machine_spi_readinto_obj , 2 , 3 , mp_machine_spi_readinto );
6358
6459STATIC mp_obj_t mp_machine_spi_write (mp_obj_t self , mp_obj_t wr_buf ) {
6560 mp_buffer_info_t src ;
6661 mp_get_buffer_raise (wr_buf , & src , MP_BUFFER_READ );
67- mp_machine_spi_transfer (self , src .len , (const uint8_t * )src .buf , 0 , NULL );
62+ mp_machine_spi_transfer (self , src .len , (const uint8_t * )src .buf , NULL );
6863 return mp_const_none ;
6964}
7065MP_DEFINE_CONST_FUN_OBJ_2 (mp_machine_spi_write_obj , mp_machine_spi_write );
@@ -75,9 +70,9 @@ STATIC mp_obj_t mp_machine_spi_write_readinto(mp_obj_t self, mp_obj_t wr_buf, mp
7570 mp_buffer_info_t dest ;
7671 mp_get_buffer_raise (rd_buf , & dest , MP_BUFFER_WRITE );
7772 if (src .len != dest .len ) {
78- nlr_raise ( mp_obj_new_exception_msg_varg ( & mp_type_ValueError , "buffers must be the same length" ) );
73+ mp_raise_ValueError ( "buffers must be the same length" );
7974 }
80- mp_machine_spi_transfer (self , src .len , ( const uint8_t * ) src .buf , dest . len , ( uint8_t * ) dest .buf );
75+ mp_machine_spi_transfer (self , src .len , src .buf , dest .buf );
8176 return mp_const_none ;
8277}
8378MP_DEFINE_CONST_FUN_OBJ_3 (mp_machine_spi_write_readinto_obj , mp_machine_spi_write_readinto );
0 commit comments