Skip to content

Commit

Permalink
drivers/mcp2515: fix to add filters
Browse files Browse the repository at this point in the history
drivers/mcp2515: enable filtering

The current driver implementation initializes the driver in a way to receive all the CAN messages without matching the filters. This commit changes that by adding a macro definition that will be enabling or disabling the filtering and accordingly set the appropriate mcp2515 acceptance mode
  • Loading branch information
firas-hamdi committed Jun 17, 2022
1 parent 7b827f4 commit e30d97d
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 20 deletions.
10 changes: 5 additions & 5 deletions drivers/mcp2515/candev_mcp2515.c
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,6 @@ static int _get(candev_t *candev, canopt_t opt, void *value, size_t max_len)
static int _set_filter(candev_t *dev, const struct can_filter *filter)
{
DEBUG("inside _set_filter of MCP2515\n");
bool filter_added = true;
struct can_filter f = *filter;
int res = -1;
enum mcp2515_mode mode;
Expand Down Expand Up @@ -453,7 +452,7 @@ static int _set_filter(candev_t *dev, const struct can_filter *filter)
/* Browse on each mailbox to find an empty space */
int mailbox_index = 0;

while (mailbox_index < MCP2515_RX_MAILBOXES && !filter_added) {
while (mailbox_index < MCP2515_RX_MAILBOXES) {
/* mask unused */
if (dev_mcp->masks[mailbox_index] == 0) {
/* set mask */
Expand All @@ -467,7 +466,7 @@ static int _set_filter(candev_t *dev, const struct can_filter *filter)
dev_mcp->filter_ids[mailbox_index][0] = f.can_id;

/* function succeeded */
filter_added = true;
break;
}

/* mask existed and same mask */
Expand Down Expand Up @@ -498,7 +497,7 @@ static int _set_filter(candev_t *dev, const struct can_filter *filter)
dev_mcp->filter_ids[mailbox_index][filter_pos] = f.can_id;

/* function succeeded */
filter_added = true;
break;
}
}
mailbox_index++;
Expand All @@ -513,7 +512,8 @@ static int _set_filter(candev_t *dev, const struct can_filter *filter)
return -1;
}

return filter_added;
/* Filter added */
return 0;
}

static int _remove_filter(candev_t *dev, const struct can_filter *filter)
Expand Down
10 changes: 9 additions & 1 deletion drivers/mcp2515/mcp2515.c
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,15 @@ int mcp2515_init(candev_mcp2515_t *dev, void (*irq_handler_cb)(void *))
return -1;
}

uint8_t cmd = MCP2515_RXB0CTRL_MODE_RECV_ALL;
uint8_t cmd;
if (IS_ACTIVE(MCP2515_RECV_FILTER_EN)) {
DEBUG_PUTS("filtering enabled");
cmd = MCP2515_RXB0CTRL_MODE_RECV_FILTER;
}
else {
DEBUG_PUTS("filtering disabled");
cmd = MCP2515_RXB0CTRL_MODE_RECV_ALL;
}

res = mcp2515_spi_write(dev, MCP2515_RXB0CTRL, &cmd, 1);
if (res < 0) {
Expand Down
5 changes: 5 additions & 0 deletions drivers/mcp2515/mcp2515.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,11 @@ enum mcp2515_error {
/** Wake up source */
#define MCP2515_WKUP_SRC_INTERNAL 1

/** Acceptance mode (enable/disable filtering) */
#ifndef MCP2515_RECV_FILTER_EN
#define MCP2515_RECV_FILTER_EN 0
#endif

/**
* @brief Initialize pins and SPI interface
*
Expand Down
18 changes: 4 additions & 14 deletions drivers/mcp2515/mcp2515_defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -300,25 +300,15 @@ extern "C" {
#define MCP2515_RXB0CTRL_BUKT1 0x02
#define MCP2515_RXB0CTRL_BUKT 0x04
#define MCP2515_RXB0CTRL_RXRTR 0x08
#define MCP2515_RXB0CTRL_RXM0 0x20
#define MCP2515_RXB0CTRL_RXM1 0x40
#define MCP2515_RXB0CTRL_MODE_RECV_STD_OR_EXT 0x00
#define MCP2515_RXB0CTRL_MODE_RECV_STD MCP2515_RXB0CTRL_RXM0
#define MCP2515_RXB0CTRL_MODE_RECV_EXT MCP2515_RXB0CTRL_RXM1
#define MCP2515_RXB0CTRL_MODE_RECV_ALL (MCP2515_RXB0CTRL_RXM1 | \
MCP2515_RXB0CTRL_RXM0)
#define MCP2515_RXB0CTRL_MODE_RECV_FILTER 0x00
#define MCP2515_RXB0CTRL_MODE_RECV_ALL 0x60

#define MCP2515_RXB1CTRL_FILHIT0 0x01
#define MCP2515_RXB1CTRL_FILHIT1 0x02
#define MCP2515_RXB1CTRL_FILHIT2 0x04
#define MCP2515_RXB1CTRL_RXRTR 0x08
#define MCP2515_RXB1CTRL_RXM0 0x20
#define MCP2515_RXB1CTRL_RXM1 0x40
#define MCP2515_RXB1CTRL_MODE_RECV_STD_OR_EXT 0x00
#define MCP2515_RXB1CTRL_MODE_RECV_STD MCP2515_RXB1CTRL_RXM0
#define MCP2515_RXB1CTRL_MODE_RECV_EXT MCP2515_RXB1CTRL_RXM1
#define MCP2515_RXB1CTRL_MODE_RECV_ALL (MCP2515_RXB1CTRL_RXM1 | \
MCP2515_RXB1CTRL_RXM0)
#define MCP2515_RXB1CTRL_MODE_RECV_FILTER 0x00
#define MCP2515_RXB1CTRL_MODE_RECV_ALL 0x60
/** @} */

/**
Expand Down

0 comments on commit e30d97d

Please sign in to comment.