_canio: Add _canio.State enum-like class

This commit is contained in:
Jeff Epler 2020-09-16 11:58:19 -05:00
parent 37af9dde90
commit f8dcf2118e
2 changed files with 41 additions and 3 deletions

View File

@ -48,21 +48,55 @@
//|
#include "py/obj.h"
#include "py/enum.h"
#include "shared-bindings/_canio/__init__.h"
#include "shared-bindings/_canio/CAN.h"
#include "shared-bindings/_canio/Match.h"
#include "shared-bindings/_canio/Message.h"
#include "shared-bindings/_canio/Listener.h"
MAKE_ENUM_VALUE(canio_bus_state_type, bus_state, ERROR_ACTIVE, BUS_STATE_ERROR_ACTIVE);
MAKE_ENUM_VALUE(canio_bus_state_type, bus_state, ERROR_PASSIVE, BUS_STATE_ERROR_PASSIVE);
MAKE_ENUM_VALUE(canio_bus_state_type, bus_state, ERROR_WARNING, BUS_STATE_ERROR_WARNING);
MAKE_ENUM_VALUE(canio_bus_state_type, bus_state, BUS_OFF, BUS_STATE_OFF);
//| class BusState:
//| """The state of the CAN bus"""
//|
//| ERROR_ACTIVE: object
//| """The bus is in the normal (active) state"""
//|
//| ERROR_WARNING: object
//| """The bus is in the normal (active) state, but a moderate number of errors have occurred recently"""
//|
//| ERROR_PASSIVE: object
//| """The bus is in the passive state due to the number of errors that have occurred recently"""
//|
//| BUS_OFF: object
//| """The bus has turned off due to the number of errors that have occurred recently. It must be restarted before it will send or receive packets"""
//|
MAKE_ENUM_MAP(canio_bus_state) {
MAKE_ENUM_MAP_ENTRY(bus_state, ERROR_ACTIVE),
MAKE_ENUM_MAP_ENTRY(bus_state, ERROR_PASSIVE),
MAKE_ENUM_MAP_ENTRY(bus_state, ERROR_WARNING),
MAKE_ENUM_MAP_ENTRY(bus_state, BUS_OFF),
};
STATIC MP_DEFINE_CONST_DICT(canio_bus_state_locals_dict, canio_bus_state_locals_table);
MAKE_PRINTER(_canio, canio_bus_state);
MAKE_ENUM_TYPE(_canio, BusState, canio_bus_state);
STATIC const mp_rom_map_elem_t canio_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR__canio) },
{ MP_ROM_QSTR(MP_QSTR_BusState), MP_ROM_PTR(&canio_bus_state_type) },
{ MP_ROM_QSTR(MP_QSTR_CAN), MP_ROM_PTR(&canio_can_type) },
{ MP_ROM_QSTR(MP_QSTR_Listener), MP_ROM_PTR(&canio_listener_type) },
{ MP_ROM_QSTR(MP_QSTR_Match), MP_ROM_PTR(&canio_match_type) },
{ MP_ROM_QSTR(MP_QSTR_Message), MP_ROM_PTR(&canio_message_type) },
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR__canio) },
};
STATIC MP_DEFINE_CONST_DICT(canio_module_globals, canio_module_globals_table);
const mp_obj_module_t canio_module = {

View File

@ -26,4 +26,8 @@
#pragma once
// Nothing now.
typedef enum {
BUS_STATE_ERROR_ACTIVE, BUS_STATE_ERROR_PASSIVE, BUS_STATE_ERROR_WARNING, BUS_STATE_OFF
} canio_bus_state_t;
extern const mp_obj_type_t canio_bus_state_type;