23
23
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
24
* THE SOFTWARE.
25
25
*/
26
- #ifndef MICROPY_INCLUDED_ESP32_CAN_H
27
- #define MICROPY_INCLUDED_ESP32_CAN_H
28
-
26
+ #ifndef MICROPY_INCLUDED_ESP32_MACHINE_CAN_H
27
+ #define MICROPY_INCLUDED_ESP32_MACHINE_CAN_H
28
+ /*
29
29
#include "modmachine.h"
30
30
#include "freertos/task.h"
31
31
32
+ #include "mpconfigport.h"
32
33
#include "py/obj.h"
34
+ */
35
+ #if MICROPY_PY_MACHINE_CAN
33
36
34
- #if MICROPY_HW_ENABLE_CAN
37
+ #define CAN_MODE_SILENT_LOOPBACK (0x10)
35
38
36
- #define DEVICE_NAME "CAN"
39
+ typedef enum {
40
+ MODE_NORMAL = TWAI_MODE_NORMAL ,
41
+ MODE_SLEEP = -1 ,
42
+ MODE_LOOPBACK = -2 , // TWAI_MODE_NORMAL | CAN_MODE_SILENT_LOOPBACK,
43
+ MODE_SILENT = TWAI_MODE_NO_ACK ,
44
+ MODE_SILENT_LOOPBACK = -3 ,
45
+ MODE_LISTEN_ONLY = TWAI_MODE_LISTEN_ONLY , // esp32 specific
46
+ } can_mode_t ;
37
47
38
- typedef enum _filter_mode_t {
39
- FILTER_RAW_SINGLE = 0 ,
48
+ typedef enum {
49
+ FILTER_RAW_SINGLE = 1 ,
40
50
FILTER_RAW_DUAL ,
41
51
FILTER_ADDRESS
42
52
} filter_mode_t ;
43
53
44
- typedef struct _esp32_can_config_t {
54
+ typedef enum {
55
+ RX_STATE_FIFO_EMPTY = 1 ,
56
+ RX_STATE_MESSAGE_PENDING ,
57
+ RX_STATE_FIFO_FULL ,
58
+ RX_STATE_FIFO_OVERFLOW ,
59
+ } rx_state_t ;
60
+
61
+ typedef enum {
62
+ NOT_INITIATED = TWAI_STATE_STOPPED - 1 ,
63
+ STOPPED = TWAI_STATE_STOPPED ,
64
+ RUNNING = TWAI_STATE_RUNNING ,
65
+ BUS_OFF = TWAI_STATE_BUS_OFF ,
66
+ RECOVERING = TWAI_STATE_RECOVERING ,
67
+ } state_t ;
68
+
69
+ typedef enum {
70
+ ERROR = -1 ,
71
+ /*
72
+ ERROR_ACTIVE = TWAI_ERROR_ACTIVE,
73
+ ERROR_WARNING = TWAI_ERROR_WARNING,
74
+ ERROR_PASSIVE = TWAI_ERROR_PASSIVE,
75
+ ERROR_BUS_OFF = TWAI_ERROR_BUS_OFF,
76
+ */
77
+ } error_state_t ;
78
+
79
+
80
+ typedef enum {
81
+ RTR = 1 ,
82
+ EXTENDED_ID ,
83
+ FD_F ,
84
+ BRS ,
85
+ } message_flags_t ;
86
+
87
+ typedef enum {
88
+ CRC = 1 ,
89
+ FORM ,
90
+ OVERRUN ,
91
+ ESI ,
92
+ } recv_errors_t ;
93
+
94
+ typedef enum {
95
+ ARB = 1 ,
96
+ NACK ,
97
+ ERR ,
98
+ } send_errors_t ;
99
+
100
+ typedef struct {
45
101
twai_timing_config_t timing ;
46
102
twai_filter_config_t filter ;
47
103
twai_general_config_t general ;
48
- uint32_t baudrate ; // bit/s
104
+ uint32_t bitrate ; // bit/s
49
105
bool initialized ;
50
106
} esp32_can_config_t ;
51
107
52
- typedef struct _esp32_can_obj_t {
108
+ typedef struct {
53
109
mp_obj_base_t base ;
54
110
esp32_can_config_t * config ;
55
- mp_obj_t rxcallback ;
111
+ mp_obj_t rx_callback ;
112
+ mp_obj_t tx_callback ;
56
113
TaskHandle_t irq_handler ;
57
114
byte rx_state ;
58
115
bool extframe : 1 ;
@@ -62,17 +119,12 @@ typedef struct _esp32_can_obj_t {
62
119
uint16_t num_error_warning ; // FIXME: populate this value somewhere
63
120
uint16_t num_error_passive ;
64
121
uint16_t num_bus_off ;
122
+ twai_handle_t handle ;
123
+ twai_status_info_t status ;
65
124
} esp32_can_obj_t ;
66
125
67
- typedef enum _rx_state_t {
68
- RX_STATE_FIFO_EMPTY = 0 ,
69
- RX_STATE_MESSAGE_PENDING ,
70
- RX_STATE_FIFO_FULL ,
71
- RX_STATE_FIFO_OVERFLOW ,
72
- } rx_state_t ;
73
-
74
126
extern const mp_obj_type_t machine_can_type ;
75
127
76
- #endif // MICROPY_HW_ENABLE_CAN
128
+ #endif // MICROPY_PY_MACHINE_CAN
77
129
78
- #endif // MICROPY_INCLUDED_ESP32_CAN_H
130
+ #endif // MICROPY_INCLUDED_ESP32_MACHINE_CAN_H
0 commit comments