qmkenc/qmk-err.go

71 lines
1.4 KiB
Go

package qmkenc
type QEncErr byte
const (
QENC_ERR_OK QEncErr = 0x00
QENC_ERR_EMPTY_BUF QEncErr = 0x01
QENC_ERR_NO_CTX QEncErr = 0x02
QENC_ERR_NOT_ALLOWED QEncErr = 0x03
QENC_ERR_INVALID QEncErr = 0x04
QENC_ERR_RETRY QEncErr = 0x05
QENC_ERR_HW_SUPPORT QEncErr = 0x06
QENC_ERR_MORE_DATA QEncErr = 0x07
// device retry timeout
QENC_ERR_TIMEOUT QEncErr = 0xFF
)
type QEncError struct {
errCode QEncErr
}
func (e *QEncError) Error() string {
switch e.errCode {
case QENC_ERR_EMPTY_BUF:
return "Buffer is empty"
case QENC_ERR_NO_CTX:
return "No context"
case QENC_ERR_NOT_ALLOWED:
return "Action not allowed"
case QENC_ERR_INVALID:
return "Invalid data"
case QENC_ERR_RETRY:
return "Retry request"
case QENC_ERR_HW_SUPPORT:
return "Not supported by hardware"
case QENC_ERR_MORE_DATA:
return "More data available"
case QENC_ERR_TIMEOUT:
return "Timeout reached"
default:
return "Unknown error"
}
}
func QEncCheckResponse(data []byte) (ret []byte, err error) {
if data[0] == byte(QENC_ERR_OK) {
return data[1:], nil
}
rerr := new(QEncError)
rerr.errCode = QEncErr(data[0])
if data[0] == byte(QENC_ERR_RETRY) {
ret = data[1:]
} else {
ret = data
}
return ret, rerr
}
func ToQEncError(err error) *QEncError {
if _, ok := err.(*QEncError); ok {
return err.(*QEncError)
} else {
qerr := new(QEncError)
qerr.errCode = QENC_ERR_INVALID
return qerr
}
}