bluetooth/error_sd.go
Ayke van Laethem 01243181c3 sd: update to prepare for changes in the TinyGo CGo implementation
For details, see: https://github.com/tinygo-org/tinygo/pull/3927

I ran the smoke tests and the binaries are exactly identical to what
they were before, so this change cannot have had an effect on these
smoke tests (which is expected, as this is mostly just changing some
types without changing the machine data type).
2023-10-05 19:11:46 +02:00

93 lines
2.6 KiB
Go

//go:build softdevice
package bluetooth
// #include <stdint.h>
// #include "nrf_error.h"
// #include "nrf_error_sdm.h"
import "C"
// Error is an error from within the SoftDevice.
type Error uint32
func (e Error) Error() string {
switch {
case e >= C.NRF_ERROR_BASE_NUM && e < C.NRF_ERROR_SDM_BASE_NUM:
// Global errors.
switch e {
case C.NRF_SUCCESS:
return "no error"
case C.NRF_ERROR_SVC_HANDLER_MISSING:
return "SVC handler is missing"
case C.NRF_ERROR_SOFTDEVICE_NOT_ENABLED:
return "SoftDevice has not been enabled"
case C.NRF_ERROR_INTERNAL:
return "internal error"
case C.NRF_ERROR_NO_MEM:
return "no memory for operation"
case C.NRF_ERROR_NOT_FOUND:
return "not found"
case C.NRF_ERROR_NOT_SUPPORTED:
return "not supported"
case C.NRF_ERROR_INVALID_PARAM:
return "invalid parameter"
case C.NRF_ERROR_INVALID_STATE:
return "invalid state, operation disallowed in this state"
case C.NRF_ERROR_INVALID_LENGTH:
return "invalid Length"
case C.NRF_ERROR_INVALID_FLAGS:
return "invalid flags"
case C.NRF_ERROR_INVALID_DATA:
return "invalid data"
case C.NRF_ERROR_DATA_SIZE:
return "invalid data size"
case C.NRF_ERROR_TIMEOUT:
return "operation timed out"
case C.NRF_ERROR_NULL:
return "null pointer"
case C.NRF_ERROR_FORBIDDEN:
return "forbidden operation"
case C.NRF_ERROR_INVALID_ADDR:
return "bad memory address"
case C.NRF_ERROR_BUSY:
return "busy"
case 18: // C.NRF_ERROR_CONN_COUNT, not available on nrf51
return "maximum connection count exceeded"
case 19: // C.NRF_ERROR_RESOURCES, not available on nrf51
return "not enough resources for operation"
default:
return "other global error"
}
case e >= C.NRF_ERROR_SDM_BASE_NUM && e < C.NRF_ERROR_SOC_BASE_NUM:
// SDM errors.
switch e {
case C.NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN:
return "unknown LFCLK source"
case C.NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION:
return "incorrect interrupt configuration"
case C.NRF_ERROR_SDM_INCORRECT_CLENR0:
return "incorrect CLENR0"
default:
return "other SDM error"
}
case e >= C.NRF_ERROR_SOC_BASE_NUM && e < C.NRF_ERROR_STK_BASE_NUM:
// SoC errors.
return "other SoC error"
case e >= C.NRF_ERROR_STK_BASE_NUM && e < 0x4000:
// STK errors.
return "other STK error"
default:
// Other errors.
return "other error"
}
}
// makeError returns an error (using the Error type) if the error code is
// non-zero, otherwise it returns nil. It is used with internal API calls.
func makeError(code C.uint32_t) error {
if code != 0 {
return Error(code)
}
return nil
}