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 } }