]> jspc29.x-matter.uni-frankfurt.de Git - daqdocu.git/commitdiff
*** empty log message ***
authorhadaq <hadaq>
Wed, 28 Apr 2010 16:26:51 +0000 (16:26 +0000)
committerhadaq <hadaq>
Wed, 28 Apr 2010 16:26:51 +0000 (16:26 +0000)
software.tex

index 1ac693bb8dd97447b2f344ceb9a388ae35a95b27..af26152bcc3dd385db20007f7f1cd2176b0d4f6d 100755 (executable)
 \section{Overview}
-Currently, there are three main software tools for accessing TrbNet: trbcmd, trbflash and daqop. All are based on one common library, libtrbnet, that provides all features needed to communicate with any FPGA inside the network using the ETRAX CPU located on a central slow control TRB.
+Currently, there are three main software tools for accessing TrbNet: trbcmd, 
+trbflash and daqop. All are based on one common library, libtrbnet, that 
+provides all features needed to communicate with any FPGA inside the network 
+using the ETRAX CPU located on a central slow control TRB.
 
 \begin{description}
- \item[trbcmd] A general purpose tool to execute every possible access on TrbNet endpoints. Scripting capabilities and verbose error messages are included.
- \item[daqop] A command line tool which accepts keywords as options and executes the corresponding TrbNet accesses without having the user to bother with network and register addresses.
- \item[trbflash] A specialized tool to write, read and verify Flash ROMs used to boot FPGAs. Currently, MDC OEP and RICH ADCM are supported, Shower AddOn and MDC AddOn will follow.
- \item[readout\_mdc] Simulates the CTS using a TRB by sending first a pseudo timing trigger via slow control, then a LVL1 trigger and finally an IPU readout request. Data is sent via UDP to an Eventbuilder. Primarily written for MDC, but should be compatible to other detectors as well.
- \item[startup.pl] Executes script files to load many registers during startup or for reconfiguration.
+ \item[trbcmd] A general purpose tool to execute every possible access on 
+TrbNet endpoints. Scripting capabilities and verbose error messages are 
+included.
+ \item[daqop] A command line tool which accepts keywords as options and 
+executes the corresponding TrbNet accesses without having the user to bother 
+with network and register addresses.
+ \item[trbflash] A specialized tool to write, read and verify Flash ROMs used 
+to boot FPGAs. Currently, MDC OEP and RICH ADCM are supported, Shower AddOn 
+and MDC AddOn will follow.
+ \item[readout\_mdc] Simulates the CTS using a TRB by sending first a pseudo 
+timing trigger via slow control, then a LVL1 trigger and finally an IPU 
+readout request. Data is sent via UDP to an Eventbuilder. Primarily written 
+for MDC, but should be compatible to other detectors as well.
+ \item[startup.pl] Executes script files to load many registers during 
+startup or for reconfiguration.
  \end{description}
 
 
 \section{DaqOp}
 \begin{itemize}
- \item Commands use standard notation like (a|b|c) for choices, (a)? for optional parts and \$ab for placeholders.
+ \item Commands use standard notation like (a|b|c) for choices, (a)? for 
+optional parts and \$ab for placeholders.
  \item Most output is ordered by the network address
- \item If no address is given, command is sent to all boards using a broadcast (Unless specified otherwise)
- \item The order of keywords and values in the command is arbitrary. Only in few places the order is relevant. \verb|$channel| and \verb|$port| must always directly follow their corresponding keyword.
- \item Some commands can be modified by one of the keywords \verb|dec|, \verb|decimal|, \verb|hex| or \verb|raw|. \verb|hex| forces the output in hexadecimal form, \verb|dec| in decimal form and \verb|raw| gives the raw content of the addressed registers.
+ \item If no address is given, command is sent to all boards using a 
+broadcast (Unless specified otherwise)
+ \item The order of keywords and values in the command is arbitrary. Only in 
+few places the order is relevant. \verb|$channel| and \verb|$port| must 
+always directly follow their corresponding keyword.
+ \item Some commands can be modified by one of the keywords \verb|dec|, 
+\verb|decimal|, \verb|hex| or \verb|raw|. \verb|hex| forces the output in 
+hexadecimal form, \verb|dec| in decimal form and \verb|raw| gives the raw 
+content of the addressed registers.
 \end{itemize}
 
 Placeholders are defined as follows:
 \begin{description}
- \item[\$addr] TrbNet address, 16bit long, preceded by \verb|ax| prefix in the form, example: \verb|ax1234| or system name (\$system)
- \item[\$channel] A value identifying a TrbNet channel. Usually either 0,1 or 3. Verbose names trigger, ipu, control can also be used.
+ \item[\$addr] TrbNet address, 16bit long, preceded by \verb|ax| prefix in 
+the form, example: \verb|ax1234| or system name (\$system)
+ \item[\$channel] A value identifying a TrbNet channel. Usually either 0,1 
+or 3. Verbose names trigger, ipu, control can also be used.
  \item[\$read] A keyword, one of \verb|read| and \verb|get|
- \item[\$port] A value identifying one port of a hub. Usually a number between 0 and 12.
+ \item[\$port] A value identifying one port of a hub. Usually a number 
+between 0 and 12.
  \item[\$select] A keyword, one of \verb|select|, \verb|set| and \verb|switch|
  \item[\$string] Any string of characters
- \item[\$system] A keyword identifying a subsystem: \verb|hub|, \verb|oep|, \verb|rich|, \verb|tof|, \verb|shower|, \verb|rpc| or an \$addr
- \item[\$value] An integer value, either hexadecimal (\verb|0x1234|), a bit position (\verb|0b5|, the sixth bit in the register) or a decimal value)
+ \item[\$system] A keyword identifying a subsystem: \verb|hub|, \verb|oep|, 
+\verb|rich|, \verb|tof|, \verb|shower|, \verb|rpc| or an \$addr
+ \item[\$value] An integer value, either hexadecimal (\verb|0x1234|), a bit 
+position (\verb|0b5|, the sixth bit in the register) or a decimal value)
  \item[\$write] A keyword, one of \verb|send|, \verb|set| and \verb|write|
 \end{description}
 
 \subsection{Network Management}
 \paragraph*{reset network \\ \$write hub port \$port reset \$addr} ~\\
-Sends a network reset through the network. Either all boards or all boards connected below the given board respectively the given port will receive the reset. Note that the first works in all cases, but the latter two require a still working slow control channel. The reset phase is dominated by the delay in the optical link state machines which are around 5 seconds.
+Sends a network reset through the network. Either all boards or all boards 
+connected below the given board respectively the given port will receive the 
+reset. Note that the first works in all cases, but the latter two require a 
+still working slow control channel. The reset phase is dominated by the delay 
+in the optical link state machines which are around 5 seconds.
 
 \paragraph*{\$read ids} optional: \verb|$addr| \\
-Reads the unique ids of boards with the given address. The first value returned is the network address, the second the 64bit wide unique id, the last the FPGA number.\\
+Reads the unique ids of boards with the given address. The first value 
+returned is the network address, the second the 64bit wide unique id, the 
+last the FPGA number.\\
 Example output: \verb|0xf102 0x120000011234234 0x02|
 
 \paragraph*{reboot \$system} optional: \verb|$addr| \\
-Triggers a reboot of the addressed FPGA. Only available on systems with on-board Flash ROM such as OEP, MDC, RICH and Shower.
+Triggers a reboot of the addressed FPGA. Only available on systems with 
+on-board Flash ROM such as OEP, MDC, RICH and Shower.
 
 
 \subsection{Basic Information}
 \paragraph*{\$read compile time} optional: \verb|$addr|, \verb|raw| \\
-Reads the timestamp the currently loaded FPGA design has been compiled. The \verb|raw| modifier gives back the unix timestamp, standard is a decimal representation. \\
+Reads the timestamp the currently loaded FPGA design has been compiled. The 
+\verb|raw| modifier gives back the unix timestamp, standard is a decimal 
+representation. \\
 Example output: \verb|0xf102 2010-01-01 10:32|
 
-\paragraph*{\$read temp \\ \$read temperature} optional: \verb|$addr|, \verb|raw| \\
-Reads the temperature of the addressed boards. Output is in degrees Celsius (standard) or in raw hexadecimal format.
+\paragraph*{\$read temp \\ \$read temperature} optional: \verb|$addr|, 
+\verb|raw| \\
+Reads the temperature of the addressed boards. Output is in degrees Celsius 
+(standard) or in raw hexadecimal format.
 
 \subsection{Trigger}
-\paragraph*{\$read global time \\ \$write global time \$value} optional: \verb|$addr|, \verb|dec|, \verb|raw| \\
-Reads or writes the global time register on the addressed boards. The \verb|dec| option gives back a decimal representation in seconds, raw is a hexadecimal representation of microseconds since the timer has been started. An overflow will occur every 72 minutes.
-
-\paragraph*{\$read trigger time} optional: \verb|$addr|, \verb|dec|, \verb|raw| \\
-Equivalent to \verb|$read compile time| but gives back the time since the last timing trigger has been received, counting in 10ns steps. An overflow will occur within less than a minute.
-
-\paragraph*{\$read trigger number \\ \$write trigger number \$value} optional: \verb|$addr|, \verb|dec| \\
-Reads or writes the internal trigger number counter on the addressed endpoints. Output can be either hexadecimal (standard) or decimal.
+\paragraph*{\$read global time \\ \$write global time \$value} optional: 
+\verb|$addr|, \verb|dec|, \verb|raw| \\
+Reads or writes the global time register on the addressed boards. The 
+\verb|dec| option gives back a decimal representation in seconds, raw is a 
+hexadecimal representation of microseconds since the timer has been started. 
+An overflow will occur every 72 minutes.
+
+\paragraph*{\$read trigger time} optional: \verb|$addr|, \verb|dec|, 
+\verb|raw| \\
+Equivalent to \verb|$read compile time| but gives back the time since the 
+last timing trigger has been received, counting in 10ns steps. An overflow 
+will occur within less than a minute.
+
+\paragraph*{\$read trigger number \\ \$write trigger number \$value} 
+optional: \verb|$addr|, \verb|dec| \\
+Reads or writes the internal trigger number counter on the addressed 
+endpoints. Output can be either hexadecimal (standard) or decimal.
 
 \paragraph*{\$write timing trigger \$value} optional: \verb|$addr| \\
-Sends a fake timing trigger using the slow control channel and the upper 16bit of control register 0 in all endpoints. \verb|$value| is the type of timing trigger in the range 0 to 15.
+Sends a fake timing trigger using the slow control channel and the upper 
+16bit of control register 0 in all endpoints. \verb|$value| is the type of 
+timing trigger in the range 0 to 15.
 
-\paragraph*{\$read endpoint data buffer status \\ \$read endp dat buf stat} optional: \verb|$addr|, \verb|raw| \\
-Reads the status of the data handler buffers of endpoint\_hades\_full\_handler. The decoded data is shown in table format with marks for each set bit according to table \ref{databufferdaqop}.
+\paragraph*{\$read endpoint data buffer status \\ \$read endp dat buf stat} 
+optional: \verb|$addr|, \verb|raw| \\
+Reads the status of the data handler buffers of endpoint\_hades\_full\_handler.
+The decoded data is shown in table format with marks for each set bit 
+according to table \ref{databufferdaqop}.
 
 \begin{table}[htbp]
 \begin{center}
@@ -75,97 +125,183 @@ Reads the status of the data handler buffers of endpoint\_hades\_full\_handler.
 \textbf{Column} & \textbf{Description} \\
 \hline\hline
 Board & The network address of the board. \\
-Level & The fill level of the buffer - a 5 digit decimal number counting 32bit words inside the data buffer. The maximum value depends on the settings of the buffer. \\
-Buf   & The number of the data buffer in case there is more than one data buffer specified. \\
+Level & The fill level of the buffer - a 5 digit decimal number counting 
+32bit words inside the data buffer. The maximum value depends on the settings 
+of the buffer. \\
+Buf   & The number of the data buffer in case there is more than one data 
+buffer specified. \\
 EMP   & Empty flag of the buffer. \\
-AFL   & Almost full flag of the buffer. The threshold has been set by generics in the VHDL code. \\
-FUL   & Full flag of the data buffer. If this flag is set, an error occured due to a wrong buffer handling or wrong buffer settings. \\
+AFL   & Almost full flag of the buffer. The threshold has been set by generics 
+in the VHDL code. \\
+FUL   & Full flag of the data buffer. If this flag is set, an error occured 
+due to a wrong buffer handling or wrong buffer settings. \\
 WRE   & Write enable strobe to the buffer. \\
 IDL   & Buffer handler state machine is idle, waiting for next trigger. \\
-BSY   & Buffer handler state machine is waiting for and / or writing data from the FEE to the data buffer \\
-CLS   & Buffer handler is waiting for busy release. The FEE already finished writing data to the buffer but LVL1 is still busy \\
-LEM   & Length buffer is empty. This must always be the same as EMP of the LVL1 buffer. \\
-LFL   & Length buffer is almost full. This must always be the same as AFL of the LVL1 buffer. \\
-LWR   & Length buffer write enable strobe.  This must always be the same as AFL of the LVL1 buffer. \\
+BSY   & Buffer handler state machine is waiting for and / or writing data from 
+the FEE to the data buffer \\
+CLS   & Buffer handler is waiting for busy release. The FEE already finished 
+writing data to the buffer but LVL1 is still busy \\
+LEM   & Length buffer is empty. This must always be the same as EMP of the 
+LVL1 buffer. \\
+LFL   & Length buffer is almost full. This must always be the same as AFL of 
+the LVL1 buffer. \\
+LWR   & Length buffer write enable strobe.  This must always be the same as 
+AFL of the LVL1 buffer. \\
 \hline
 \end{tabularx}
-\caption{Definition of columns in DaqOp output for the status register of data handler buffers.}
+\caption{Definition of columns in DaqOp output for the status register of data 
+handler buffers.}
 \label{databufferdaqop}
 \end{center}
 \end{table}
 
-\paragraph*{\$read endpoint lvl1 buffer status \\ \$read endp lvl1 buf stat} optional: \verb|$addr|, \verb|raw| \\
-Reads the status of the data handler LVL1 buffers of endpoint\_hades\_full\_handler. The decoded data is shown similarly to the output for the data buffer status registers according to table \ref{databufferdaqop}. Here, not all columns are shown, i.e. there is no buffer number and no flags regarding a length buffer (which does not exist here).
+\paragraph*{\$read endpoint lvl1 buffer status \\ \$read endp lvl1 buf stat} 
+optional: \verb|$addr|, \verb|raw| \\
+Reads the status of the data handler LVL1 buffers of 
+endpoint\_hades\_full\_handler. The decoded data is shown similarly to the 
+output for the data buffer status registers according to table 
+\ref{databufferdaqop}. Here, not all columns are shown, i.e. there is no 
+buffer number and no flags regarding a length buffer (which does not exist 
+here).
 
 
 \subsection{MDC}
 
 \paragraph*{\$read flash oep } optional: \verb|$addr| \\
-Reads back the current status of the Flash select switch on the OEP. Value is either 1 for flash 0, 2 for flash 1 or 3 in case of an error.
+Reads back the current status of the Flash select switch on the OEP. Value is 
+either 1 for flash 0, 2 for flash 1 or 3 in case of an error.
 
 \paragraph*{\$select flash (0|1) oep} optional: \verb|$addr| \\
-Selects either Flash chip 0 or 1 on the OEP. 0 is the ``golden image'', 1 is the working setup.
+Selects either Flash chip 0 or 1 on the OEP. 0 is the ``golden image'', 1 is 
+the working setup.
 
 \paragraph*{adc oep (init|on|off|single)} optional: \verb|$addr| \\
 Sets the operation mode of the voltage monitoring ADC on the OEP. \\
-\verb|init| Initializes the ADC, switches it on and starts continous conversions.\\
+\verb|init| Initializes the ADC, switches it on and starts continous 
+conversions.\\
 \verb|on| Switches the ADC on and starts continous conversions.\\
 \verb|off| Stops ADC measurements.\\
-\verb|single| Runs a single conversion for all 8 monitored voltages, then switches off the ADC.\\
+\verb|single| Runs a single conversion for all 8 monitored voltages, 
+then switches off the ADC.\\
 
 \paragraph*{\$read oep voltages (long)?} optional: \verb|$addr|, \verb|raw| \\
-Reads the voltages of the addressed OEP. Standard output is a human-readable status information. For each voltages, the status is shown as one of ``ERR'' (measurement error), ``ok'', ``low'', ``was low'' (voltage was too low, but is ok now), ``high'', ``was high'' (voltage was too high, but is ok now), ``high/low'' (voltage was too low and too high before, currently either too high or too low) or ``vary/ok'' (voltage is ok now, but was too high and too low before). The \verb|raw| option gives back the raw content of the register, i.e. a list of 8 hexadecimal numbers for each board.
+Reads the voltages of the addressed OEP. Standard output is a human-readable 
+status information. For each voltages, the status is shown as one of ``ERR'' 
+(measurement error), ``ok'', ``low'', ``was low'' (voltage was too low, but 
+is ok now), ``high'', ``was high'' (voltage was too high, but is ok now), 
+``high/low'' (voltage was too low and too high before, currently either too 
+high or too low) or ``vary/ok'' (voltage is ok now, but was too high and too 
+low before). The \verb|raw| option gives back the raw content of the register, 
+i.e. a list of 8 hexadecimal numbers for each board.
 The long format gives back the exact voltage levels measured.
 
 \paragraph*{\$read oep voltage \$value} optional: \verb|$addr|, \verb|raw| \\
-Reads the value of a single voltage on the addressed OEP. Additionally, the lowest and highest measured value is shown. \verb|$value| is the voltage to be shown, in the range of 0 to 7 according to the following list (voltages are either on the measured on the input of the OEP (input) or after the voltage regulator (output): (0: 5.6V input, 1: 5V output, 2: 3.5V input, 3: 3.3V output, 4: 1.6V input, 5: 1.2V output, 6: +3V input, 7: -3V input).
+Reads the value of a single voltage on the addressed OEP. Additionally, the 
+lowest and highest measured value is shown. \verb|$value| is the voltage to 
+be shown, in the range of 0 to 7 according to the following list (voltages 
+are either on the measured on the input of the OEP (input) or after the 
+voltage regulator (output): (0: 5.6V input, 1: 5V output, 2: 3.5V input, 3: 
+3.3V output, 4: 1.6V input, 5: 1.2V output, 6: +3V input, 7: -3V input).
 
 
 \subsection{Network Hubs}
 
 \paragraph*{\$read hub setup} optional: \verb|$addr|, \verb|raw| \\
-Reads the uplink-/downlink-configuration of the addresses network hubs. The output is two strings for either up- and downlinks. Each digit marks a connection where that is configured as uplink respectively downlink or a dash if this functionality is disabled. Ports that are listed in neither list do not exist at all. The numbers themselves are inserted to gain a better readability and represent the port number only.\\
+Reads the uplink-/downlink-configuration of the addresses network hubs. The 
+output is two strings for either up- and downlinks. Each digit marks a 
+connection where that is configured as uplink respectively downlink or a dash 
+if this functionality is disabled. Ports that are listed in neither list do 
+not exist at all. The numbers themselves are inserted to gain a better 
+readability and represent the port number only.\\
 Example output: \verb|0xf123  up: --------------10  down: -----a9876--3210|
 
 \paragraph*{\$read hub connected} optional: \verb|$addr|, \verb|raw| \\
-Reads the current status of the hub, which ports are actually connected and have a link established. The output format is similar to the one described above. A dash marks an existing port without a connection, a number marks an established link.
+Reads the current status of the hub, which ports are actually connected and 
+have a link established. The output format is similar to the one described 
+above. A dash marks an existing port without a connection, a number marks an 
+established link.
 
 \paragraph*{\$read hub timeout} optional: \verb|$addr|, \verb|raw| \\
-Gives back information about hub ports on which a timeout occured. Standard output is plain text: \\
+Gives back information about hub ports on which a timeout occured. Standard 
+output is plain text: \\
 Example output: \verb|Timeout on hub f123 channel 0 port 7| \\
-The raw option gives the same information but as one 32bit value per channel and board with one bit set for each port with a timeout.
-
-\paragraph*{\$read hub packets channel \$channel} optional: \verb|$addr|, \verb|raw|, \verb|port $port| \\
-Reads the amount of packets received on IPU and slow control channel on the given hub and port or for all ports if no port number is given. The raw option outputs one 32bit number for each channel.
-
-\paragraph*{\$read hub waiting (channel \$channel)?} optional: \verb|$addr|, \verb|raw| \\
-Shows all ports and channels on the addressed hubs that are currently waiting for a reply (more precisely: waiting for a TRM in the reply channel). Although channel can be chosen freely, the value read on channel 3 is accurate, but all connected channels will always be marked as waiting. This is the case since there actually is a transfer going on - namely this request itself. If no channel is selected, information from all channels 0 and 1 is shown. The output is either in plain text (standard) or in raw format.
-
-\paragraph*{\$read hub ack channel \$channel \\ \$read hub acknowledge channel \$channel} optional: \verb|$addr|, \verb|raw| \\
-Shows all ports and channels on the addressed hub that are blocked because the sender is waiting for two acknowledge (ACK) packets from the receiver side for too long. This kind of error usually corresponds to a broken communication, e.g. mixed up TX and RX lines. If no channel is selected, information from all 3 channels is shown. The output is either in plain text (standard) or in raw format.
+The raw option gives the same information but as one 32bit value per channel 
+and board with one bit set for each port with a timeout.
+
+\paragraph*{\$read hub packets channel \$channel} optional: \verb|$addr|, 
+\verb|raw|, \verb|port $port| \\
+Reads the amount of packets received on IPU and slow control channel on the 
+given hub and port or for all ports if no port number is given. The raw option 
+outputs one 32bit number for each channel.
+
+\paragraph*{\$read hub waiting (channel \$channel)?} optional: \verb|$addr|, 
+\verb|raw| \\
+Shows all ports and channels on the addressed hubs that are currently waiting 
+for a reply (more precisely: waiting for a TRM in the reply channel). Although 
+channel can be chosen freely, the value read on channel 3 is accurate, but all 
+connected channels will always be marked as waiting. This is the case since 
+there actually is a transfer going on - namely this request itself. If no 
+channel is selected, information from all channels 0 and 1 is shown. The 
+output is either in plain text (standard) or in raw format.
+
+\paragraph*{\$read hub ack channel \$channel \\ \$read hub acknowledge 
+channel \$channel} optional: \verb|$addr|, \verb|raw| \\
+Shows all ports and channels on the addressed hub that are blocked because the 
+sender is waiting for two acknowledge (ACK) packets from the receiver side for 
+too long. This kind of error usually corresponds to a broken communication, 
+e.g. mixed up TX and RX lines. If no channel is selected, information from all 
+3 channels is shown. The output is either in plain text (standard) or in raw 
+format.
 
 \paragraph*{switch hub port \$port (channel \$channel)? \$addr  (on|off)} ~\\
-This command is used to switch a specific port on a specific channel on a specific hub on or off. Switching one channel of a port off means, that no request is sent on this port any more and no data is accepted on this port. This command must be issued including all three pieces of information (namely port, channel and address), otherwise it will return an error ``Parsing input failed.'' for security reasons. Please be adviced that it is no good idea to switch off the uplink of any hub! If this happens, a network reset is inevitable.
-If \verb|channel $channel| is not specified, the whole port will be powered down. Currently, this feature is not correctly implemented.
-
-\paragraph*{\$read hub error(bits)? \\ \$read hub error(bits)? channel \$channel} optional: \verb|$addr| \\
-Reads the merged status- and errorbits from the last transfer from the addressed hub. If no channel is specified, all channels are read out. The output is one 32bit data word according to the corresponding status- and errorbit definitions.
-
-\paragraph*{\$read hub error(bits)? ports \\ \$read hub error(bits)? port \$port} optional: \verb|$addr|, \verb|raw| \\
-Reads some error- and statusbits from all ports or the selected port from the addressed hub. Included are parts of the errorbits from LVL1 and IPU channel. For each channel, Bits 0-7 and 16-23 are included while the rest is omitted to reduce ressource consumption. The standard output shows the bits in the right positions while the raw output shows the bits merged into one value.
+This command is used to switch a specific port on a specific channel on a 
+specific hub on or off. Switching one channel of a port off means, that no 
+request is sent on this port any more and no data is accepted on this port. 
+This command must be issued including all three pieces of information (namely 
+port, channel and address), otherwise it will return an error ``Parsing input 
+failed.'' for security reasons. Please be adviced that it is no good idea to 
+switch off the uplink of any hub! If this happens, a network reset is 
+inevitable.
+If \verb|channel $channel| is not specified, the whole port will be powered 
+down. Currently, this feature is not correctly implemented.
+
+\paragraph*{\$read hub error(bits)? \\ \$read hub error(bits)? channel 
+\$channel} optional: \verb|$addr| \\
+Reads the merged status- and errorbits from the last transfer from the 
+addressed hub. If no channel is specified, all channels are read out. The 
+output is one 32bit data word according to the corresponding status- and 
+errorbit definitions.
+
+\paragraph*{\$read hub error(bits)? ports \\ \$read hub error(bits)? port 
+\$port} optional: \verb|$addr|, \verb|raw| \\
+Reads some error- and statusbits from all ports or the selected port from the 
+addressed hub. Included are parts of the errorbits from LVL1 and IPU channel. 
+For each channel, Bits 0-7 and 16-23 are included while the rest is omitted 
+to reduce ressource consumption. The standard output shows the bits in the 
+right positions while the raw output shows the bits merged into one value.
 
 \paragraph*{\$read hub ipu stat(us|e)} optional: \verb|$addr|, \verb|raw| \\
-Reads the current status of the IPU state machine from the addresses hubs. The standard output gives a description of the current state, the part of TrbNet packet that will be sent next and the part of the HDR/DHDR that is currently analyzed.
+Reads the current status of the IPU state machine from the addresses hubs. The 
+standard output gives a description of the current state, the part of TrbNet 
+packet that will be sent next and the part of the HDR/DHDR that is currently 
+analyzed.
 
 \paragraph*{\$read hub ctrl error} optional: \verb|$addr|, \verb|raw| \\
-Reads the error log for the slow control on hubs. One bit for each port. 1 if there was a transfer with either error bit 1, 3 or 6 set, 0 otherwise. Cleared after each read.
+Reads the error log for the slow control on hubs. One bit for each port. 1 if 
+there was a transfer with either error bit 1, 3 or 6 set, 0 otherwise. Cleared 
+after each read.
 
-\paragraph*{\$read hub time limit \\ \$write hub time limit \$value } optional: \verb|$addr|, \verb|raw| \\
-Reads or writes the setting for timeouts on hub ports. For details see the entry for register 0xC5 in \ref{hubcontrolregs}.
+\paragraph*{\$read hub time limit \\ \$write hub time limit \$value } 
+optional: \verb|$addr|, \verb|raw| \\
+Reads or writes the setting for timeouts on hub ports. For details see the 
+entry for register 0xC5 in \ref{hubcontrolregs}.
 
 \subsection{Other features}
 \paragraph*{trbcmd \$string \\ trbflash \$string} ~\\
-These two commands execute trbcmd or trbflash with the given string of attributes.
+These two commands execute trbcmd or trbflash with the given string of 
+attributes.
 
 \paragraph*{watch \$float} ~\\
-The watch option can be added to any command (depsite trbcmd and trbflash) to execute the given command in an endless loop. The \verb|$float| value gives the period in seconds.
\ No newline at end of file
+The watch option can be added to any command (depsite trbcmd and trbflash) to 
+execute the given command in an endless loop. The \verb|$float| value gives 
+the period in seconds.
\ No newline at end of file