diff --git a/firmware/components/mainboard/stmf446retx/Src/can.c b/firmware/components/mainboard/stmf446retx/Src/can.c index a45d6fcb..ae42cd72 100644 --- a/firmware/components/mainboard/stmf446retx/Src/can.c +++ b/firmware/components/mainboard/stmf446retx/Src/can.c @@ -54,7 +54,17 @@ void MX_CAN1_Init(void) Error_Handler(); } /* USER CODE BEGIN CAN1_Init 2 */ - + CAN_FilterTypeDef canfilterconf; + canfilterconf.FilterActivation = CAN_FILTER_ENABLE; + canfilterconf.FilterBank = 0; + canfilterconf.FilterFIFOAssignment = CAN_FILTER_FIFO1; + canfilterconf.FilterIdHigh = 0x399 << 5; + canfilterconf.FilterIdLow = 0x0000; + canfilterconf.FilterMaskIdHigh = 0x7FF << 5; + canfilterconf.FilterMaskIdLow = 0x0000; + canfilterconf.FilterMode = CAN_FILTERMODE_IDMASK; + canfilterconf.FilterScale = CAN_FILTERSCALE_32BIT; + HAL_CAN_ConfigFilter(&hcan1, &canfilterconf); /* USER CODE END CAN1_Init 2 */ } diff --git a/firmware/components/mainboard/stmf446retx/Src/main.c b/firmware/components/mainboard/stmf446retx/Src/main.c index a993c90c..ab0c8ef4 100644 --- a/firmware/components/mainboard/stmf446retx/Src/main.c +++ b/firmware/components/mainboard/stmf446retx/Src/main.c @@ -71,6 +71,8 @@ KbdPins col_pins[COLS] = { {GPIOB, GPIO_PIN_13} }; HIDReport REPORT = {0,0,0,0,0,0,0,0}; +CAN_RxHeaderTypeDef RxHeader; +uint8_t RxData[8]; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ @@ -116,7 +118,9 @@ int main(void) MX_CAN1_Init(); MX_USB_DEVICE_Init(); /* USER CODE BEGIN 2 */ - + HAL_CAN_Start(&hcan1); + HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING); + HAL_Delay(50); /* USER CODE END 2 */ /* Infinite loop */ @@ -127,7 +131,6 @@ int main(void) /* USER CODE END WHILE */ for(int col = 0; col < COLS; col++){ HAL_GPIO_WritePin(col_pins[col].PORT, col_pins[col].PIN, GPIO_PIN_SET); - HAL_Delay(1); for(int row = 0; row < ROWS; row++){ if(HAL_GPIO_ReadPin(row_pins[row].PORT, row_pins[row].PIN)){ addHIDReport(matrix[row][col], 1); @@ -143,6 +146,12 @@ int main(void) } /* USER CODE END 3 */ } + +void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader, RxData); + addHIDReport(RxData[0], (RxData[1] & (1 << 7)) ? 1 : 0); +} /** * @brief System Clock Configuration * @retval None