Driver Documentation
|
Go to the source code of this file.
Classes | |
struct | PsiMsDaq_WinInfo_t |
Window definition struct, used for more compact passing of common parameters. More... | |
struct | PsiMsDaq_StrConfig_t |
Stream configuration struct. More... | |
struct | PsiMsDaq_AccessFct_t |
Memory access functions struct. More... | |
Typedefs | |
typedef void * | PsiMsDaq_IpHandle |
Handle to an instance of the driver for a complete IP. More... | |
typedef void * | PsiMsDaq_StrHandle |
Handle to a specific stream of the driver. More... | |
typedef void | PsiMsDaq_DataCopy_f(void *dst, void *src, size_t n) |
Copy used to copy data recorded to other memory locations in PsiMsDaq_StrWin_GetDataUnwrapped() More... | |
typedef void | PsiMsDaq_RegWrite_f(const uint32_t addr, const uint32_t value) |
Write an IP-register. More... | |
typedef uint32_t | PsiMsDaq_RegRead_f(const uint32_t addr) |
Read an IP-register. More... | |
typedef void | PsiMsDaqn_WinIrq_f(PsiMsDaq_WinInfo_t winInfo, void *arg) |
Interrupt callback function for the window based IRQ scheme. In this IRQ scheme, one callback function is called for each window that arrives. This IRQ scheme is only usable if window-overwrite is disable (config.onverwrite = false). After the window data is processed, it must be freed by calling PsiMsDaq_StrWin_MarkAsFree(). More... | |
typedef void | PsiMsDaqn_StrIrq_f(PsiMsDaq_StrHandle strHandle, void *arg) |
Interrupt callback function for the stream based IRQ scheme. In this IRQ scheme, one callback function is called whenever the IP fires an IRQ. This IRQ scheme is always usable but usually only required if window-overwrite is used (since the more elaborate window based IRQ scheme is not usable in this case). More... | |
Enumerations | |
enum | PsiMsDaq_RecMode_t { PsiMsDaqn_RecMode_Continuous = 0, PsiMsDaqn_RecMode_TriggerMask = 1, PsiMsDaqn_RecMode_SingleShot = 2, PsiMsDaqn_RecMode_Manual = 3 } |
Recorder mode (see documentation) More... | |
enum | PsiMsDaq_RetCode_t { PsiMsDaq_RetCode_Success = 0, PsiMsDaq_RetCode_IllegalStrNr = -1, PsiMsDaq_RetCode_IllegalStrWidth = -2, PsiMsDaq_RetCode_StrNotDisabled = -3, PsiMsDaq_RetCode_IllegalWinCnt = -4, PsiMsDaq_RetCode_IllegalWinNr = -5, PsiMsDaq_RetCode_NoTrigInWin = -6, PsiMsDaq_RetCode_BufferTooSmall = -7, PsiMsDaq_RetCode_MorePostTrigThanConfigured = -8, PsiMsDaq_RetCode_MorePreTrigThanAvailable = -9, PsiMsDaq_RetCode_WinSizeMustBeMultipleOfSamples = -10, PsiMsDaq_RetCode_IrqSchemesWinAndStrAreExclusive = -11 } |
Return codes. More... | |
Functions | |
PsiMsDaq_IpHandle | PsiMsDaq_Init (const uint32_t baseAddr, const uint8_t maxStreams, const uint8_t maxWindows, const PsiMsDaq_AccessFct_t *const accessFct_p) |
Initialize the psi_ms_daq IP-Core. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_GetStrHandle (PsiMsDaq_IpHandle ipHandle, const uint8_t streamNr, PsiMsDaq_StrHandle *const strHndl_p) |
Get a handle to a specific stream number. More... | |
void | PsiMsDaq_HandleIrq (PsiMsDaq_IpHandle inst_p) |
PsiMsDaq_RetCode_t | PsiMsDaq_Str_Configure (PsiMsDaq_StrHandle strHndl, PsiMsDaq_StrConfig_t *const config_p) |
Configure stream. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_Str_SetEnable (PsiMsDaq_StrHandle strHndl, const bool enable) |
Enable/Disable a stream. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_Str_SetIrqCallbackWin (PsiMsDaq_StrHandle strHndl, PsiMsDaqn_WinIrq_f *irqCb, void *arg_p) |
Set window based interrupt callback function for a stream to be called whenever a new windows is recorded. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_Str_SetIrqCallbackStr (PsiMsDaq_StrHandle strHndl, PsiMsDaqn_StrIrq_f *irqCb, void *arg_p) |
Set stream based interrupt callback function for a stream to be called whenever a new windows is recorded. Usually PsiMsDaq_Str_SetIrqCallbackWin() is used instead of this function. So without special reasons, use PsiMsDaq_Str_SetIrqCallbackWin(). More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_Str_SetIrqEnable (PsiMsDaq_StrHandle strHndl, const bool irqEna) |
Enable/Disable IRQ for a stream. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_Str_Arm (PsiMsDaq_StrHandle strHndl) |
Arm the recorder for a given stream. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_Str_GetMaxLvl (PsiMsDaq_StrHandle strHndl, uint32_t *const maxLvl_p) |
Get maximum input buffer fill level. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_Str_GetFreeWindows (PsiMsDaq_StrHandle strHndl, uint8_t *const freeWindows_p) |
Get the number of free windows. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_Str_GetUsedWindows (PsiMsDaq_StrHandle strHndl, uint8_t *const usedWindows_p) |
Get the number of used (non-free) windows. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_Str_GetTotalWindows (PsiMsDaq_StrHandle strHndl, uint8_t *const windows_p) |
Get the number of windows configured to be used for a given stream. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_Str_GetIpHandle (PsiMsDaq_StrHandle strHndl, PsiMsDaq_IpHandle *ipHandle_p) |
Get the IP Handle of the IP a stream belongs to. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_Str_GetStrNr (PsiMsDaq_StrHandle strHndl, uint8_t *strNr_p) |
Get the stream number from a stream handle. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_StrWin_GetNoOfBytes (PsiMsDaq_WinInfo_t winInfo, uint32_t *const noOfBytes_p) |
Get number of valid and unacknowledged bytes in a window. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_StrWin_GetNoOfSamples (PsiMsDaq_WinInfo_t winInfo, uint32_t *const noOfSamples_p) |
Get number of valid and unacknowledged samples in a window. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_StrWin_GetPreTrigSamples (PsiMsDaq_WinInfo_t winInfo, uint32_t *const preTrigSamples_p) |
Get the number of pre-trigger samples in a window (post trigger samples are known by config) More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_StrWin_GetTimestamp (PsiMsDaq_WinInfo_t winInfo, uint64_t *const timestamp_p) |
Get the timestamp of a window. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_StrWin_GetDataUnwrapped (PsiMsDaq_WinInfo_t winInfo, const uint32_t preTrigSamples, const uint32_t postTrigSamples, void *const buffer_p, const size_t bufferSize) |
Get unwrapped copy of the data in a window. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_StrWin_MarkAsFree (PsiMsDaq_WinInfo_t winInfo) |
Mark a window as free so it can receive new data. This function must be called after the window data is read. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_StrWin_GetLastSplAddr (PsiMsDaq_WinInfo_t winInfo, uint32_t *const lastSplAddr_p) |
Get the address of the last sample (not byte) written into a window. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_Str_IsRecording (PsiMsDaq_StrHandle strHndl, bool *const isRecording_p) |
Check if the recorder of a given stream is currently recording data. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_Str_CurrentWin (PsiMsDaq_StrHandle strHndl, uint8_t *const currentWin_p) |
Get the currently used recorder window. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_Str_CurrentPtr (PsiMsDaq_StrHandle strHndl, uint32_t *const currentPtr_p) |
Get the current write pointer of the recording logic. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_Str_GetLastWrittenWin (PsiMsDaq_StrHandle strHndl, uint8_t *const lastWrittenWin_p) |
Get the number of the last window that was written to memory completely. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_RegWrite (PsiMsDaq_IpHandle ipHandle, const uint32_t addr, const uint32_t value) |
Write to a register. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_RegRead (PsiMsDaq_IpHandle ipHandle, const uint32_t addr, uint32_t *const value_p) |
Read a register. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_RegSetField (PsiMsDaq_IpHandle ipHandle, const uint32_t addr, const uint8_t lsb, const uint8_t msb, const uint32_t value) |
Set a field in a register (RMW) More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_RegGetField (PsiMsDaq_IpHandle ipHandle, const uint32_t addr, const uint8_t lsb, const uint8_t msb, uint32_t *const value_p) |
Read a field from a register. More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_RegSetBit (PsiMsDaq_IpHandle ipHandle, const uint32_t addr, const uint32_t mask, const bool value) |
Set a bit in a register (RMW) More... | |
PsiMsDaq_RetCode_t | PsiMsDaq_RegGetBit (PsiMsDaq_IpHandle ipHandle, const uint32_t addr, const uint32_t mask, bool *const value_p) |
Read a bit from a register. More... | |
typedef void PsiMsDaq_DataCopy_f(void *dst, void *src, size_t n) |
Copy used to copy data recorded to other memory locations in PsiMsDaq_StrWin_GetDataUnwrapped()
src | Source memory address (exactly the way the IP sees the address space) |
dst | Desitnation memory address (as the CPU sees it) |
n | Number of bytes to copy |
typedef void* PsiMsDaq_IpHandle |
Handle to an instance of the driver for a complete IP.
typedef uint32_t PsiMsDaq_RegRead_f(const uint32_t addr) |
Read an IP-register.
addr | Address to read from (byte address) |
typedef void PsiMsDaq_RegWrite_f(const uint32_t addr, const uint32_t value) |
Write an IP-register.
addr | Address to write (byte address) |
value | Value to write |
typedef void* PsiMsDaq_StrHandle |
Handle to a specific stream of the driver.
typedef void PsiMsDaqn_StrIrq_f(PsiMsDaq_StrHandle strHandle, void *arg) |
Interrupt callback function for the stream based IRQ scheme. In this IRQ scheme, one callback function is called whenever the IP fires an IRQ. This IRQ scheme is always usable but usually only required if window-overwrite is used (since the more elaborate window based IRQ scheme is not usable in this case).
strHandle | Handle of the stream that fired the IRQ |
arg | User argument list |
typedef void PsiMsDaqn_WinIrq_f(PsiMsDaq_WinInfo_t winInfo, void *arg) |
Interrupt callback function for the window based IRQ scheme. In this IRQ scheme, one callback function is called for each window that arrives. This IRQ scheme is only usable if window-overwrite is disable (config.onverwrite = false). After the window data is processed, it must be freed by calling PsiMsDaq_StrWin_MarkAsFree().
winInfo | Window information struct (allocated on stack!) |
arg | User argument list |
enum PsiMsDaq_RecMode_t |
Recorder mode (see documentation)
Enumerator | |
---|---|
PsiMsDaqn_RecMode_Continuous | Continuous recording. |
PsiMsDaqn_RecMode_TriggerMask | Continuously record pre-trigger data but only detect triggers after PsiMsDaq_Str_Arm() was called. |
PsiMsDaqn_RecMode_SingleShot | Only record pre-trigger after PsiMsDaq_Str_Arm() was called and stop recording after one trigger. |
PsiMsDaqn_RecMode_Manual | Manaully control the recording by setting and clearing the arm bit. |
enum PsiMsDaq_RetCode_t |
Return codes.
PsiMsDaq_RetCode_t PsiMsDaq_GetStrHandle | ( | PsiMsDaq_IpHandle | ipHandle, |
const uint8_t | streamNr, | ||
PsiMsDaq_StrHandle *const | strHndl_p | ||
) |
Get a handle to a specific stream number.
ipHandle | Driver handle for the whole IP |
streamNr | Stream number to get handle for |
strHndl_p | Pointer to write the stream handle to |
void PsiMsDaq_HandleIrq | ( | PsiMsDaq_IpHandle | inst_p | ) |
PsiMsDaq_IpHandle PsiMsDaq_Init | ( | const uint32_t | baseAddr, |
const uint8_t | maxStreams, | ||
const uint8_t | maxWindows, | ||
const PsiMsDaq_AccessFct_t *const | accessFct_p | ||
) |
Initialize the psi_ms_daq IP-Core.
baseAddr | Base address of the IP core to access |
maxStreams | Maximum number of streams supported by this IP (must match setting in Vivado IPI) |
maxWindows | Maximum number of windows per stream supported by this IP (must match setting in Vivado IPI) |
accessFct_p | Memory access functions to use (pass NULL to use the default functions) |
PsiMsDaq_RetCode_t PsiMsDaq_RegGetBit | ( | PsiMsDaq_IpHandle | ipHandle, |
const uint32_t | addr, | ||
const uint32_t | mask, | ||
bool *const | value_p | ||
) |
Read a bit from a register.
ipHandle | Driver handle for the whole IP |
addr | Register address |
mask | Bitmask |
value_p | Read value |
PsiMsDaq_RetCode_t PsiMsDaq_RegGetField | ( | PsiMsDaq_IpHandle | ipHandle, |
const uint32_t | addr, | ||
const uint8_t | lsb, | ||
const uint8_t | msb, | ||
uint32_t *const | value_p | ||
) |
Read a field from a register.
ipHandle | Driver handle for the whole IP |
addr | Register address |
lsb | Least significant bit number of the field |
msb | Most significant bit number of the field |
value_p | Read value |
PsiMsDaq_RetCode_t PsiMsDaq_RegRead | ( | PsiMsDaq_IpHandle | ipHandle, |
const uint32_t | addr, | ||
uint32_t *const | value_p | ||
) |
Read a register.
ipHandle | Driver handle for the whole IP |
addr | Register address |
value_p | Read value |
PsiMsDaq_RetCode_t PsiMsDaq_RegSetBit | ( | PsiMsDaq_IpHandle | ipHandle, |
const uint32_t | addr, | ||
const uint32_t | mask, | ||
const bool | value | ||
) |
Set a bit in a register (RMW)
ipHandle | Driver handle for the whole IP |
addr | Register address |
mask | Bitmask |
value | Value to write |
PsiMsDaq_RetCode_t PsiMsDaq_RegSetField | ( | PsiMsDaq_IpHandle | ipHandle, |
const uint32_t | addr, | ||
const uint8_t | lsb, | ||
const uint8_t | msb, | ||
const uint32_t | value | ||
) |
Set a field in a register (RMW)
ipHandle | Driver handle for the whole IP |
addr | Register address |
lsb | Least significant bit number of the field |
msb | Most significant bit number of the field |
value | Value to write |
PsiMsDaq_RetCode_t PsiMsDaq_RegWrite | ( | PsiMsDaq_IpHandle | ipHandle, |
const uint32_t | addr, | ||
const uint32_t | value | ||
) |
Write to a register.
ipHandle | Driver handle for the whole IP |
addr | Register address |
value | Value to write |
PsiMsDaq_RetCode_t PsiMsDaq_Str_Arm | ( | PsiMsDaq_StrHandle | strHndl | ) |
Arm the recorder for a given stream.
strHndl | Driver handle for the stream |
PsiMsDaq_RetCode_t PsiMsDaq_Str_Configure | ( | PsiMsDaq_StrHandle | strHndl, |
PsiMsDaq_StrConfig_t *const | config_p | ||
) |
Configure stream.
strHndl | Driver handle for the stream |
config_p | Struct containing all settings |
PsiMsDaq_RetCode_t PsiMsDaq_Str_CurrentPtr | ( | PsiMsDaq_StrHandle | strHndl, |
uint32_t *const | currentPtr_p | ||
) |
Get the current write pointer of the recording logic.
strHndl | Driver handle for the stream |
currentPtr_p | Pointer to write the result into |
PsiMsDaq_RetCode_t PsiMsDaq_Str_CurrentWin | ( | PsiMsDaq_StrHandle | strHndl, |
uint8_t *const | currentWin_p | ||
) |
Get the currently used recorder window.
strHndl | Driver handle for the stream |
currentWin_p | Pointer to write the result into |
PsiMsDaq_RetCode_t PsiMsDaq_Str_GetFreeWindows | ( | PsiMsDaq_StrHandle | strHndl, |
uint8_t *const | freeWindows_p | ||
) |
Get the number of free windows.
This function is implemented by looping over all windows and checking if they contain any unacknowledged data. This is quite slow but the only safe approach. So do not use this function excessively.
strHndl | Driver handle for the stream |
freeWindows_p | Pointer to write the number of free windows into |
PsiMsDaq_RetCode_t PsiMsDaq_Str_GetIpHandle | ( | PsiMsDaq_StrHandle | strHndl, |
PsiMsDaq_IpHandle * | ipHandle_p | ||
) |
Get the IP Handle of the IP a stream belongs to.
strHndl | Driver handle for the stream |
ipHandle_p | Pointer to write the IP handle into |
PsiMsDaq_RetCode_t PsiMsDaq_Str_GetLastWrittenWin | ( | PsiMsDaq_StrHandle | strHndl, |
uint8_t *const | lastWrittenWin_p | ||
) |
Get the number of the last window that was written to memory completely.
strHndl | Driver handle for the stream |
lastWrittenWin_p | Pointer to write the result into |
PsiMsDaq_RetCode_t PsiMsDaq_Str_GetMaxLvl | ( | PsiMsDaq_StrHandle | strHndl, |
uint32_t *const | maxLvl_p | ||
) |
Get maximum input buffer fill level.
strHndl | Driver handle for the stream |
maxLvl_p | Pointer to write the level into |
PsiMsDaq_RetCode_t PsiMsDaq_Str_GetStrNr | ( | PsiMsDaq_StrHandle | strHndl, |
uint8_t * | strNr_p | ||
) |
Get the stream number from a stream handle.
strHndl | Driver handle for the stream |
strNr_p | Pointer to write the stream number into |
PsiMsDaq_RetCode_t PsiMsDaq_Str_GetTotalWindows | ( | PsiMsDaq_StrHandle | strHndl, |
uint8_t *const | windows_p | ||
) |
Get the number of windows configured to be used for a given stream.
strHndl | Driver handle for the stream |
windows_p | Pointer to write the number of windows into |
PsiMsDaq_RetCode_t PsiMsDaq_Str_GetUsedWindows | ( | PsiMsDaq_StrHandle | strHndl, |
uint8_t *const | usedWindows_p | ||
) |
Get the number of used (non-free) windows.
This function is implemented by looping over all windows and checking if they contain any unacknowledged data. This is quite slow but the only safe approach. So do not use this function excessively.
strHndl | Driver handle for the stream |
usedWindows_p | Pointer to write the number of used windows into |
PsiMsDaq_RetCode_t PsiMsDaq_Str_IsRecording | ( | PsiMsDaq_StrHandle | strHndl, |
bool *const | isRecording_p | ||
) |
Check if the recorder of a given stream is currently recording data.
strHndl | Driver handle for the stream |
isRecording_p | Pointer to write the result into |
PsiMsDaq_RetCode_t PsiMsDaq_Str_SetEnable | ( | PsiMsDaq_StrHandle | strHndl, |
const bool | enable | ||
) |
Enable/Disable a stream.
strHndl | Driver handle for the stream |
enable | true for enable, false for disable |
PsiMsDaq_RetCode_t PsiMsDaq_Str_SetIrqCallbackStr | ( | PsiMsDaq_StrHandle | strHndl, |
PsiMsDaqn_StrIrq_f * | irqCb, | ||
void * | arg_p | ||
) |
Set stream based interrupt callback function for a stream to be called whenever a new windows is recorded. Usually PsiMsDaq_Str_SetIrqCallbackWin() is used instead of this function. So without special reasons, use PsiMsDaq_Str_SetIrqCallbackWin().
strHndl | Driver handle for the stream |
irqCb | Callback function. Pass NULL to unregister the callback. |
arg_p | Arguments passed to the user callback function |
PsiMsDaq_RetCode_t PsiMsDaq_Str_SetIrqCallbackWin | ( | PsiMsDaq_StrHandle | strHndl, |
PsiMsDaqn_WinIrq_f * | irqCb, | ||
void * | arg_p | ||
) |
Set window based interrupt callback function for a stream to be called whenever a new windows is recorded.
strHndl | Driver handle for the stream |
irqCb | Callback function. Pass NULL to unregister the callback. |
arg_p | Arguments passed to the user callback function |
PsiMsDaq_RetCode_t PsiMsDaq_Str_SetIrqEnable | ( | PsiMsDaq_StrHandle | strHndl, |
const bool | irqEna | ||
) |
Enable/Disable IRQ for a stream.
strHndl | Driver handle for the stream |
irqEna | true for enable, false for disable |
PsiMsDaq_RetCode_t PsiMsDaq_StrWin_GetDataUnwrapped | ( | PsiMsDaq_WinInfo_t | winInfo, |
const uint32_t | preTrigSamples, | ||
const uint32_t | postTrigSamples, | ||
void *const | buffer_p, | ||
const size_t | bufferSize | ||
) |
Get unwrapped copy of the data in a window.
winInfo | Window information |
preTrigSamples | Number of pre trigger samples to read |
postTrigSamples | Number of post trigger samples to read (including the trigger sample) |
buffer_p | Buffer to copy the data into |
bufferSize | Size of buffer_p |
PsiMsDaq_RetCode_t PsiMsDaq_StrWin_GetLastSplAddr | ( | PsiMsDaq_WinInfo_t | winInfo, |
uint32_t *const | lastSplAddr_p | ||
) |
Get the address of the last sample (not byte) written into a window.
winInfo | Window information |
lastSplAddr_p | Pointer to write the address of the last sample into |
PsiMsDaq_RetCode_t PsiMsDaq_StrWin_GetNoOfBytes | ( | PsiMsDaq_WinInfo_t | winInfo, |
uint32_t *const | noOfBytes_p | ||
) |
Get number of valid and unacknowledged bytes in a window.
winInfo | Window information |
noOfBytes_p | Pointer to write number of bytes into |
PsiMsDaq_RetCode_t PsiMsDaq_StrWin_GetNoOfSamples | ( | PsiMsDaq_WinInfo_t | winInfo, |
uint32_t *const | noOfSamples_p | ||
) |
Get number of valid and unacknowledged samples in a window.
winInfo | Window information |
noOfSamples_p | Pointer to write number of samples into |
PsiMsDaq_RetCode_t PsiMsDaq_StrWin_GetPreTrigSamples | ( | PsiMsDaq_WinInfo_t | winInfo, |
uint32_t *const | preTrigSamples_p | ||
) |
Get the number of pre-trigger samples in a window (post trigger samples are known by config)
winInfo | Window information |
preTrigSamples_p | Pointer to write number of pre-trigger samples into |
PsiMsDaq_RetCode_t PsiMsDaq_StrWin_GetTimestamp | ( | PsiMsDaq_WinInfo_t | winInfo, |
uint64_t *const | timestamp_p | ||
) |
Get the timestamp of a window.
winInfo | Window information |
timestamp_p | Pointer to write the timestamp to |
PsiMsDaq_RetCode_t PsiMsDaq_StrWin_MarkAsFree | ( | PsiMsDaq_WinInfo_t | winInfo | ) |
Mark a window as free so it can receive new data. This function must be called after the window data is read.
winInfo | Window information |