From 2da9d26e21fefc68eaab98fea30833e024a38bf5 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Sat, 3 May 2025 11:41:07 +0200 Subject: [PATCH] machine/rp2: unexport machine-specific errors Errors are part of API, and the exported rp2 errors seemed arbitrary. For example, the very particular ErrRP2040I2CDisable was exported, but errI2CWriteTimeout (which is defined on all platforms) is not. While here, remove "RP2040" from an error name and make the messages consistent and idiomatic. --- src/machine/machine_rp2_i2c.go | 38 +++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/machine/machine_rp2_i2c.go b/src/machine/machine_rp2_i2c.go index bc9de79c5..54a5e5357 100644 --- a/src/machine/machine_rp2_i2c.go +++ b/src/machine/machine_rp2_i2c.go @@ -58,15 +58,15 @@ type I2C struct { } var ( - ErrInvalidI2CBaudrate = errors.New("invalid i2c baudrate") - ErrInvalidTgtAddr = errors.New("invalid target i2c address not in 0..0x80 or is reserved") - ErrI2CGeneric = errors.New("i2c error") - ErrRP2040I2CDisable = errors.New("i2c rp2040 peripheral timeout in disable") - errInvalidI2CSDA = errors.New("invalid I2C SDA pin") - errInvalidI2CSCL = errors.New("invalid I2C SCL pin") - ErrI2CAlreadyListening = errors.New("i2c already listening") - ErrI2CWrongMode = errors.New("i2c wrong mode") - ErrI2CUnderflow = errors.New("i2c underflow") + errInvalidI2CBaudrate = errors.New("i2c: invalid baudrate") + errInvalidTgtAddr = errors.New("i2c: invalid target address: not in 0..0x80 or is reserved") + errI2CGeneric = errors.New("i2c: generic error") + errI2CDisable = errors.New("i2c: peripheral timeout in disable") + errInvalidI2CSDA = errors.New("i2c: invalid SDA pin") + errInvalidI2CSCL = errors.New("i2c: invalid SCL pin") + errI2CAlreadyListening = errors.New("i2c: already listening") + errI2CWrongMode = errors.New("i2c: wrong mode") + errI2CUnderflow = errors.New("i2c: underflow") ) // Tx performs a write and then a read transfer placing the result in @@ -84,7 +84,7 @@ var ( // Performs only a write transfer. func (i2c *I2C) Tx(addr uint16, w, r []byte) error { if i2c.mode != I2CModeController { - return ErrI2CWrongMode + return errI2CWrongMode } return i2c.tx(uint8(addr), w, r) } @@ -94,7 +94,7 @@ func (i2c *I2C) Tx(addr uint16, w, r []byte) error { // addr is the address to listen to func (i2c *I2C) Listen(addr uint16) error { if i2c.mode != I2CModeTarget { - return ErrI2CWrongMode + return errI2CWrongMode } return i2c.listen(uint8(addr)) @@ -155,7 +155,7 @@ func (i2c *I2C) Configure(config I2CConfig) error { func (i2c *I2C) SetBaudRate(br uint32) error { if br == 0 { - return ErrInvalidI2CBaudrate + return errInvalidI2CBaudrate } // I2C is synchronous design that runs from clk_sys @@ -167,7 +167,7 @@ func (i2c *I2C) SetBaudRate(br uint32) error { hcnt := period - lcnt // Check for out-of-range divisors: if hcnt > rp.I2C0_IC_FS_SCL_HCNT_IC_FS_SCL_HCNT_Msk || hcnt < 8 || lcnt > rp.I2C0_IC_FS_SCL_LCNT_IC_FS_SCL_LCNT_Msk || lcnt < 8 { - return ErrInvalidI2CBaudrate + return errInvalidI2CBaudrate } // Per I2C-bus specification a device in standard or fast mode must @@ -187,7 +187,7 @@ func (i2c *I2C) SetBaudRate(br uint32) error { } if sdaTxHoldCnt > lcnt-2 { - return ErrInvalidI2CBaudrate + return errInvalidI2CBaudrate } err := i2c.disable() if err != nil { @@ -220,7 +220,7 @@ func (i2c *I2C) disable() error { i2c.Bus.IC_ENABLE.Set(0) for i2c.Bus.IC_ENABLE_STATUS.Get()&1 != 0 { if ticks() > deadline { - return ErrRP2040I2CDisable + return errI2CDisable } } return nil @@ -286,7 +286,7 @@ func (i2c *I2C) tx(addr uint8, tx, rx []byte) (err error) { const timeout_us = 4_000 deadline := ticks() + timeout_us if addr >= 0x80 || isReservedI2CAddr(addr) { - return ErrInvalidTgtAddr + return errInvalidTgtAddr } txlen := len(tx) rxlen := len(rx) @@ -420,7 +420,7 @@ func (i2c *I2C) tx(addr uint8, tx, rx []byte) (err error) { case abortReason == 0 || abortReason&rp.I2C0_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK != 0: // No reported errors - seems to happen if there is nothing connected to the bus. // Address byte not acknowledged - err = ErrI2CGeneric + err = errI2CGeneric case abortReason&rp.I2C0_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK != 0: // Address acknowledged, some data not acknowledged fallthrough @@ -434,7 +434,7 @@ func (i2c *I2C) tx(addr uint8, tx, rx []byte) (err error) { // listen sets up for async handling of requests on the I2C bus. func (i2c *I2C) listen(addr uint8) error { if addr >= 0x80 || isReservedI2CAddr(addr) { - return ErrInvalidTgtAddr + return errInvalidTgtAddr } err := i2c.disable() @@ -497,7 +497,7 @@ func (i2c *I2C) Reply(buf []byte) error { stat := i2c.Bus.IC_RAW_INTR_STAT.Get() if stat&rp.I2C0_IC_INTR_MASK_M_RD_REQ == 0 { - return ErrI2CWrongMode + return errI2CWrongMode } i2c.Bus.IC_CLR_RD_REQ.Get() // clear restart