test
Fork of CANnucleo by
Diff: can_api.c
- Revision:
- 21:bcd8161f8f6c
- Parent:
- 17:1fd35431ee8e
diff -r 249e3f065956 -r bcd8161f8f6c can_api.c --- a/can_api.c Sat Mar 19 21:16:10 2016 +0000 +++ b/can_api.c Thu May 19 17:16:59 2016 +0000 @@ -29,8 +29,11 @@ #include "can_helper.h" #include "pinmap.h" -extern void (*rxCompleteCallback) (void); -extern CAN_HandleTypeDef _canHandle; +extern void (*rxCompleteCallback)(void); +extern CAN_HandleTypeDef _canHandle; + +static uint32_t irq_id = 0; +static can_irq_handler irq_handler = 0; /** * @brief @@ -38,9 +41,9 @@ * @param * @retval */ -void can_init(can_t* obj, PinName rd, PinName td, FunctionalState abom) { - initCAN(obj, rd, td, abom); - can_filter(obj, 0, 0, CANAny, 0); +void can_init(PinName rd, PinName td, FunctionalState abom) { + initCAN(rd, td, abom); + can_filter(0, 0, CANAny, 0); } /** @@ -49,7 +52,7 @@ * @param * @retval */ -void can_free(can_t* obj) { +void can_free(void) { HAL_CAN_MspDeInit(&_canHandle); } @@ -59,7 +62,7 @@ * @param * @retval */ -int can_frequency(can_t* obj, int hz) { +int can_frequency(int hz) { HAL_NVIC_DisableIRQ(CAN_IRQ); #if defined(TARGET_NUCLEO_F072RB) || \ @@ -224,7 +227,21 @@ * @param * @retval */ -void can_irq_init(can_t* obj, can_irq_handler handler, uint32_t id) { +void can_callback(void) { + irq_handler(irq_id, IRQ_RX); +} + +/** + * @brief + * @note + * @param + * @retval + */ +void can_irq_init(uint32_t id, can_irq_handler handler) { + irq_id = id; + irq_handler = handler; + rxCompleteCallback = can_callback; + if(HAL_CAN_Receive_IT(&_canHandle, CAN_FIFO0) != HAL_OK) { #ifdef DEBUG printf("CAN reception initialization error\r\n"); @@ -238,9 +255,9 @@ * @param * @retval */ -void can_irq_free(can_t* obj) { +void can_irq_free(void) { rxCompleteCallback = 0; -} +} /** * @brief @@ -248,17 +265,7 @@ * @param * @retval */ -void can_irq_set(void (*fptr) (void)) { - rxCompleteCallback = fptr; -} - -/** - * @brief - * @note - * @param - * @retval - */ -int can_write(can_t* obj, CAN_Message msg, int cc) { +int can_write(CAN_Message msg, int cc) { int i = 0; if(msg.format == CANStandard) { @@ -293,7 +300,7 @@ * @param * @retval */ -int can_read(can_t* obj, CAN_Message* msg, int handle) { +int can_read(CAN_Message* msg, int handle) { int i; msg->id = _canHandle.pRxMsg->IDE == CAN_ID_STD ? _canHandle.pRxMsg->StdId : _canHandle.pRxMsg->ExtId; msg->type = _canHandle.pRxMsg->RTR == CAN_RTR_DATA ? CANData : CANRemote; @@ -311,7 +318,7 @@ * @param * @retval */ -int can_mode(can_t* obj, CanMode mode) { +int can_mode(CanMode mode) { switch(mode) { case MODE_RESET: return HAL_ERROR; @@ -346,7 +353,7 @@ * @param * @retval */ -int can_filter(can_t* obj, uint32_t id, uint32_t mask, CANFormat format /*=CANAny*/, int32_t handle /*=0*/ ) { +int can_filter(uint32_t id, uint32_t mask, CANFormat format /*=CANAny*/, int32_t handle /*=0*/ ) { CAN_FilterConfTypeDef sFilterConfig; sFilterConfig.FilterNumber = handle; // Specifies the filter number (must be a number between 0 and 13 at 32-bit filter scale) @@ -368,7 +375,7 @@ * @param * @retval */ -void can_reset(can_t* obj) { +void can_reset(void) { __HAL_CAN_RESET_HANDLE_STATE(&_canHandle); } @@ -378,7 +385,7 @@ * @param * @retval */ -unsigned char can_rderror(can_t* obj) { +unsigned char can_rderror(void) { return HAL_CAN_GetError(&_canHandle); } @@ -388,7 +395,7 @@ * @param * @retval */ -unsigned char can_tderror(can_t* obj) { +unsigned char can_tderror(void) { return HAL_CAN_GetError(&_canHandle); } @@ -398,7 +405,7 @@ * @param * @retval */ -void can_monitor(can_t* obj, int silent) { +void can_monitor(int silent) { // not implemented } @@ -407,3 +414,4 @@ +