From a987379e6465259a542f644e6e69139d206e67b9 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Tue, 18 Aug 2015 07:27:00 -0600 Subject: [PATCH] Add an error bit to the CAN message report --- ChangeLog | 7 +++++++ arch | 2 +- configs | 2 +- include/nuttx/can.h | 47 +++++++++++++++++++++++++++++---------------- 4 files changed, 39 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index cf068fc4b6..26df765f87 100755 --- a/ChangeLog +++ b/ChangeLog @@ -10833,3 +10833,10 @@ (2015-08-14). * Network drivers. Fix bug in tun interface driver. From Max Neklyudov (2015-08-17). + * STM32: Added definitions for STM32F303K6, STM32F303K8, STM32F303C6, + STM32F303C8, STM32F303RD, and STM32F303RE devices. From Paul + Alexander Patience (2015-08-17). + * include/nuttx/can.h and all CAN drivers: Add an error indication + bit to the CAN message report. This indication must then be cleared + in all existing drivers. More to come (2015-08-18). + diff --git a/arch b/arch index 73a9e0dba2..ec44a171ff 160000 --- a/arch +++ b/arch @@ -1 +1 @@ -Subproject commit 73a9e0dba2656ef8976c80910df503424d764fe8 +Subproject commit ec44a171ffae60b88acd5457461c9d86ff9c4500 diff --git a/configs b/configs index 24588fc10a..e140ddc5f4 160000 --- a/configs +++ b/configs @@ -1 +1 @@ -Subproject commit 24588fc10ae08f68c7dead477a7ad625b028679e +Subproject commit e140ddc5f4568a55f2f2410bf0c5e61e9abe897e diff --git a/include/nuttx/can.h b/include/nuttx/can.h index 68945c5e1e..c077485ac6 100644 --- a/include/nuttx/can.h +++ b/include/nuttx/can.h @@ -196,24 +196,34 @@ * One based CAN-message is represented with a maximum of 10 bytes. A message is * composed of at least the first 2 bytes (when there are no data bytes present). * - * Bytes 0-1: Hold a 16-bit value in host byte order - * Bits 0-3: Data Length Code (DLC) - * Bit 4: Remote Transmission Request (RTR) - * Bits 5-15: The 11-bit CAN identifier - * - * Bytes 2-9: CAN data + * Bytes 0-1: Bits 0-3: Data Length Code (DLC) + * Bit 4: Remote Transmission Request (RTR) + * Bit 5: 1=Message ID is a bit-encoded error report (See NOTE) + * Bits 6-7: Unused + * Bytes 1-2: Bits 0-10: The 11-bit CAN identifier This message ID is a bit + * encoded error set if ch_error is set (See NOTE). + * Bits 11-15: Unused + * Bytes 3-10: CAN data * * CAN-message Format (with Extended ID support) * * One CAN-message consists of a maximum of 13 bytes. A message is composed of at * least the first 5 bytes (when there are no data bytes). * - * Bytes 0-3: Hold 11- or 29-bit CAN ID in host byte order - * Byte 4: Bits 0-3: Data Length Code (DLC) - * Bit 4: Remote Transmission Request (RTR) - * Bit 5: Extended ID indication - * Bits 6-7: Unused - * Bytes 5-12: CAN data + * Bytes 0-3: Bits 0-28: Hold 11- or 29-bit CAN ID in host byte order. This + * message ID is a bit encoded error set if ch_error + * is set (See NOTE). + * Bits 29-31: Unused + * Byte 4: Bits 0-3: Data Length Code (DLC) + * Bit 4: Remote Transmission Request (RTR) + * Bit 5: 1=Message ID is a bit-encoded error report (See NOTE) + * Bit 6: Extended ID indication + * Bit 7: Unused + * Bytes 5-12: CAN data Size determined by DLC + * + * NOTE: The error indication if valid only on message reports received from the + * CAN driver; it is ignored on transmission. When the error bit is set, the + * message ID is an encoded set of error indications (see CAN_ERROR_* definitions). * * The struct can_msg_s holds this information in a user-friendly, unpacked form. * This is the form that is used at the read() and write() driver interfaces. The @@ -224,18 +234,21 @@ #ifdef CONFIG_CAN_EXTID struct can_hdr_s { - uint32_t ch_id; /* 11- or 29-bit ID (3-bits unused) */ + uint32_t ch_id; /* 11- or 29-bit ID (20- or 3-bits unused) */ uint8_t ch_dlc : 4; /* 4-bit DLC */ uint8_t ch_rtr : 1; /* RTR indication */ + uint8_t ch_error : 1; /* 1=ch_id is an error report */ uint8_t ch_extid : 1; /* Extended ID indication */ - uint8_t ch_unused : 2; /* Unused */ + uint8_t ch_unused : 1; /* Unused */ } packed_struct; #else struct can_hdr_s { - uint16_t ch_dlc : 4; /* 4-bit DLC. May be encoded in CAN_FD mode. */ - uint16_t ch_rtr : 1; /* RTR indication */ - uint16_t ch_id : 11; /* 11-bit standard ID */ + uint16_t ch_id; /* 11-bit standard ID (5-bits unused) */ + uint8_t ch_dlc : 4; /* 4-bit DLC. May be encoded in CAN_FD mode. */ + uint8_t ch_rtr : 1; /* RTR indication */ + uint8_t ch_error : 1; /* 1=ch_id is an error report */ + uint8_t ch_unused : 2; /* Unused */ } packed_struct; #endif