@ -1,13 +1,14 @@
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# include  "DSP2833x_Device.h" 
 
					 
					 
					 
					# include  "CAN.h" 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					# include  <cstddef> 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					namespace  canSpace  { 
 
					 
					 
					 
					namespace  canSpace  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					void  CAN : : transmitMsg ( Uint16  boxNumber ,  const  CANMessage &  message ) { 
 
					 
					 
					 
					void  CAN : : transmitMsg ( Uint16  boxNumber ,  const  CANMessage &  message ) { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( boxNumber  >  31 )  return ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    Uint32  mboxControl ( 0 ) ; 
 
					 
					 
					 
					    Uint32  mboxControl ( 0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    mboxControl  =  1ul  < <  boxNumber ; 
 
					 
					 
					 
					    mboxControl  =  1ul  < <  boxNumber ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    volatile  MBOX *  p_MailBox ( NULL ) ; 
 
					 
					 
					 
					    volatile  MBOX *  p_MailBox ( 0 ) ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    p_MailBox  =  & ( p_CanMBoxes_ - > MBOX0 )  +  boxNumber ; 
 
					 
					 
					 
					    p_MailBox  =  & ( p_CanMBoxes_ - > MBOX0 )  +  boxNumber ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    p_MailBox - > MDH . all  =  0x0 ; 
 
					 
					 
					 
					    p_MailBox - > MDH . all  =  0x0 ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -22,8 +23,9 @@ void CAN::transmitMsg(Uint16 boxNumber, const CANMessage& message){
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    CanShadow_ . CANTRS . all  | =  mboxControl ;    
 
					 
					 
					 
					    CanShadow_ . CANTRS . all  | =  mboxControl ;    
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    p_CanRegs_ - > CANTRS . all  =  CanShadow_ . CANTRS . all ; 
 
					 
					 
					 
					    p_CanRegs_ - > CANTRS . all  =  CanShadow_ . CANTRS . all ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    do  {  CanShadow_ . CANTA . all  =  p_CanRegs_ - > CANTA . all ;  }     // TODO add tx error somewhere here
 
 
					 
					 
					 
					    // Wait for TA bit to be set
 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    while ( ( CanShadow_ . CANTA . all  &  mboxControl )  = =  0  ) ; // 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)
 
 
					 
					 
					 
					    // Clear TA (transmit acknowledge bit)
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    CanShadow_ . CANTA . all  =  0 ; 
 
					 
					 
					 
					    CanShadow_ . CANTA . all  =  0 ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -38,7 +40,7 @@ void CAN::updateTXMessage(Uint16 boxNumber, const CANMessage& message){ // TODO
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                                                                        // then transmitted.
 
 
					 
					 
					 
					                                                                        // then transmitted.
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( boxNumber  >  31 )  return ; 
 
					 
					 
					 
					    if  ( boxNumber  >  31 )  return ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    volatile  MBOX *  p_MailBox ( NULL ) ; 
 
					 
					 
					 
					    volatile  MBOX *  p_MailBox ( 0 ) ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    p_MailBox  =  & ( p_CanMBoxes_ - > MBOX0 )  +  boxNumber ; 
 
					 
					 
					 
					    p_MailBox  =  & ( p_CanMBoxes_ - > MBOX0 )  +  boxNumber ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // Set change data request (CDR bit + MBOX number)
 
 
					 
					 
					 
					    // Set change data request (CDR bit + MBOX number)
 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -56,7 +58,7 @@ void CAN::updateTXMessage(Uint16 boxNumber, const CANMessage& message){ // TODO
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					void  CAN : : sendRemoteRequest ( Uint16  boxNumber ) { 
 
					 
					 
					 
					void  CAN : : sendRemoteRequest ( Uint16  boxNumber ) { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( boxNumber  >  31 )  return ; 
 
					 
					 
					 
					    if  ( boxNumber  >  31 )  return ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    volatile  MBOX *  p_MailBox ( NULL ) ; 
 
					 
					 
					 
					    volatile  MBOX *  p_MailBox ( 0 ) ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    p_MailBox  =  & ( p_CanMBoxes_ - > MBOX0 )  +  boxNumber ; 
 
					 
					 
					 
					    p_MailBox  =  & ( p_CanMBoxes_ - > MBOX0 )  +  boxNumber ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    Uint32  mboxControl ( 0 ) ; 
 
					 
					 
					 
					    Uint32  mboxControl ( 0 ) ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -87,7 +89,7 @@ bool CAN::receiveMsg(Uint16 boxNumber, CANMessage& rxMessage){ // TODO faults ju
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    Uint32  mboxControl ( 0 ) ; 
 
					 
					 
					 
					    Uint32  mboxControl ( 0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    mboxControl  =  1ul  < <  boxNumber ; 
 
					 
					 
					 
					    mboxControl  =  1ul  < <  boxNumber ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    volatile  MBOX *  p_MailBox ( NULL ) ; 
 
					 
					 
					 
					    volatile  MBOX *  p_MailBox ( 0 ) ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    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 ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -107,7 +109,6 @@ bool CAN::receiveMsg(Uint16 boxNumber, CANMessage& rxMessage){ // TODO faults ju
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if ( newMessage  | |  lostMessage )  { 
 
					 
					 
					 
					    if ( newMessage  | |  lostMessage )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        return  - 1 ; 
 
					 
					 
					 
					        return  - 1 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    //  set_fault();
 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    } 
 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    return  0 ; 
 
					 
					 
					 
					    return  0 ;