SCOM Serial Communication Protocol
0.5.2
|
SCOM frame definition. More...
#include "hal.h"
#include <stdbool.h>
#include <stdint.h>
Go to the source code of this file.
Data Structures | |
struct | HAL_PACKED |
SCOM version record. More... | |
Macros | |
#define | SCOM_MAX_DATA_LENGTH UINT8_C(255) |
#define | SCOM_SOF_CHARACTER UINT8_C(0x3a) |
#define | SCOM_FRAME_CTRL_FRAME_NUMBER_MASK UINT8_C(0x07) |
#define | SCOM_FRAME_CTRL_NOACK_MASK UINT8_C(0x08) |
#define | SCOM_FRAME_CTRL_FRAME_PRIORITY_MASK UINT8_C(0x70) |
#define | SCOM_FRAME_CTRL_MULTI_ID_MASK UINT8_C(0x80) |
Typedefs | |
typedef struct HAL_PACKED | SCOMFrame |
Definition of an SCOM frame. More... | |
Enumerations | |
enum | SCOMFrameType { SCOM_FRAMETYPE_PING = 250, SCOM_FRAMETYPE_PONG = 251, SCOM_FRAMETYPE_IDENTIFY = 252 } |
SCOM native frame types. More... | |
Functions | |
uint16_t | SCOMFrame_GetTotalFrameSize (const SCOMFrame *const frame) |
bool | SCOMFrame_SetType (SCOMFrame *const frame, const uint8_t type) |
uint8_t | SCOMFrame_GetType (const SCOMFrame *const frame) |
bool | SCOMFrame_SetPriority (SCOMFrame *const frame, const uint8_t priority) |
uint8_t | SCOMFrame_GetPriority (const SCOMFrame *const frame) |
bool | SCOMFrame_SetFrameNumber (SCOMFrame *const frame, const uint8_t number) |
uint8_t | SCOMFrame_GetFrameNumber (const SCOMFrame *const frame) |
bool | SCOMFrame_SetPayloadSize (SCOMFrame *const frame, const uint8_t size) |
uint8_t | SCOMFrame_GetPayloadSize (const SCOMFrame *const frame) |
uint8_t * | SCOMFrame_GetPayloadPtr (const SCOMFrame *const frame) |
uint32_t | SCOMFrame_GetTotalPayloadSize (const SCOMFrame *const frame) |
uint32_t | SCOMFrame_GetMultiId (const SCOMFrame *const frame) |
uint32_t | SCOMFrame_GetMultiOffset (const SCOMFrame *const frame) |
bool | SCOMFrame_SetAcknowledgement (SCOMFrame *const frame, const bool ack) |
bool | SCOMFrame_IsMultiframe (const SCOMFrame *const frame) |
bool | SCOMFrame_IsAcknowledged (const SCOMFrame *const frame) |
uint16_t | SCOMFrame_CalculateCRC (const SCOMFrame *const frame) |
SCOM frame definition.
Definition in file scom_frame.h.
#define SCOM_FRAME_CTRL_FRAME_NUMBER_MASK UINT8_C(0x07) |
Definition at line 39 of file scom_frame.h.
Referenced by SCOMAckFrame_IsValidAck(), SCOMFrame_GetFrameNumber(), and SCOMFrame_SetFrameNumber().
#define SCOM_FRAME_CTRL_FRAME_PRIORITY_MASK UINT8_C(0x70) |
Definition at line 41 of file scom_frame.h.
Referenced by SCOMFrame_GetPriority(), and SCOMFrame_SetPriority().
#define SCOM_FRAME_CTRL_MULTI_ID_MASK UINT8_C(0x80) |
Definition at line 42 of file scom_frame.h.
Referenced by SCOM_SendAllocatedMultiFrame(), SCOM_SendMultiFrame(), SCOM_SendServiceMultiFrame(), SCOMFrame_GetMultiId(), SCOMFrame_GetMultiOffset(), SCOMFrame_GetPayloadPtr(), SCOMFrame_GetTotalPayloadSize(), and SCOMFrame_IsMultiframe().
#define SCOM_FRAME_CTRL_NOACK_MASK UINT8_C(0x08) |
Definition at line 40 of file scom_frame.h.
Referenced by SCOMFrame_IsAcknowledged(), and SCOMFrame_SetAcknowledgement().
#define SCOM_MAX_DATA_LENGTH UINT8_C(255) |
Defines the maximum length of data (in bytes) that can be sent in a single SCOM frame. The default value assumes that the frame payload can be 255 bytes, according to the SCOM specification. The user may want to change it in order to limit the RAM memory footprint required to handle SCOM packets.
As of version 0.4.0 it is discouraged for the user to define this variable.
Definition at line 28 of file scom_frame.h.
#define SCOM_SOF_CHARACTER UINT8_C(0x3a) |
Definition at line 38 of file scom_frame.h.
Referenced by SCOM_Proc(), SCOM_SendAllocatedFrame(), SCOM_SendAllocatedFrameWithoutACK(), SCOM_SendAllocatedMultiFrame(), SCOM_SendFrame(), SCOM_SendFrameWithoutAck(), SCOM_SendMultiFrame(), SCOM_SendServiceFrame(), SCOM_SendServiceMultiFrame(), SCOMFrameQueue_Init(), and SCOMFrameQueue_Lock().
typedef struct HAL_PACKED SCOMFrame |
Definition of an SCOM frame.
enum SCOMFrameType |
SCOM native frame types.
Enumerator | |
---|---|
SCOM_FRAMETYPE_PING |
Packet type definition: PING. |
SCOM_FRAMETYPE_PONG |
Packet type definition: PONG. |
SCOM_FRAMETYPE_IDENTIFY |
Packet type definition: IDENTIFY. |
Definition at line 46 of file scom_frame.h.
uint16_t SCOMFrame_CalculateCRC | ( | const SCOMFrame *const | frame | ) |
Calculates CRC for the given frame.
[in] | frame | SCOMFrame |
Definition at line 234 of file scom_frame.c.
References CRC16_InitCRC, CRC16_UpdateCRC_Byte, HAL_PACKED::ctrl, HAL_PACKED::payload, HAL_PACKED::singleframe, HAL_PACKED::size, and HAL_PACKED::type.
uint8_t SCOMFrame_GetFrameNumber | ( | const SCOMFrame *const | frame | ) |
Gets frame number.
[in] | frame | SCOMFrame |
Definition at line 108 of file scom_frame.c.
References HAL_PACKED::ctrl, and SCOM_FRAME_CTRL_FRAME_NUMBER_MASK.
uint32_t SCOMFrame_GetMultiId | ( | const SCOMFrame *const | frame | ) |
Gets the multiId associated with a multi-frame.
[in] | frame | SCOMFrame |
multiId | if the frame is a multi-frame |
0 | if NULL frame was passed or frame is not a multi-frame |
Definition at line 166 of file scom_frame.c.
References HAL_PACKED::ctrl, HAL_PACKED::multiframe, HAL_PACKED::payload, and SCOM_FRAME_CTRL_MULTI_ID_MASK.
uint32_t SCOMFrame_GetMultiOffset | ( | const SCOMFrame *const | frame | ) |
Gets the payload offset of a multi-frame.
[in] | frame | SCOMFrame |
payload | offset if the frame is a multi-frame |
0 | if NULL frame was passed or frame is not a multi-frame |
Definition at line 179 of file scom_frame.c.
References HAL_PACKED::ctrl, HAL_PACKED::multiframe, HAL_PACKED::payload, and SCOM_FRAME_CTRL_MULTI_ID_MASK.
uint8_t* SCOMFrame_GetPayloadPtr | ( | const SCOMFrame *const | frame | ) |
Gets the pointer to the frame payload.
[in] | frame | SCOMFrame |
Definition at line 144 of file scom_frame.c.
References HAL_PACKED::ctrl, HAL_PACKED::multiframe, HAL_PACKED::payload, SCOM_FRAME_CTRL_MULTI_ID_MASK, and HAL_PACKED::singleframe.
uint8_t SCOMFrame_GetPayloadSize | ( | const SCOMFrame *const | frame | ) |
Gets frame payload size.
[in] | frame | SCOMFrame |
0.. | SCOM_MAX_DATA_LENGTH - frame payload size in bytes |
0 | if NULL frame was passed |
Definition at line 133 of file scom_frame.c.
References HAL_PACKED::size.
uint8_t SCOMFrame_GetPriority | ( | const SCOMFrame *const | frame | ) |
Gets frame priority.
[in] | frame | SCOMFrame |
0..6 | - frame priority |
7 | indication that this frame was retransmitted |
0xff | if NULL frame was passed |
Definition at line 82 of file scom_frame.c.
References HAL_PACKED::ctrl, and SCOM_FRAME_CTRL_FRAME_PRIORITY_MASK.
Referenced by SCOMFrameQueue_Insert().
uint16_t SCOMFrame_GetTotalFrameSize | ( | const SCOMFrame *const | frame | ) |
Returns the total size in bytes of the SCOMFrame including all its fields.
[in] | frame | SCOMFrame |
Definition at line 20 of file scom_frame.c.
References HAL_PACKED::multiframe, HAL_PACKED::payload, SCOMFrame_IsMultiframe(), HAL_PACKED::size, HAL_PACKED::sof, and HAL_PACKED::sync.
uint32_t SCOMFrame_GetTotalPayloadSize | ( | const SCOMFrame *const | frame | ) |
Gets total frame payload size. For single-frames this is equal to the SCOMFrame_GetPayloadSize. For multi-frames the total size of the payload is returned.
[in] | frame | SCOMFrame |
total | frame payload size in bytes |
0 | if NULL frame was passed |
Definition at line 155 of file scom_frame.c.
References HAL_PACKED::ctrl, HAL_PACKED::multiframe, HAL_PACKED::payload, SCOM_FRAME_CTRL_MULTI_ID_MASK, and HAL_PACKED::size.
uint8_t SCOMFrame_GetType | ( | const SCOMFrame *const | frame | ) |
Gets frame type.
[in] | frame | SCOMFrame |
0..240 | - frame type |
0xff | if NULL frame was passed |
Definition at line 56 of file scom_frame.c.
References HAL_PACKED::type.
bool SCOMFrame_IsAcknowledged | ( | const SCOMFrame *const | frame | ) |
Checks if the frame should be acknowledged or not.
[in] | frame | SCOMFrame |
true | if the frame should be acknowledged, false otherwise |
Definition at line 221 of file scom_frame.c.
References HAL_PACKED::ctrl, and SCOM_FRAME_CTRL_NOACK_MASK.
Referenced by SCOM_Proc().
bool SCOMFrame_IsMultiframe | ( | const SCOMFrame *const | frame | ) |
Checks if the frame is a multiframe of singleframe.
[in] | frame | SCOMFrame |
true | if frame is |
Definition at line 208 of file scom_frame.c.
References HAL_PACKED::ctrl, and SCOM_FRAME_CTRL_MULTI_ID_MASK.
Referenced by SCOMFrame_GetTotalFrameSize().
bool SCOMFrame_SetAcknowledgement | ( | SCOMFrame *const | frame, |
const bool | ack | ||
) |
Sets acknowledgment generation for the given frame.
[in,out] | frame | SCOMFrame |
[in] | ack | true if acknowledgment should be generated in response to this frame, false otherwise |
true | if acknowledgment was successfully set |
false | if NULL frame was passed |
Definition at line 192 of file scom_frame.c.
References HAL_PACKED::ctrl, and SCOM_FRAME_CTRL_NOACK_MASK.
Referenced by SCOM_SendAllocatedFrameWithoutACK(), and SCOM_SendFrameWithoutAck().
bool SCOMFrame_SetFrameNumber | ( | SCOMFrame *const | frame, |
const uint8_t | number | ||
) |
Sets frame number.
[in,out] | frame | SCOMFrame |
number | frame number (0..15) |
true | if frame number was successfully set |
false | if bad frame number or NULL frame was passed |
Definition at line 93 of file scom_frame.c.
References HAL_PACKED::ctrl, and SCOM_FRAME_CTRL_FRAME_NUMBER_MASK.
Referenced by SCOM_Proc().
bool SCOMFrame_SetPayloadSize | ( | SCOMFrame *const | frame, |
const uint8_t | size | ||
) |
Sets frame payload size.
[in,out] | frame | SCOMFrame |
[in] | type | frame payload size in bytes (0..SCOM_MAX_DATA_LENGTH) |
true | if size was successfully set |
false | if bad size or NULL frame was passed |
Definition at line 119 of file scom_frame.c.
References SCOM_MAX_DATA_LENGTH, and HAL_PACKED::size.
bool SCOMFrame_SetPriority | ( | SCOMFrame *const | frame, |
const uint8_t | priority | ||
) |
Sets frame priority.
[in,out] | frame | SCOMFrame |
[in] | priority | frame priority (0 - lowest, 6 - highest) |
true | if priority was successfully set |
false | if bad priority or NULL frame was passed |
Definition at line 67 of file scom_frame.c.
References HAL_PACKED::ctrl, and SCOM_FRAME_CTRL_FRAME_PRIORITY_MASK.
Referenced by SCOM_SendFrame(), SCOM_SendFrameWithoutAck(), SCOM_SendMultiFrame(), SCOM_SendServiceFrame(), and SCOM_SendServiceMultiFrame().
bool SCOMFrame_SetType | ( | SCOMFrame *const | frame, |
const uint8_t | type | ||
) |
Sets frame type.
[in,out] | frame | SCOMFrame |
[in] | type | frame type (0..240) |
true | if type was successfully set |
false | if bad type or NULL frame was passed |
Definition at line 42 of file scom_frame.c.
References HAL_PACKED::type.