Skip to content

Commit

Permalink
Update GetField API for ACF CAN Brief
Browse files Browse the repository at this point in the history
Signed-off-by: Adriaan Niess <[email protected]>
  • Loading branch information
adriaan-niess committed Aug 23, 2024
1 parent a83c1e2 commit 5d41360
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 44 deletions.
12 changes: 4 additions & 8 deletions include/avtp/acf/CanBrief.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,29 +74,25 @@ typedef enum {
*
* @param pdu Pointer to the first bit of a 1722 ACF Abbreviated CAN PDU.
*/
int Avtp_CanBrief_Init(Avtp_CanBrief_t* can_pdu);
void Avtp_CanBrief_Init(Avtp_CanBrief_t* can_pdu);

/**
* Returns the value of an an ACF Abbreviated CAN PDU field as specified in the IEEE 1722 Specification.
*
* @param pdu Pointer to the first bit of an 1722 ACF Abbreviated CAN PDU.
* @param field Specifies the position of the data field to be read
* @param value Pointer to location to store the value.
* @returns This function returns 0 if the data field was successfully read from
* the 1722 ACF Abbreviated CAN PDU.
* @returns Field of CAN Brief PDU.
*/
int Avtp_CanBrief_GetField(Avtp_CanBrief_t* can_pdu, Avtp_CanBriefFields_t field, uint64_t* value);
uint64_t Avtp_CanBrief_GetField(Avtp_CanBrief_t* can_pdu, Avtp_CanBriefFields_t field);

/**
* Sets the value of an an ACF Abbreviated CAN PDU field as specified in the IEEE 1722 Specification.
*
* @param pdu Pointer to the first bit of an 1722 ACF Abbreviated CAN PDU.
* @param field Specifies the position of the data field to be read
* @param value Pointer to location to store the value.
* @returns This function returns 0 if the data field was successfully set in
* the 1722 ACF Abbreviated CAN PDU.
*/
int Avtp_CanBrief_SetField(Avtp_CanBrief_t* can_pdu, Avtp_CanBriefFields_t field, uint64_t value);
void Avtp_CanBrief_SetField(Avtp_CanBrief_t* can_pdu, Avtp_CanBriefFields_t field, uint64_t value);

/**
* Copies the payload data into the ACF CAN Brief frame. This function will also set the
Expand Down
56 changes: 20 additions & 36 deletions src/avtp/acf/CanBrief.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,56 +55,42 @@ static const Avtp_FieldDescriptor_t Avtp_CanBriefFieldDesc[AVTP_CAN_BRIEF_FIELD_
[AVTP_CAN_BRIEF_FIELD_CAN_IDENTIFIER] = { .quadlet = 1, .offset = 3, .bits = 29 },
};

int Avtp_CanBrief_Init(Avtp_CanBrief_t* can_pdu)
void Avtp_CanBrief_Init(Avtp_CanBrief_t* can_pdu)
{
if(!can_pdu) {
return -EINVAL;
if(can_pdu == NULL) {
memset(can_pdu, 0, sizeof(Avtp_CanBrief_t));
Avtp_CanBrief_SetField(can_pdu, AVTP_CAN_BRIEF_FIELD_ACF_MSG_TYPE, AVTP_ACF_TYPE_CAN_BRIEF);
}

memset(can_pdu, 0, sizeof(Avtp_CanBrief_t));
Avtp_CanBrief_SetField(can_pdu, AVTP_CAN_BRIEF_FIELD_ACF_MSG_TYPE, AVTP_ACF_TYPE_CAN_BRIEF);

return 0;
}

int Avtp_CanBrief_GetField(Avtp_CanBrief_t* can_pdu, Avtp_CanBriefFields_t field, uint64_t* value)
uint64_t Avtp_CanBrief_GetField(Avtp_CanBrief_t* can_pdu, Avtp_CanBriefFields_t field)
{
return Avtp_GetField(Avtp_CanBriefFieldDesc, AVTP_CAN_BRIEF_FIELD_MAX, (uint8_t *) can_pdu, (uint8_t) field, value);
return Avtp_GetField(Avtp_CanBriefFieldDesc, AVTP_CAN_BRIEF_FIELD_MAX, (uint8_t *) can_pdu, (uint8_t) field);
}

int Avtp_CanBrief_SetField(Avtp_CanBrief_t* can_pdu, Avtp_CanBriefFields_t field, uint64_t value)
void Avtp_CanBrief_SetField(Avtp_CanBrief_t* can_pdu, Avtp_CanBriefFields_t field, uint64_t value)
{
return Avtp_SetField(Avtp_CanBriefFieldDesc, AVTP_CAN_BRIEF_FIELD_MAX, (uint8_t *) can_pdu, (uint8_t) field, value);
Avtp_SetField(Avtp_CanBriefFieldDesc, AVTP_CAN_BRIEF_FIELD_MAX, (uint8_t *) can_pdu, (uint8_t) field, value);
}

int Avtp_CanBrief_SetPayload(Avtp_CanBrief_t* can_pdu, uint32_t frame_id , uint8_t* payload,
uint16_t payload_length, Avtp_CanVariant_t can_variant) {

int ret = 0;
int eff;

uint16_t payload_length, Avtp_CanVariant_t can_variant)
{
// Copy the payload into the CAN PDU
memcpy(can_pdu->payload, payload, payload_length);

// Set the Frame ID and CAN variant
eff = frame_id > 0x7ff? 1 : 0;
ret = Avtp_CanBrief_SetField(can_pdu, AVTP_CAN_BRIEF_FIELD_EFF, eff);
if (ret) return ret;
ret = Avtp_CanBrief_SetField(can_pdu, AVTP_CAN_BRIEF_FIELD_CAN_IDENTIFIER, frame_id);
if (ret) return ret;
ret = Avtp_CanBrief_SetField(can_pdu, AVTP_CAN_BRIEF_FIELD_FDF, (uint8_t) can_variant);
if (ret) return ret;
int eff = frame_id > 0x7ff? 1 : 0;
Avtp_CanBrief_SetField(can_pdu, AVTP_CAN_BRIEF_FIELD_EFF, eff);
Avtp_CanBrief_SetField(can_pdu, AVTP_CAN_BRIEF_FIELD_CAN_IDENTIFIER, frame_id);
Avtp_CanBrief_SetField(can_pdu, AVTP_CAN_BRIEF_FIELD_FDF, (uint8_t) can_variant);

// Finalize the AVTP CAN Frame
ret = Avtp_CanBrief_Finalize(can_pdu, payload_length);

return ret;

return Avtp_CanBrief_Finalize(can_pdu, payload_length);
}

int Avtp_CanBrief_Finalize(Avtp_CanBrief_t* can_pdu, uint16_t payload_length) {

int ret = 0;
int Avtp_CanBrief_Finalize(Avtp_CanBrief_t* can_pdu, uint16_t payload_length)
{
uint8_t padSize;
uint32_t avtpCanLength = AVTP_CAN_BRIEF_HEADER_LEN + payload_length;

Expand All @@ -116,11 +102,9 @@ int Avtp_CanBrief_Finalize(Avtp_CanBrief_t* can_pdu, uint16_t payload_length) {
}

// Set the length and padding fields
ret = Avtp_CanBrief_SetField(can_pdu, AVTP_CAN_BRIEF_FIELD_ACF_MSG_LENGTH,
(uint64_t) avtpCanLength/AVTP_QUADLET_SIZE);
if (ret) return ret;
ret = Avtp_CanBrief_SetField(can_pdu, AVTP_CAN_BRIEF_FIELD_PAD, padSize);
if (ret) return ret;
Avtp_CanBrief_SetField(can_pdu, AVTP_CAN_BRIEF_FIELD_ACF_MSG_LENGTH,
(uint64_t)avtpCanLength/AVTP_QUADLET_SIZE);
Avtp_CanBrief_SetField(can_pdu, AVTP_CAN_BRIEF_FIELD_PAD, padSize);

return avtpCanLength;
}

0 comments on commit 5d41360

Please sign in to comment.