test

Fork of CANnucleo by Zoltan Hudak

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 @@
 
 
 
+