The timing/bsa package and the bsaDriver module are incharge of all acquisition services, namely : Beam Line Data (BLD), Beam Synchronous Acquisition (BSA), Beam Synchronous Acquisition Service (BSAS) and Beam Synchronous Scalar Service (BSSS) for the super conducting accelerator.
TBD
This contains a list of the capabilities of the module/package i detail. The reader should be able to understand the basic functionalities of this package/module by reading this text.
The timing/bsa requires paths that will denote the relevant registers/streams/and drams described in the YAML files. The necessary YAML files are as follows
The involved registers are as follows
Register Index | YAML File | Stream/Register name | Description |
---|---|---|---|
1 | BldAxiStream.yaml | packetSize | Maximum size of packets in 32b words |
2 | enable | service enable | |
3 | channelMask | Mask of enabled channels | |
4 | currPacketSize | Current size of packet in 32b words | |
5 | currPacketState | Current packet fill state. Relevant to the statemachine filling the packet in the firmware and irrelevant to the software engineer | |
6 | currPulseIdL | Current packet pulseID lower word | |
7 | currTimeStampL | Current packet timestamp lower word | |
8 | currDelta | Current compressed timestamp/pulseID | |
9 | packetCount | Generated packet count | |
10 | paused | Stream paused | |
11 | diagnClockRate | Diagnostic bus clock rate | |
12 | diagnStrobeRate | Diagnostic bus strobe rate | |
13 | eventSel0Rate | Event select0 rate | |
14 | EdefEnable[#EDEFS] | Enable a specific event definition | |
15 | EdefRateLimit[#EDEFS] | Event definition rate limit | |
16 | EdefRateSel[#EDEFS] | Event definition rate select | |
17 | EdefDestSel[#EDEFS] | Event definition destination select | |
Each file/associated classes will be described here. UML diagrams and text description can be used. A UML cheat sheet can be found here. Instantiation information (if applicable) can be mentioned. Flow diagrams for describing the class operation are also welcome. Everything can be developed in Gliffy.
Here you can mention if the package/module throws any exceptions, and you can also mention how these exceptions should be handled in upper layers.
Is the package extendable to add a new function or to modify an existing function? If so, it needs to be mentioned here.
All EPICS shell commands provided should be described here with their input parameters.
The PV list goes here. If any other page described some or all PVs, it can be referenced here. The register index can map the PV to the register described in the YAML section above.
Contains functions and structures to read the BLD/BSSS/BSAS stream coming from the firmware and call the registered callback functions with the stream data stored in buffers. It also provides functions to print statistics. This file forms an EPICS driver run at IOC boot automatically without any user setup or configuration.
This Asyn driver is used to initialize both BSSS and BLD since they both have identical firmware structures. This file contains some similar structures with bldStream.cpp file. A static pointer is declared globally in the file, and used to store different service drivers in a linked list.
A simple description of the linked list functions is as follows:
Several other independent functions exist in the file. A simple description of these functions is as follows:
Finally, the serviceAsynDriver class and methods are as follows
A description of the class methods is as follows:
serviceAsynDriver: Class constructor, Gets root Path from CPSW, creates the <Service>Yaml structure(s) provided by the timing/bsa package, and register callbacks
writeInt32: Asyn write 32 bit function used for passing PV values to firmware
writeOctet: Asyn write array function used currently only with BLD multicast address
updatePVA: Deletes the old PVA and calls initPVA again
initPVA: Instantiates the BLD payload PVAccess. IT described the content of the BLD packet
addBldChannelName: adds a name to a BLD channel. This replaces the channel key <bsakey> in BLD
MonitorStatus: method that reads status variables from the firmware and updates PVs
bsssCallback: BSSS built-in callback function
bldCallback: BLD built-in callback function
getServiceType: Return private variable serviceType
The BLD packet structure coming from the ATCA FPGA and the ones sent out to the BLD clients are described in these slides. The packet structure coming from the firmware contain a packet header, followed by the event's enabled channel data and finally by the severity mask. The firmware may send other event data appended as many times as necessary.
The BSSS firmware packet structure however are not described anywhere.
The packet structure extracted from the bsssCallback seems to be as follows:
struct firmwareBSSSPacket{ uint64_t sec; uint64_t pid; uint32_t channelMask; uint32_t serviceMask; uint32_t channelData0; ... uint32_t channelData30; uint64?t severityMaskç }
The reported number channel data in the packet is variable and necessaly all of the channels will have data. The BSSS callback source code uses the channelMask to identify if the channel data is available or not.