canID.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #ifndef __canID_h__
00041 #define __canID_h__
00042
00043 #include <stdint.h>
00044
00045 namespace famouso {
00046 namespace mw {
00047 namespace nl {
00048 namespace CAN {
00049 namespace detail {
00050
00071 template <typename IDStruct>
00072 union __attribute__((packed)) ID {
00073 uint32_t _value;
00074 uint8_t _v[4];
00075 typename IDStruct::parts parts;
00076 typename IDStruct::parts_ccp parts_ccp;
00077
00079 uint16_t etag() {
00080 return parts._etag;
00081 }
00082
00084 void etag(uint16_t e) {
00085 parts._etag = e;
00086 }
00087
00089 uint8_t tx_node() {
00090 return parts._tx_nodelo | (parts._tx_nodehi << 2) ;
00091 }
00092
00094 void tx_node(uint8_t t) {
00095 parts._tx_nodelo = t & 0x3;
00096 parts._tx_nodehi = t >> 2 ;
00097 }
00098
00102 bool fragment() {
00103 return parts._fragment;
00104 }
00105
00109 void fragment(bool f) {
00110 parts._fragment = f;
00111 }
00112
00114 uint8_t prio() {
00115 return parts._priolo | (parts._priohi << 2) ;
00116 }
00117
00119 void prio(uint8_t p) {
00120 parts._priolo = p & 0x7;
00121 parts._priohi = p >> 2;
00122 }
00123
00125 uint8_t ccp_stage() {
00126 return parts_ccp._stage;
00127 }
00128
00130 void ccp_stage(uint8_t stage) {
00131 parts_ccp._stage = stage;
00132 }
00133
00135 uint8_t ccp_nibble() {
00136 return parts_ccp._nibblelo | (parts_ccp._nibblehi << 2) ;
00137 }
00138
00140 void ccp_nibble(uint8_t nibble) {
00141 parts_ccp._nibblelo = nibble;
00142 parts_ccp._nibblehi = nibble >> 2;
00143 }
00144
00146 uint8_t & operator[](uint8_t i) {
00147 return _v[i];
00148 }
00149 };
00150
00151 }
00152
00153 }
00154 }
00155 }
00156 }
00157
00158 #endif