Skip to content

Commit 8d7f7f1

Browse files
committed
_canio: Add _canio.State enum-like class
1 parent 86b31dc commit 8d7f7f1

File tree

2 files changed

+41
-3
lines changed

2 files changed

+41
-3
lines changed

shared-bindings/_canio/__init__.c

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,21 +48,55 @@
4848
//|
4949

5050
#include "py/obj.h"
51+
#include "py/enum.h"
5152

5253
#include "shared-bindings/_canio/__init__.h"
5354
#include "shared-bindings/_canio/CAN.h"
5455
#include "shared-bindings/_canio/Match.h"
5556
#include "shared-bindings/_canio/Message.h"
57+
#include "shared-bindings/_canio/Listener.h"
58+
59+
MAKE_ENUM_VALUE(canio_bus_state_type, bus_state, ERROR_ACTIVE, BUS_STATE_ERROR_ACTIVE);
60+
MAKE_ENUM_VALUE(canio_bus_state_type, bus_state, ERROR_PASSIVE, BUS_STATE_ERROR_PASSIVE);
61+
MAKE_ENUM_VALUE(canio_bus_state_type, bus_state, ERROR_WARNING, BUS_STATE_ERROR_WARNING);
62+
MAKE_ENUM_VALUE(canio_bus_state_type, bus_state, BUS_OFF, BUS_STATE_OFF);
63+
64+
//| class BusState:
65+
//| """The state of the CAN bus"""
66+
//|
67+
//| ERROR_ACTIVE: object
68+
//| """The bus is in the normal (active) state"""
69+
//|
70+
//| ERROR_WARNING: object
71+
//| """The bus is in the normal (active) state, but a moderate number of errors have occurred recently"""
72+
//|
73+
//| ERROR_PASSIVE: object
74+
//| """The bus is in the passive state due to the number of errors that have occurred recently"""
75+
//|
76+
//| BUS_OFF: object
77+
//| """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"""
78+
//|
79+
MAKE_ENUM_MAP(canio_bus_state) {
80+
MAKE_ENUM_MAP_ENTRY(bus_state, ERROR_ACTIVE),
81+
MAKE_ENUM_MAP_ENTRY(bus_state, ERROR_PASSIVE),
82+
MAKE_ENUM_MAP_ENTRY(bus_state, ERROR_WARNING),
83+
MAKE_ENUM_MAP_ENTRY(bus_state, BUS_OFF),
84+
};
85+
STATIC MP_DEFINE_CONST_DICT(canio_bus_state_locals_dict, canio_bus_state_locals_table);
86+
87+
MAKE_PRINTER(_canio, canio_bus_state);
88+
89+
MAKE_ENUM_TYPE(_canio, BusState, canio_bus_state);
5690

5791
STATIC const mp_rom_map_elem_t canio_module_globals_table[] = {
58-
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR__canio) },
92+
{ MP_ROM_QSTR(MP_QSTR_BusState), MP_ROM_PTR(&canio_bus_state_type) },
5993
{ MP_ROM_QSTR(MP_QSTR_CAN), MP_ROM_PTR(&canio_can_type) },
6094
{ MP_ROM_QSTR(MP_QSTR_Listener), MP_ROM_PTR(&canio_listener_type) },
6195
{ MP_ROM_QSTR(MP_QSTR_Match), MP_ROM_PTR(&canio_match_type) },
6296
{ MP_ROM_QSTR(MP_QSTR_Message), MP_ROM_PTR(&canio_message_type) },
97+
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR__canio) },
6398
};
6499

65-
66100
STATIC MP_DEFINE_CONST_DICT(canio_module_globals, canio_module_globals_table);
67101

68102
const mp_obj_module_t canio_module = {

shared-bindings/_canio/__init__.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,8 @@
2626

2727
#pragma once
2828

29-
// Nothing now.
29+
typedef enum {
30+
BUS_STATE_ERROR_ACTIVE, BUS_STATE_ERROR_PASSIVE, BUS_STATE_ERROR_WARNING, BUS_STATE_OFF
31+
} canio_bus_state_t;
32+
33+
extern const mp_obj_type_t canio_bus_state_type;

0 commit comments

Comments
 (0)