Lines Matching refs:frame

44 static inline void prepare_frame(struct can_frame *frame, struct isotp_msg_id *addr)  in prepare_frame()  argument
46 frame->id = addr->ext_id; in prepare_frame()
47 frame->flags = ((addr->flags & ISOTP_MSG_IDE) != 0 ? CAN_FRAME_IDE : 0) | in prepare_frame()
137 struct can_frame frame; in receive_send_fc() local
138 uint8_t *data = frame.data; in receive_send_fc()
144 prepare_frame(&frame, &rctx->tx_addr); in receive_send_fc()
153 payload_len = data - frame.data; in receive_send_fc()
157 memset(&frame.data[payload_len], ISOTP_PAD_BYTE, in receive_send_fc()
159 frame.dlc = can_bytes_to_dlc(ISOTP_PADDED_FRAME_DL_MIN); in receive_send_fc()
161 frame.dlc = can_bytes_to_dlc(payload_len); in receive_send_fc()
164 ret = can_send(rctx->can_dev, &frame, K_MSEC(ISOTP_A_TIMEOUT_MS), receive_can_tx, rctx); in receive_send_fc()
380 static void process_ff_sf(struct isotp_recv_ctx *rctx, struct can_frame *frame) in process_ff_sf() argument
386 uint8_t can_dl = can_dlc_to_bytes(frame->dlc); in process_ff_sf()
389 if (frame->data[index++] != rctx->rx_addr.ext_addr) { in process_ff_sf()
396 rctx->rx_addr.ext_id = frame->id; in process_ff_sf()
398 rx_sa = (frame->id & ISOTP_FIXED_ADDR_SA_MASK) >> in process_ff_sf()
405 rctx->tx_addr.ext_id |= frame->id & ISOTP_FIXED_ADDR_PRIO_MASK; in process_ff_sf()
409 switch (frame->data[index] & ISOTP_PCI_TYPE_MASK) { in process_ff_sf()
432 sf_len = frame->data[index] & ISOTP_PCI_SF_DL_MASK; in process_ff_sf()
441 sf_len = frame->data[index + 1]; in process_ff_sf()
460 net_buf_add_mem(rctx->buf, &frame->data[index], payload_len - index); in process_ff_sf()
484 static void process_cf(struct isotp_recv_ctx *rctx, struct can_frame *frame) in process_cf() argument
489 uint8_t can_dl = can_dlc_to_bytes(frame->dlc); in process_cf()
492 if (frame->data[index++] != rctx->rx_addr.ext_addr) { in process_cf()
497 if ((frame->data[index] & ISOTP_PCI_TYPE_MASK) != ISOTP_PCI_TYPE_CF) { in process_cf()
499 frame->data[index] >> ISOTP_PCI_TYPE_POS); in process_cf()
507 if ((frame->data[index++] & ISOTP_PCI_SN_MASK) != rctx->sn_expected++) { in process_cf()
534 receive_add_mem(rctx, &frame->data[index], data_len); in process_cf()
554 static void receive_can_rx(const struct device *dev, struct can_frame *frame, void *arg) in receive_can_rx() argument
560 if (IS_ENABLED(CONFIG_CAN_ACCEPT_RTR) && (frame->flags & CAN_FRAME_RTR) != 0U) { in receive_can_rx()
567 process_ff_sf(rctx, frame); in receive_can_rx()
571 process_cf(rctx, frame); in receive_can_rx()
791 static void send_process_fc(struct isotp_send_ctx *sctx, struct can_frame *frame) in send_process_fc() argument
793 uint8_t *data = frame->data; in send_process_fc()
809 if (frame->dlc < ISOTP_PADDED_FRAME_DL_MIN) { in send_process_fc()
850 static void send_can_rx_cb(const struct device *dev, struct can_frame *frame, void *arg) in send_can_rx_cb() argument
856 if (IS_ENABLED(CONFIG_CAN_ACCEPT_RTR) && (frame->flags & CAN_FRAME_RTR) != 0U) { in send_can_rx_cb()
862 send_process_fc(sctx, frame); in send_can_rx_cb()
897 struct can_frame frame; in send_sf() local
903 prepare_frame(&frame, &sctx->tx_addr); in send_sf()
909 frame.data[index++] = sctx->tx_addr.ext_addr; in send_sf()
914 frame.data[index++] = ISOTP_PCI_TYPE_SF; in send_sf()
915 frame.data[index++] = len; in send_sf()
917 frame.data[index++] = ISOTP_PCI_TYPE_SF | len; in send_sf()
925 memcpy(&frame.data[index], data, len); in send_sf()
933 frame.dlc = can_bytes_to_dlc( in send_sf()
935 memset(&frame.data[index + len], ISOTP_PAD_BYTE, in send_sf()
936 can_dlc_to_bytes(frame.dlc) - len - index); in send_sf()
938 frame.dlc = can_bytes_to_dlc(len + index); in send_sf()
942 ret = can_send(sctx->can_dev, &frame, K_MSEC(ISOTP_A_TIMEOUT_MS), send_can_tx_cb, sctx); in send_sf()
948 struct can_frame frame; in send_ff() local
954 prepare_frame(&frame, &sctx->tx_addr); in send_ff()
956 frame.dlc = can_bytes_to_dlc(sctx->tx_addr.dl); in send_ff()
959 frame.data[index++] = sctx->tx_addr.ext_addr; in send_ff()
963 frame.data[index++] = ISOTP_PCI_TYPE_FF; in send_ff()
964 frame.data[index++] = 0; in send_ff()
965 frame.data[index++] = (len >> 3 * 8) & 0xFF; in send_ff()
966 frame.data[index++] = (len >> 2 * 8) & 0xFF; in send_ff()
967 frame.data[index++] = (len >> 8) & 0xFF; in send_ff()
968 frame.data[index++] = len & 0xFF; in send_ff()
970 frame.data[index++] = ISOTP_PCI_TYPE_FF | (len >> 8); in send_ff()
971 frame.data[index++] = len & 0xFF; in send_ff()
980 memcpy(&frame.data[index], data, sctx->tx_addr.dl - index); in send_ff()
982 ret = can_send(sctx->can_dev, &frame, K_MSEC(ISOTP_A_TIMEOUT_MS), send_can_tx_cb, sctx); in send_ff()
988 struct can_frame frame; in send_cf() local
995 prepare_frame(&frame, &sctx->tx_addr); in send_cf()
998 frame.data[index++] = sctx->tx_addr.ext_addr; in send_cf()
1002 frame.data[index++] = ISOTP_PCI_TYPE_CF | sctx->sn; in send_cf()
1008 memcpy(&frame.data[index], data, len); in send_cf()
1016 frame.dlc = can_bytes_to_dlc( in send_cf()
1018 memset(&frame.data[index + len], ISOTP_PAD_BYTE, in send_cf()
1019 can_dlc_to_bytes(frame.dlc) - len - index); in send_cf()
1021 frame.dlc = can_bytes_to_dlc(len + index); in send_cf()
1024 ret = can_send(sctx->can_dev, &frame, K_MSEC(ISOTP_A_TIMEOUT_MS), send_can_tx_cb, sctx); in send_cf()