SFBHWSerialBoard.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
00029 #ifdef SFBHWSERIALHOST_H
00030 #error SFBHWSerialBoard.h and SFBHWSerialHost.h must not be #included together!
00031 #endif
00032
00033 #ifndef SFBHWSERIALBOARD_H
00034 #define SFBHWSERIALBOARD_H
00035
00036 #include "SFBFrame.h"
00037 #include "lpc/LPC23xx.h"
00038
00039 class SFBSerial;
00040
00041 #define CAN_WRITE(fd) (REGISTER_OFFSET(fd,UxLSR) & 0x20)
00042 #define WRITE_BYTE(fd,byte) (REGISTER_OFFSET(fd,UxTHR) = (byte))
00043 #define CAN_READ(fd) (REGISTER_OFFSET(fd,UxLSR) & 0x01)
00044 #define READ_BYTE(fd) REGISTER_OFFSET(fd,UxRBR)
00045
00058 class SFBHWSerial {
00059
00060 public:
00061
00062 SFBHWSerial(int face) ;
00063
00064 SFBFrame & getFrame() { return theFrame; }
00065
00066 void putcBlocking(const u8 byte) ;
00067
00068 static u32 getFirstFace() { return NORTH; }
00069 static bool moreFaces(u32 face) ;
00070 static u32 nextFace(u32 face) ;
00071
00072 static SFBSerial & getFace(u32 face) ;
00073
00074 bool getPreferOddParity() { return true; }
00075 u8 getPreferredBaudCode() { return 4; }
00076 u8 getLowBaudCode() { return 0; }
00077 u8 getHighBaudCode() { return 6; }
00078
00079 void predispatch() { }
00080
00081 void start(u32 baud, bool oddParity = false);
00082 void stop() ;
00083 void setBaudRate(u32 baud, bool oddParity = false) ;
00084 void checkTx() ;
00085 u32 getFD();
00086
00087 private:
00088
00089 void uartCommonHandler() ;
00090 friend void Uart0Handler();
00091 friend void Uart1Handler();
00092 friend void Uart2Handler();
00093 friend void Uart3Handler();
00094
00095 PacketBuffer & rxBuf;
00096 SFBRxByteBuffer rxBytes;
00097 SFBTxByteBuffer txBytes;
00098 SFBFrame theFrame;
00099 u32 lastInputActivity;
00100 bool txActive;
00101 const u8 face;
00102
00103 enum {
00104 FLAG_TX_ACTIVE = 0x02
00105 };
00106
00107 public:
00108
00109 };
00110
00111 #endif
00112