drivers: can: stm32: Add socket CAN support

Add support for socket CAN functionality. This means that user
is able to use BSD socket interface to send and receive CAN
packets.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This commit is contained in:
Jukka Rissanen 2019-01-24 15:57:30 +02:00 committed by Anas Nashif
commit fc9e414ebf
2 changed files with 181 additions and 0 deletions

View file

@ -12,6 +12,7 @@
#include <soc.h>
#include <errno.h>
#include <stdbool.h>
#include <can.h>
#include "stm32_can.h"
#define LOG_LEVEL CONFIG_CAN_LOG_LEVEL
@ -888,4 +889,37 @@ static void config_can_1_irq(CAN_TypeDef *can)
can->IER |= CAN_IT_TME | CAN_IT_ERR | CAN_IT_FMP0 | CAN_IT_FMP1;
}
#if defined(CONFIG_NET_SOCKETS_CAN)
#include "socket_can_generic.h"
static int socket_can_init_1(struct device *dev)
{
struct device *can_dev = DEVICE_GET(can_stm32_1);
struct socket_can_context *socket_context = dev->driver_data;
LOG_DBG("Init socket CAN device %p (%s) for dev %p (%s)",
dev, dev->config->name, can_dev, can_dev->config->name);
socket_context->can_dev = can_dev;
socket_context->msgq = &socket_can_msgq;
socket_context->rx_tid =
k_thread_create(&socket_context->rx_thread_data,
rx_thread_stack,
K_THREAD_STACK_SIZEOF(rx_thread_stack),
rx_thread, socket_context, NULL, NULL,
RX_THREAD_PRIORITY, 0, K_NO_WAIT);
return 0;
}
NET_DEVICE_INIT(socket_can_stm32_1, SOCKET_CAN_NAME_1, socket_can_init_1,
&socket_can_context_1, NULL,
CONFIG_KERNEL_INIT_PRIORITY_DEVICE,
&socket_can_api,
CANBUS_L2, NET_L2_GET_CTX_TYPE(CANBUS_L2), CAN_MTU);
#endif /* CONFIG_NET_SOCKETS_CAN */
#endif /*CONFIG_CAN_1*/