@ -14,7 +14,7 @@ void CAN::transmitMsg(Uint16 boxNumber, const CANMessage& message){
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    p_MailBox - > MDH . all  =  0x0 ; 
 
					 
					 
					 
					    p_MailBox - > MDH . all  =  0x0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    p_MailBox - > MDL . all  =  0x0 ; 
 
					 
					 
					 
					    p_MailBox - > MDL . all  =  0x0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    p_MailBox - > MSGCTRL . bit . DLC  =  message . msgctrl. bit . DLC  ; 
 
					 
					 
					 
					    p_MailBox - > MSGCTRL . bit . DLC  =  message . dataLength ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    p_MailBox - > MDH . all  =  message . mdh . all ; 
 
					 
					 
					 
					    p_MailBox - > MDH . all  =  message . mdh . all ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    p_MailBox - > MDL . all  =  message . mdl . all ; 
 
					 
					 
					 
					    p_MailBox - > MDL . all  =  message . mdl . all ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -34,6 +34,69 @@ void CAN::transmitMsg(Uint16 boxNumber, const CANMessage& message){
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					void  CAN : : transmitMsg ( Uint16  boxNumber ,  const  Uint32 &  message ) { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( boxNumber  >  31 )  return ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    Uint32  mboxControl ( 0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    mboxControl  =  1ul  < <  boxNumber ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    volatile  MBOX *  p_MailBox ( 0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    p_MailBox  =  & ( p_CanMBoxes_ - > MBOX0 )  +  boxNumber ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    p_MailBox - > MDH . all  =  0x0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    p_MailBox - > MDL . all  =  0x0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    p_MailBox - > MDH . all  =  message  > >  16 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    p_MailBox - > MDL . all  =  message ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    // Set TRS for mailbox
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    CanShadow_ . CANTRS . all  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    CanShadow_ . CANTRS . all  | =  mboxControl ;    
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    p_CanRegs_ - > CANTRS . all  =  CanShadow_ . CANTRS . all ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    // Wait for TA bit to be set
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    do  {  CanShadow_ . CANTA . all  =  p_CanRegs_ - > CANTA . all ;  } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    while ( ( CanShadow_ . CANTA . all  &  mboxControl )  = =  0  ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    // Clear TA (transmit acknowledge bit)
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    CanShadow_ . CANTA . all  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    CanShadow_ . CANTA . all  | =  mboxControl ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    p_CanRegs_ - > CANTA . all  =  CanShadow_ . CANTA . all ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					void  CAN : : transmitMsg ( Uint16  boxNumber ,  const  Uint32 &  message ,  const  Uint16  dlc ) { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( boxNumber  >  31 )  return ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    Uint32  mboxControl ( 0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    mboxControl  =  1ul  < <  boxNumber ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    volatile  MBOX *  p_MailBox ( 0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    p_MailBox  =  & ( p_CanMBoxes_ - > MBOX0 )  +  boxNumber ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    p_MailBox - > MDH . all  =  0x0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    p_MailBox - > MDL . all  =  0x0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    p_MailBox - > MSGCTRL . bit . DLC  =  dlc ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    p_MailBox - > MDH . all  =  message  > >  16 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    p_MailBox - > MDL . all  =  message ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    // Set TRS for mailbox
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    CanShadow_ . CANTRS . all  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    CanShadow_ . CANTRS . all  | =  mboxControl ;    
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    p_CanRegs_ - > CANTRS . all  =  CanShadow_ . CANTRS . all ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    // Wait for TA bit to be set
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    do  {  CanShadow_ . CANTA . all  =  p_CanRegs_ - > CANTA . all ;  } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    while ( ( CanShadow_ . CANTA . all  &  mboxControl )  = =  0  ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    // Clear TA (transmit acknowledge bit)
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    CanShadow_ . CANTA . all  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    CanShadow_ . CANTA . all  | =  mboxControl ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    p_CanRegs_ - > CANTA . all  =  CanShadow_ . CANTA . all ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					void  CAN : : updateTXMessage ( Uint16  boxNumber ,  const  CANMessage &  message ) {  // TODO check trs bit and set it at the end if it was here. Once the TRS bit is set for a mailbox and then data is changed in the mailbox using the CDR
 
 
					 
					 
					 
					void  CAN : : updateTXMessage ( Uint16  boxNumber ,  const  CANMessage &  message ) {  // TODO check trs bit and set it at the end if it was here. Once the TRS bit is set for a mailbox and then data is changed in the mailbox using the CDR
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                                                                        // bit, the CAN module fails to transmit the new data and transmits the old data instead. To avoid this,
 
 
					 
					 
					 
					                                                                        // bit, the CAN module fails to transmit the new data and transmits the old data instead. To avoid this,
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                                                                        // reset transmission in that mailbox using the TRRn bit and set the TRSn bit again. The new data is
 
 
					 
					 
					 
					                                                                        // reset transmission in that mailbox using the TRRn bit and set the TRSn bit again. The new data is
 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -46,6 +109,7 @@ void CAN::updateTXMessage(Uint16 boxNumber, const CANMessage& message){ // TODO
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // Set change data request (CDR bit + MBOX number)
 
 
					 
					 
					 
					    // Set change data request (CDR bit + MBOX number)
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    p_CanRegs_ - > CANMC . all  | =  ( 128  +  boxNumber ) ; 
 
					 
					 
					 
					    p_CanRegs_ - > CANMC . all  | =  ( 128  +  boxNumber ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    // TODO Add lenght changing?
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    p_MailBox - > MDL . all  =  message . mdl . all ; 
 
					 
					 
					 
					    p_MailBox - > MDL . all  =  message . mdl . all ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    p_MailBox - > MDH . all  =  message . mdh . all ; 
 
					 
					 
					 
					    p_MailBox - > MDH . all  =  message . mdh . all ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -83,7 +147,7 @@ void CAN::sendRemoteRequest(Uint16 boxNumber){
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					bool   CAN : : receiveMsg ( Uint16  boxNumber ,  CANMessage &  rxMessage ) {  // TODO faults just return -1
 
 
					 
					 
					 
					int16   CAN : : receiveMsg ( Uint16  boxNumber ,  CANMessage &  rxMessage ) {  // TODO faults just return -1
 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( boxNumber  >  31 )  {  return  - 1 ;  } 
 
					 
					 
					 
					    if  ( boxNumber  >  31 )  {  return  - 1 ;  } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    Uint32  mboxControl ( 0 ) ; 
 
					 
					 
					 
					    Uint32  mboxControl ( 0 ) ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -93,11 +157,11 @@ bool CAN::receiveMsg(Uint16 boxNumber, CANMessage& rxMessage){ // TODO faults ju
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    p_MailBox  =  & ( p_CanMBoxes_ - > MBOX0 )  +  boxNumber ; 
 
					 
					 
					 
					    p_MailBox  =  & ( p_CanMBoxes_ - > MBOX0 )  +  boxNumber ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    bool  isNewMessageInBox  =  p_CanRegs_ - > CANRMP . all  &  mboxControl ; 
 
					 
					 
					 
					    bool  isNewMessageInBox  =  p_CanRegs_ - > CANRMP . all  &  mboxControl ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if ( ! isNewMessageInBox )  return  - 1 ; 
 
					 
					 
					 
					    if ( ! isNewMessageInBox )  return  - 2 ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    p_CanRegs_ - > CANRMP . all  & =  mboxControl ; 
 
					 
					 
					 
					    p_CanRegs_ - > CANRMP . all  & =  mboxControl ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    rxMessage . msgctrl. all   =  p_MailBox - > MSGCTRL . all ; 
 
					 
					 
					 
					    rxMessage . dataLength  =  p_MailBox - > MSGCTRL . all ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    rxMessage . mdl . all  =  p_MailBox - > MDL . all ; 
 
					 
					 
					 
					    rxMessage . mdl . all  =  p_MailBox - > MDL . all ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    rxMessage . mdh . all  =  p_MailBox - > MDH . all ; 
 
					 
					 
					 
					    rxMessage . mdh . all  =  p_MailBox - > MDH . all ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -108,7 +172,7 @@ bool CAN::receiveMsg(Uint16 boxNumber, CANMessage& rxMessage){ // TODO faults ju
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    lostMessage  =  p_CanRegs_ - > CANRML . all  &  mboxControl ; 
 
					 
					 
					 
					    lostMessage  =  p_CanRegs_ - > CANRML . all  &  mboxControl ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if ( newMessage  | |  lostMessage )  { 
 
					 
					 
					 
					    if ( newMessage  | |  lostMessage )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        return  - 1 ; 
 
					 
					 
					 
					        return  - 3 ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    } 
 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    return  0 ; 
 
					 
					 
					 
					    return  0 ;