Better parameter handling (#6)
* Add rx event handlers * Fix compile errors and add constness * Pass sender id * Change api interface * Revert changes * Add filter fifo * Add default setup * Add receive function * Remove interrupt activation * Activate RX interrupts * Merge remote changes * Add event list constructor * Fix compilation bug * Send and receive multiple frames * Refactor * Refactor * Fix compile error * Use known syntax * Refactor * Provide storage * Add frame end * Add some documentation * Turn macros into functions * Refactor * Refactor * Fix compile error * Use ExtendedIds * Fix reception bug (fixes #4) * Add packet headers * Refactor Co-authored-by: Riccardo998 <riccardo.storchi98@gmail.com>
This commit is contained in:
committed by
GitHub
parent
c0cc853cf8
commit
ed2a26fbc9
+2
-23
@@ -4,6 +4,7 @@
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "mmr_can_includes.h"
|
||||
#include "mmr_can_header.h"
|
||||
#include "mmr_can_types.h"
|
||||
#include "mmr_can_optimize.h"
|
||||
#include "mmr_can_binary_literals.h"
|
||||
@@ -65,31 +66,13 @@ typedef struct {
|
||||
|
||||
|
||||
typedef struct {
|
||||
CanId remoteId;
|
||||
MmrCanHeader header;
|
||||
CanMailbox *mailbox;
|
||||
uint8_t *data;
|
||||
uint8_t length;
|
||||
} MmrCanPacket;
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* These values can be appended to the extended-id
|
||||
* portion of the CAN bus message (that is, the lower 5 bits
|
||||
* of the standard id)
|
||||
*
|
||||
* They are used to check if a message is either standalone
|
||||
* or split into multiple frames
|
||||
*
|
||||
* Multi-frame messages have a higher priority over normal ones
|
||||
*/
|
||||
typedef enum {
|
||||
MMR_CAN_MESSAGE_TYPE_MULTI_FRAME = B_(0010),
|
||||
MMR_CAN_MESSAGE_TYPE_MULTI_FRAME_END = B_(0011),
|
||||
MMR_CAN_MESSAGE_TYPE_NORMAL = B_(1000),
|
||||
} MmrCanMessageType;
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* Represents a CAN message
|
||||
@@ -112,8 +95,4 @@ MmrCanFilterSettings MMR_CAN_GetDefaultFilterSettings();
|
||||
HalStatus MMR_CAN_Send(CanHandle *hcan, MmrCanPacket packet);
|
||||
HalStatus MMR_CAN_Receive(CanHandle *hcan, MmrCanMessage *result);
|
||||
|
||||
|
||||
bool MMR_CAN_IsMultiFrame(CanRxHeader *header);
|
||||
bool MMR_CAN_IsMultiFrameEnd(CanRxHeader *header);
|
||||
|
||||
#endif /* INC_MMR_CAN_H_ */
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
#ifndef INC_MMR_CAN_HEADER_H_
|
||||
#define INC_MMR_CAN_HEADER_H_
|
||||
|
||||
#include <stdbool.h>
|
||||
#include "mmr_can_util.h"
|
||||
#include "mmr_can_binary_literals.h"
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* These values can be appended to the extended-id
|
||||
* portion of the CAN bus message (that is, the lower 5 bits
|
||||
* of the standard id)
|
||||
*
|
||||
* They are used to check if a message is either standalone
|
||||
* or split into multiple frames
|
||||
*
|
||||
* When the priority and id fields are the same, multi-frame
|
||||
* messages have a higher priority over normal ones
|
||||
*/
|
||||
typedef enum {
|
||||
MMR_CAN_MESSAGE_TYPE_MULTI_FRAME = B_(0010),
|
||||
MMR_CAN_MESSAGE_TYPE_MULTI_FRAME_END = B_(0011),
|
||||
MMR_CAN_MESSAGE_TYPE_NORMAL = B_(1000),
|
||||
} MmrCanMessageType;
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* This struct encodes the values stored inside the
|
||||
* extended id field of a CAN packet.
|
||||
*/
|
||||
typedef struct {
|
||||
uint32_t priority : 5;
|
||||
uint32_t senderId : 23;
|
||||
MmrCanMessageType messageType : 4;
|
||||
} MmrCanHeader;
|
||||
|
||||
|
||||
bool MMR_CAN_IsMultiFrame(MmrCanHeader *header);
|
||||
bool MMR_CAN_IsMultiFrameEnd(MmrCanHeader *header);
|
||||
|
||||
#endif /* INC_MMR_CAN_HEADER_H_ */
|
||||
@@ -15,6 +15,27 @@
|
||||
|
||||
#define min(a, b) ((a) < (b) ? a : b);
|
||||
#define mask(value, bits) (value & bits)
|
||||
#define convertTo(resultType, lvalue) (*interpretAs(resultType*, &(lvalue)))
|
||||
#define interpretAs(resultType, lvalue) ((resultType)(lvalue))
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* Represents the result of an asynchronous computation
|
||||
*
|
||||
* Either
|
||||
* - Error: the computation resulted in error
|
||||
* - Pending: the computation is still undergoing
|
||||
* - Completed: the computation has completed succesfully
|
||||
* and its results can be read
|
||||
*
|
||||
* Asynchronous logig can be easily implemented using State Machines
|
||||
*/
|
||||
typedef enum {
|
||||
MMR_ASYNC_RESULT_ERROR,
|
||||
MMR_ASYNC_RESULT_PENDING,
|
||||
MMR_ASYNC_RESULT_COMPLETED,
|
||||
} MmrAsyncResult;
|
||||
|
||||
|
||||
#endif /* INC_MMR_CAN_UTIL_H_ */
|
||||
|
||||
Reference in New Issue
Block a user