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