42#ifndef CHADEMO_SE_DEFINITION_HEADER_GUARD
43#define CHADEMO_SE_DEFINITION_HEADER_GUARD
49#if !defined(CHADEMO_EV_DEFINITION_HEADER_GUARD)
61#define chademo_se_can_frame chademo_xx_can_frame
64#define chademo_ev_can_frame chademo_xx_can_frame
70enum _chademo_ev_can_frame_id {
71 _CHADEMO_EV_CAN_FRAME_ID_H100 = 0x100u,
72 _CHADEMO_EV_CAN_FRAME_ID_H101 = 0x101u,
73 _CHADEMO_EV_CAN_FRAME_ID_H102 = 0x102u
76enum _chademo_ev_field_h100_protocol_number {
78 _CHADEMO_EV_FIELD_H109_CONTROL_PROTOCOL_NUMBER_0 = 0u,
81 _CHADEMO_EV_FIELD_H109_CONTROL_PROTOCOL_NUMBER_1 = 1u,
84 _CHADEMO_EV_FIELD_H109_CONTROL_PROTOCOL_NUMBER_2 = 2u
87enum _chademo_ev_field_h102_fault {
89 _CHADEMO_EV_FIELD_H102_FAULT_BATTERY_OVERVOLTAGE = 1u,
92 _CHADEMO_EV_FIELD_H102_FAULT_BATTERY_UNDERVOLTAGE = 2u,
95 _CHADEMO_EV_FIELD_H102_FAULT_BATTERY_CURRENT_DEVIATION = 4u,
98 _CHADEMO_EV_FIELD_H102_FAULT_BATTERY_HIGH_TEMPERATURE = 8u,
101 _CHADEMO_EV_FIELD_H102_FAULT_BATTERY_VOLTAGE_DEVIATION = 16u
104enum _chademo_ev_field_h102_status {
106 _CHADEMO_EV_FIELD_H102_STATUS_CHARGING_ENABLED = 1u,
109 _CHADEMO_EV_FIELD_H102_STATUS_SHIFT_POSITION_NOT_PARKED = 2u,
112 _CHADEMO_EV_FIELD_H102_STATUS_CHARGING_SYS_FAULT = 4u,
116 _CHADEMO_EV_FIELD_H102_STATUS_CONTACTOR_OPEN = 8u,
119 _CHADEMO_EV_FIELD_H102_STATUS_NORMAL_STOP_REQUEST_BEFORE_CHARGING = 16u
123struct _chademo_ev_h100 {
128 uint16_t max_battery_voltage_V;
129 uint8_t charged_rate_ref_const;
133struct _chademo_ev_h101 {
135 uint8_t max_charge_time_10s;
136 uint8_t max_charge_time_60s;
137 uint8_t est_charge_time_60s;
139 uint16_t total_cap_of_battery_100wh;
142struct _chademo_ev_h102 {
143 uint8_t control_protocol_number;
144 uint16_t target_battery_voltage;
145 uint8_t charging_current_request;
148 uint8_t charged_rate;
156enum _chademo_se_can_frame_id {
157 _CHADEMO_SE_CAN_FRAME_ID_H108 = 0x108u,
158 _CHADEMO_SE_CAN_FRAME_ID_H109 = 0x109u
162enum _chademo_se_field_h109_protocol_number {
164 _CHADEMO_SE_FIELD_H109_CONTROL_PROTOCOL_NUMBER_0 = 0u,
167 _CHADEMO_SE_FIELD_H109_CONTROL_PROTOCOL_NUMBER_1 = 1u,
170 _CHADEMO_SE_FIELD_H109_CONTROL_PROTOCOL_NUMBER_2 = 2u
174enum _chademo_se_field_h109_status {
176 _CHADEMO_SE_FIELD_H109_STATUS_CHARGING = 1u,
179 _CHADEMO_SE_FIELD_H109_STATUS_CHARGER_MALFUNCTION = 2u,
182 _CHADEMO_SE_FIELD_H109_STATUS_CONNECTOR_LOCKED = 4u,
185 _CHADEMO_SE_FIELD_H109_STATUS_INCOMPATIBLE = 8u,
188 _CHADEMO_SE_FIELD_H109_STATUS_SYS_MALFUNCTION = 16u,
192 _CHADEMO_SE_FIELD_H109_STATUS_STOP_CONTROL = 32u
196struct _chademo_se_h108 {
197 bool welding_detection_support;
198 uint16_t avail_output_voltage_V;
199 uint8_t avail_output_current_A;
200 uint16_t threshold_voltage_V;
206struct _chademo_se_h109 {
208 uint8_t control_protocol_number;
209 uint16_t present_output_voltage_V;
210 uint8_t present_output_current_A;
213 uint8_t remaining_charge_time_10s;
214 uint8_t remaining_charge_time_60s;
221enum _chademo_se_vcan_tx_state {
222 _CHADEMO_SE_VCAN_TX_STATE_IDLE,
223 _CHADEMO_SE_VCAN_TX_STATE_TRANSMISSION,
224 _CHADEMO_SE_VCAN_TX_STATE_DELAY
228struct _chademo_se_vcan_tx {
232 struct _chademo_se_h108 h108;
233 struct _chademo_se_h109 h109;
249void _chademo_se_vcan_tx_init(
struct _chademo_se_vcan_tx *self)
251 self->state = _CHADEMO_SE_VCAN_TX_STATE_IDLE;
253 self->h108.welding_detection_support =
false;
254 self->h108.avail_output_voltage_V = 0u;
255 self->h108.avail_output_current_A = 0u;
256 self->h108.threshold_voltage_V = 0u;
258 self->h109.control_protocol_number = 0u;
259 self->h109.present_output_voltage_V = 0u;
260 self->h109.present_output_current_A = 0u;
261 self->h109.status = 0u;
262 self->h109.remaining_charge_time_10s = 0xFFu;
263 self->h109.remaining_charge_time_60s = 0xFFu;
271void _chademo_se_vcan_tx_pack_frames(
struct _chademo_se_vcan_tx *self)
278 f = &self->frames[0];
279 f->id = _CHADEMO_SE_CAN_FRAME_ID_H108;
281 f->data[0] = self->h108.welding_detection_support;
282 f->data[1] = (self->h108.avail_output_voltage_V & 0x00FFu) >> 0u;
283 f->data[2] = (self->h108.avail_output_voltage_V & 0xFF00u) >> 8u;
284 f->data[3] = self->h108.avail_output_current_A;
285 f->data[4] = (self->h108.threshold_voltage_V & 0x00FFu) >> 0u;
286 f->data[5] = (self->h108.threshold_voltage_V & 0xFF00u) >> 8u;
290 f = &self->frames[1];
291 f->id = _CHADEMO_SE_CAN_FRAME_ID_H109;
293 f->data[0] = self->h109.control_protocol_number;
294 f->data[1] = (self->h109.present_output_voltage_V & 0x00FFu) >> 0u;
295 f->data[2] = (self->h109.present_output_voltage_V & 0xFF00u) >> 8u;
296 f->data[3] = self->h109.present_output_current_A;
298 f->data[5] = self->h109.status;
299 f->data[6] = self->h109.remaining_charge_time_10s;
300 f->data[7] = self->h109.remaining_charge_time_60s;
303void _chademo_se_vcan_tx_start(
struct _chademo_se_vcan_tx *self)
305 _chademo_se_vcan_tx_init(self);
307 self->state = _CHADEMO_SE_VCAN_TX_STATE_TRANSMISSION;
310void _chademo_se_vcan_tx_stop(
struct _chademo_se_vcan_tx *self)
312 _chademo_se_vcan_tx_init(self);
314 self->state = _CHADEMO_SE_VCAN_TX_STATE_IDLE;
317void _chademo_se_vcan_tx_step(
struct _chademo_se_vcan_tx *self,
318 uint32_t delta_time_ms)
322 switch (self->state) {
323 case _CHADEMO_SE_VCAN_TX_STATE_TRANSMISSION:
324 _chademo_se_vcan_tx_pack_frames(self);
327 self->state = _CHADEMO_SE_VCAN_TX_STATE_DELAY;
331 case _CHADEMO_SE_VCAN_TX_STATE_DELAY:
332 self->timer_ms += delta_time_ms;
335 if (self->timer_ms < 100u) {
340 self->state = _CHADEMO_SE_VCAN_TX_STATE_TRANSMISSION;
343 case _CHADEMO_SE_VCAN_TX_STATE_IDLE:
361enum _chademo_se_vcan_rx_state {
362 _CHADEMO_SE_VCAN_RX_STATE_IDLE,
363 _CHADEMO_SE_VCAN_RX_STATE_LISTEN
367struct _chademo_se_vcan_rx {
370 struct _chademo_ev_h100 h100;
371 struct _chademo_ev_h101 h101;
372 struct _chademo_ev_h102 h102;
388void _chademo_se_vcan_rx_init(
struct _chademo_se_vcan_rx *self)
390 self->state = _CHADEMO_SE_VCAN_RX_STATE_IDLE;
392 self->h100.max_battery_voltage_V = 0x00u;
393 self->h100.charged_rate_ref_const = 0x00u;
395 self->h101.max_charge_time_10s = 0x00u;
396 self->h101.max_charge_time_60s = 0x00u;
397 self->h101.est_charge_time_60s = 0x00u;
398 self->h101.total_cap_of_battery_100wh = 0x00u;
400 self->h102.control_protocol_number = 0x00u;
401 self->h102.target_battery_voltage = 0x00u;
402 self->h102.charging_current_request = 0x00u;
403 self->h102.fault = 0x00u;
404 self->h102.status = 0x00u;
405 self->h102.charged_rate = 0x00u;
409 self->recv_flags = 0u;
410 self->has_frames =
false;
413void _chademo_se_vcan_rx_unpack_frame(
struct _chademo_se_vcan_rx *self,
416 bool valid_frame =
true;
419 case _CHADEMO_EV_CAN_FRAME_ID_H100:
420 self->h100.max_battery_voltage_V = f->data[4] << 0u;
421 self->h100.max_battery_voltage_V |= f->data[5] << 8u;
423 self->h100.charged_rate_ref_const = f->data[6];
425 self->recv_flags |= (1u << 0u);
428 case _CHADEMO_EV_CAN_FRAME_ID_H101:
429 self->h101.max_charge_time_10s = f->data[1];
430 self->h101.max_charge_time_60s = f->data[2];
431 self->h101.est_charge_time_60s = f->data[3];
433 self->h101.total_cap_of_battery_100wh = f->data[5] << 0u;
434 self->h101.total_cap_of_battery_100wh |= f->data[6] << 8u;
436 self->recv_flags |= (1u << 1u);
439 case _CHADEMO_EV_CAN_FRAME_ID_H102:
440 self->h102.control_protocol_number = f->data[0];
441 self->h102.target_battery_voltage = f->data[1] << 0u;
442 self->h102.target_battery_voltage |= f->data[2] << 8u;
443 self->h102.charging_current_request = f->data[3];
444 self->h102.fault = f->data[4];
445 self->h102.status = f->data[5];
446 self->h102.charged_rate = f->data[6];
448 self->recv_flags |= (1u << 2u);
457 if (valid_frame && (self->recv_flags == ((1u << 3u) - 1u))) {
458 self->has_frames =
true;
463void _chademo_se_vcan_rx_start(
struct _chademo_se_vcan_rx *self)
466 _chademo_se_vcan_rx_init(self);
468 self->state = _CHADEMO_SE_VCAN_RX_STATE_LISTEN;
471void _chademo_se_vcan_rx_stop(
struct _chademo_se_vcan_rx *self)
474 _chademo_se_vcan_rx_init(self);
476 self->state = _CHADEMO_SE_VCAN_RX_STATE_IDLE;
479void _chademo_se_vcan_rx_step(
struct _chademo_se_vcan_rx *self,
480 uint32_t delta_time_ms)
530enum _chademo_se_psuctl_state {
531 _CHADEMO_SE_PSUCTL_STATE_IDLE,
532 _CHADEMO_SE_PSUCTL_STATE_CONFIG,
533 _CHADEMO_SE_PSUCTL_STATE_BOOT,
534 _CHADEMO_SE_PSUCTL_STATE_RUNNING,
535 _CHADEMO_SE_PSUCTL_STATE_SHUTDOWN
540 CHADEMO_SE_PSUCTL_FLAGS_FAULT_OVERVOLTAGE = 1u,
541 CHADEMO_SE_PSUCTL_FLAGS_FAULT_OVERCURRENT = 2u,
542 CHADEMO_SE_PSUCTL_FLAGS_FAULT_OVERTEMP = 4u,
543 CHADEMO_SE_PSUCTL_FLAGS_FAULT_MALFUNCTION = 8u,
544 CHADEMO_SE_PSUCTL_FLAGS_FAULT_OTHER = 16u,
571struct _chademo_se_psuctl {
578void _chademo_se_psuctl_init(
struct _chademo_se_psuctl *self)
580 self->state = _CHADEMO_SE_PSUCTL_STATE_IDLE;
582 self->outputs.set_voltage_dc_V = 0u;
583 self->outputs.set_current_dc_A = 0u;
586 self->inputs.voltage_dc_V = 0xFFFF;
587 self->inputs.current_dc_A = 0xFF;
593void _chademo_se_psuctl_start(
struct _chademo_se_psuctl *self)
595 _chademo_se_psuctl_init(self);
597 self->state = _CHADEMO_SE_PSUCTL_STATE_CONFIG;
600void _chademo_se_psuctl_stop(
struct _chademo_se_psuctl *self)
602 if ((self->state > (uint8_t)_CHADEMO_SE_PSUCTL_STATE_IDLE) &&
603 (self->state < (uint8_t)_CHADEMO_SE_PSUCTL_STATE_SHUTDOWN)) {
604 self->state = _CHADEMO_SE_PSUCTL_STATE_SHUTDOWN;
608void _chademo_se_psuctl_detect_faults(
struct _chademo_se_psuctl *self)
610 if (self->inputs.flags_fault > 0u) {
611 self->state = _CHADEMO_SE_PSUCTL_STATE_SHUTDOWN;
612 self->outputs.event =
617void _chademo_se_psuctl_step(
struct _chademo_se_psuctl *self,
618 uint32_t delta_time_ms)
622 switch (self->state) {
623 case _CHADEMO_SE_PSUCTL_STATE_IDLE:
626 case _CHADEMO_SE_PSUCTL_STATE_CONFIG:
627 self->outputs.event =
633 self->state = _CHADEMO_SE_PSUCTL_STATE_BOOT;
636 case _CHADEMO_SE_PSUCTL_STATE_BOOT:
637 _chademo_se_psuctl_detect_faults(self);
640 if (self->inputs.ready_for_operation) {
644 self->outputs.event =
648 self->state = _CHADEMO_SE_PSUCTL_STATE_RUNNING;
651 case _CHADEMO_SE_PSUCTL_STATE_RUNNING:
652 _chademo_se_psuctl_detect_faults(self);
655 case _CHADEMO_SE_PSUCTL_STATE_SHUTDOWN:
656 self->outputs.event =
660 self->state = _CHADEMO_SE_PSUCTL_STATE_IDLE;
679struct _chademo_se_vgpio_in {
692struct _chademo_se_vgpio_out {
702 struct _chademo_se_vgpio_in
in;
703 struct _chademo_se_vgpio_out
out;
708 self->
in.oc_j =
false;
710 self->
in.bt_emergency =
false;
711 self->
in.bt_start =
false;
712 self->
in.bt_stop =
false;
714 self->
out.sw_d1 =
false;
715 self->
out.sw_d2 =
false;
722enum _chademo_se_state_cf {
723 _CHADEMO_SE_STATE_CF_AWAIT_CHARGE_START_BUTTON,
724 _CHADEMO_SE_STATE_CF_TRANSMIT_CHARGE_START_SIGNAL,
725 _CHADEMO_SE_STATE_CF_AWAIT_CAN_RX_AND_START_TX_AFTER,
726 _CHADEMO_SE_STATE_CF_PROCESS_INFO_BEFORE_CHARGING,
727 _CHADEMO_SE_STATE_CF_LOCK_CHARHING_CONNECTOR,
728 _CHADEMO_SE_STATE_CF_CHECK_EV_CONTACTORS_ARE_OPEN,
729 _CHADEMO_SE_STATE_CF_INSULATION_TEST_ON_DC_CIRCUIT,
730 _CHADEMO_SE_STATE_CF_CHECK_TERMINATION_OF_INSULATION_TEST,
731 _CHADEMO_SE_STATE_CF_TRANSMIT_SIGNAL_OF_CHARGER_SETUP_COMPLETION,
732 _CHADEMO_SE_STATE_CF_START_CHARGING_CURRENT_OUTPUT
737 CHADEMO_SE_EVENT_NONE,
738 CHADEMO_SE_EVENT_CHARGE_START_BUTTON_PRESSED,
739 CHADEMO_SE_EVENT_GOT_EV_INITIAL_PARAMS,
740 CHADEMO_SE_EVENT_INFO_BEFORE_CHARGING_IS_PROCESSED,
741 CHADEMO_SE_EVENT_VEHICLE_CHARGE_PERMISSION,
742 CHADEMO_SE_EVENT_EV_CONTACTORS_ARE_OPEN
747 enum _chademo_se_state_cf _state_cf;
754 struct _chademo_se_vcan_tx _can_tx;
755 struct _chademo_se_vcan_rx _can_rx;
759 struct _chademo_se_psuctl _psuctl;
768 self->_state_cf = _CHADEMO_SE_STATE_CF_AWAIT_CHARGE_START_BUTTON;
770 _chademo_se_vcan_tx_init(&self->_can_tx);
771 _chademo_se_vcan_rx_init(&self->_can_rx);
772 _chademo_se_vsensors_init(&self->_sensors);
773 _chademo_se_vgpio_init(&self->_gpio);
774 _chademo_se_psuctl_init(&self->_psuctl);
781 dst->
in = self->_gpio.in;
788 self->_gpio.in = src->
in;
795 dst->
out = self->_gpio.out;
802 self->_sensors = *src;
809 *dst = self->_psuctl.outputs;
818 bool has_consumed_frame =
false;
820 if (self->_can_rx.state == (uint8_t)_CHADEMO_SE_VCAN_RX_STATE_LISTEN) {
821 _chademo_se_vcan_rx_unpack_frame(&self->_can_rx, f);
823 has_consumed_frame =
true;
826 return has_consumed_frame;
835 bool frame_available =
false;
837 if (self->_can_tx.count > 0u) {
838 self->_can_tx.count--;
840 *f = self->_can_tx.frames[self->_can_tx.count];
842 frame_available =
true;
845 return frame_available;
850 uint32_t delta_time_ms)
852 struct _chademo_se_vcan_tx *tx = &self->_can_tx;
853 struct _chademo_se_vcan_rx *rx = &self->_can_rx;
858 struct _chademo_se_psuctl *psuctl = &self->_psuctl;
862 _chademo_se_vcan_rx_step(rx, delta_time_ms);
865 switch (self->_state_cf) {
867 case _CHADEMO_SE_STATE_CF_AWAIT_CHARGE_START_BUTTON:
868 if (gpio->
in.bt_start !=
true) {
872 event = CHADEMO_SE_EVENT_CHARGE_START_BUTTON_PRESSED;
876 _CHADEMO_SE_STATE_CF_TRANSMIT_CHARGE_START_SIGNAL;
879 _chademo_se_psuctl_start(psuctl);
884 case _CHADEMO_SE_STATE_CF_TRANSMIT_CHARGE_START_SIGNAL:
885 gpio->
out.sw_d1 =
true;
889 _CHADEMO_SE_STATE_CF_AWAIT_CAN_RX_AND_START_TX_AFTER;
891 _chademo_se_vcan_rx_start(rx);
900 case _CHADEMO_SE_STATE_CF_AWAIT_CAN_RX_AND_START_TX_AFTER:
904 if (!rx->has_frames) {
909 event = CHADEMO_SE_EVENT_GOT_EV_INITIAL_PARAMS;
913 _CHADEMO_SE_STATE_CF_PROCESS_INFO_BEFORE_CHARGING;
915 _chademo_se_vcan_tx_start(tx);
922 case _CHADEMO_SE_STATE_CF_PROCESS_INFO_BEFORE_CHARGING:
927 if ((rx->h100.max_battery_voltage_V >
928 tx->h108.avail_output_voltage_V)) {
935 event = CHADEMO_SE_EVENT_INFO_BEFORE_CHARGING_IS_PROCESSED;
938 self->_state_cf = _CHADEMO_SE_STATE_CF_LOCK_CHARHING_CONNECTOR;
943 case _CHADEMO_SE_STATE_CF_LOCK_CHARHING_CONNECTOR:
945 if (gpio->
in.oc_j !=
true) {
949 event = CHADEMO_SE_EVENT_VEHICLE_CHARGE_PERMISSION;
953 _CHADEMO_SE_STATE_CF_CHECK_EV_CONTACTORS_ARE_OPEN;
958 case _CHADEMO_SE_STATE_CF_CHECK_EV_CONTACTORS_ARE_OPEN:
964 event = CHADEMO_SE_EVENT_EV_CONTACTORS_ARE_OPEN;
968 _CHADEMO_SE_STATE_CF_INSULATION_TEST_ON_DC_CIRCUIT;
973 case _CHADEMO_SE_STATE_CF_INSULATION_TEST_ON_DC_CIRCUIT:
981 _CHADEMO_SE_STATE_CF_CHECK_TERMINATION_OF_INSULATION_TEST;
986 case _CHADEMO_SE_STATE_CF_CHECK_TERMINATION_OF_INSULATION_TEST:
995 _CHADEMO_SE_STATE_CF_TRANSMIT_SIGNAL_OF_CHARGER_SETUP_COMPLETION;
1000 case _CHADEMO_SE_STATE_CF_TRANSMIT_SIGNAL_OF_CHARGER_SETUP_COMPLETION:
1003 gpio->
out.sw_d2 =
true;
1011 psuctl->outputs.set_voltage_dc_V =
1015 if (psuctl->state !=
1016 (uint8_t)_CHADEMO_SE_PSUCTL_STATE_RUNNING) {
1022 _CHADEMO_SE_STATE_CF_START_CHARGING_CURRENT_OUTPUT;
1027 case _CHADEMO_SE_STATE_CF_START_CHARGING_CURRENT_OUTPUT:
1028 tx->h109.status &= _CHADEMO_SE_FIELD_H109_STATUS_STOP_CONTROL;
1029 tx->h109.status |= _CHADEMO_SE_FIELD_H109_STATUS_CHARGING;
1044 _chademo_se_vcan_tx_step(tx, delta_time_ms);
chademo_se_psuctl_event
Definition chademo_se.h:512
@ CHADEMO_SE_PSUCTL_EVENT_PSU_CAN_BE_POWERED
Definition chademo_se.h:520
@ CHADEMO_SE_PSUCTL_EVENT_NONE
Definition chademo_se.h:514
@ CHADEMO_SE_PSUCTL_EVENT_PSU_CAN_PROVIDE_POWER
Definition chademo_se.h:523
@ CHADEMO_SE_PSUCTL_EVENT_PSU_MUST_SHUTDOWN
Definition chademo_se.h:526
@ CHADEMO_SE_PSUCTL_EVENT_PLEASE_PROVIDE_INPUTS
Definition chademo_se.h:517
chademo_se_event
Definition chademo_se.h:736
void chademo_se_set_vgpio_inputs(struct chademo_se *self, struct chademo_se_vgpio *src)
Definition chademo_se.h:785
void chademo_se_init(struct chademo_se *self)
Definition chademo_se.h:766
void chademo_se_set_vsensors_inputs(struct chademo_se *self, struct chademo_se_vsensors *src)
Definition chademo_se.h:799
void chademo_se_get_vgpio_inputs(struct chademo_se *self, struct chademo_se_vgpio *dst)
Definition chademo_se.h:778
enum chademo_se_event chademo_se_step(struct chademo_se *self, uint32_t delta_time_ms)
Definition chademo_se.h:849
#define chademo_se_can_frame
Definition chademo_se.h:61
void chademo_se_get_vgpio_outputs(struct chademo_se *self, struct chademo_se_vgpio *dst)
Definition chademo_se.h:792
void chademo_se_get_psuctl_outputs(struct chademo_se *self, struct chademo_se_psuctl_outputs *dst)
Definition chademo_se.h:806
bool chademo_se_push_vcan_frame(struct chademo_se *self, struct chademo_se_can_frame *f)
Definition chademo_se.h:815
bool chademo_se_pop_vcan_frame(struct chademo_se *self, struct chademo_se_can_frame *f)
Definition chademo_se.h:832
chademo_se_psuctl_flags_fault
Definition chademo_se.h:539
@ CHADEMO_SE_PSUCTL_FLAGS_FAULT_API
Definition chademo_se.h:547
Definition chademo_se.h:563
uint16_t set_voltage_dc_V
Definition chademo_se.h:566
uint8_t set_current_dc_A
Definition chademo_se.h:567
uint8_t event
Definition chademo_se.h:564
Definition chademo_se.h:701
struct _chademo_se_vgpio_out out
Definition chademo_se.h:703
struct _chademo_se_vgpio_in in
Definition chademo_se.h:702
Definition chademo_se.h:497
uint16_t out_terminals_voltage_V
Definition chademo_se.h:499
Definition chademo_se.h:746
Definition chademo_se.h:54
uint8_t data[8]
Definition chademo_se.h:57
uint8_t len
Definition chademo_se.h:56
uint32_t id
Definition chademo_se.h:55