diff --git a/docs/doxygen/html/_e_f___driver___common_8h.html b/docs/doxygen/html/_e_f___driver___common_8h.html new file mode 100644 index 0000000..519bb31 --- /dev/null +++ b/docs/doxygen/html/_e_f___driver___common_8h.html @@ -0,0 +1,255 @@ + + + + + + + +EF_SPI APIs: EF_Driver_Common.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
EF_SPI APIs +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+Macros | +Typedefs
+
EF_Driver_Common.h File Reference
+
+
+ +

C header file for common driver definitions and types. +More...

+
#include <stdint.h>
+#include <stdbool.h>
+#include <stddef.h>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + +

+Macros

#define EF_DRIVER_OK   ((uint32_t)0)
 Operation succeeded.
 
#define EF_DRIVER_ERROR   ((uint32_t)1)
 Unspecified error.
 
#define EF_DRIVER_ERROR_BUSY   ((uint32_t)2)
 Driver is busy.
 
#define EF_DRIVER_ERROR_TIMEOUT   ((uint32_t)3)
 Timeout occurred.
 
#define EF_DRIVER_ERROR_UNSUPPORTED   ((uint32_t)4)
 Operation not supported.
 
#define EF_DRIVER_ERROR_PARAMETER   ((uint32_t)5)
 Parameter error.
 
#define EF_DRIVER_ERROR_SPECIFIC   ((uint32_t)6)
 Start of driver specific errors.
 
+ + + + +

+Typedefs

typedef uint32_t EF_DRIVER_STATUS
 A type that is used to return the status of the driver functions.
 
+

Detailed Description

+

C header file for common driver definitions and types.

+

Macro Definition Documentation

+ +

◆ EF_DRIVER_ERROR

+ +
+
+ + + + +
#define EF_DRIVER_ERROR   ((uint32_t)1)
+
+ +

Unspecified error.

+ +
+
+ +

◆ EF_DRIVER_ERROR_BUSY

+ +
+
+ + + + +
#define EF_DRIVER_ERROR_BUSY   ((uint32_t)2)
+
+ +

Driver is busy.

+ +
+
+ +

◆ EF_DRIVER_ERROR_PARAMETER

+ +
+
+ + + + +
#define EF_DRIVER_ERROR_PARAMETER   ((uint32_t)5)
+
+ +

Parameter error.

+ +
+
+ +

◆ EF_DRIVER_ERROR_SPECIFIC

+ +
+
+ + + + +
#define EF_DRIVER_ERROR_SPECIFIC   ((uint32_t)6)
+
+ +

Start of driver specific errors.

+ +
+
+ +

◆ EF_DRIVER_ERROR_TIMEOUT

+ +
+
+ + + + +
#define EF_DRIVER_ERROR_TIMEOUT   ((uint32_t)3)
+
+ +

Timeout occurred.

+ +
+
+ +

◆ EF_DRIVER_ERROR_UNSUPPORTED

+ +
+
+ + + + +
#define EF_DRIVER_ERROR_UNSUPPORTED   ((uint32_t)4)
+
+ +

Operation not supported.

+ +
+
+ +

◆ EF_DRIVER_OK

+ +
+
+ + + + +
#define EF_DRIVER_OK   ((uint32_t)0)
+
+ +

Operation succeeded.

+ +
+
+

Typedef Documentation

+ +

◆ EF_DRIVER_STATUS

+ +
+
+ + + + +
typedef uint32_t EF_DRIVER_STATUS
+
+ +

A type that is used to return the status of the driver functions.

+ +
+
+
+ + + + diff --git a/docs/doxygen/html/_e_f___driver___common_8h_source.html b/docs/doxygen/html/_e_f___driver___common_8h_source.html new file mode 100644 index 0000000..d0743a8 --- /dev/null +++ b/docs/doxygen/html/_e_f___driver___common_8h_source.html @@ -0,0 +1,146 @@ + + + + + + + +EF_SPI APIs: EF_Driver_Common.h Source File + + + + + + + + + +
+
+ + + + + + +
+
EF_SPI APIs +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
EF_Driver_Common.h
+
+
+Go to the documentation of this file.
1/*
+
2 Copyright 2025 Efabless Corp.
+
3
+
4
+
5 Licensed under the Apache License, Version 2.0 (the "License");
+
6 you may not use this file except in compliance with the License.
+
7 You may obtain a copy of the License at
+
8
+
9 www.apache.org/licenses/LICENSE-2.0
+
10
+
11 Unless required by applicable law or agreed to in writing, software
+
12 distributed under the License is distributed on an "AS IS" BASIS,
+
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
14 See the License for the specific language governing permissions and
+
15 limitations under the License.
+
16
+
17*/
+
18
+
25#ifndef EF_DRIVER_COMMON_H
+
26#define EF_DRIVER_COMMON_H
+
27
+
28/******************************************************************************
+
29* Includes
+
30******************************************************************************/
+
31#include <stdint.h>
+
32#include <stdbool.h>
+
33#include <stddef.h>
+
34
+
35
+
36/******************************************************************************
+
37* Macros and Constants
+
38******************************************************************************/
+
39/* General return codes */
+
40#define EF_DRIVER_OK ((uint32_t)0)
+
41#define EF_DRIVER_ERROR ((uint32_t)1)
+
42#define EF_DRIVER_ERROR_BUSY ((uint32_t)2)
+
43#define EF_DRIVER_ERROR_TIMEOUT ((uint32_t)3)
+
44#define EF_DRIVER_ERROR_UNSUPPORTED ((uint32_t)4)
+
45#define EF_DRIVER_ERROR_PARAMETER ((uint32_t)5)
+
46#define EF_DRIVER_ERROR_SPECIFIC ((uint32_t)6)
+
47
+
48
+
49/******************************************************************************
+
50* Typedefs and Enums
+
51******************************************************************************/
+
52
+
53typedef uint32_t EF_DRIVER_STATUS;
+
54
+
55
+
56/******************************************************************************
+
57* External Variables
+
58******************************************************************************/
+
59
+
60
+
61/******************************************************************************
+
62* Function Prototypes
+
63******************************************************************************/
+
64
+
65
+
66#endif // EF_DRIVER_COMMON_H
+
67
+
68/******************************************************************************
+
69* End of File
+
70******************************************************************************/
+
uint32_t EF_DRIVER_STATUS
A type that is used to return the status of the driver functions.
Definition: EF_Driver_Common.h:53
+
+ + + + diff --git a/docs/doxygen/html/_e_f___s_p_i_8c.html b/docs/doxygen/html/_e_f___s_p_i_8c.html new file mode 100644 index 0000000..574e7cb --- /dev/null +++ b/docs/doxygen/html/_e_f___s_p_i_8c.html @@ -0,0 +1,872 @@ + + + + + + + +EF_SPI APIs: EF_SPI.c File Reference + + + + + + + + + +
+
+ + + + + + +
+
EF_SPI APIs +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+Macros | +Functions
+
EF_SPI.c File Reference
+
+
+ +

C file for SPI APIs which contains the function Implementations. +More...

+
#include "EF_SPI.h"
+
+ + + + + +

+Macros

#define EF_SPI_C
 
#define EF_SPI_TXDATA_MAX_VALUE   0x000000FF
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

EF_DRIVER_STATUS EF_SPI_setGclkEnable (EF_SPI_TYPE_PTR spi, uint32_t value)
 sets the GCLK enable bit in the SPI register to a certain value
 
EF_DRIVER_STATUS EF_SPI_writeData (EF_SPI_TYPE_PTR spi, uint32_t data)
 writes a byte of data to the TXDATA register
 
EF_DRIVER_STATUS EF_SPI_readData (EF_SPI_TYPE_PTR spi, uint32_t *data)
 reads a byte of data from the RXDATA register
 
EF_DRIVER_STATUS EF_SPI_writepolarity (EF_SPI_TYPE_PTR spi, bool polarity)
 sets the clock polarity of the SPI in the CFG register to a certain value
 
EF_DRIVER_STATUS EF_SPI_writePhase (EF_SPI_TYPE_PTR spi, bool phase)
 sets the clock phase of the SPI in the CFG register to a certain value
 
EF_DRIVER_STATUS EF_SPI_readTxFifoEmpty (EF_SPI_TYPE_PTR spi, uint32_t *TXfifo_state)
 reads the TX FIFO empty flag from the STATUS register
 
EF_DRIVER_STATUS EF_SPI_readRxFifoEmpty (EF_SPI_TYPE_PTR spi, uint32_t *RXfifo_state)
 reads the RX FIFO empty flag from the STATUS register
 
EF_DRIVER_STATUS EF_SPI_waitTxFifoEmpty (EF_SPI_TYPE_PTR spi)
 waits for the TX FIFO to be empty by polling the TX FIFO empty flag in the STATUS register
 
EF_DRIVER_STATUS EF_SPI_waitRxFifoNotEmpty (EF_SPI_TYPE_PTR spi)
 waits for the RX FIFO to be not empty by polling the RX FIFO empty flag in the STATUS register
 
EF_DRIVER_STATUS EF_SPI_FifoRxFlush (EF_SPI_TYPE_PTR spi)
 flushes the RX FIFO by writing to the RX FIFO FLUSH register
 
EF_DRIVER_STATUS EF_SPI_enable (EF_SPI_TYPE_PTR spi)
 enables the SPI by setting the enable bit in the CTRL register to 1, enables spi master pulse generation
 
EF_DRIVER_STATUS EF_SPI_disable (EF_SPI_TYPE_PTR spi)
 disables the SPI by setting the enable bit in the CTRL register to 0, disables spi master pulse generation
 
EF_DRIVER_STATUS EF_SPI_enableRx (EF_SPI_TYPE_PTR spi)
 enables the RX by setting the RX enable bit in the CTRL register to 1, enables storing bytes recieved from slave in RX FIFO
 
EF_DRIVER_STATUS EF_SPI_disableRx (EF_SPI_TYPE_PTR spi)
 disables the RX by setting the RX enable bit in the CTRL register to 0, disables storing bytes recieved from slave in RX FIFO
 
EF_DRIVER_STATUS EF_SPI_assertCs (EF_SPI_TYPE_PTR spi)
 asserts the CS line by setting the SS bit in the CTRL register to 1, asserts the CS line to start a transaction with the slave
 
EF_DRIVER_STATUS EF_SPI_deassertCs (EF_SPI_TYPE_PTR spi)
 deasserts the CS line by setting the SS bit in the CTRL register to 0, deasserts the CS line to end a transaction with the slave
 
EF_DRIVER_STATUS EF_SPI_setIM (EF_SPI_TYPE_PTR spi, uint32_t mask)
 
EF_DRIVER_STATUS EF_SPI_getIM (EF_SPI_TYPE_PTR spi, uint32_t *mask)
 
EF_DRIVER_STATUS EF_SPI_getRIS (EF_SPI_TYPE_PTR spi, uint32_t *mask)
 
EF_DRIVER_STATUS EF_SPI_getMIS (EF_SPI_TYPE_PTR spi, uint32_t *mask)
 
+

Detailed Description

+

C file for SPI APIs which contains the function Implementations.

+

Macro Definition Documentation

+ +

◆ EF_SPI_C

+ +
+
+ + + + +
#define EF_SPI_C
+
+ +
+
+ +

◆ EF_SPI_TXDATA_MAX_VALUE

+ +
+
+ + + + +
#define EF_SPI_TXDATA_MAX_VALUE   0x000000FF
+
+ +
+
+

Function Documentation

+ +

◆ EF_SPI_assertCs()

+ +
+
+ + + + + + + + +
EF_DRIVER_STATUS EF_SPI_assertCs (EF_SPI_TYPE_PTR spi)
+
+ +

asserts the CS line by setting the SS bit in the CTRL register to 1, asserts the CS line to start a transaction with the slave

+
Parameters
+ + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_deassertCs()

+ +
+
+ + + + + + + + +
EF_DRIVER_STATUS EF_SPI_deassertCs (EF_SPI_TYPE_PTR spi)
+
+ +

deasserts the CS line by setting the SS bit in the CTRL register to 0, deasserts the CS line to end a transaction with the slave

+
Parameters
+ + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_disable()

+ +
+
+ + + + + + + + +
EF_DRIVER_STATUS EF_SPI_disable (EF_SPI_TYPE_PTR spi)
+
+ +

disables the SPI by setting the enable bit in the CTRL register to 0, disables spi master pulse generation

+
Parameters
+ + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_disableRx()

+ +
+
+ + + + + + + + +
EF_DRIVER_STATUS EF_SPI_disableRx (EF_SPI_TYPE_PTR spi)
+
+ +

disables the RX by setting the RX enable bit in the CTRL register to 0, disables storing bytes recieved from slave in RX FIFO

+
Parameters
+ + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_enable()

+ +
+
+ + + + + + + + +
EF_DRIVER_STATUS EF_SPI_enable (EF_SPI_TYPE_PTR spi)
+
+ +

enables the SPI by setting the enable bit in the CTRL register to 1, enables spi master pulse generation

+
Parameters
+ + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_enableRx()

+ +
+
+ + + + + + + + +
EF_DRIVER_STATUS EF_SPI_enableRx (EF_SPI_TYPE_PTR spi)
+
+ +

enables the RX by setting the RX enable bit in the CTRL register to 1, enables storing bytes recieved from slave in RX FIFO

+
Parameters
+ + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_FifoRxFlush()

+ +
+
+ + + + + + + + +
EF_DRIVER_STATUS EF_SPI_FifoRxFlush (EF_SPI_TYPE_PTR spi)
+
+ +

flushes the RX FIFO by writing to the RX FIFO FLUSH register

+
Parameters
+ + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_getIM()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_getIM (EF_SPI_TYPE_PTR spi,
uint32_t * mask 
)
+
+

gets the value of the Interrupts Masking Register; which enable and disables interrupts The mask value is a 6-bit value, where each bit corresponds to a specific interrupt

    +
  • bit 0 TXE : Transmit FIFO is Empty.
  • +
  • bit 1 TXF : Transmit FIFO is Full.
  • +
  • bit 2 RXE : Receive FIFO is Empty.
  • +
  • bit 3 RXF : Receive FIFO is Full.
  • +
  • bit 4 TXB : Transmit FIFO level is Below Threshold.
  • +
  • bit 5 RXA : Receive FIFO level is Above Threshold.
  • +
+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[out]maskThe required mask value
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_getMIS()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_getMIS (EF_SPI_TYPE_PTR spi,
uint32_t * mask 
)
+
+

gets the value of the Masked Interrupt Status Register; which shows the status of the interrupts after masking (ANDing) RIS by IM. The mask value is a 6-bit value, where each bit corresponds to a specific interrupt

    +
  • bit 0 TXE : Transmit FIFO is Empty.
  • +
  • bit 1 TXF : Transmit FIFO is Full.
  • +
  • bit 2 RXE : Receive FIFO is Empty.
  • +
  • bit 3 RXF : Receive FIFO is Full.
  • +
  • bit 4 TXB : Transmit FIFO level is Below Threshold.
  • +
  • bit 5 RXA : Receive FIFO level is Above Threshold.
  • +
+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[out]maskThe required mask value
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_getRIS()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_getRIS (EF_SPI_TYPE_PTR spi,
uint32_t * mask 
)
+
+

gets the value of the Raw Interrupt Status Register; which shows the status of the interrupts The mask value is a 6-bit value, where each bit corresponds to a specific interrupt

    +
  • bit 0 TXE : Transmit FIFO is Empty.
  • +
  • bit 1 TXF : Transmit FIFO is Full.
  • +
  • bit 2 RXE : Receive FIFO is Empty.
  • +
  • bit 3 RXF : Receive FIFO is Full.
  • +
  • bit 4 TXB : Transmit FIFO level is Below Threshold.
  • +
  • bit 5 RXA : Receive FIFO level is Above Threshold.
  • +
+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[out]maskThe required mask value
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_readData()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_readData (EF_SPI_TYPE_PTR spi,
uint32_t * data 
)
+
+ +

reads a byte of data from the RXDATA register

+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[out]dataThe data read from the RXDATA register
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_readRxFifoEmpty()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_readRxFifoEmpty (EF_SPI_TYPE_PTR spi,
uint32_t * RXfifo_state 
)
+
+ +

reads the RX FIFO empty flag from the STATUS register

+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[out]RXfifo_stateThe RX FIFO empty flag value
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_readTxFifoEmpty()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_readTxFifoEmpty (EF_SPI_TYPE_PTR spi,
uint32_t * TXfifo_state 
)
+
+ +

reads the TX FIFO empty flag from the STATUS register

+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[out]TXfifo_stateThe TX FIFO empty flag value
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_setGclkEnable()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_setGclkEnable (EF_SPI_TYPE_PTR spi,
uint32_t value 
)
+
+ +

sets the GCLK enable bit in the SPI register to a certain value

+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[in]valueThe value of the GCLK enable bit
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_setIM()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_setIM (EF_SPI_TYPE_PTR spi,
uint32_t mask 
)
+
+

sets the value of the Interrupts Masking Register; which enable and disables interrupts The mask value is a 6-bit value, where each bit corresponds to a specific interrupt

    +
  • bit 0 TXE : Transmit FIFO is Empty.
  • +
  • bit 1 TXF : Transmit FIFO is Full.
  • +
  • bit 2 RXE : Receive FIFO is Empty.
  • +
  • bit 3 RXF : Receive FIFO is Full.
  • +
  • bit 4 TXB : Transmit FIFO level is Below Threshold.
  • +
  • bit 5 RXA : Receive FIFO level is Above Threshold.
  • +
+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[in]maskThe required mask value
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_waitRxFifoNotEmpty()

+ +
+
+ + + + + + + + +
EF_DRIVER_STATUS EF_SPI_waitRxFifoNotEmpty (EF_SPI_TYPE_PTR spi)
+
+ +

waits for the RX FIFO to be not empty by polling the RX FIFO empty flag in the STATUS register

+
Parameters
+ + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_waitTxFifoEmpty()

+ +
+
+ + + + + + + + +
EF_DRIVER_STATUS EF_SPI_waitTxFifoEmpty (EF_SPI_TYPE_PTR spi)
+
+ +

waits for the TX FIFO to be empty by polling the TX FIFO empty flag in the STATUS register

+
Parameters
+ + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_writeData()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_writeData (EF_SPI_TYPE_PTR spi,
uint32_t data 
)
+
+ +

writes a byte of data to the TXDATA register

+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[in]dataThe data to be written to the TXDATA register
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_writePhase()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_writePhase (EF_SPI_TYPE_PTR spi,
bool phase 
)
+
+ +

sets the clock phase of the SPI in the CFG register to a certain value

+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[in]phaseThe clock phase value
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_writepolarity()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_writepolarity (EF_SPI_TYPE_PTR spi,
bool polarity 
)
+
+ +

sets the clock polarity of the SPI in the CFG register to a certain value

+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[in]polarityThe clock polarity value
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+
+ + + + diff --git a/docs/doxygen/html/_e_f___s_p_i_8h.html b/docs/doxygen/html/_e_f___s_p_i_8h.html new file mode 100644 index 0000000..d298b05 --- /dev/null +++ b/docs/doxygen/html/_e_f___s_p_i_8h.html @@ -0,0 +1,884 @@ + + + + + + + +EF_SPI APIs: EF_SPI.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
EF_SPI APIs +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+Functions
+
EF_SPI.h File Reference
+
+
+ +

C header file for SPI APIs which contains the function prototypes. +More...

+
#include "EF_SPI_regs.h"
+#include "EF_Driver_Common.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

EF_DRIVER_STATUS EF_SPI_setGclkEnable (EF_SPI_TYPE_PTR spi, uint32_t value)
 sets the GCLK enable bit in the SPI register to a certain value
 
EF_DRIVER_STATUS EF_SPI_writeData (EF_SPI_TYPE_PTR spi, uint32_t data)
 writes a byte of data to the TXDATA register
 
EF_DRIVER_STATUS EF_SPI_readData (EF_SPI_TYPE_PTR spi, uint32_t *data)
 reads a byte of data from the RXDATA register
 
EF_DRIVER_STATUS EF_SPI_writepolarity (EF_SPI_TYPE_PTR spi, bool polarity)
 sets the clock polarity of the SPI in the CFG register to a certain value
 
EF_DRIVER_STATUS EF_SPI_writePhase (EF_SPI_TYPE_PTR spi, bool phase)
 sets the clock phase of the SPI in the CFG register to a certain value
 
EF_DRIVER_STATUS EF_SPI_readTxFifoEmpty (EF_SPI_TYPE_PTR spi, uint32_t *TXfifo_state)
 reads the TX FIFO empty flag from the STATUS register
 
EF_DRIVER_STATUS EF_SPI_readRxFifoEmpty (EF_SPI_TYPE_PTR spi, uint32_t *RXfifo_state)
 reads the RX FIFO empty flag from the STATUS register
 
EF_DRIVER_STATUS EF_SPI_waitTxFifoEmpty (EF_SPI_TYPE_PTR spi)
 waits for the TX FIFO to be empty by polling the TX FIFO empty flag in the STATUS register
 
EF_DRIVER_STATUS EF_SPI_waitRxFifoNotEmpty (EF_SPI_TYPE_PTR spi)
 waits for the RX FIFO to be not empty by polling the RX FIFO empty flag in the STATUS register
 
EF_DRIVER_STATUS EF_SPI_FifoRxFlush (EF_SPI_TYPE_PTR spi)
 flushes the RX FIFO by writing to the RX FIFO FLUSH register
 
EF_DRIVER_STATUS EF_SPI_enable (EF_SPI_TYPE_PTR spi)
 enables the SPI by setting the enable bit in the CTRL register to 1, enables spi master pulse generation
 
EF_DRIVER_STATUS EF_SPI_disable (EF_SPI_TYPE_PTR spi)
 disables the SPI by setting the enable bit in the CTRL register to 0, disables spi master pulse generation
 
EF_DRIVER_STATUS EF_SPI_enableRx (EF_SPI_TYPE_PTR spi)
 enables the RX by setting the RX enable bit in the CTRL register to 1, enables storing bytes recieved from slave in RX FIFO
 
EF_DRIVER_STATUS EF_SPI_disableRx (EF_SPI_TYPE_PTR spi)
 disables the RX by setting the RX enable bit in the CTRL register to 0, disables storing bytes recieved from slave in RX FIFO
 
EF_DRIVER_STATUS EF_SPI_assertCs (EF_SPI_TYPE_PTR spi)
 asserts the CS line by setting the SS bit in the CTRL register to 1, asserts the CS line to start a transaction with the slave
 
EF_DRIVER_STATUS EF_SPI_deassertCs (EF_SPI_TYPE_PTR spi)
 deasserts the CS line by setting the SS bit in the CTRL register to 0, deasserts the CS line to end a transaction with the slave
 
EF_DRIVER_STATUS EF_SPI_setIM (EF_SPI_TYPE_PTR spi, uint32_t mask)
 
EF_DRIVER_STATUS EF_SPI_getIM (EF_SPI_TYPE_PTR spi, uint32_t *mask)
 
EF_DRIVER_STATUS EF_SPI_getRIS (EF_SPI_TYPE_PTR spi, uint32_t *mask)
 
EF_DRIVER_STATUS EF_SPI_getMIS (EF_SPI_TYPE_PTR spi, uint32_t *mask)
 
EF_DRIVER_STATUS EF_SPI_setICR (EF_SPI_TYPE_PTR spi, uint32_t mask)
 
+

Detailed Description

+

C header file for SPI APIs which contains the function prototypes.

+

Function Documentation

+ +

◆ EF_SPI_assertCs()

+ +
+
+ + + + + + + + +
EF_DRIVER_STATUS EF_SPI_assertCs (EF_SPI_TYPE_PTR spi)
+
+ +

asserts the CS line by setting the SS bit in the CTRL register to 1, asserts the CS line to start a transaction with the slave

+
Parameters
+ + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_deassertCs()

+ +
+
+ + + + + + + + +
EF_DRIVER_STATUS EF_SPI_deassertCs (EF_SPI_TYPE_PTR spi)
+
+ +

deasserts the CS line by setting the SS bit in the CTRL register to 0, deasserts the CS line to end a transaction with the slave

+
Parameters
+ + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_disable()

+ +
+
+ + + + + + + + +
EF_DRIVER_STATUS EF_SPI_disable (EF_SPI_TYPE_PTR spi)
+
+ +

disables the SPI by setting the enable bit in the CTRL register to 0, disables spi master pulse generation

+
Parameters
+ + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_disableRx()

+ +
+
+ + + + + + + + +
EF_DRIVER_STATUS EF_SPI_disableRx (EF_SPI_TYPE_PTR spi)
+
+ +

disables the RX by setting the RX enable bit in the CTRL register to 0, disables storing bytes recieved from slave in RX FIFO

+
Parameters
+ + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_enable()

+ +
+
+ + + + + + + + +
EF_DRIVER_STATUS EF_SPI_enable (EF_SPI_TYPE_PTR spi)
+
+ +

enables the SPI by setting the enable bit in the CTRL register to 1, enables spi master pulse generation

+
Parameters
+ + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_enableRx()

+ +
+
+ + + + + + + + +
EF_DRIVER_STATUS EF_SPI_enableRx (EF_SPI_TYPE_PTR spi)
+
+ +

enables the RX by setting the RX enable bit in the CTRL register to 1, enables storing bytes recieved from slave in RX FIFO

+
Parameters
+ + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_FifoRxFlush()

+ +
+
+ + + + + + + + +
EF_DRIVER_STATUS EF_SPI_FifoRxFlush (EF_SPI_TYPE_PTR spi)
+
+ +

flushes the RX FIFO by writing to the RX FIFO FLUSH register

+
Parameters
+ + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_getIM()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_getIM (EF_SPI_TYPE_PTR spi,
uint32_t * mask 
)
+
+

gets the value of the Interrupts Masking Register; which enable and disables interrupts The mask value is a 6-bit value, where each bit corresponds to a specific interrupt

    +
  • bit 0 TXE : Transmit FIFO is Empty.
  • +
  • bit 1 TXF : Transmit FIFO is Full.
  • +
  • bit 2 RXE : Receive FIFO is Empty.
  • +
  • bit 3 RXF : Receive FIFO is Full.
  • +
  • bit 4 TXB : Transmit FIFO level is Below Threshold.
  • +
  • bit 5 RXA : Receive FIFO level is Above Threshold.
  • +
+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[out]maskThe required mask value
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_getMIS()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_getMIS (EF_SPI_TYPE_PTR spi,
uint32_t * mask 
)
+
+

gets the value of the Masked Interrupt Status Register; which shows the status of the interrupts after masking (ANDing) RIS by IM. The mask value is a 6-bit value, where each bit corresponds to a specific interrupt

    +
  • bit 0 TXE : Transmit FIFO is Empty.
  • +
  • bit 1 TXF : Transmit FIFO is Full.
  • +
  • bit 2 RXE : Receive FIFO is Empty.
  • +
  • bit 3 RXF : Receive FIFO is Full.
  • +
  • bit 4 TXB : Transmit FIFO level is Below Threshold.
  • +
  • bit 5 RXA : Receive FIFO level is Above Threshold.
  • +
+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[out]maskThe required mask value
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_getRIS()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_getRIS (EF_SPI_TYPE_PTR spi,
uint32_t * mask 
)
+
+

gets the value of the Raw Interrupt Status Register; which shows the status of the interrupts The mask value is a 6-bit value, where each bit corresponds to a specific interrupt

    +
  • bit 0 TXE : Transmit FIFO is Empty.
  • +
  • bit 1 TXF : Transmit FIFO is Full.
  • +
  • bit 2 RXE : Receive FIFO is Empty.
  • +
  • bit 3 RXF : Receive FIFO is Full.
  • +
  • bit 4 TXB : Transmit FIFO level is Below Threshold.
  • +
  • bit 5 RXA : Receive FIFO level is Above Threshold.
  • +
+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[out]maskThe required mask value
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_readData()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_readData (EF_SPI_TYPE_PTR spi,
uint32_t * data 
)
+
+ +

reads a byte of data from the RXDATA register

+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[out]dataThe data read from the RXDATA register
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_readRxFifoEmpty()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_readRxFifoEmpty (EF_SPI_TYPE_PTR spi,
uint32_t * RXfifo_state 
)
+
+ +

reads the RX FIFO empty flag from the STATUS register

+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[out]RXfifo_stateThe RX FIFO empty flag value
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_readTxFifoEmpty()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_readTxFifoEmpty (EF_SPI_TYPE_PTR spi,
uint32_t * TXfifo_state 
)
+
+ +

reads the TX FIFO empty flag from the STATUS register

+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[out]TXfifo_stateThe TX FIFO empty flag value
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_setGclkEnable()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_setGclkEnable (EF_SPI_TYPE_PTR spi,
uint32_t value 
)
+
+ +

sets the GCLK enable bit in the SPI register to a certain value

+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[in]valueThe value of the GCLK enable bit
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_setICR()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_setICR (EF_SPI_TYPE_PTR spi,
uint32_t mask 
)
+
+

sets the value of the Interrupt Clear Register; which clears the interrupts The mask value is a 6-bit value, where each bit corresponds to a specific interrupt

    +
  • bit 0 TXE : Transmit FIFO is Empty.
  • +
  • bit 1 TXF : Transmit FIFO is Full.
  • +
  • bit 2 RXE : Receive FIFO is Empty.
  • +
  • bit 3 RXF : Receive FIFO is Full.
  • +
  • bit 4 TXB : Transmit FIFO level is Below Threshold.
  • +
  • bit 5 RXA : Receive FIFO level is Above Threshold.
  • +
+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[in]maskThe required mask value
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_setIM()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_setIM (EF_SPI_TYPE_PTR spi,
uint32_t mask 
)
+
+

sets the value of the Interrupts Masking Register; which enable and disables interrupts The mask value is a 6-bit value, where each bit corresponds to a specific interrupt

    +
  • bit 0 TXE : Transmit FIFO is Empty.
  • +
  • bit 1 TXF : Transmit FIFO is Full.
  • +
  • bit 2 RXE : Receive FIFO is Empty.
  • +
  • bit 3 RXF : Receive FIFO is Full.
  • +
  • bit 4 TXB : Transmit FIFO level is Below Threshold.
  • +
  • bit 5 RXA : Receive FIFO level is Above Threshold.
  • +
+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[in]maskThe required mask value
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_waitRxFifoNotEmpty()

+ +
+
+ + + + + + + + +
EF_DRIVER_STATUS EF_SPI_waitRxFifoNotEmpty (EF_SPI_TYPE_PTR spi)
+
+ +

waits for the RX FIFO to be not empty by polling the RX FIFO empty flag in the STATUS register

+
Parameters
+ + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_waitTxFifoEmpty()

+ +
+
+ + + + + + + + +
EF_DRIVER_STATUS EF_SPI_waitTxFifoEmpty (EF_SPI_TYPE_PTR spi)
+
+ +

waits for the TX FIFO to be empty by polling the TX FIFO empty flag in the STATUS register

+
Parameters
+ + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_writeData()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_writeData (EF_SPI_TYPE_PTR spi,
uint32_t data 
)
+
+ +

writes a byte of data to the TXDATA register

+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[in]dataThe data to be written to the TXDATA register
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_writePhase()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_writePhase (EF_SPI_TYPE_PTR spi,
bool phase 
)
+
+ +

sets the clock phase of the SPI in the CFG register to a certain value

+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[in]phaseThe clock phase value
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+ +

◆ EF_SPI_writepolarity()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EF_DRIVER_STATUS EF_SPI_writepolarity (EF_SPI_TYPE_PTR spi,
bool polarity 
)
+
+ +

sets the clock polarity of the SPI in the CFG register to a certain value

+
Parameters
+ + + +
[in]spiAn EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers.
[in]polarityThe clock polarity value
+
+
+
Returns
status A value of type EF_DRIVER_STATUS : returns a success or error code
+ +
+
+
+ + + + diff --git a/docs/doxygen/html/_e_f___s_p_i_8h_source.html b/docs/doxygen/html/_e_f___s_p_i_8h_source.html new file mode 100644 index 0000000..42b6de5 --- /dev/null +++ b/docs/doxygen/html/_e_f___s_p_i_8h_source.html @@ -0,0 +1,231 @@ + + + + + + + +EF_SPI APIs: EF_SPI.h Source File + + + + + + + + + +
+
+ + + + + + +
+
EF_SPI APIs +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
EF_SPI.h
+
+
+Go to the documentation of this file.
1/*
+
2 Copyright 2025 Efabless Corp.
+
3
+
4
+
5 Licensed under the Apache License, Version 2.0 (the "License");
+
6 you may not use this file except in compliance with the License.
+
7 You may obtain a copy of the License at
+
8
+
9 www.apache.org/licenses/LICENSE-2.0
+
10
+
11 Unless required by applicable law or agreed to in writing, software
+
12 distributed under the License is distributed on an "AS IS" BASIS,
+
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
14 See the License for the specific language governing permissions and
+
15 limitations under the License.
+
16
+
17*/
+
18
+
24#ifndef EF_SPI_H
+
25#define EF_SPI_H
+
26/******************************************************************************
+
27* Includes
+
28******************************************************************************/
+
29#include "EF_SPI_regs.h"
+
30#include "EF_Driver_Common.h"
+
31
+
32/******************************************************************************
+
33* Macros and Constants
+
34******************************************************************************/
+
35
+
36/******************************************************************************
+
37* Typedefs and Enums
+
38******************************************************************************/
+
39
+
40
+
41
+
42/******************************************************************************
+
43* Function Prototypes
+
44******************************************************************************/
+
45
+
47
+ +
54
+
56
+ +
63
+
65
+ +
72
+
74
+ +
81
+
83
+ +
90
+
92
+ +
99
+
101
+
107EF_DRIVER_STATUS EF_SPI_readRxFifoEmpty(EF_SPI_TYPE_PTR spi, uint32_t *RXfifo_state);
+
108
+
110
+ +
116
+
118
+ +
124
+
126
+ +
132
+
134
+ +
140
+
142
+ +
148
+
150
+ +
156
+
158
+ +
164
+
166
+ +
172
+
174
+ +
180
+
189
+ +
196
+
197// The following functions are not verified yet
+
198/******************************************************************************************************************************************/
+
199/******************************************************************************************************************************************/
+
200
+
209
+ +
216
+
225
+ +
232
+
233
+
234
+
243
+ +
250
+
251
+
252
+
253
+
262
+ +
269
+
270
+
271/******************************************************************************
+
272* External Variables
+
273******************************************************************************/
+
274
+
275
+
276
+
277
+
278#endif // EF_SPI_H
+
279
+
280/******************************************************************************
+
281* End of File
+
282******************************************************************************/
+
C header file for common driver definitions and types.
+
uint32_t EF_DRIVER_STATUS
A type that is used to return the status of the driver functions.
Definition: EF_Driver_Common.h:53
+
EF_DRIVER_STATUS EF_SPI_writePhase(EF_SPI_TYPE_PTR spi, bool phase)
sets the clock phase of the SPI in the CFG register to a certain value
Definition: EF_SPI.c:118
+
EF_DRIVER_STATUS EF_SPI_waitRxFifoNotEmpty(EF_SPI_TYPE_PTR spi)
waits for the RX FIFO to be not empty by polling the RX FIFO empty flag in the STATUS register
Definition: EF_SPI.c:183
+
EF_DRIVER_STATUS EF_SPI_getIM(EF_SPI_TYPE_PTR spi, uint32_t *mask)
Definition: EF_SPI.c:296
+
EF_DRIVER_STATUS EF_SPI_readRxFifoEmpty(EF_SPI_TYPE_PTR spi, uint32_t *RXfifo_state)
reads the RX FIFO empty flag from the STATUS register
Definition: EF_SPI.c:152
+
EF_DRIVER_STATUS EF_SPI_enable(EF_SPI_TYPE_PTR spi)
enables the SPI by setting the enable bit in the CTRL register to 1, enables spi master pulse generat...
Definition: EF_SPI.c:210
+
EF_DRIVER_STATUS EF_SPI_setICR(EF_SPI_TYPE_PTR spi, uint32_t mask)
+
EF_DRIVER_STATUS EF_SPI_writeData(EF_SPI_TYPE_PTR spi, uint32_t data)
writes a byte of data to the TXDATA register
Definition: EF_SPI.c:73
+
EF_DRIVER_STATUS EF_SPI_waitTxFifoEmpty(EF_SPI_TYPE_PTR spi)
waits for the TX FIFO to be empty by polling the TX FIFO empty flag in the STATUS register
Definition: EF_SPI.c:168
+
EF_DRIVER_STATUS EF_SPI_disableRx(EF_SPI_TYPE_PTR spi)
disables the RX by setting the RX enable bit in the CTRL register to 0, disables storing bytes reciev...
Definition: EF_SPI.c:246
+
EF_DRIVER_STATUS EF_SPI_setIM(EF_SPI_TYPE_PTR spi, uint32_t mask)
Definition: EF_SPI.c:283
+
EF_DRIVER_STATUS EF_SPI_readTxFifoEmpty(EF_SPI_TYPE_PTR spi, uint32_t *TXfifo_state)
reads the TX FIFO empty flag from the STATUS register
Definition: EF_SPI.c:136
+
EF_DRIVER_STATUS EF_SPI_readData(EF_SPI_TYPE_PTR spi, uint32_t *data)
reads a byte of data from the RXDATA register
Definition: EF_SPI.c:87
+
EF_DRIVER_STATUS EF_SPI_disable(EF_SPI_TYPE_PTR spi)
disables the SPI by setting the enable bit in the CTRL register to 0, disables spi master pulse gener...
Definition: EF_SPI.c:222
+
EF_DRIVER_STATUS EF_SPI_setGclkEnable(EF_SPI_TYPE_PTR spi, uint32_t value)
sets the GCLK enable bit in the SPI register to a certain value
Definition: EF_SPI.c:58
+
EF_DRIVER_STATUS EF_SPI_getRIS(EF_SPI_TYPE_PTR spi, uint32_t *mask)
Definition: EF_SPI.c:312
+
EF_DRIVER_STATUS EF_SPI_assertCs(EF_SPI_TYPE_PTR spi)
asserts the CS line by setting the SS bit in the CTRL register to 1, asserts the CS line to start a t...
Definition: EF_SPI.c:258
+
EF_DRIVER_STATUS EF_SPI_getMIS(EF_SPI_TYPE_PTR spi, uint32_t *mask)
Definition: EF_SPI.c:327
+
EF_DRIVER_STATUS EF_SPI_enableRx(EF_SPI_TYPE_PTR spi)
enables the RX by setting the RX enable bit in the CTRL register to 1, enables storing bytes recieved...
Definition: EF_SPI.c:234
+
EF_DRIVER_STATUS EF_SPI_deassertCs(EF_SPI_TYPE_PTR spi)
deasserts the CS line by setting the SS bit in the CTRL register to 0, deasserts the CS line to end a...
Definition: EF_SPI.c:270
+
EF_DRIVER_STATUS EF_SPI_writepolarity(EF_SPI_TYPE_PTR spi, bool polarity)
sets the clock polarity of the SPI in the CFG register to a certain value
Definition: EF_SPI.c:102
+
EF_DRIVER_STATUS EF_SPI_FifoRxFlush(EF_SPI_TYPE_PTR spi)
flushes the RX FIFO by writing to the RX FIFO FLUSH register
Definition: EF_SPI.c:198
+ +
Definition: EF_SPI_regs.h:85
+
+ + + + diff --git a/docs/doxygen/html/_e_f___s_p_i__regs_8h.html b/docs/doxygen/html/_e_f___s_p_i__regs_8h.html new file mode 100644 index 0000000..76d2589 --- /dev/null +++ b/docs/doxygen/html/_e_f___s_p_i__regs_8h.html @@ -0,0 +1,838 @@ + + + + + + + +EF_SPI APIs: EF_SPI_regs.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
EF_SPI APIs +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+Classes | +Macros | +Typedefs
+
EF_SPI_regs.h File Reference
+
+
+
#include "EF_Driver_Common.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

struct  _EF_SPI_TYPE_
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Macros

#define IO_TYPES
 
#define __R   volatile const uint32_t
 
#define __W   volatile uint32_t
 
#define __RW   volatile uint32_t
 
#define EF_SPI_CFG_REG_CPOL_BIT   ((uint32_t)0)
 
#define EF_SPI_CFG_REG_CPOL_MASK   ((uint32_t)0x1)
 
#define EF_SPI_CFG_REG_CPHA_BIT   ((uint32_t)1)
 
#define EF_SPI_CFG_REG_CPHA_MASK   ((uint32_t)0x2)
 
#define EF_SPI_CTRL_REG_SS_BIT   ((uint32_t)0)
 
#define EF_SPI_CTRL_REG_SS_MASK   ((uint32_t)0x1)
 
#define EF_SPI_CTRL_REG_ENABLE_BIT   ((uint32_t)1)
 
#define EF_SPI_CTRL_REG_ENABLE_MASK   ((uint32_t)0x2)
 
#define EF_SPI_CTRL_REG_RX_EN_BIT   ((uint32_t)2)
 
#define EF_SPI_CTRL_REG_RX_EN_MASK   ((uint32_t)0x4)
 
#define EF_SPI_STATUS_REG_TX_E_BIT   ((uint32_t)0)
 
#define EF_SPI_STATUS_REG_TX_E_MASK   ((uint32_t)0x1)
 
#define EF_SPI_STATUS_REG_TX_F_BIT   ((uint32_t)1)
 
#define EF_SPI_STATUS_REG_TX_F_MASK   ((uint32_t)0x2)
 
#define EF_SPI_STATUS_REG_RX_E_BIT   ((uint32_t)2)
 
#define EF_SPI_STATUS_REG_RX_E_MASK   ((uint32_t)0x4)
 
#define EF_SPI_STATUS_REG_RX_F_BIT   ((uint32_t)3)
 
#define EF_SPI_STATUS_REG_RX_F_MASK   ((uint32_t)0x8)
 
#define EF_SPI_STATUS_REG_TX_B_BIT   ((uint32_t)4)
 
#define EF_SPI_STATUS_REG_TX_B_MASK   ((uint32_t)0x10)
 
#define EF_SPI_STATUS_REG_RX_A_BIT   ((uint32_t)5)
 
#define EF_SPI_STATUS_REG_RX_A_MASK   ((uint32_t)0x20)
 
#define EF_SPI_RX_FIFO_LEVEL_REG_LEVEL_BIT   ((uint32_t)0)
 
#define EF_SPI_RX_FIFO_LEVEL_REG_LEVEL_MASK   ((uint32_t)0xf)
 
#define EF_SPI_RX_FIFO_THRESHOLD_REG_THRESHOLD_BIT   ((uint32_t)0)
 
#define EF_SPI_RX_FIFO_THRESHOLD_REG_THRESHOLD_MASK   ((uint32_t)0xf)
 
#define EF_SPI_RX_FIFO_FLUSH_REG_FLUSH_BIT   ((uint32_t)0)
 
#define EF_SPI_RX_FIFO_FLUSH_REG_FLUSH_MASK   ((uint32_t)0x1)
 
#define EF_SPI_TX_FIFO_LEVEL_REG_LEVEL_BIT   ((uint32_t)0)
 
#define EF_SPI_TX_FIFO_LEVEL_REG_LEVEL_MASK   ((uint32_t)0xf)
 
#define EF_SPI_TX_FIFO_THRESHOLD_REG_THRESHOLD_BIT   ((uint32_t)0)
 
#define EF_SPI_TX_FIFO_THRESHOLD_REG_THRESHOLD_MASK   ((uint32_t)0xf)
 
#define EF_SPI_TX_FIFO_FLUSH_REG_FLUSH_BIT   ((uint32_t)0)
 
#define EF_SPI_TX_FIFO_FLUSH_REG_FLUSH_MASK   ((uint32_t)0x1)
 
#define EF_SPI_TXE_FLAG   ((uint32_t)0x1)
 
#define EF_SPI_TXF_FLAG   ((uint32_t)0x2)
 
#define EF_SPI_RXE_FLAG   ((uint32_t)0x4)
 
#define EF_SPI_RXF_FLAG   ((uint32_t)0x8)
 
#define EF_SPI_TXB_FLAG   ((uint32_t)0x10)
 
#define EF_SPI_RXA_FLAG   ((uint32_t)0x20)
 
+ + + + + +

+Typedefs

typedef struct _EF_SPI_TYPE_ EF_SPI_TYPE
 
typedef EF_SPI_TYPEEF_SPI_TYPE_PTR
 
+

Macro Definition Documentation

+ +

◆ __R

+ +
+
+ + + + +
#define __R   volatile const uint32_t
+
+ +
+
+ +

◆ __RW

+ +
+
+ + + + +
#define __RW   volatile uint32_t
+
+ +
+
+ +

◆ __W

+ +
+
+ + + + +
#define __W   volatile uint32_t
+
+ +
+
+ +

◆ EF_SPI_CFG_REG_CPHA_BIT

+ +
+
+ + + + +
#define EF_SPI_CFG_REG_CPHA_BIT   ((uint32_t)1)
+
+ +
+
+ +

◆ EF_SPI_CFG_REG_CPHA_MASK

+ +
+
+ + + + +
#define EF_SPI_CFG_REG_CPHA_MASK   ((uint32_t)0x2)
+
+ +
+
+ +

◆ EF_SPI_CFG_REG_CPOL_BIT

+ +
+
+ + + + +
#define EF_SPI_CFG_REG_CPOL_BIT   ((uint32_t)0)
+
+ +
+
+ +

◆ EF_SPI_CFG_REG_CPOL_MASK

+ +
+
+ + + + +
#define EF_SPI_CFG_REG_CPOL_MASK   ((uint32_t)0x1)
+
+ +
+
+ +

◆ EF_SPI_CTRL_REG_ENABLE_BIT

+ +
+
+ + + + +
#define EF_SPI_CTRL_REG_ENABLE_BIT   ((uint32_t)1)
+
+ +
+
+ +

◆ EF_SPI_CTRL_REG_ENABLE_MASK

+ +
+
+ + + + +
#define EF_SPI_CTRL_REG_ENABLE_MASK   ((uint32_t)0x2)
+
+ +
+
+ +

◆ EF_SPI_CTRL_REG_RX_EN_BIT

+ +
+
+ + + + +
#define EF_SPI_CTRL_REG_RX_EN_BIT   ((uint32_t)2)
+
+ +
+
+ +

◆ EF_SPI_CTRL_REG_RX_EN_MASK

+ +
+
+ + + + +
#define EF_SPI_CTRL_REG_RX_EN_MASK   ((uint32_t)0x4)
+
+ +
+
+ +

◆ EF_SPI_CTRL_REG_SS_BIT

+ +
+
+ + + + +
#define EF_SPI_CTRL_REG_SS_BIT   ((uint32_t)0)
+
+ +
+
+ +

◆ EF_SPI_CTRL_REG_SS_MASK

+ +
+
+ + + + +
#define EF_SPI_CTRL_REG_SS_MASK   ((uint32_t)0x1)
+
+ +
+
+ +

◆ EF_SPI_RX_FIFO_FLUSH_REG_FLUSH_BIT

+ +
+
+ + + + +
#define EF_SPI_RX_FIFO_FLUSH_REG_FLUSH_BIT   ((uint32_t)0)
+
+ +
+
+ +

◆ EF_SPI_RX_FIFO_FLUSH_REG_FLUSH_MASK

+ +
+
+ + + + +
#define EF_SPI_RX_FIFO_FLUSH_REG_FLUSH_MASK   ((uint32_t)0x1)
+
+ +
+
+ +

◆ EF_SPI_RX_FIFO_LEVEL_REG_LEVEL_BIT

+ +
+
+ + + + +
#define EF_SPI_RX_FIFO_LEVEL_REG_LEVEL_BIT   ((uint32_t)0)
+
+ +
+
+ +

◆ EF_SPI_RX_FIFO_LEVEL_REG_LEVEL_MASK

+ +
+
+ + + + +
#define EF_SPI_RX_FIFO_LEVEL_REG_LEVEL_MASK   ((uint32_t)0xf)
+
+ +
+
+ +

◆ EF_SPI_RX_FIFO_THRESHOLD_REG_THRESHOLD_BIT

+ +
+
+ + + + +
#define EF_SPI_RX_FIFO_THRESHOLD_REG_THRESHOLD_BIT   ((uint32_t)0)
+
+ +
+
+ +

◆ EF_SPI_RX_FIFO_THRESHOLD_REG_THRESHOLD_MASK

+ +
+
+ + + + +
#define EF_SPI_RX_FIFO_THRESHOLD_REG_THRESHOLD_MASK   ((uint32_t)0xf)
+
+ +
+
+ +

◆ EF_SPI_RXA_FLAG

+ +
+
+ + + + +
#define EF_SPI_RXA_FLAG   ((uint32_t)0x20)
+
+ +
+
+ +

◆ EF_SPI_RXE_FLAG

+ +
+
+ + + + +
#define EF_SPI_RXE_FLAG   ((uint32_t)0x4)
+
+ +
+
+ +

◆ EF_SPI_RXF_FLAG

+ +
+
+ + + + +
#define EF_SPI_RXF_FLAG   ((uint32_t)0x8)
+
+ +
+
+ +

◆ EF_SPI_STATUS_REG_RX_A_BIT

+ +
+
+ + + + +
#define EF_SPI_STATUS_REG_RX_A_BIT   ((uint32_t)5)
+
+ +
+
+ +

◆ EF_SPI_STATUS_REG_RX_A_MASK

+ +
+
+ + + + +
#define EF_SPI_STATUS_REG_RX_A_MASK   ((uint32_t)0x20)
+
+ +
+
+ +

◆ EF_SPI_STATUS_REG_RX_E_BIT

+ +
+
+ + + + +
#define EF_SPI_STATUS_REG_RX_E_BIT   ((uint32_t)2)
+
+ +
+
+ +

◆ EF_SPI_STATUS_REG_RX_E_MASK

+ +
+
+ + + + +
#define EF_SPI_STATUS_REG_RX_E_MASK   ((uint32_t)0x4)
+
+ +
+
+ +

◆ EF_SPI_STATUS_REG_RX_F_BIT

+ +
+
+ + + + +
#define EF_SPI_STATUS_REG_RX_F_BIT   ((uint32_t)3)
+
+ +
+
+ +

◆ EF_SPI_STATUS_REG_RX_F_MASK

+ +
+
+ + + + +
#define EF_SPI_STATUS_REG_RX_F_MASK   ((uint32_t)0x8)
+
+ +
+
+ +

◆ EF_SPI_STATUS_REG_TX_B_BIT

+ +
+
+ + + + +
#define EF_SPI_STATUS_REG_TX_B_BIT   ((uint32_t)4)
+
+ +
+
+ +

◆ EF_SPI_STATUS_REG_TX_B_MASK

+ +
+
+ + + + +
#define EF_SPI_STATUS_REG_TX_B_MASK   ((uint32_t)0x10)
+
+ +
+
+ +

◆ EF_SPI_STATUS_REG_TX_E_BIT

+ +
+
+ + + + +
#define EF_SPI_STATUS_REG_TX_E_BIT   ((uint32_t)0)
+
+ +
+
+ +

◆ EF_SPI_STATUS_REG_TX_E_MASK

+ +
+
+ + + + +
#define EF_SPI_STATUS_REG_TX_E_MASK   ((uint32_t)0x1)
+
+ +
+
+ +

◆ EF_SPI_STATUS_REG_TX_F_BIT

+ +
+
+ + + + +
#define EF_SPI_STATUS_REG_TX_F_BIT   ((uint32_t)1)
+
+ +
+
+ +

◆ EF_SPI_STATUS_REG_TX_F_MASK

+ +
+
+ + + + +
#define EF_SPI_STATUS_REG_TX_F_MASK   ((uint32_t)0x2)
+
+ +
+
+ +

◆ EF_SPI_TX_FIFO_FLUSH_REG_FLUSH_BIT

+ +
+
+ + + + +
#define EF_SPI_TX_FIFO_FLUSH_REG_FLUSH_BIT   ((uint32_t)0)
+
+ +
+
+ +

◆ EF_SPI_TX_FIFO_FLUSH_REG_FLUSH_MASK

+ +
+
+ + + + +
#define EF_SPI_TX_FIFO_FLUSH_REG_FLUSH_MASK   ((uint32_t)0x1)
+
+ +
+
+ +

◆ EF_SPI_TX_FIFO_LEVEL_REG_LEVEL_BIT

+ +
+
+ + + + +
#define EF_SPI_TX_FIFO_LEVEL_REG_LEVEL_BIT   ((uint32_t)0)
+
+ +
+
+ +

◆ EF_SPI_TX_FIFO_LEVEL_REG_LEVEL_MASK

+ +
+
+ + + + +
#define EF_SPI_TX_FIFO_LEVEL_REG_LEVEL_MASK   ((uint32_t)0xf)
+
+ +
+
+ +

◆ EF_SPI_TX_FIFO_THRESHOLD_REG_THRESHOLD_BIT

+ +
+
+ + + + +
#define EF_SPI_TX_FIFO_THRESHOLD_REG_THRESHOLD_BIT   ((uint32_t)0)
+
+ +
+
+ +

◆ EF_SPI_TX_FIFO_THRESHOLD_REG_THRESHOLD_MASK

+ +
+
+ + + + +
#define EF_SPI_TX_FIFO_THRESHOLD_REG_THRESHOLD_MASK   ((uint32_t)0xf)
+
+ +
+
+ +

◆ EF_SPI_TXB_FLAG

+ +
+
+ + + + +
#define EF_SPI_TXB_FLAG   ((uint32_t)0x10)
+
+ +
+
+ +

◆ EF_SPI_TXE_FLAG

+ +
+
+ + + + +
#define EF_SPI_TXE_FLAG   ((uint32_t)0x1)
+
+ +
+
+ +

◆ EF_SPI_TXF_FLAG

+ +
+
+ + + + +
#define EF_SPI_TXF_FLAG   ((uint32_t)0x2)
+
+ +
+
+ +

◆ IO_TYPES

+ +
+
+ + + + +
#define IO_TYPES
+
+ +
+
+

Typedef Documentation

+ +

◆ EF_SPI_TYPE

+ +
+
+ + + + +
typedef struct _EF_SPI_TYPE_ EF_SPI_TYPE
+
+ +
+
+ +

◆ EF_SPI_TYPE_PTR

+ +
+
+ + + + +
typedef EF_SPI_TYPE* EF_SPI_TYPE_PTR
+
+ +
+
+
+ + + + diff --git a/docs/doxygen/html/_e_f___s_p_i__regs_8h_source.html b/docs/doxygen/html/_e_f___s_p_i__regs_8h_source.html new file mode 100644 index 0000000..818b467 --- /dev/null +++ b/docs/doxygen/html/_e_f___s_p_i__regs_8h_source.html @@ -0,0 +1,235 @@ + + + + + + + +EF_SPI APIs: EF_SPI_regs.h Source File + + + + + + + + + +
+
+ + + + + + +
+
EF_SPI APIs +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
EF_SPI_regs.h
+
+
+Go to the documentation of this file.
1/*
+
2 Copyright 2024 Efabless Corp.
+
3
+
4 Author: Mohamed Shalan (mshalan@efabless.com)
+
5
+
6 Licensed under the Apache License, Version 2.0 (the "License");
+
7 you may not use this file except in compliance with the License.
+
8 You may obtain a copy of the License at
+
9
+
10 www.apache.org/licenses/LICENSE-2.0
+
11
+
12 Unless required by applicable law or agreed to in writing, software
+
13 distributed under the License is distributed on an "AS IS" BASIS,
+
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
15 See the License for the specific language governing permissions and
+
16 limitations under the License.
+
17
+
18*/
+
19
+
20#ifndef EF_SPIREGS_H
+
21#define EF_SPIREGS_H
+
22
+
23/******************************************************************************
+
24* Includes
+
25******************************************************************************/
+
26#include "EF_Driver_Common.h"
+
27
+
28
+
29/******************************************************************************
+
30* Macros and Constants
+
31******************************************************************************/
+
32#ifndef IO_TYPES
+
33#define IO_TYPES
+
34#define __R volatile const uint32_t
+
35#define __W volatile uint32_t
+
36#define __RW volatile uint32_t
+
37#endif
+
38
+
39#define EF_SPI_CFG_REG_CPOL_BIT ((uint32_t)0)
+
40#define EF_SPI_CFG_REG_CPOL_MASK ((uint32_t)0x1)
+
41#define EF_SPI_CFG_REG_CPHA_BIT ((uint32_t)1)
+
42#define EF_SPI_CFG_REG_CPHA_MASK ((uint32_t)0x2)
+
43#define EF_SPI_CTRL_REG_SS_BIT ((uint32_t)0)
+
44#define EF_SPI_CTRL_REG_SS_MASK ((uint32_t)0x1)
+
45#define EF_SPI_CTRL_REG_ENABLE_BIT ((uint32_t)1)
+
46#define EF_SPI_CTRL_REG_ENABLE_MASK ((uint32_t)0x2)
+
47#define EF_SPI_CTRL_REG_RX_EN_BIT ((uint32_t)2)
+
48#define EF_SPI_CTRL_REG_RX_EN_MASK ((uint32_t)0x4)
+
49#define EF_SPI_STATUS_REG_TX_E_BIT ((uint32_t)0)
+
50#define EF_SPI_STATUS_REG_TX_E_MASK ((uint32_t)0x1)
+
51#define EF_SPI_STATUS_REG_TX_F_BIT ((uint32_t)1)
+
52#define EF_SPI_STATUS_REG_TX_F_MASK ((uint32_t)0x2)
+
53#define EF_SPI_STATUS_REG_RX_E_BIT ((uint32_t)2)
+
54#define EF_SPI_STATUS_REG_RX_E_MASK ((uint32_t)0x4)
+
55#define EF_SPI_STATUS_REG_RX_F_BIT ((uint32_t)3)
+
56#define EF_SPI_STATUS_REG_RX_F_MASK ((uint32_t)0x8)
+
57#define EF_SPI_STATUS_REG_TX_B_BIT ((uint32_t)4)
+
58#define EF_SPI_STATUS_REG_TX_B_MASK ((uint32_t)0x10)
+
59#define EF_SPI_STATUS_REG_RX_A_BIT ((uint32_t)5)
+
60#define EF_SPI_STATUS_REG_RX_A_MASK ((uint32_t)0x20)
+
61#define EF_SPI_RX_FIFO_LEVEL_REG_LEVEL_BIT ((uint32_t)0)
+
62#define EF_SPI_RX_FIFO_LEVEL_REG_LEVEL_MASK ((uint32_t)0xf)
+
63#define EF_SPI_RX_FIFO_THRESHOLD_REG_THRESHOLD_BIT ((uint32_t)0)
+
64#define EF_SPI_RX_FIFO_THRESHOLD_REG_THRESHOLD_MASK ((uint32_t)0xf)
+
65#define EF_SPI_RX_FIFO_FLUSH_REG_FLUSH_BIT ((uint32_t)0)
+
66#define EF_SPI_RX_FIFO_FLUSH_REG_FLUSH_MASK ((uint32_t)0x1)
+
67#define EF_SPI_TX_FIFO_LEVEL_REG_LEVEL_BIT ((uint32_t)0)
+
68#define EF_SPI_TX_FIFO_LEVEL_REG_LEVEL_MASK ((uint32_t)0xf)
+
69#define EF_SPI_TX_FIFO_THRESHOLD_REG_THRESHOLD_BIT ((uint32_t)0)
+
70#define EF_SPI_TX_FIFO_THRESHOLD_REG_THRESHOLD_MASK ((uint32_t)0xf)
+
71#define EF_SPI_TX_FIFO_FLUSH_REG_FLUSH_BIT ((uint32_t)0)
+
72#define EF_SPI_TX_FIFO_FLUSH_REG_FLUSH_MASK ((uint32_t)0x1)
+
73
+
74#define EF_SPI_TXE_FLAG ((uint32_t)0x1)
+
75#define EF_SPI_TXF_FLAG ((uint32_t)0x2)
+
76#define EF_SPI_RXE_FLAG ((uint32_t)0x4)
+
77#define EF_SPI_RXF_FLAG ((uint32_t)0x8)
+
78#define EF_SPI_TXB_FLAG ((uint32_t)0x10)
+
79#define EF_SPI_RXA_FLAG ((uint32_t)0x20)
+
80
+
81
+
82/******************************************************************************
+
83* Typedefs and Enums
+
84******************************************************************************/
+
85typedef struct _EF_SPI_TYPE_ {
+ + + + + + + + + + + + + + + + + + + + + +
107
+ +
109
+
110/******************************************************************************
+
111* Function Prototypes
+
112******************************************************************************/
+
113
+
114
+
115
+
116/******************************************************************************
+
117* External Variables
+
118******************************************************************************/
+
119
+
120
+
121
+
122
+
123#endif // EF_SPIREGS_H
+
124
+
125/******************************************************************************
+
126* End of File
+
127******************************************************************************/
+
C header file for common driver definitions and types.
+
struct _EF_SPI_TYPE_ EF_SPI_TYPE
+
#define __RW
Definition: EF_SPI_regs.h:36
+
EF_SPI_TYPE * EF_SPI_TYPE_PTR
Definition: EF_SPI_regs.h:108
+
#define __W
Definition: EF_SPI_regs.h:35
+
#define __R
Definition: EF_SPI_regs.h:34
+
Definition: EF_SPI_regs.h:85
+
__R RXDATA
Definition: EF_SPI_regs.h:86
+
__W TX_FIFO_FLUSH
Definition: EF_SPI_regs.h:99
+
__R reserved_2[57]
Definition: EF_SPI_regs.h:100
+
__W CFG
Definition: EF_SPI_regs.h:88
+
__W GCLK
Definition: EF_SPI_regs.h:105
+
__R TX_FIFO_LEVEL
Definition: EF_SPI_regs.h:97
+
__RW IM
Definition: EF_SPI_regs.h:101
+
__W TX_FIFO_THRESHOLD
Definition: EF_SPI_regs.h:98
+
__R RIS
Definition: EF_SPI_regs.h:103
+
__W TXDATA
Definition: EF_SPI_regs.h:87
+
__W RX_FIFO_THRESHOLD
Definition: EF_SPI_regs.h:94
+
__R MIS
Definition: EF_SPI_regs.h:102
+
__R RX_FIFO_LEVEL
Definition: EF_SPI_regs.h:93
+
__R reserved_1[1]
Definition: EF_SPI_regs.h:96
+
__W RX_FIFO_FLUSH
Definition: EF_SPI_regs.h:95
+
__R reserved_0[16250]
Definition: EF_SPI_regs.h:92
+
__R STATUS
Definition: EF_SPI_regs.h:91
+
__W CTRL
Definition: EF_SPI_regs.h:89
+
__W IC
Definition: EF_SPI_regs.h:104
+
__W PR
Definition: EF_SPI_regs.h:90
+
+ + + + diff --git a/docs/doxygen/html/annotated.html b/docs/doxygen/html/annotated.html new file mode 100644 index 0000000..3f7edd9 --- /dev/null +++ b/docs/doxygen/html/annotated.html @@ -0,0 +1,86 @@ + + + + + + + +EF_SPI APIs: Class List + + + + + + + + + +
+
+ + + + + + +
+
EF_SPI APIs +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+ + +
 C_EF_SPI_TYPE_
+
+
+ + + + diff --git a/docs/doxygen/html/bc_s.png b/docs/doxygen/html/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/docs/doxygen/html/bc_s.png differ diff --git a/docs/doxygen/html/bc_sd.png b/docs/doxygen/html/bc_sd.png new file mode 100644 index 0000000..31ca888 Binary files /dev/null and b/docs/doxygen/html/bc_sd.png differ diff --git a/docs/doxygen/html/bdwn.png b/docs/doxygen/html/bdwn.png new file mode 100644 index 0000000..940a0b9 Binary files /dev/null and b/docs/doxygen/html/bdwn.png differ diff --git a/docs/doxygen/html/classes.html b/docs/doxygen/html/classes.html new file mode 100644 index 0000000..d0d8817 --- /dev/null +++ b/docs/doxygen/html/classes.html @@ -0,0 +1,87 @@ + + + + + + + +EF_SPI APIs: Class Index + + + + + + + + + +
+
+ + + + + + +
+
EF_SPI APIs +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Index
+
+
+
_
+
+
+
_
+
_EF_SPI_TYPE_
+
+
+ + + + diff --git a/docs/doxygen/html/closed.png b/docs/doxygen/html/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/docs/doxygen/html/closed.png differ diff --git a/docs/doxygen/html/doc.png b/docs/doxygen/html/doc.png new file mode 100644 index 0000000..17edabf Binary files /dev/null and b/docs/doxygen/html/doc.png differ diff --git a/docs/doxygen/html/docd.png b/docs/doxygen/html/docd.png new file mode 100644 index 0000000..d7c94fd Binary files /dev/null and b/docs/doxygen/html/docd.png differ diff --git a/docs/doxygen/html/doxygen.css b/docs/doxygen/html/doxygen.css new file mode 100644 index 0000000..08cc53a --- /dev/null +++ b/docs/doxygen/html/doxygen.css @@ -0,0 +1,2007 @@ +/* The standard CSS for doxygen 1.9.6*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.png'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.png'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: black; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: var(--nav-gradient-active-image); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +a:hover { + text-decoration: underline; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: var(--code-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid var(--fragment-border-color); + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: var(--font-family-monospace); + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + color: var(--fragment-foreground-color); + background-color: var(--fragment-background-color); + border: 1px solid var(--fragment-border-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid var(--separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +.memSeparator { + border-bottom: 1px solid var(--memdecl-separator-color); + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: var(--memdef-title-gradient-image); + background-repeat: repeat-x; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: var(--memdef-doc-background-color); + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: var(--memdef-param-name-color); + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-arrow-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-doc-image); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: var(--memdef-title-gradient-image); + background-repeat:repeat-x; + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: var(--nav-gradient-image); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: var(--nav-gradient-image); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:var(--nav-breadcrumb-image); + background-repeat:no-repeat; + background-position:right; + color: var(--nav-foreground-color); +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: var(--footer-foreground-color); + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: var(--header-gradient-image); + background-repeat:repeat-x; + background-color: var(--header-background-color); + margin: 0px; + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: var(--inherit-header-color); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px 4px 4px 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/docs/doxygen/html/doxygen.svg b/docs/doxygen/html/doxygen.svg new file mode 100644 index 0000000..d42dad5 --- /dev/null +++ b/docs/doxygen/html/doxygen.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/doxygen/html/dynsections.js b/docs/doxygen/html/dynsections.js new file mode 100644 index 0000000..f579fbf --- /dev/null +++ b/docs/doxygen/html/dynsections.js @@ -0,0 +1,123 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +EF_SPI APIs: File List + + + + + + + + + +
+
+ + + + + + +
+
EF_SPI APIs +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+ + + + + +
 EF_Driver_Common.hC header file for common driver definitions and types
 EF_SPI.cC file for SPI APIs which contains the function Implementations
 EF_SPI.hC header file for SPI APIs which contains the function prototypes
 EF_SPI_regs.h
+
+
+ + + + diff --git a/docs/doxygen/html/folderclosed.png b/docs/doxygen/html/folderclosed.png new file mode 100644 index 0000000..bb8ab35 Binary files /dev/null and b/docs/doxygen/html/folderclosed.png differ diff --git a/docs/doxygen/html/folderopen.png b/docs/doxygen/html/folderopen.png new file mode 100644 index 0000000..d6c7f67 Binary files /dev/null and b/docs/doxygen/html/folderopen.png differ diff --git a/docs/doxygen/html/functions.html b/docs/doxygen/html/functions.html new file mode 100644 index 0000000..b072529 --- /dev/null +++ b/docs/doxygen/html/functions.html @@ -0,0 +1,100 @@ + + + + + + + +EF_SPI APIs: Class Members + + + + + + + + + +
+
+ + + + + + +
+
EF_SPI APIs +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+
+ + + + diff --git a/docs/doxygen/html/functions_vars.html b/docs/doxygen/html/functions_vars.html new file mode 100644 index 0000000..65bc9b3 --- /dev/null +++ b/docs/doxygen/html/functions_vars.html @@ -0,0 +1,100 @@ + + + + + + + +EF_SPI APIs: Class Members - Variables + + + + + + + + + +
+
+ + + + + + +
+
EF_SPI APIs +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ + + + diff --git a/docs/doxygen/html/globals.html b/docs/doxygen/html/globals.html new file mode 100644 index 0000000..47740a6 --- /dev/null +++ b/docs/doxygen/html/globals.html @@ -0,0 +1,167 @@ + + + + + + + +EF_SPI APIs: File Members + + + + + + + + + +
+
+ + + + + + +
+
EF_SPI APIs +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- _ -

+ + +

- e -

+ + +

- i -

+
+ + + + diff --git a/docs/doxygen/html/globals_defs.html b/docs/doxygen/html/globals_defs.html new file mode 100644 index 0000000..0420f92 --- /dev/null +++ b/docs/doxygen/html/globals_defs.html @@ -0,0 +1,143 @@ + + + + + + + +EF_SPI APIs: File Members + + + + + + + + + +
+
+ + + + + + +
+
EF_SPI APIs +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+  + +

- _ -

+ + +

- e -

+ + +

- i -

+
+ + + + diff --git a/docs/doxygen/html/globals_func.html b/docs/doxygen/html/globals_func.html new file mode 100644 index 0000000..1cf1147 --- /dev/null +++ b/docs/doxygen/html/globals_func.html @@ -0,0 +1,103 @@ + + + + + + + +EF_SPI APIs: File Members + + + + + + + + + +
+
+ + + + + + +
+
EF_SPI APIs +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+  + +

- e -

+
+ + + + diff --git a/docs/doxygen/html/globals_type.html b/docs/doxygen/html/globals_type.html new file mode 100644 index 0000000..8f53f94 --- /dev/null +++ b/docs/doxygen/html/globals_type.html @@ -0,0 +1,83 @@ + + + + + + + +EF_SPI APIs: File Members + + + + + + + + + +
+
+ + + + + + +
+
EF_SPI APIs +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ + + + diff --git a/docs/doxygen/html/index.html b/docs/doxygen/html/index.html new file mode 100644 index 0000000..a53e771 --- /dev/null +++ b/docs/doxygen/html/index.html @@ -0,0 +1,81 @@ + + + + + + + +EF_SPI APIs: Main Page + + + + + + + + + +
+
+ + + + + + +
+
EF_SPI APIs +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
EF_SPI APIs Documentation
+
+
+
+ + + + diff --git a/docs/doxygen/html/jquery.js b/docs/doxygen/html/jquery.js new file mode 100644 index 0000000..1dffb65 --- /dev/null +++ b/docs/doxygen/html/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/docs/doxygen/html/menu.js b/docs/doxygen/html/menu.js new file mode 100644 index 0000000..b0b2693 --- /dev/null +++ b/docs/doxygen/html/menu.js @@ -0,0 +1,136 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+='
    '; + for (var i in data.children) { + var url; + var link; + link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + var searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + var $mainMenuState = $('#main-menu-state'); + var prevWidth = 0; + if ($mainMenuState.length) { + function initResizableIfExists() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function(e) { + var $menu = $('#main-menu'); + var options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = function() { $menu.css('display', 'block') }; + $menu.hide().slideDown(options); + } else { + options['complete'] = function() { $menu.css('display', 'none') }; + $menu.show().slideUp(options); + } + }); + // set default menu visibility + function resetState() { + var $menu = $('#main-menu'); + var $mainMenuState = $('#main-menu-state'); + var newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/docs/doxygen/html/menudata.js b/docs/doxygen/html/menudata.js new file mode 100644 index 0000000..c93cbb6 --- /dev/null +++ b/docs/doxygen/html/menudata.js @@ -0,0 +1,46 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html"}, +{text:"Variables",url:"functions_vars.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"File Members",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"_",url:"globals.html#index__5F"}, +{text:"e",url:"globals.html#index_e"}, +{text:"i",url:"globals.html#index_i"}]}, +{text:"Functions",url:"globals_func.html",children:[ +{text:"e",url:"globals_func.html#index_e"}]}, +{text:"Typedefs",url:"globals_type.html"}, +{text:"Macros",url:"globals_defs.html",children:[ +{text:"_",url:"globals_defs.html#index__5F"}, +{text:"e",url:"globals_defs.html#index_e"}, +{text:"i",url:"globals_defs.html#index_i"}]}]}]}]} diff --git a/docs/doxygen/html/nav_f.png b/docs/doxygen/html/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/docs/doxygen/html/nav_f.png differ diff --git a/docs/doxygen/html/nav_fd.png b/docs/doxygen/html/nav_fd.png new file mode 100644 index 0000000..032fbdd Binary files /dev/null and b/docs/doxygen/html/nav_fd.png differ diff --git a/docs/doxygen/html/nav_g.png b/docs/doxygen/html/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/docs/doxygen/html/nav_g.png differ diff --git a/docs/doxygen/html/nav_h.png b/docs/doxygen/html/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/docs/doxygen/html/nav_h.png differ diff --git a/docs/doxygen/html/nav_hd.png b/docs/doxygen/html/nav_hd.png new file mode 100644 index 0000000..de80f18 Binary files /dev/null and b/docs/doxygen/html/nav_hd.png differ diff --git a/docs/doxygen/html/open.png b/docs/doxygen/html/open.png new file mode 100644 index 0000000..30f75c7 Binary files /dev/null and b/docs/doxygen/html/open.png differ diff --git a/docs/doxygen/html/search/all_0.js b/docs/doxygen/html/search/all_0.js new file mode 100644 index 0000000..158fd70 --- /dev/null +++ b/docs/doxygen/html/search/all_0.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['_5f_5fr_0',['__R',['../_e_f___s_p_i__regs_8h.html#aef00c279597b188e4cdd14d288ddf77a',1,'EF_SPI_regs.h']]], + ['_5f_5frw_1',['__RW',['../_e_f___s_p_i__regs_8h.html#a81f369079976a46554fd9798ab035697',1,'EF_SPI_regs.h']]], + ['_5f_5fw_2',['__W',['../_e_f___s_p_i__regs_8h.html#ad8cfe7014044235a4c8d3239c2597f09',1,'EF_SPI_regs.h']]], + ['_5fef_5fspi_5ftype_5f_3',['_EF_SPI_TYPE_',['../struct___e_f___s_p_i___t_y_p_e__.html',1,'']]] +]; diff --git a/docs/doxygen/html/search/all_1.js b/docs/doxygen/html/search/all_1.js new file mode 100644 index 0000000..7c0aab2 --- /dev/null +++ b/docs/doxygen/html/search/all_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['cfg_0',['CFG',['../struct___e_f___s_p_i___t_y_p_e__.html#a31964268b25903ca7a37be5ba5c9b854',1,'_EF_SPI_TYPE_']]], + ['ctrl_1',['CTRL',['../struct___e_f___s_p_i___t_y_p_e__.html#ae89353e226b09310f76d5a3de109088f',1,'_EF_SPI_TYPE_']]] +]; diff --git a/docs/doxygen/html/search/all_2.js b/docs/doxygen/html/search/all_2.js new file mode 100644 index 0000000..f5c1c2a --- /dev/null +++ b/docs/doxygen/html/search/all_2.js @@ -0,0 +1,80 @@ +var searchData= +[ + ['ef_5fdriver_5fcommon_2eh_0',['EF_Driver_Common.h',['../_e_f___driver___common_8h.html',1,'']]], + ['ef_5fdriver_5ferror_1',['EF_DRIVER_ERROR',['../_e_f___driver___common_8h.html#adf96107766b856292d4f08a495064c7e',1,'EF_Driver_Common.h']]], + ['ef_5fdriver_5ferror_5fbusy_2',['EF_DRIVER_ERROR_BUSY',['../_e_f___driver___common_8h.html#a9b7e06e07ac1038e9cc63d5f25d681fb',1,'EF_Driver_Common.h']]], + ['ef_5fdriver_5ferror_5fparameter_3',['EF_DRIVER_ERROR_PARAMETER',['../_e_f___driver___common_8h.html#aed4f0552faa082d7941ed37ae1e430e4',1,'EF_Driver_Common.h']]], + ['ef_5fdriver_5ferror_5fspecific_4',['EF_DRIVER_ERROR_SPECIFIC',['../_e_f___driver___common_8h.html#a89de2e78c0ce8d5b48c0cef064ae3aab',1,'EF_Driver_Common.h']]], + ['ef_5fdriver_5ferror_5ftimeout_5',['EF_DRIVER_ERROR_TIMEOUT',['../_e_f___driver___common_8h.html#a26b87ad6f8f1d017af3ee034bd178795',1,'EF_Driver_Common.h']]], + ['ef_5fdriver_5ferror_5funsupported_6',['EF_DRIVER_ERROR_UNSUPPORTED',['../_e_f___driver___common_8h.html#abd8e6eb4870238ef0f900911e3935d91',1,'EF_Driver_Common.h']]], + ['ef_5fdriver_5fok_7',['EF_DRIVER_OK',['../_e_f___driver___common_8h.html#ab56c746d5d1672835c101f00f7c90b7c',1,'EF_Driver_Common.h']]], + ['ef_5fdriver_5fstatus_8',['EF_DRIVER_STATUS',['../_e_f___driver___common_8h.html#ad1c99136d1edfd0a7757f5b81600a351',1,'EF_Driver_Common.h']]], + ['ef_5fspi_2ec_9',['EF_SPI.c',['../_e_f___s_p_i_8c.html',1,'']]], + ['ef_5fspi_2eh_10',['EF_SPI.h',['../_e_f___s_p_i_8h.html',1,'']]], + ['ef_5fspi_5fassertcs_11',['EF_SPI_assertCs',['../_e_f___s_p_i_8c.html#a8b4118aeb52c24b0b9b20518c920d414',1,'EF_SPI_assertCs(EF_SPI_TYPE_PTR spi): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a8b4118aeb52c24b0b9b20518c920d414',1,'EF_SPI_assertCs(EF_SPI_TYPE_PTR spi): EF_SPI.c']]], + ['ef_5fspi_5fc_12',['EF_SPI_C',['../_e_f___s_p_i_8c.html#a978c9c8ed8e2e80672c5cc0a612cc869',1,'EF_SPI.c']]], + ['ef_5fspi_5fcfg_5freg_5fcpha_5fbit_13',['EF_SPI_CFG_REG_CPHA_BIT',['../_e_f___s_p_i__regs_8h.html#aa1a7b962b5cbcddef4ab2a34eabd4ed0',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fcfg_5freg_5fcpha_5fmask_14',['EF_SPI_CFG_REG_CPHA_MASK',['../_e_f___s_p_i__regs_8h.html#ab929342cb7b96e3cee17eafc0fe1985d',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fcfg_5freg_5fcpol_5fbit_15',['EF_SPI_CFG_REG_CPOL_BIT',['../_e_f___s_p_i__regs_8h.html#ac5e059ea029e36d81058f5a0d9cc9e3c',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fcfg_5freg_5fcpol_5fmask_16',['EF_SPI_CFG_REG_CPOL_MASK',['../_e_f___s_p_i__regs_8h.html#a095a4707174b9fa4d590f52b21632ecb',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fctrl_5freg_5fenable_5fbit_17',['EF_SPI_CTRL_REG_ENABLE_BIT',['../_e_f___s_p_i__regs_8h.html#ab7ee2f2a3382cc62d27b0c8f35580f17',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fctrl_5freg_5fenable_5fmask_18',['EF_SPI_CTRL_REG_ENABLE_MASK',['../_e_f___s_p_i__regs_8h.html#a16ee3bc8b579ed7151236c947105ee45',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fctrl_5freg_5frx_5fen_5fbit_19',['EF_SPI_CTRL_REG_RX_EN_BIT',['../_e_f___s_p_i__regs_8h.html#aab5b75ab1618b2f8c7d0d55d37bd57f5',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fctrl_5freg_5frx_5fen_5fmask_20',['EF_SPI_CTRL_REG_RX_EN_MASK',['../_e_f___s_p_i__regs_8h.html#af9d5295134a69886e64f1ad2e4b583ed',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fctrl_5freg_5fss_5fbit_21',['EF_SPI_CTRL_REG_SS_BIT',['../_e_f___s_p_i__regs_8h.html#aade7e6fa25645f1d5c144441b2b389c2',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fctrl_5freg_5fss_5fmask_22',['EF_SPI_CTRL_REG_SS_MASK',['../_e_f___s_p_i__regs_8h.html#a5281a624fb453b3bf043e5621bef3965',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fdeassertcs_23',['EF_SPI_deassertCs',['../_e_f___s_p_i_8c.html#ab6cdc2b71232f8f3d3fa1e6f9fa6d5ae',1,'EF_SPI_deassertCs(EF_SPI_TYPE_PTR spi): EF_SPI.c'],['../_e_f___s_p_i_8h.html#ab6cdc2b71232f8f3d3fa1e6f9fa6d5ae',1,'EF_SPI_deassertCs(EF_SPI_TYPE_PTR spi): EF_SPI.c']]], + ['ef_5fspi_5fdisable_24',['EF_SPI_disable',['../_e_f___s_p_i_8c.html#a779126c0c77ab36a9747aa8fe113c08d',1,'EF_SPI_disable(EF_SPI_TYPE_PTR spi): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a779126c0c77ab36a9747aa8fe113c08d',1,'EF_SPI_disable(EF_SPI_TYPE_PTR spi): EF_SPI.c']]], + ['ef_5fspi_5fdisablerx_25',['EF_SPI_disableRx',['../_e_f___s_p_i_8c.html#a3c26e6c7e5aa70bb44ee388a811aa762',1,'EF_SPI_disableRx(EF_SPI_TYPE_PTR spi): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a3c26e6c7e5aa70bb44ee388a811aa762',1,'EF_SPI_disableRx(EF_SPI_TYPE_PTR spi): EF_SPI.c']]], + ['ef_5fspi_5fenable_26',['EF_SPI_enable',['../_e_f___s_p_i_8c.html#a17bb022c768cb9acb92e540dd0d5dcce',1,'EF_SPI_enable(EF_SPI_TYPE_PTR spi): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a17bb022c768cb9acb92e540dd0d5dcce',1,'EF_SPI_enable(EF_SPI_TYPE_PTR spi): EF_SPI.c']]], + ['ef_5fspi_5fenablerx_27',['EF_SPI_enableRx',['../_e_f___s_p_i_8c.html#a9b5b4e72c33af4b4a7fc3ab0cdadde2e',1,'EF_SPI_enableRx(EF_SPI_TYPE_PTR spi): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a9b5b4e72c33af4b4a7fc3ab0cdadde2e',1,'EF_SPI_enableRx(EF_SPI_TYPE_PTR spi): EF_SPI.c']]], + ['ef_5fspi_5ffiforxflush_28',['EF_SPI_FifoRxFlush',['../_e_f___s_p_i_8c.html#af5ad666ce47ff6bd16cff1627c33372a',1,'EF_SPI_FifoRxFlush(EF_SPI_TYPE_PTR spi): EF_SPI.c'],['../_e_f___s_p_i_8h.html#af5ad666ce47ff6bd16cff1627c33372a',1,'EF_SPI_FifoRxFlush(EF_SPI_TYPE_PTR spi): EF_SPI.c']]], + ['ef_5fspi_5fgetim_29',['EF_SPI_getIM',['../_e_f___s_p_i_8c.html#a0cbec2da38446744274c64e9585e846c',1,'EF_SPI_getIM(EF_SPI_TYPE_PTR spi, uint32_t *mask): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a0cbec2da38446744274c64e9585e846c',1,'EF_SPI_getIM(EF_SPI_TYPE_PTR spi, uint32_t *mask): EF_SPI.c']]], + ['ef_5fspi_5fgetmis_30',['EF_SPI_getMIS',['../_e_f___s_p_i_8c.html#a8f3ae4eb3cca3c9892bf0fd2ea1af96e',1,'EF_SPI_getMIS(EF_SPI_TYPE_PTR spi, uint32_t *mask): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a8f3ae4eb3cca3c9892bf0fd2ea1af96e',1,'EF_SPI_getMIS(EF_SPI_TYPE_PTR spi, uint32_t *mask): EF_SPI.c']]], + ['ef_5fspi_5fgetris_31',['EF_SPI_getRIS',['../_e_f___s_p_i_8c.html#a83c5fa1a6e95392f2b3ab02661f40dec',1,'EF_SPI_getRIS(EF_SPI_TYPE_PTR spi, uint32_t *mask): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a83c5fa1a6e95392f2b3ab02661f40dec',1,'EF_SPI_getRIS(EF_SPI_TYPE_PTR spi, uint32_t *mask): EF_SPI.c']]], + ['ef_5fspi_5freaddata_32',['EF_SPI_readData',['../_e_f___s_p_i_8c.html#a76b8a68e19fbf8c73de0f0c6a2f1ffa0',1,'EF_SPI_readData(EF_SPI_TYPE_PTR spi, uint32_t *data): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a76b8a68e19fbf8c73de0f0c6a2f1ffa0',1,'EF_SPI_readData(EF_SPI_TYPE_PTR spi, uint32_t *data): EF_SPI.c']]], + ['ef_5fspi_5freadrxfifoempty_33',['EF_SPI_readRxFifoEmpty',['../_e_f___s_p_i_8h.html#a143d8c3d4948fe4b3b673d4f7d37dc22',1,'EF_SPI_readRxFifoEmpty(EF_SPI_TYPE_PTR spi, uint32_t *RXfifo_state): EF_SPI.c'],['../_e_f___s_p_i_8c.html#a143d8c3d4948fe4b3b673d4f7d37dc22',1,'EF_SPI_readRxFifoEmpty(EF_SPI_TYPE_PTR spi, uint32_t *RXfifo_state): EF_SPI.c']]], + ['ef_5fspi_5freadtxfifoempty_34',['EF_SPI_readTxFifoEmpty',['../_e_f___s_p_i_8h.html#a5ba73cb278ddca9c4e4d7e2de81d086c',1,'EF_SPI_readTxFifoEmpty(EF_SPI_TYPE_PTR spi, uint32_t *TXfifo_state): EF_SPI.c'],['../_e_f___s_p_i_8c.html#a5ba73cb278ddca9c4e4d7e2de81d086c',1,'EF_SPI_readTxFifoEmpty(EF_SPI_TYPE_PTR spi, uint32_t *TXfifo_state): EF_SPI.c']]], + ['ef_5fspi_5fregs_2eh_35',['EF_SPI_regs.h',['../_e_f___s_p_i__regs_8h.html',1,'']]], + ['ef_5fspi_5frx_5ffifo_5fflush_5freg_5fflush_5fbit_36',['EF_SPI_RX_FIFO_FLUSH_REG_FLUSH_BIT',['../_e_f___s_p_i__regs_8h.html#a4831ed39a5c8de71931fd0f365ec285c',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5frx_5ffifo_5fflush_5freg_5fflush_5fmask_37',['EF_SPI_RX_FIFO_FLUSH_REG_FLUSH_MASK',['../_e_f___s_p_i__regs_8h.html#acd9f5e99f7a5d9cc4c38f1914cbec1a6',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5frx_5ffifo_5flevel_5freg_5flevel_5fbit_38',['EF_SPI_RX_FIFO_LEVEL_REG_LEVEL_BIT',['../_e_f___s_p_i__regs_8h.html#adc70eb31f3592d0eef2f5aa617e147a3',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5frx_5ffifo_5flevel_5freg_5flevel_5fmask_39',['EF_SPI_RX_FIFO_LEVEL_REG_LEVEL_MASK',['../_e_f___s_p_i__regs_8h.html#ac1bb71e9a8423ba268478a65211dd234',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5frx_5ffifo_5fthreshold_5freg_5fthreshold_5fbit_40',['EF_SPI_RX_FIFO_THRESHOLD_REG_THRESHOLD_BIT',['../_e_f___s_p_i__regs_8h.html#a2bd9a947df34afb5d9aee36891b0d5c2',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5frx_5ffifo_5fthreshold_5freg_5fthreshold_5fmask_41',['EF_SPI_RX_FIFO_THRESHOLD_REG_THRESHOLD_MASK',['../_e_f___s_p_i__regs_8h.html#a23a718d6a792c580f06c9086e1b2f08e',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5frxa_5fflag_42',['EF_SPI_RXA_FLAG',['../_e_f___s_p_i__regs_8h.html#aa02e15edc1acfa7e3f9dfc05b43d1b5f',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5frxe_5fflag_43',['EF_SPI_RXE_FLAG',['../_e_f___s_p_i__regs_8h.html#ab7395a85fac8f34cd0ccf4d2499b7faa',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5frxf_5fflag_44',['EF_SPI_RXF_FLAG',['../_e_f___s_p_i__regs_8h.html#a6465a731b247cffcbb987ac7772b024f',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fsetgclkenable_45',['EF_SPI_setGclkEnable',['../_e_f___s_p_i_8c.html#a825604b02b3136b2ae6b57cd74f7f885',1,'EF_SPI_setGclkEnable(EF_SPI_TYPE_PTR spi, uint32_t value): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a825604b02b3136b2ae6b57cd74f7f885',1,'EF_SPI_setGclkEnable(EF_SPI_TYPE_PTR spi, uint32_t value): EF_SPI.c']]], + ['ef_5fspi_5fseticr_46',['EF_SPI_setICR',['../_e_f___s_p_i_8h.html#a1bd18073e3f75287527f0ee881546b2a',1,'EF_SPI.h']]], + ['ef_5fspi_5fsetim_47',['EF_SPI_setIM',['../_e_f___s_p_i_8c.html#a475700f9498d9ab54b03d3e81ace1f0a',1,'EF_SPI_setIM(EF_SPI_TYPE_PTR spi, uint32_t mask): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a475700f9498d9ab54b03d3e81ace1f0a',1,'EF_SPI_setIM(EF_SPI_TYPE_PTR spi, uint32_t mask): EF_SPI.c']]], + ['ef_5fspi_5fstatus_5freg_5frx_5fa_5fbit_48',['EF_SPI_STATUS_REG_RX_A_BIT',['../_e_f___s_p_i__regs_8h.html#a03cff033c5e429f83f67c071221d3564',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5frx_5fa_5fmask_49',['EF_SPI_STATUS_REG_RX_A_MASK',['../_e_f___s_p_i__regs_8h.html#ae86785f5f92756bc46988900ad755f8c',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5frx_5fe_5fbit_50',['EF_SPI_STATUS_REG_RX_E_BIT',['../_e_f___s_p_i__regs_8h.html#ad97410c80f92b60c499ce81f04746018',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5frx_5fe_5fmask_51',['EF_SPI_STATUS_REG_RX_E_MASK',['../_e_f___s_p_i__regs_8h.html#aa7289ac49f0fbef2b931fae0d2a136ea',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5frx_5ff_5fbit_52',['EF_SPI_STATUS_REG_RX_F_BIT',['../_e_f___s_p_i__regs_8h.html#a233519531a39eefca0f1ad884ddfc688',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5frx_5ff_5fmask_53',['EF_SPI_STATUS_REG_RX_F_MASK',['../_e_f___s_p_i__regs_8h.html#a43c28dcf4792491c02ed80242bbeba2c',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5ftx_5fb_5fbit_54',['EF_SPI_STATUS_REG_TX_B_BIT',['../_e_f___s_p_i__regs_8h.html#a951e9e98da6dbf7b3f1f86d44013a603',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5ftx_5fb_5fmask_55',['EF_SPI_STATUS_REG_TX_B_MASK',['../_e_f___s_p_i__regs_8h.html#aa94d64ec8ce3d3fda2496fa69fb9693c',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5ftx_5fe_5fbit_56',['EF_SPI_STATUS_REG_TX_E_BIT',['../_e_f___s_p_i__regs_8h.html#abe10f0c7b6422b6da984393ccdab8f64',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5ftx_5fe_5fmask_57',['EF_SPI_STATUS_REG_TX_E_MASK',['../_e_f___s_p_i__regs_8h.html#a0742f76dc5c734155f9483ea6808a59d',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5ftx_5ff_5fbit_58',['EF_SPI_STATUS_REG_TX_F_BIT',['../_e_f___s_p_i__regs_8h.html#abb0ff8fcfd19ed265190d9aa6bdb7550',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5ftx_5ff_5fmask_59',['EF_SPI_STATUS_REG_TX_F_MASK',['../_e_f___s_p_i__regs_8h.html#af249ea07911103f29bc44ca31694b386',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftx_5ffifo_5fflush_5freg_5fflush_5fbit_60',['EF_SPI_TX_FIFO_FLUSH_REG_FLUSH_BIT',['../_e_f___s_p_i__regs_8h.html#aaf2f79191000527cbe34a7ebdf733b4b',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftx_5ffifo_5fflush_5freg_5fflush_5fmask_61',['EF_SPI_TX_FIFO_FLUSH_REG_FLUSH_MASK',['../_e_f___s_p_i__regs_8h.html#a8f08868e69dca4ac8fe7892214240894',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftx_5ffifo_5flevel_5freg_5flevel_5fbit_62',['EF_SPI_TX_FIFO_LEVEL_REG_LEVEL_BIT',['../_e_f___s_p_i__regs_8h.html#ac31f79ffb5d5b9d3c40634c4e7fc38da',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftx_5ffifo_5flevel_5freg_5flevel_5fmask_63',['EF_SPI_TX_FIFO_LEVEL_REG_LEVEL_MASK',['../_e_f___s_p_i__regs_8h.html#ab4ed42d32d7b6440c8c135876812d824',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftx_5ffifo_5fthreshold_5freg_5fthreshold_5fbit_64',['EF_SPI_TX_FIFO_THRESHOLD_REG_THRESHOLD_BIT',['../_e_f___s_p_i__regs_8h.html#afcd4de96a4fdbbdf0bfb2d1ef0b36ee1',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftx_5ffifo_5fthreshold_5freg_5fthreshold_5fmask_65',['EF_SPI_TX_FIFO_THRESHOLD_REG_THRESHOLD_MASK',['../_e_f___s_p_i__regs_8h.html#a2c5706ed052b899f8f35f9f430bd6cf8',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftxb_5fflag_66',['EF_SPI_TXB_FLAG',['../_e_f___s_p_i__regs_8h.html#a483437ca3282104510a46bf4c389372d',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftxdata_5fmax_5fvalue_67',['EF_SPI_TXDATA_MAX_VALUE',['../_e_f___s_p_i_8c.html#a5e9071558e9f7bd171d07d7f5fc207fe',1,'EF_SPI.c']]], + ['ef_5fspi_5ftxe_5fflag_68',['EF_SPI_TXE_FLAG',['../_e_f___s_p_i__regs_8h.html#a4666ce8d0e4296894dee3ac12aa24ed9',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftxf_5fflag_69',['EF_SPI_TXF_FLAG',['../_e_f___s_p_i__regs_8h.html#a42ba708fcfbcd66c33b691df220600a0',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftype_70',['EF_SPI_TYPE',['../_e_f___s_p_i__regs_8h.html#a13327a2a72e415754d4174d9e8c1ce84',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftype_5fptr_71',['EF_SPI_TYPE_PTR',['../_e_f___s_p_i__regs_8h.html#ab51eaba59e1d37581be74b95ac7b4b20',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fwaitrxfifonotempty_72',['EF_SPI_waitRxFifoNotEmpty',['../_e_f___s_p_i_8c.html#a07fa3d20aee584b19921035cd715b71b',1,'EF_SPI_waitRxFifoNotEmpty(EF_SPI_TYPE_PTR spi): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a07fa3d20aee584b19921035cd715b71b',1,'EF_SPI_waitRxFifoNotEmpty(EF_SPI_TYPE_PTR spi): EF_SPI.c']]], + ['ef_5fspi_5fwaittxfifoempty_73',['EF_SPI_waitTxFifoEmpty',['../_e_f___s_p_i_8c.html#a37d6919aa636f75a7ad383d5c03a6595',1,'EF_SPI_waitTxFifoEmpty(EF_SPI_TYPE_PTR spi): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a37d6919aa636f75a7ad383d5c03a6595',1,'EF_SPI_waitTxFifoEmpty(EF_SPI_TYPE_PTR spi): EF_SPI.c']]], + ['ef_5fspi_5fwritedata_74',['EF_SPI_writeData',['../_e_f___s_p_i_8c.html#a1e57164045e2dc6ba9f3ebffc30f5985',1,'EF_SPI_writeData(EF_SPI_TYPE_PTR spi, uint32_t data): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a1e57164045e2dc6ba9f3ebffc30f5985',1,'EF_SPI_writeData(EF_SPI_TYPE_PTR spi, uint32_t data): EF_SPI.c']]], + ['ef_5fspi_5fwritephase_75',['EF_SPI_writePhase',['../_e_f___s_p_i_8c.html#a0391f44435674dff1569e37997485578',1,'EF_SPI_writePhase(EF_SPI_TYPE_PTR spi, bool phase): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a0391f44435674dff1569e37997485578',1,'EF_SPI_writePhase(EF_SPI_TYPE_PTR spi, bool phase): EF_SPI.c']]], + ['ef_5fspi_5fwritepolarity_76',['EF_SPI_writepolarity',['../_e_f___s_p_i_8c.html#af12037c75dc828ac46a94b871bce315f',1,'EF_SPI_writepolarity(EF_SPI_TYPE_PTR spi, bool polarity): EF_SPI.c'],['../_e_f___s_p_i_8h.html#af12037c75dc828ac46a94b871bce315f',1,'EF_SPI_writepolarity(EF_SPI_TYPE_PTR spi, bool polarity): EF_SPI.c']]] +]; diff --git a/docs/doxygen/html/search/all_3.js b/docs/doxygen/html/search/all_3.js new file mode 100644 index 0000000..9215cb3 --- /dev/null +++ b/docs/doxygen/html/search/all_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['gclk_0',['GCLK',['../struct___e_f___s_p_i___t_y_p_e__.html#a37453b637f735bea892bdba6031a4abc',1,'_EF_SPI_TYPE_']]] +]; diff --git a/docs/doxygen/html/search/all_4.js b/docs/doxygen/html/search/all_4.js new file mode 100644 index 0000000..00e2f9b --- /dev/null +++ b/docs/doxygen/html/search/all_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['ic_0',['IC',['../struct___e_f___s_p_i___t_y_p_e__.html#aed0d63b563874f4b6c1b4b32dbe10140',1,'_EF_SPI_TYPE_']]], + ['im_1',['IM',['../struct___e_f___s_p_i___t_y_p_e__.html#a5b8438e77bc688c9be746edd82a41a33',1,'_EF_SPI_TYPE_']]], + ['io_5ftypes_2',['IO_TYPES',['../_e_f___s_p_i__regs_8h.html#a470cd5845bed94d8b8b358933e4a3442',1,'EF_SPI_regs.h']]] +]; diff --git a/docs/doxygen/html/search/all_5.js b/docs/doxygen/html/search/all_5.js new file mode 100644 index 0000000..307e988 --- /dev/null +++ b/docs/doxygen/html/search/all_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['mis_0',['MIS',['../struct___e_f___s_p_i___t_y_p_e__.html#abb579ebf283e3ea70d567ea17ca7fc25',1,'_EF_SPI_TYPE_']]] +]; diff --git a/docs/doxygen/html/search/all_6.js b/docs/doxygen/html/search/all_6.js new file mode 100644 index 0000000..4076d5b --- /dev/null +++ b/docs/doxygen/html/search/all_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['pr_0',['PR',['../struct___e_f___s_p_i___t_y_p_e__.html#afa42966f653fd86a90d8343bd36634c2',1,'_EF_SPI_TYPE_']]] +]; diff --git a/docs/doxygen/html/search/all_7.js b/docs/doxygen/html/search/all_7.js new file mode 100644 index 0000000..6aee576 --- /dev/null +++ b/docs/doxygen/html/search/all_7.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['reserved_5f0_0',['reserved_0',['../struct___e_f___s_p_i___t_y_p_e__.html#ad3484cafc190c0d0df83f0a945a99699',1,'_EF_SPI_TYPE_']]], + ['reserved_5f1_1',['reserved_1',['../struct___e_f___s_p_i___t_y_p_e__.html#ace31e2375b8ba37742f0d5e224a6203a',1,'_EF_SPI_TYPE_']]], + ['reserved_5f2_2',['reserved_2',['../struct___e_f___s_p_i___t_y_p_e__.html#a2f46338a1b1524a35b3d897e3a952eea',1,'_EF_SPI_TYPE_']]], + ['ris_3',['RIS',['../struct___e_f___s_p_i___t_y_p_e__.html#a939c9eabb0a5f81f07549a6328fd9941',1,'_EF_SPI_TYPE_']]], + ['rx_5ffifo_5fflush_4',['RX_FIFO_FLUSH',['../struct___e_f___s_p_i___t_y_p_e__.html#ad0e9f953a48f16f8d2297993e2763f34',1,'_EF_SPI_TYPE_']]], + ['rx_5ffifo_5flevel_5',['RX_FIFO_LEVEL',['../struct___e_f___s_p_i___t_y_p_e__.html#acdaa1e9c52f9af8f44ff4a8cdaabce9c',1,'_EF_SPI_TYPE_']]], + ['rx_5ffifo_5fthreshold_6',['RX_FIFO_THRESHOLD',['../struct___e_f___s_p_i___t_y_p_e__.html#ab94b3f3550b7dabb3032012d0628ef30',1,'_EF_SPI_TYPE_']]], + ['rxdata_7',['RXDATA',['../struct___e_f___s_p_i___t_y_p_e__.html#a0262003dd1dff3a1dcf49b0c08c40ba9',1,'_EF_SPI_TYPE_']]] +]; diff --git a/docs/doxygen/html/search/all_8.js b/docs/doxygen/html/search/all_8.js new file mode 100644 index 0000000..ae39d23 --- /dev/null +++ b/docs/doxygen/html/search/all_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['status_0',['STATUS',['../struct___e_f___s_p_i___t_y_p_e__.html#adce0731ad3a0f1e0903d2c28a98aac98',1,'_EF_SPI_TYPE_']]] +]; diff --git a/docs/doxygen/html/search/all_9.js b/docs/doxygen/html/search/all_9.js new file mode 100644 index 0000000..f79c574 --- /dev/null +++ b/docs/doxygen/html/search/all_9.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['tx_5ffifo_5fflush_0',['TX_FIFO_FLUSH',['../struct___e_f___s_p_i___t_y_p_e__.html#a0d7abd6e9e3b681d50fe3929df9026e0',1,'_EF_SPI_TYPE_']]], + ['tx_5ffifo_5flevel_1',['TX_FIFO_LEVEL',['../struct___e_f___s_p_i___t_y_p_e__.html#a47066d2e4989448fefa0668b0dcf7dc0',1,'_EF_SPI_TYPE_']]], + ['tx_5ffifo_5fthreshold_2',['TX_FIFO_THRESHOLD',['../struct___e_f___s_p_i___t_y_p_e__.html#a8db011b9afb9e6e91ec787b854299637',1,'_EF_SPI_TYPE_']]], + ['txdata_3',['TXDATA',['../struct___e_f___s_p_i___t_y_p_e__.html#aac1ffd4b085fe901755a2ad1b5f41528',1,'_EF_SPI_TYPE_']]] +]; diff --git a/docs/doxygen/html/search/classes_0.js b/docs/doxygen/html/search/classes_0.js new file mode 100644 index 0000000..8cca0ac --- /dev/null +++ b/docs/doxygen/html/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_5fef_5fspi_5ftype_5f_0',['_EF_SPI_TYPE_',['../struct___e_f___s_p_i___t_y_p_e__.html',1,'']]] +]; diff --git a/docs/doxygen/html/search/close.svg b/docs/doxygen/html/search/close.svg new file mode 100644 index 0000000..a933eea --- /dev/null +++ b/docs/doxygen/html/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/docs/doxygen/html/search/defines_0.js b/docs/doxygen/html/search/defines_0.js new file mode 100644 index 0000000..ac43ebb --- /dev/null +++ b/docs/doxygen/html/search/defines_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['_5f_5fr_0',['__R',['../_e_f___s_p_i__regs_8h.html#aef00c279597b188e4cdd14d288ddf77a',1,'EF_SPI_regs.h']]], + ['_5f_5frw_1',['__RW',['../_e_f___s_p_i__regs_8h.html#a81f369079976a46554fd9798ab035697',1,'EF_SPI_regs.h']]], + ['_5f_5fw_2',['__W',['../_e_f___s_p_i__regs_8h.html#ad8cfe7014044235a4c8d3239c2597f09',1,'EF_SPI_regs.h']]] +]; diff --git a/docs/doxygen/html/search/defines_1.js b/docs/doxygen/html/search/defines_1.js new file mode 100644 index 0000000..034266c --- /dev/null +++ b/docs/doxygen/html/search/defines_1.js @@ -0,0 +1,52 @@ +var searchData= +[ + ['ef_5fdriver_5ferror_0',['EF_DRIVER_ERROR',['../_e_f___driver___common_8h.html#adf96107766b856292d4f08a495064c7e',1,'EF_Driver_Common.h']]], + ['ef_5fdriver_5ferror_5fbusy_1',['EF_DRIVER_ERROR_BUSY',['../_e_f___driver___common_8h.html#a9b7e06e07ac1038e9cc63d5f25d681fb',1,'EF_Driver_Common.h']]], + ['ef_5fdriver_5ferror_5fparameter_2',['EF_DRIVER_ERROR_PARAMETER',['../_e_f___driver___common_8h.html#aed4f0552faa082d7941ed37ae1e430e4',1,'EF_Driver_Common.h']]], + ['ef_5fdriver_5ferror_5fspecific_3',['EF_DRIVER_ERROR_SPECIFIC',['../_e_f___driver___common_8h.html#a89de2e78c0ce8d5b48c0cef064ae3aab',1,'EF_Driver_Common.h']]], + ['ef_5fdriver_5ferror_5ftimeout_4',['EF_DRIVER_ERROR_TIMEOUT',['../_e_f___driver___common_8h.html#a26b87ad6f8f1d017af3ee034bd178795',1,'EF_Driver_Common.h']]], + ['ef_5fdriver_5ferror_5funsupported_5',['EF_DRIVER_ERROR_UNSUPPORTED',['../_e_f___driver___common_8h.html#abd8e6eb4870238ef0f900911e3935d91',1,'EF_Driver_Common.h']]], + ['ef_5fdriver_5fok_6',['EF_DRIVER_OK',['../_e_f___driver___common_8h.html#ab56c746d5d1672835c101f00f7c90b7c',1,'EF_Driver_Common.h']]], + ['ef_5fspi_5fc_7',['EF_SPI_C',['../_e_f___s_p_i_8c.html#a978c9c8ed8e2e80672c5cc0a612cc869',1,'EF_SPI.c']]], + ['ef_5fspi_5fcfg_5freg_5fcpha_5fbit_8',['EF_SPI_CFG_REG_CPHA_BIT',['../_e_f___s_p_i__regs_8h.html#aa1a7b962b5cbcddef4ab2a34eabd4ed0',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fcfg_5freg_5fcpha_5fmask_9',['EF_SPI_CFG_REG_CPHA_MASK',['../_e_f___s_p_i__regs_8h.html#ab929342cb7b96e3cee17eafc0fe1985d',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fcfg_5freg_5fcpol_5fbit_10',['EF_SPI_CFG_REG_CPOL_BIT',['../_e_f___s_p_i__regs_8h.html#ac5e059ea029e36d81058f5a0d9cc9e3c',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fcfg_5freg_5fcpol_5fmask_11',['EF_SPI_CFG_REG_CPOL_MASK',['../_e_f___s_p_i__regs_8h.html#a095a4707174b9fa4d590f52b21632ecb',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fctrl_5freg_5fenable_5fbit_12',['EF_SPI_CTRL_REG_ENABLE_BIT',['../_e_f___s_p_i__regs_8h.html#ab7ee2f2a3382cc62d27b0c8f35580f17',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fctrl_5freg_5fenable_5fmask_13',['EF_SPI_CTRL_REG_ENABLE_MASK',['../_e_f___s_p_i__regs_8h.html#a16ee3bc8b579ed7151236c947105ee45',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fctrl_5freg_5frx_5fen_5fbit_14',['EF_SPI_CTRL_REG_RX_EN_BIT',['../_e_f___s_p_i__regs_8h.html#aab5b75ab1618b2f8c7d0d55d37bd57f5',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fctrl_5freg_5frx_5fen_5fmask_15',['EF_SPI_CTRL_REG_RX_EN_MASK',['../_e_f___s_p_i__regs_8h.html#af9d5295134a69886e64f1ad2e4b583ed',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fctrl_5freg_5fss_5fbit_16',['EF_SPI_CTRL_REG_SS_BIT',['../_e_f___s_p_i__regs_8h.html#aade7e6fa25645f1d5c144441b2b389c2',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fctrl_5freg_5fss_5fmask_17',['EF_SPI_CTRL_REG_SS_MASK',['../_e_f___s_p_i__regs_8h.html#a5281a624fb453b3bf043e5621bef3965',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5frx_5ffifo_5fflush_5freg_5fflush_5fbit_18',['EF_SPI_RX_FIFO_FLUSH_REG_FLUSH_BIT',['../_e_f___s_p_i__regs_8h.html#a4831ed39a5c8de71931fd0f365ec285c',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5frx_5ffifo_5fflush_5freg_5fflush_5fmask_19',['EF_SPI_RX_FIFO_FLUSH_REG_FLUSH_MASK',['../_e_f___s_p_i__regs_8h.html#acd9f5e99f7a5d9cc4c38f1914cbec1a6',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5frx_5ffifo_5flevel_5freg_5flevel_5fbit_20',['EF_SPI_RX_FIFO_LEVEL_REG_LEVEL_BIT',['../_e_f___s_p_i__regs_8h.html#adc70eb31f3592d0eef2f5aa617e147a3',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5frx_5ffifo_5flevel_5freg_5flevel_5fmask_21',['EF_SPI_RX_FIFO_LEVEL_REG_LEVEL_MASK',['../_e_f___s_p_i__regs_8h.html#ac1bb71e9a8423ba268478a65211dd234',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5frx_5ffifo_5fthreshold_5freg_5fthreshold_5fbit_22',['EF_SPI_RX_FIFO_THRESHOLD_REG_THRESHOLD_BIT',['../_e_f___s_p_i__regs_8h.html#a2bd9a947df34afb5d9aee36891b0d5c2',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5frx_5ffifo_5fthreshold_5freg_5fthreshold_5fmask_23',['EF_SPI_RX_FIFO_THRESHOLD_REG_THRESHOLD_MASK',['../_e_f___s_p_i__regs_8h.html#a23a718d6a792c580f06c9086e1b2f08e',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5frxa_5fflag_24',['EF_SPI_RXA_FLAG',['../_e_f___s_p_i__regs_8h.html#aa02e15edc1acfa7e3f9dfc05b43d1b5f',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5frxe_5fflag_25',['EF_SPI_RXE_FLAG',['../_e_f___s_p_i__regs_8h.html#ab7395a85fac8f34cd0ccf4d2499b7faa',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5frxf_5fflag_26',['EF_SPI_RXF_FLAG',['../_e_f___s_p_i__regs_8h.html#a6465a731b247cffcbb987ac7772b024f',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5frx_5fa_5fbit_27',['EF_SPI_STATUS_REG_RX_A_BIT',['../_e_f___s_p_i__regs_8h.html#a03cff033c5e429f83f67c071221d3564',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5frx_5fa_5fmask_28',['EF_SPI_STATUS_REG_RX_A_MASK',['../_e_f___s_p_i__regs_8h.html#ae86785f5f92756bc46988900ad755f8c',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5frx_5fe_5fbit_29',['EF_SPI_STATUS_REG_RX_E_BIT',['../_e_f___s_p_i__regs_8h.html#ad97410c80f92b60c499ce81f04746018',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5frx_5fe_5fmask_30',['EF_SPI_STATUS_REG_RX_E_MASK',['../_e_f___s_p_i__regs_8h.html#aa7289ac49f0fbef2b931fae0d2a136ea',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5frx_5ff_5fbit_31',['EF_SPI_STATUS_REG_RX_F_BIT',['../_e_f___s_p_i__regs_8h.html#a233519531a39eefca0f1ad884ddfc688',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5frx_5ff_5fmask_32',['EF_SPI_STATUS_REG_RX_F_MASK',['../_e_f___s_p_i__regs_8h.html#a43c28dcf4792491c02ed80242bbeba2c',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5ftx_5fb_5fbit_33',['EF_SPI_STATUS_REG_TX_B_BIT',['../_e_f___s_p_i__regs_8h.html#a951e9e98da6dbf7b3f1f86d44013a603',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5ftx_5fb_5fmask_34',['EF_SPI_STATUS_REG_TX_B_MASK',['../_e_f___s_p_i__regs_8h.html#aa94d64ec8ce3d3fda2496fa69fb9693c',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5ftx_5fe_5fbit_35',['EF_SPI_STATUS_REG_TX_E_BIT',['../_e_f___s_p_i__regs_8h.html#abe10f0c7b6422b6da984393ccdab8f64',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5ftx_5fe_5fmask_36',['EF_SPI_STATUS_REG_TX_E_MASK',['../_e_f___s_p_i__regs_8h.html#a0742f76dc5c734155f9483ea6808a59d',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5ftx_5ff_5fbit_37',['EF_SPI_STATUS_REG_TX_F_BIT',['../_e_f___s_p_i__regs_8h.html#abb0ff8fcfd19ed265190d9aa6bdb7550',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5fstatus_5freg_5ftx_5ff_5fmask_38',['EF_SPI_STATUS_REG_TX_F_MASK',['../_e_f___s_p_i__regs_8h.html#af249ea07911103f29bc44ca31694b386',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftx_5ffifo_5fflush_5freg_5fflush_5fbit_39',['EF_SPI_TX_FIFO_FLUSH_REG_FLUSH_BIT',['../_e_f___s_p_i__regs_8h.html#aaf2f79191000527cbe34a7ebdf733b4b',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftx_5ffifo_5fflush_5freg_5fflush_5fmask_40',['EF_SPI_TX_FIFO_FLUSH_REG_FLUSH_MASK',['../_e_f___s_p_i__regs_8h.html#a8f08868e69dca4ac8fe7892214240894',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftx_5ffifo_5flevel_5freg_5flevel_5fbit_41',['EF_SPI_TX_FIFO_LEVEL_REG_LEVEL_BIT',['../_e_f___s_p_i__regs_8h.html#ac31f79ffb5d5b9d3c40634c4e7fc38da',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftx_5ffifo_5flevel_5freg_5flevel_5fmask_42',['EF_SPI_TX_FIFO_LEVEL_REG_LEVEL_MASK',['../_e_f___s_p_i__regs_8h.html#ab4ed42d32d7b6440c8c135876812d824',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftx_5ffifo_5fthreshold_5freg_5fthreshold_5fbit_43',['EF_SPI_TX_FIFO_THRESHOLD_REG_THRESHOLD_BIT',['../_e_f___s_p_i__regs_8h.html#afcd4de96a4fdbbdf0bfb2d1ef0b36ee1',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftx_5ffifo_5fthreshold_5freg_5fthreshold_5fmask_44',['EF_SPI_TX_FIFO_THRESHOLD_REG_THRESHOLD_MASK',['../_e_f___s_p_i__regs_8h.html#a2c5706ed052b899f8f35f9f430bd6cf8',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftxb_5fflag_45',['EF_SPI_TXB_FLAG',['../_e_f___s_p_i__regs_8h.html#a483437ca3282104510a46bf4c389372d',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftxdata_5fmax_5fvalue_46',['EF_SPI_TXDATA_MAX_VALUE',['../_e_f___s_p_i_8c.html#a5e9071558e9f7bd171d07d7f5fc207fe',1,'EF_SPI.c']]], + ['ef_5fspi_5ftxe_5fflag_47',['EF_SPI_TXE_FLAG',['../_e_f___s_p_i__regs_8h.html#a4666ce8d0e4296894dee3ac12aa24ed9',1,'EF_SPI_regs.h']]], + ['ef_5fspi_5ftxf_5fflag_48',['EF_SPI_TXF_FLAG',['../_e_f___s_p_i__regs_8h.html#a42ba708fcfbcd66c33b691df220600a0',1,'EF_SPI_regs.h']]] +]; diff --git a/docs/doxygen/html/search/defines_2.js b/docs/doxygen/html/search/defines_2.js new file mode 100644 index 0000000..bb074bb --- /dev/null +++ b/docs/doxygen/html/search/defines_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['io_5ftypes_0',['IO_TYPES',['../_e_f___s_p_i__regs_8h.html#a470cd5845bed94d8b8b358933e4a3442',1,'EF_SPI_regs.h']]] +]; diff --git a/docs/doxygen/html/search/files_0.js b/docs/doxygen/html/search/files_0.js new file mode 100644 index 0000000..367f33f --- /dev/null +++ b/docs/doxygen/html/search/files_0.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['ef_5fdriver_5fcommon_2eh_0',['EF_Driver_Common.h',['../_e_f___driver___common_8h.html',1,'']]], + ['ef_5fspi_2ec_1',['EF_SPI.c',['../_e_f___s_p_i_8c.html',1,'']]], + ['ef_5fspi_2eh_2',['EF_SPI.h',['../_e_f___s_p_i_8h.html',1,'']]], + ['ef_5fspi_5fregs_2eh_3',['EF_SPI_regs.h',['../_e_f___s_p_i__regs_8h.html',1,'']]] +]; diff --git a/docs/doxygen/html/search/functions_0.js b/docs/doxygen/html/search/functions_0.js new file mode 100644 index 0000000..ce7e4bd --- /dev/null +++ b/docs/doxygen/html/search/functions_0.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['ef_5fspi_5fassertcs_0',['EF_SPI_assertCs',['../_e_f___s_p_i_8c.html#a8b4118aeb52c24b0b9b20518c920d414',1,'EF_SPI_assertCs(EF_SPI_TYPE_PTR spi): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a8b4118aeb52c24b0b9b20518c920d414',1,'EF_SPI_assertCs(EF_SPI_TYPE_PTR spi): EF_SPI.c']]], + ['ef_5fspi_5fdeassertcs_1',['EF_SPI_deassertCs',['../_e_f___s_p_i_8c.html#ab6cdc2b71232f8f3d3fa1e6f9fa6d5ae',1,'EF_SPI_deassertCs(EF_SPI_TYPE_PTR spi): EF_SPI.c'],['../_e_f___s_p_i_8h.html#ab6cdc2b71232f8f3d3fa1e6f9fa6d5ae',1,'EF_SPI_deassertCs(EF_SPI_TYPE_PTR spi): EF_SPI.c']]], + ['ef_5fspi_5fdisable_2',['EF_SPI_disable',['../_e_f___s_p_i_8c.html#a779126c0c77ab36a9747aa8fe113c08d',1,'EF_SPI_disable(EF_SPI_TYPE_PTR spi): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a779126c0c77ab36a9747aa8fe113c08d',1,'EF_SPI_disable(EF_SPI_TYPE_PTR spi): EF_SPI.c']]], + ['ef_5fspi_5fdisablerx_3',['EF_SPI_disableRx',['../_e_f___s_p_i_8c.html#a3c26e6c7e5aa70bb44ee388a811aa762',1,'EF_SPI_disableRx(EF_SPI_TYPE_PTR spi): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a3c26e6c7e5aa70bb44ee388a811aa762',1,'EF_SPI_disableRx(EF_SPI_TYPE_PTR spi): EF_SPI.c']]], + ['ef_5fspi_5fenable_4',['EF_SPI_enable',['../_e_f___s_p_i_8c.html#a17bb022c768cb9acb92e540dd0d5dcce',1,'EF_SPI_enable(EF_SPI_TYPE_PTR spi): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a17bb022c768cb9acb92e540dd0d5dcce',1,'EF_SPI_enable(EF_SPI_TYPE_PTR spi): EF_SPI.c']]], + ['ef_5fspi_5fenablerx_5',['EF_SPI_enableRx',['../_e_f___s_p_i_8c.html#a9b5b4e72c33af4b4a7fc3ab0cdadde2e',1,'EF_SPI_enableRx(EF_SPI_TYPE_PTR spi): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a9b5b4e72c33af4b4a7fc3ab0cdadde2e',1,'EF_SPI_enableRx(EF_SPI_TYPE_PTR spi): EF_SPI.c']]], + ['ef_5fspi_5ffiforxflush_6',['EF_SPI_FifoRxFlush',['../_e_f___s_p_i_8c.html#af5ad666ce47ff6bd16cff1627c33372a',1,'EF_SPI_FifoRxFlush(EF_SPI_TYPE_PTR spi): EF_SPI.c'],['../_e_f___s_p_i_8h.html#af5ad666ce47ff6bd16cff1627c33372a',1,'EF_SPI_FifoRxFlush(EF_SPI_TYPE_PTR spi): EF_SPI.c']]], + ['ef_5fspi_5fgetim_7',['EF_SPI_getIM',['../_e_f___s_p_i_8c.html#a0cbec2da38446744274c64e9585e846c',1,'EF_SPI_getIM(EF_SPI_TYPE_PTR spi, uint32_t *mask): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a0cbec2da38446744274c64e9585e846c',1,'EF_SPI_getIM(EF_SPI_TYPE_PTR spi, uint32_t *mask): EF_SPI.c']]], + ['ef_5fspi_5fgetmis_8',['EF_SPI_getMIS',['../_e_f___s_p_i_8c.html#a8f3ae4eb3cca3c9892bf0fd2ea1af96e',1,'EF_SPI_getMIS(EF_SPI_TYPE_PTR spi, uint32_t *mask): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a8f3ae4eb3cca3c9892bf0fd2ea1af96e',1,'EF_SPI_getMIS(EF_SPI_TYPE_PTR spi, uint32_t *mask): EF_SPI.c']]], + ['ef_5fspi_5fgetris_9',['EF_SPI_getRIS',['../_e_f___s_p_i_8c.html#a83c5fa1a6e95392f2b3ab02661f40dec',1,'EF_SPI_getRIS(EF_SPI_TYPE_PTR spi, uint32_t *mask): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a83c5fa1a6e95392f2b3ab02661f40dec',1,'EF_SPI_getRIS(EF_SPI_TYPE_PTR spi, uint32_t *mask): EF_SPI.c']]], + ['ef_5fspi_5freaddata_10',['EF_SPI_readData',['../_e_f___s_p_i_8c.html#a76b8a68e19fbf8c73de0f0c6a2f1ffa0',1,'EF_SPI_readData(EF_SPI_TYPE_PTR spi, uint32_t *data): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a76b8a68e19fbf8c73de0f0c6a2f1ffa0',1,'EF_SPI_readData(EF_SPI_TYPE_PTR spi, uint32_t *data): EF_SPI.c']]], + ['ef_5fspi_5freadrxfifoempty_11',['EF_SPI_readRxFifoEmpty',['../_e_f___s_p_i_8c.html#a143d8c3d4948fe4b3b673d4f7d37dc22',1,'EF_SPI_readRxFifoEmpty(EF_SPI_TYPE_PTR spi, uint32_t *RXfifo_state): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a143d8c3d4948fe4b3b673d4f7d37dc22',1,'EF_SPI_readRxFifoEmpty(EF_SPI_TYPE_PTR spi, uint32_t *RXfifo_state): EF_SPI.c']]], + ['ef_5fspi_5freadtxfifoempty_12',['EF_SPI_readTxFifoEmpty',['../_e_f___s_p_i_8c.html#a5ba73cb278ddca9c4e4d7e2de81d086c',1,'EF_SPI_readTxFifoEmpty(EF_SPI_TYPE_PTR spi, uint32_t *TXfifo_state): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a5ba73cb278ddca9c4e4d7e2de81d086c',1,'EF_SPI_readTxFifoEmpty(EF_SPI_TYPE_PTR spi, uint32_t *TXfifo_state): EF_SPI.c']]], + ['ef_5fspi_5fsetgclkenable_13',['EF_SPI_setGclkEnable',['../_e_f___s_p_i_8c.html#a825604b02b3136b2ae6b57cd74f7f885',1,'EF_SPI_setGclkEnable(EF_SPI_TYPE_PTR spi, uint32_t value): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a825604b02b3136b2ae6b57cd74f7f885',1,'EF_SPI_setGclkEnable(EF_SPI_TYPE_PTR spi, uint32_t value): EF_SPI.c']]], + ['ef_5fspi_5fseticr_14',['EF_SPI_setICR',['../_e_f___s_p_i_8h.html#a1bd18073e3f75287527f0ee881546b2a',1,'EF_SPI.h']]], + ['ef_5fspi_5fsetim_15',['EF_SPI_setIM',['../_e_f___s_p_i_8c.html#a475700f9498d9ab54b03d3e81ace1f0a',1,'EF_SPI_setIM(EF_SPI_TYPE_PTR spi, uint32_t mask): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a475700f9498d9ab54b03d3e81ace1f0a',1,'EF_SPI_setIM(EF_SPI_TYPE_PTR spi, uint32_t mask): EF_SPI.c']]], + ['ef_5fspi_5fwaitrxfifonotempty_16',['EF_SPI_waitRxFifoNotEmpty',['../_e_f___s_p_i_8c.html#a07fa3d20aee584b19921035cd715b71b',1,'EF_SPI_waitRxFifoNotEmpty(EF_SPI_TYPE_PTR spi): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a07fa3d20aee584b19921035cd715b71b',1,'EF_SPI_waitRxFifoNotEmpty(EF_SPI_TYPE_PTR spi): EF_SPI.c']]], + ['ef_5fspi_5fwaittxfifoempty_17',['EF_SPI_waitTxFifoEmpty',['../_e_f___s_p_i_8c.html#a37d6919aa636f75a7ad383d5c03a6595',1,'EF_SPI_waitTxFifoEmpty(EF_SPI_TYPE_PTR spi): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a37d6919aa636f75a7ad383d5c03a6595',1,'EF_SPI_waitTxFifoEmpty(EF_SPI_TYPE_PTR spi): EF_SPI.c']]], + ['ef_5fspi_5fwritedata_18',['EF_SPI_writeData',['../_e_f___s_p_i_8c.html#a1e57164045e2dc6ba9f3ebffc30f5985',1,'EF_SPI_writeData(EF_SPI_TYPE_PTR spi, uint32_t data): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a1e57164045e2dc6ba9f3ebffc30f5985',1,'EF_SPI_writeData(EF_SPI_TYPE_PTR spi, uint32_t data): EF_SPI.c']]], + ['ef_5fspi_5fwritephase_19',['EF_SPI_writePhase',['../_e_f___s_p_i_8c.html#a0391f44435674dff1569e37997485578',1,'EF_SPI_writePhase(EF_SPI_TYPE_PTR spi, bool phase): EF_SPI.c'],['../_e_f___s_p_i_8h.html#a0391f44435674dff1569e37997485578',1,'EF_SPI_writePhase(EF_SPI_TYPE_PTR spi, bool phase): EF_SPI.c']]], + ['ef_5fspi_5fwritepolarity_20',['EF_SPI_writepolarity',['../_e_f___s_p_i_8c.html#af12037c75dc828ac46a94b871bce315f',1,'EF_SPI_writepolarity(EF_SPI_TYPE_PTR spi, bool polarity): EF_SPI.c'],['../_e_f___s_p_i_8h.html#af12037c75dc828ac46a94b871bce315f',1,'EF_SPI_writepolarity(EF_SPI_TYPE_PTR spi, bool polarity): EF_SPI.c']]] +]; diff --git a/docs/doxygen/html/search/mag.svg b/docs/doxygen/html/search/mag.svg new file mode 100644 index 0000000..9f46b30 --- /dev/null +++ b/docs/doxygen/html/search/mag.svg @@ -0,0 +1,37 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/docs/doxygen/html/search/mag_d.svg b/docs/doxygen/html/search/mag_d.svg new file mode 100644 index 0000000..b9a814c --- /dev/null +++ b/docs/doxygen/html/search/mag_d.svg @@ -0,0 +1,37 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/docs/doxygen/html/search/mag_sel.svg b/docs/doxygen/html/search/mag_sel.svg new file mode 100644 index 0000000..03626f6 --- /dev/null +++ b/docs/doxygen/html/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/docs/doxygen/html/search/mag_seld.svg b/docs/doxygen/html/search/mag_seld.svg new file mode 100644 index 0000000..6e720dc --- /dev/null +++ b/docs/doxygen/html/search/mag_seld.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/docs/doxygen/html/search/search.css b/docs/doxygen/html/search/search.css new file mode 100644 index 0000000..19f76f9 --- /dev/null +++ b/docs/doxygen/html/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/docs/doxygen/html/search/search.js b/docs/doxygen/html/search/search.js new file mode 100644 index 0000000..e103a26 --- /dev/null +++ b/docs/doxygen/html/search/search.js @@ -0,0 +1,816 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var jsFile; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + var loadJS = function(url, impl, loc){ + var scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + var domSearchBox = this.DOMSearchBox(); + var domPopupSearchResults = this.DOMPopupSearchResults(); + var domSearchClose = this.DOMSearchClose(); + var resultsPath = this.resultsPath; + + var handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + searchResults.Search(searchValue); + + if (domPopupSearchResultsWindow.style.display!='block') + { + domSearchClose.style.display = 'inline-block'; + var left = getXPos(domSearchBox) + 150; + var top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + var maxWidth = document.body.clientWidth; + var maxHeight = document.body.clientHeight; + var width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + var height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults(resultsPath) +{ + var results = document.getElementById("SRResults"); + results.innerHTML = ''; + for (var e=0; e + + + + + + +EF_SPI APIs: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    EF_SPI APIs +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    _EF_SPI_TYPE_ Member List
    +
    + + + + + diff --git a/docs/doxygen/html/struct___e_f___s_p_i___t_y_p_e__.html b/docs/doxygen/html/struct___e_f___s_p_i___t_y_p_e__.html new file mode 100644 index 0000000..9ed4b0b --- /dev/null +++ b/docs/doxygen/html/struct___e_f___s_p_i___t_y_p_e__.html @@ -0,0 +1,414 @@ + + + + + + + +EF_SPI APIs: _EF_SPI_TYPE_ Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    EF_SPI APIs +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    _EF_SPI_TYPE_ Struct Reference
    +
    +
    + +

    #include <EF_SPI_regs.h>

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    __R RXDATA
     
    __W TXDATA
     
    __W CFG
     
    __W CTRL
     
    __W PR
     
    __R STATUS
     
    __R reserved_0 [16250]
     
    __R RX_FIFO_LEVEL
     
    __W RX_FIFO_THRESHOLD
     
    __W RX_FIFO_FLUSH
     
    __R reserved_1 [1]
     
    __R TX_FIFO_LEVEL
     
    __W TX_FIFO_THRESHOLD
     
    __W TX_FIFO_FLUSH
     
    __R reserved_2 [57]
     
    __RW IM
     
    __R MIS
     
    __R RIS
     
    __W IC
     
    __W GCLK
     
    +

    Member Data Documentation

    + +

    ◆ CFG

    + +
    +
    + + + + +
    __W _EF_SPI_TYPE_::CFG
    +
    + +
    +
    + +

    ◆ CTRL

    + +
    +
    + + + + +
    __W _EF_SPI_TYPE_::CTRL
    +
    + +
    +
    + +

    ◆ GCLK

    + +
    +
    + + + + +
    __W _EF_SPI_TYPE_::GCLK
    +
    + +
    +
    + +

    ◆ IC

    + +
    +
    + + + + +
    __W _EF_SPI_TYPE_::IC
    +
    + +
    +
    + +

    ◆ IM

    + +
    +
    + + + + +
    __RW _EF_SPI_TYPE_::IM
    +
    + +
    +
    + +

    ◆ MIS

    + +
    +
    + + + + +
    __R _EF_SPI_TYPE_::MIS
    +
    + +
    +
    + +

    ◆ PR

    + +
    +
    + + + + +
    __W _EF_SPI_TYPE_::PR
    +
    + +
    +
    + +

    ◆ reserved_0

    + +
    +
    + + + + +
    __R _EF_SPI_TYPE_::reserved_0[16250]
    +
    + +
    +
    + +

    ◆ reserved_1

    + +
    +
    + + + + +
    __R _EF_SPI_TYPE_::reserved_1[1]
    +
    + +
    +
    + +

    ◆ reserved_2

    + +
    +
    + + + + +
    __R _EF_SPI_TYPE_::reserved_2[57]
    +
    + +
    +
    + +

    ◆ RIS

    + +
    +
    + + + + +
    __R _EF_SPI_TYPE_::RIS
    +
    + +
    +
    + +

    ◆ RX_FIFO_FLUSH

    + +
    +
    + + + + +
    __W _EF_SPI_TYPE_::RX_FIFO_FLUSH
    +
    + +
    +
    + +

    ◆ RX_FIFO_LEVEL

    + +
    +
    + + + + +
    __R _EF_SPI_TYPE_::RX_FIFO_LEVEL
    +
    + +
    +
    + +

    ◆ RX_FIFO_THRESHOLD

    + +
    +
    + + + + +
    __W _EF_SPI_TYPE_::RX_FIFO_THRESHOLD
    +
    + +
    +
    + +

    ◆ RXDATA

    + +
    +
    + + + + +
    __R _EF_SPI_TYPE_::RXDATA
    +
    + +
    +
    + +

    ◆ STATUS

    + +
    +
    + + + + +
    __R _EF_SPI_TYPE_::STATUS
    +
    + +
    +
    + +

    ◆ TX_FIFO_FLUSH

    + +
    +
    + + + + +
    __W _EF_SPI_TYPE_::TX_FIFO_FLUSH
    +
    + +
    +
    + +

    ◆ TX_FIFO_LEVEL

    + +
    +
    + + + + +
    __R _EF_SPI_TYPE_::TX_FIFO_LEVEL
    +
    + +
    +
    + +

    ◆ TX_FIFO_THRESHOLD

    + +
    +
    + + + + +
    __W _EF_SPI_TYPE_::TX_FIFO_THRESHOLD
    +
    + +
    +
    + +

    ◆ TXDATA

    + +
    +
    + + + + +
    __W _EF_SPI_TYPE_::TXDATA
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/doxygen/html/sync_off.png b/docs/doxygen/html/sync_off.png new file mode 100644 index 0000000..3b443fc Binary files /dev/null and b/docs/doxygen/html/sync_off.png differ diff --git a/docs/doxygen/html/sync_on.png b/docs/doxygen/html/sync_on.png new file mode 100644 index 0000000..e08320f Binary files /dev/null and b/docs/doxygen/html/sync_on.png differ diff --git a/docs/doxygen/html/tab_a.png b/docs/doxygen/html/tab_a.png new file mode 100644 index 0000000..3b725c4 Binary files /dev/null and b/docs/doxygen/html/tab_a.png differ diff --git a/docs/doxygen/html/tab_ad.png b/docs/doxygen/html/tab_ad.png new file mode 100644 index 0000000..e34850a Binary files /dev/null and b/docs/doxygen/html/tab_ad.png differ diff --git a/docs/doxygen/html/tab_b.png b/docs/doxygen/html/tab_b.png new file mode 100644 index 0000000..e2b4a86 Binary files /dev/null and b/docs/doxygen/html/tab_b.png differ diff --git a/docs/doxygen/html/tab_bd.png b/docs/doxygen/html/tab_bd.png new file mode 100644 index 0000000..91c2524 Binary files /dev/null and b/docs/doxygen/html/tab_bd.png differ diff --git a/docs/doxygen/html/tab_h.png b/docs/doxygen/html/tab_h.png new file mode 100644 index 0000000..fd5cb70 Binary files /dev/null and b/docs/doxygen/html/tab_h.png differ diff --git a/docs/doxygen/html/tab_hd.png b/docs/doxygen/html/tab_hd.png new file mode 100644 index 0000000..2489273 Binary files /dev/null and b/docs/doxygen/html/tab_hd.png differ diff --git a/docs/doxygen/html/tab_s.png b/docs/doxygen/html/tab_s.png new file mode 100644 index 0000000..ab478c9 Binary files /dev/null and b/docs/doxygen/html/tab_s.png differ diff --git a/docs/doxygen/html/tab_sd.png b/docs/doxygen/html/tab_sd.png new file mode 100644 index 0000000..757a565 Binary files /dev/null and b/docs/doxygen/html/tab_sd.png differ diff --git a/docs/doxygen/html/tabs.css b/docs/doxygen/html/tabs.css new file mode 100644 index 0000000..71c8a47 --- /dev/null +++ b/docs/doxygen/html/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important;color:var(--nav-menu-foreground-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} \ No newline at end of file diff --git a/docs/doxygen/latex/Makefile b/docs/doxygen/latex/Makefile new file mode 100644 index 0000000..07f226d --- /dev/null +++ b/docs/doxygen/latex/Makefile @@ -0,0 +1,27 @@ +LATEX_CMD?=pdflatex +MKIDX_CMD?=makeindex +BIBTEX_CMD?=bibtex +LATEX_COUNT?=8 +MANUAL_FILE?=refman + +all: $(MANUAL_FILE).pdf + +pdf: $(MANUAL_FILE).pdf + +$(MANUAL_FILE).pdf: clean $(MANUAL_FILE).tex + $(LATEX_CMD) $(MANUAL_FILE) + $(MKIDX_CMD) $(MANUAL_FILE).idx + $(LATEX_CMD) $(MANUAL_FILE) + latex_count=$(LATEX_COUNT) ; \ + while egrep -s 'Rerun (LaTeX|to get cross-references right|to get bibliographical references right)' $(MANUAL_FILE).log && [ $$latex_count -gt 0 ] ;\ + do \ + echo "Rerunning latex...." ;\ + $(LATEX_CMD) $(MANUAL_FILE) ;\ + latex_count=`expr $$latex_count - 1` ;\ + done + $(MKIDX_CMD) $(MANUAL_FILE).idx + $(LATEX_CMD) $(MANUAL_FILE) + + +clean: + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl $(MANUAL_FILE).pdf diff --git a/docs/doxygen/latex/_e_f___driver___common_8h.tex b/docs/doxygen/latex/_e_f___driver___common_8h.tex new file mode 100644 index 0000000..fa353db --- /dev/null +++ b/docs/doxygen/latex/_e_f___driver___common_8h.tex @@ -0,0 +1,123 @@ +\hypertarget{_e_f___driver___common_8h}{}\doxysection{EF\+\_\+\+Driver\+\_\+\+Common.\+h File Reference} +\label{_e_f___driver___common_8h}\index{EF\_Driver\_Common.h@{EF\_Driver\_Common.h}} + + +C header file for common driver definitions and types. + + +{\ttfamily \#include $<$stdint.\+h$>$}\newline +{\ttfamily \#include $<$stdbool.\+h$>$}\newline +{\ttfamily \#include $<$stddef.\+h$>$}\newline +\doxysubsection*{Macros} +\begin{DoxyCompactItemize} +\item +\#define \mbox{\hyperlink{_e_f___driver___common_8h_ab56c746d5d1672835c101f00f7c90b7c}{EF\+\_\+\+DRIVER\+\_\+\+OK}}~((uint32\+\_\+t)0) +\begin{DoxyCompactList}\small\item\em Operation succeeded. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{_e_f___driver___common_8h_adf96107766b856292d4f08a495064c7e}{EF\+\_\+\+DRIVER\+\_\+\+ERROR}}~((uint32\+\_\+t)1) +\begin{DoxyCompactList}\small\item\em Unspecified error. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{_e_f___driver___common_8h_a9b7e06e07ac1038e9cc63d5f25d681fb}{EF\+\_\+\+DRIVER\+\_\+\+ERROR\+\_\+\+BUSY}}~((uint32\+\_\+t)2) +\begin{DoxyCompactList}\small\item\em Driver is busy. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{_e_f___driver___common_8h_a26b87ad6f8f1d017af3ee034bd178795}{EF\+\_\+\+DRIVER\+\_\+\+ERROR\+\_\+\+TIMEOUT}}~((uint32\+\_\+t)3) +\begin{DoxyCompactList}\small\item\em Timeout occurred. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{_e_f___driver___common_8h_abd8e6eb4870238ef0f900911e3935d91}{EF\+\_\+\+DRIVER\+\_\+\+ERROR\+\_\+\+UNSUPPORTED}}~((uint32\+\_\+t)4) +\begin{DoxyCompactList}\small\item\em Operation not supported. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{_e_f___driver___common_8h_aed4f0552faa082d7941ed37ae1e430e4}{EF\+\_\+\+DRIVER\+\_\+\+ERROR\+\_\+\+PARAMETER}}~((uint32\+\_\+t)5) +\begin{DoxyCompactList}\small\item\em Parameter error. \end{DoxyCompactList}\item +\#define \mbox{\hyperlink{_e_f___driver___common_8h_a89de2e78c0ce8d5b48c0cef064ae3aab}{EF\+\_\+\+DRIVER\+\_\+\+ERROR\+\_\+\+SPECIFIC}}~((uint32\+\_\+t)6) +\begin{DoxyCompactList}\small\item\em Start of driver specific errors. \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsection*{Typedefs} +\begin{DoxyCompactItemize} +\item +typedef uint32\+\_\+t \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} +\begin{DoxyCompactList}\small\item\em A type that is used to return the status of the driver functions. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +C header file for common driver definitions and types. + + + +\doxysubsection{Macro Definition Documentation} +\mbox{\Hypertarget{_e_f___driver___common_8h_adf96107766b856292d4f08a495064c7e}\label{_e_f___driver___common_8h_adf96107766b856292d4f08a495064c7e}} +\index{EF\_Driver\_Common.h@{EF\_Driver\_Common.h}!EF\_DRIVER\_ERROR@{EF\_DRIVER\_ERROR}} +\index{EF\_DRIVER\_ERROR@{EF\_DRIVER\_ERROR}!EF\_Driver\_Common.h@{EF\_Driver\_Common.h}} +\doxysubsubsection{\texorpdfstring{EF\_DRIVER\_ERROR}{EF\_DRIVER\_ERROR}} +{\footnotesize\ttfamily \#define EF\+\_\+\+DRIVER\+\_\+\+ERROR~((uint32\+\_\+t)1)} + + + +Unspecified error. + +\mbox{\Hypertarget{_e_f___driver___common_8h_a9b7e06e07ac1038e9cc63d5f25d681fb}\label{_e_f___driver___common_8h_a9b7e06e07ac1038e9cc63d5f25d681fb}} +\index{EF\_Driver\_Common.h@{EF\_Driver\_Common.h}!EF\_DRIVER\_ERROR\_BUSY@{EF\_DRIVER\_ERROR\_BUSY}} +\index{EF\_DRIVER\_ERROR\_BUSY@{EF\_DRIVER\_ERROR\_BUSY}!EF\_Driver\_Common.h@{EF\_Driver\_Common.h}} +\doxysubsubsection{\texorpdfstring{EF\_DRIVER\_ERROR\_BUSY}{EF\_DRIVER\_ERROR\_BUSY}} +{\footnotesize\ttfamily \#define EF\+\_\+\+DRIVER\+\_\+\+ERROR\+\_\+\+BUSY~((uint32\+\_\+t)2)} + + + +Driver is busy. + +\mbox{\Hypertarget{_e_f___driver___common_8h_aed4f0552faa082d7941ed37ae1e430e4}\label{_e_f___driver___common_8h_aed4f0552faa082d7941ed37ae1e430e4}} +\index{EF\_Driver\_Common.h@{EF\_Driver\_Common.h}!EF\_DRIVER\_ERROR\_PARAMETER@{EF\_DRIVER\_ERROR\_PARAMETER}} +\index{EF\_DRIVER\_ERROR\_PARAMETER@{EF\_DRIVER\_ERROR\_PARAMETER}!EF\_Driver\_Common.h@{EF\_Driver\_Common.h}} +\doxysubsubsection{\texorpdfstring{EF\_DRIVER\_ERROR\_PARAMETER}{EF\_DRIVER\_ERROR\_PARAMETER}} +{\footnotesize\ttfamily \#define EF\+\_\+\+DRIVER\+\_\+\+ERROR\+\_\+\+PARAMETER~((uint32\+\_\+t)5)} + + + +Parameter error. + +\mbox{\Hypertarget{_e_f___driver___common_8h_a89de2e78c0ce8d5b48c0cef064ae3aab}\label{_e_f___driver___common_8h_a89de2e78c0ce8d5b48c0cef064ae3aab}} +\index{EF\_Driver\_Common.h@{EF\_Driver\_Common.h}!EF\_DRIVER\_ERROR\_SPECIFIC@{EF\_DRIVER\_ERROR\_SPECIFIC}} +\index{EF\_DRIVER\_ERROR\_SPECIFIC@{EF\_DRIVER\_ERROR\_SPECIFIC}!EF\_Driver\_Common.h@{EF\_Driver\_Common.h}} +\doxysubsubsection{\texorpdfstring{EF\_DRIVER\_ERROR\_SPECIFIC}{EF\_DRIVER\_ERROR\_SPECIFIC}} +{\footnotesize\ttfamily \#define EF\+\_\+\+DRIVER\+\_\+\+ERROR\+\_\+\+SPECIFIC~((uint32\+\_\+t)6)} + + + +Start of driver specific errors. + +\mbox{\Hypertarget{_e_f___driver___common_8h_a26b87ad6f8f1d017af3ee034bd178795}\label{_e_f___driver___common_8h_a26b87ad6f8f1d017af3ee034bd178795}} +\index{EF\_Driver\_Common.h@{EF\_Driver\_Common.h}!EF\_DRIVER\_ERROR\_TIMEOUT@{EF\_DRIVER\_ERROR\_TIMEOUT}} +\index{EF\_DRIVER\_ERROR\_TIMEOUT@{EF\_DRIVER\_ERROR\_TIMEOUT}!EF\_Driver\_Common.h@{EF\_Driver\_Common.h}} +\doxysubsubsection{\texorpdfstring{EF\_DRIVER\_ERROR\_TIMEOUT}{EF\_DRIVER\_ERROR\_TIMEOUT}} +{\footnotesize\ttfamily \#define EF\+\_\+\+DRIVER\+\_\+\+ERROR\+\_\+\+TIMEOUT~((uint32\+\_\+t)3)} + + + +Timeout occurred. + +\mbox{\Hypertarget{_e_f___driver___common_8h_abd8e6eb4870238ef0f900911e3935d91}\label{_e_f___driver___common_8h_abd8e6eb4870238ef0f900911e3935d91}} +\index{EF\_Driver\_Common.h@{EF\_Driver\_Common.h}!EF\_DRIVER\_ERROR\_UNSUPPORTED@{EF\_DRIVER\_ERROR\_UNSUPPORTED}} +\index{EF\_DRIVER\_ERROR\_UNSUPPORTED@{EF\_DRIVER\_ERROR\_UNSUPPORTED}!EF\_Driver\_Common.h@{EF\_Driver\_Common.h}} +\doxysubsubsection{\texorpdfstring{EF\_DRIVER\_ERROR\_UNSUPPORTED}{EF\_DRIVER\_ERROR\_UNSUPPORTED}} +{\footnotesize\ttfamily \#define EF\+\_\+\+DRIVER\+\_\+\+ERROR\+\_\+\+UNSUPPORTED~((uint32\+\_\+t)4)} + + + +Operation not supported. + +\mbox{\Hypertarget{_e_f___driver___common_8h_ab56c746d5d1672835c101f00f7c90b7c}\label{_e_f___driver___common_8h_ab56c746d5d1672835c101f00f7c90b7c}} +\index{EF\_Driver\_Common.h@{EF\_Driver\_Common.h}!EF\_DRIVER\_OK@{EF\_DRIVER\_OK}} +\index{EF\_DRIVER\_OK@{EF\_DRIVER\_OK}!EF\_Driver\_Common.h@{EF\_Driver\_Common.h}} +\doxysubsubsection{\texorpdfstring{EF\_DRIVER\_OK}{EF\_DRIVER\_OK}} +{\footnotesize\ttfamily \#define EF\+\_\+\+DRIVER\+\_\+\+OK~((uint32\+\_\+t)0)} + + + +Operation succeeded. + + + +\doxysubsection{Typedef Documentation} +\mbox{\Hypertarget{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}\label{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}} +\index{EF\_Driver\_Common.h@{EF\_Driver\_Common.h}!EF\_DRIVER\_STATUS@{EF\_DRIVER\_STATUS}} +\index{EF\_DRIVER\_STATUS@{EF\_DRIVER\_STATUS}!EF\_Driver\_Common.h@{EF\_Driver\_Common.h}} +\doxysubsubsection{\texorpdfstring{EF\_DRIVER\_STATUS}{EF\_DRIVER\_STATUS}} +{\footnotesize\ttfamily typedef uint32\+\_\+t \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}}} + + + +A type that is used to return the status of the driver functions. + diff --git a/docs/doxygen/latex/_e_f___driver___common_8h_source.tex b/docs/doxygen/latex/_e_f___driver___common_8h_source.tex new file mode 100644 index 0000000..42a588e --- /dev/null +++ b/docs/doxygen/latex/_e_f___driver___common_8h_source.tex @@ -0,0 +1,69 @@ +\hypertarget{_e_f___driver___common_8h_source}{}\doxysection{EF\+\_\+\+Driver\+\_\+\+Common.\+h} +\mbox{\hyperlink{_e_f___driver___common_8h}{Go to the documentation of this file.}} +\begin{DoxyCode}{0} +\DoxyCodeLine{00001\ \textcolor{comment}{/*}} +\DoxyCodeLine{00002\ \textcolor{comment}{\ \ \ \ Copyright\ 2025\ Efabless\ Corp.}} +\DoxyCodeLine{00003\ \textcolor{comment}{}} +\DoxyCodeLine{00004\ \textcolor{comment}{}} +\DoxyCodeLine{00005\ \textcolor{comment}{\ \ \ \ Licensed\ under\ the\ Apache\ License,\ Version\ 2.0\ (the\ "{}License"{});}} +\DoxyCodeLine{00006\ \textcolor{comment}{\ \ \ \ you\ may\ not\ use\ this\ file\ except\ in\ compliance\ with\ the\ License.}} +\DoxyCodeLine{00007\ \textcolor{comment}{\ \ \ \ You\ may\ obtain\ a\ copy\ of\ the\ License\ at}} +\DoxyCodeLine{00008\ \textcolor{comment}{}} +\DoxyCodeLine{00009\ \textcolor{comment}{\ \ \ \ \ \ \ \ www.apache.org/licenses/LICENSE-\/2.0}} +\DoxyCodeLine{00010\ \textcolor{comment}{}} +\DoxyCodeLine{00011\ \textcolor{comment}{\ \ \ \ Unless\ required\ by\ applicable\ law\ or\ agreed\ to\ in\ writing,\ software}} +\DoxyCodeLine{00012\ \textcolor{comment}{\ \ \ \ distributed\ under\ the\ License\ is\ distributed\ on\ an\ "{}AS\ IS"{}\ BASIS,}} +\DoxyCodeLine{00013\ \textcolor{comment}{\ \ \ \ WITHOUT\ WARRANTIES\ OR\ CONDITIONS\ OF\ ANY\ KIND,\ either\ express\ or\ implied.}} +\DoxyCodeLine{00014\ \textcolor{comment}{\ \ \ \ See\ the\ License\ for\ the\ specific\ language\ governing\ permissions\ and}} +\DoxyCodeLine{00015\ \textcolor{comment}{\ \ \ \ limitations\ under\ the\ License.}} +\DoxyCodeLine{00016\ \textcolor{comment}{}} +\DoxyCodeLine{00017\ \textcolor{comment}{*/}} +\DoxyCodeLine{00018\ } +\DoxyCodeLine{00025\ \textcolor{preprocessor}{\#ifndef\ EF\_DRIVER\_COMMON\_H}} +\DoxyCodeLine{00026\ \textcolor{preprocessor}{\#define\ EF\_DRIVER\_COMMON\_H}} +\DoxyCodeLine{00027\ } +\DoxyCodeLine{00028\ \textcolor{comment}{/******************************************************************************}} +\DoxyCodeLine{00029\ \textcolor{comment}{*\ Includes}} +\DoxyCodeLine{00030\ \textcolor{comment}{******************************************************************************/}} +\DoxyCodeLine{00031\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00032\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00033\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00034\ } +\DoxyCodeLine{00035\ } +\DoxyCodeLine{00036\ \textcolor{comment}{/******************************************************************************}} +\DoxyCodeLine{00037\ \textcolor{comment}{*\ Macros\ and\ Constants}} +\DoxyCodeLine{00038\ \textcolor{comment}{******************************************************************************/}} +\DoxyCodeLine{00039\ \textcolor{comment}{/*\ General\ return\ codes\ */}} +\DoxyCodeLine{00040\ \textcolor{preprocessor}{\#define\ EF\_DRIVER\_OK\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)0)\ \ \ }} +\DoxyCodeLine{00041\ \textcolor{preprocessor}{\#define\ EF\_DRIVER\_ERROR\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)1)\ \ \ }} +\DoxyCodeLine{00042\ \textcolor{preprocessor}{\#define\ EF\_DRIVER\_ERROR\_BUSY\ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)2)\ \ \ }} +\DoxyCodeLine{00043\ \textcolor{preprocessor}{\#define\ EF\_DRIVER\_ERROR\_TIMEOUT\ \ \ \ \ \ \ \ \ ((uint32\_t)3)\ \ \ }} +\DoxyCodeLine{00044\ \textcolor{preprocessor}{\#define\ EF\_DRIVER\_ERROR\_UNSUPPORTED\ \ \ \ \ ((uint32\_t)4)\ \ \ }} +\DoxyCodeLine{00045\ \textcolor{preprocessor}{\#define\ EF\_DRIVER\_ERROR\_PARAMETER\ \ \ \ \ \ \ ((uint32\_t)5)\ \ \ }} +\DoxyCodeLine{00046\ \textcolor{preprocessor}{\#define\ EF\_DRIVER\_ERROR\_SPECIFIC\ \ \ \ \ \ \ \ ((uint32\_t)6)\ \ \ }} +\DoxyCodeLine{00047\ } +\DoxyCodeLine{00048\ } +\DoxyCodeLine{00049\ \textcolor{comment}{/******************************************************************************}} +\DoxyCodeLine{00050\ \textcolor{comment}{*\ Typedefs\ and\ Enums}} +\DoxyCodeLine{00051\ \textcolor{comment}{******************************************************************************/}} +\DoxyCodeLine{00052\ } +\DoxyCodeLine{00053\ \textcolor{keyword}{typedef}\ uint32\_t\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}};\ \ \ \ \ \ } +\DoxyCodeLine{00054\ } +\DoxyCodeLine{00055\ } +\DoxyCodeLine{00056\ \textcolor{comment}{/******************************************************************************}} +\DoxyCodeLine{00057\ \textcolor{comment}{*\ External\ Variables}} +\DoxyCodeLine{00058\ \textcolor{comment}{******************************************************************************/}} +\DoxyCodeLine{00059\ } +\DoxyCodeLine{00060\ } +\DoxyCodeLine{00061\ \textcolor{comment}{/******************************************************************************}} +\DoxyCodeLine{00062\ \textcolor{comment}{*\ Function\ Prototypes}} +\DoxyCodeLine{00063\ \textcolor{comment}{******************************************************************************/}} +\DoxyCodeLine{00064\ } +\DoxyCodeLine{00065\ } +\DoxyCodeLine{00066\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ EF\_DRIVER\_COMMON\_H\ }} +\DoxyCodeLine{00067\ } +\DoxyCodeLine{00068\ \textcolor{comment}{/******************************************************************************}} +\DoxyCodeLine{00069\ \textcolor{comment}{*\ End\ of\ File}} +\DoxyCodeLine{00070\ \textcolor{comment}{******************************************************************************/}} + +\end{DoxyCode} diff --git a/docs/doxygen/latex/_e_f___s_p_i_8c.tex b/docs/doxygen/latex/_e_f___s_p_i_8c.tex new file mode 100644 index 0000000..2663f9f --- /dev/null +++ b/docs/doxygen/latex/_e_f___s_p_i_8c.tex @@ -0,0 +1,487 @@ +\hypertarget{_e_f___s_p_i_8c}{}\doxysection{EF\+\_\+\+SPI.\+c File Reference} +\label{_e_f___s_p_i_8c}\index{EF\_SPI.c@{EF\_SPI.c}} + + +C file for SPI APIs which contains the function Implementations. + + +{\ttfamily \#include \char`\"{}EF\+\_\+\+SPI.\+h\char`\"{}}\newline +\doxysubsection*{Macros} +\begin{DoxyCompactItemize} +\item +\#define \mbox{\hyperlink{_e_f___s_p_i_8c_a978c9c8ed8e2e80672c5cc0a612cc869}{EF\+\_\+\+SPI\+\_\+C}} +\item +\#define \mbox{\hyperlink{_e_f___s_p_i_8c_a5e9071558e9f7bd171d07d7f5fc207fe}{EF\+\_\+\+SPI\+\_\+\+TXDATA\+\_\+\+MAX\+\_\+\+VALUE}}~0x000000\+FF +\end{DoxyCompactItemize} +\doxysubsection*{Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_a825604b02b3136b2ae6b57cd74f7f885}{EF\+\_\+\+SPI\+\_\+set\+Gclk\+Enable}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t value) +\begin{DoxyCompactList}\small\item\em sets the GCLK enable bit in the SPI register to a certain value \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_a1e57164045e2dc6ba9f3ebffc30f5985}{EF\+\_\+\+SPI\+\_\+write\+Data}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t data) +\begin{DoxyCompactList}\small\item\em writes a byte of data to the TXDATA register \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_a76b8a68e19fbf8c73de0f0c6a2f1ffa0}{EF\+\_\+\+SPI\+\_\+read\+Data}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t $\ast$data) +\begin{DoxyCompactList}\small\item\em reads a byte of data from the RXDATA register \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_af12037c75dc828ac46a94b871bce315f}{EF\+\_\+\+SPI\+\_\+writepolarity}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, bool polarity) +\begin{DoxyCompactList}\small\item\em sets the clock polarity of the SPI in the CFG register to a certain value \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_a0391f44435674dff1569e37997485578}{EF\+\_\+\+SPI\+\_\+write\+Phase}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, bool phase) +\begin{DoxyCompactList}\small\item\em sets the clock phase of the SPI in the CFG register to a certain value \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_a5ba73cb278ddca9c4e4d7e2de81d086c}{EF\+\_\+\+SPI\+\_\+read\+Tx\+Fifo\+Empty}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t $\ast$TXfifo\+\_\+state) +\begin{DoxyCompactList}\small\item\em reads the TX FIFO empty flag from the STATUS register \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_a143d8c3d4948fe4b3b673d4f7d37dc22}{EF\+\_\+\+SPI\+\_\+read\+Rx\+Fifo\+Empty}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t $\ast$RXfifo\+\_\+state) +\begin{DoxyCompactList}\small\item\em reads the RX FIFO empty flag from the STATUS register \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_a37d6919aa636f75a7ad383d5c03a6595}{EF\+\_\+\+SPI\+\_\+wait\+Tx\+Fifo\+Empty}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi) +\begin{DoxyCompactList}\small\item\em waits for the TX FIFO to be empty by polling the TX FIFO empty flag in the STATUS register \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_a07fa3d20aee584b19921035cd715b71b}{EF\+\_\+\+SPI\+\_\+wait\+Rx\+Fifo\+Not\+Empty}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi) +\begin{DoxyCompactList}\small\item\em waits for the RX FIFO to be not empty by polling the RX FIFO empty flag in the STATUS register \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_af5ad666ce47ff6bd16cff1627c33372a}{EF\+\_\+\+SPI\+\_\+\+Fifo\+Rx\+Flush}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi) +\begin{DoxyCompactList}\small\item\em flushes the RX FIFO by writing to the RX FIFO FLUSH register \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_a17bb022c768cb9acb92e540dd0d5dcce}{EF\+\_\+\+SPI\+\_\+enable}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi) +\begin{DoxyCompactList}\small\item\em enables the SPI by setting the enable bit in the CTRL register to 1, enables spi master pulse generation \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_a779126c0c77ab36a9747aa8fe113c08d}{EF\+\_\+\+SPI\+\_\+disable}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi) +\begin{DoxyCompactList}\small\item\em disables the SPI by setting the enable bit in the CTRL register to 0, disables spi master pulse generation \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_a9b5b4e72c33af4b4a7fc3ab0cdadde2e}{EF\+\_\+\+SPI\+\_\+enable\+Rx}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi) +\begin{DoxyCompactList}\small\item\em enables the RX by setting the RX enable bit in the CTRL register to 1, enables storing bytes recieved from slave in RX FIFO \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_a3c26e6c7e5aa70bb44ee388a811aa762}{EF\+\_\+\+SPI\+\_\+disable\+Rx}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi) +\begin{DoxyCompactList}\small\item\em disables the RX by setting the RX enable bit in the CTRL register to 0, disables storing bytes recieved from slave in RX FIFO \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_a8b4118aeb52c24b0b9b20518c920d414}{EF\+\_\+\+SPI\+\_\+assert\+Cs}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi) +\begin{DoxyCompactList}\small\item\em asserts the CS line by setting the SS bit in the CTRL register to 1, asserts the CS line to start a transaction with the slave \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_ab6cdc2b71232f8f3d3fa1e6f9fa6d5ae}{EF\+\_\+\+SPI\+\_\+deassert\+Cs}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi) +\begin{DoxyCompactList}\small\item\em deasserts the CS line by setting the SS bit in the CTRL register to 0, deasserts the CS line to end a transaction with the slave \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_a475700f9498d9ab54b03d3e81ace1f0a}{EF\+\_\+\+SPI\+\_\+set\+IM}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t mask) +\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_a0cbec2da38446744274c64e9585e846c}{EF\+\_\+\+SPI\+\_\+get\+IM}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t $\ast$mask) +\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_a83c5fa1a6e95392f2b3ab02661f40dec}{EF\+\_\+\+SPI\+\_\+get\+RIS}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t $\ast$mask) +\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8c_a8f3ae4eb3cca3c9892bf0fd2ea1af96e}{EF\+\_\+\+SPI\+\_\+get\+MIS}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t $\ast$mask) +\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +C file for SPI APIs which contains the function Implementations. + + + +\doxysubsection{Macro Definition Documentation} +\mbox{\Hypertarget{_e_f___s_p_i_8c_a978c9c8ed8e2e80672c5cc0a612cc869}\label{_e_f___s_p_i_8c_a978c9c8ed8e2e80672c5cc0a612cc869}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_C@{EF\_SPI\_C}} +\index{EF\_SPI\_C@{EF\_SPI\_C}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_C}{EF\_SPI\_C}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+C} + +\mbox{\Hypertarget{_e_f___s_p_i_8c_a5e9071558e9f7bd171d07d7f5fc207fe}\label{_e_f___s_p_i_8c_a5e9071558e9f7bd171d07d7f5fc207fe}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_TXDATA\_MAX\_VALUE@{EF\_SPI\_TXDATA\_MAX\_VALUE}} +\index{EF\_SPI\_TXDATA\_MAX\_VALUE@{EF\_SPI\_TXDATA\_MAX\_VALUE}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_TXDATA\_MAX\_VALUE}{EF\_SPI\_TXDATA\_MAX\_VALUE}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+TXDATA\+\_\+\+MAX\+\_\+\+VALUE~0x000000\+FF} + + + +\doxysubsection{Function Documentation} +\mbox{\Hypertarget{_e_f___s_p_i_8c_a8b4118aeb52c24b0b9b20518c920d414}\label{_e_f___s_p_i_8c_a8b4118aeb52c24b0b9b20518c920d414}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_assertCs@{EF\_SPI\_assertCs}} +\index{EF\_SPI\_assertCs@{EF\_SPI\_assertCs}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_assertCs()}{EF\_SPI\_assertCs()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+assert\+Cs (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi }\end{DoxyParamCaption})} + + + +asserts the CS line by setting the SS bit in the CTRL register to 1, asserts the CS line to start a transaction with the slave + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_ab6cdc2b71232f8f3d3fa1e6f9fa6d5ae}\label{_e_f___s_p_i_8c_ab6cdc2b71232f8f3d3fa1e6f9fa6d5ae}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_deassertCs@{EF\_SPI\_deassertCs}} +\index{EF\_SPI\_deassertCs@{EF\_SPI\_deassertCs}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_deassertCs()}{EF\_SPI\_deassertCs()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+deassert\+Cs (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi }\end{DoxyParamCaption})} + + + +deasserts the CS line by setting the SS bit in the CTRL register to 0, deasserts the CS line to end a transaction with the slave + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_a779126c0c77ab36a9747aa8fe113c08d}\label{_e_f___s_p_i_8c_a779126c0c77ab36a9747aa8fe113c08d}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_disable@{EF\_SPI\_disable}} +\index{EF\_SPI\_disable@{EF\_SPI\_disable}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_disable()}{EF\_SPI\_disable()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+disable (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi }\end{DoxyParamCaption})} + + + +disables the SPI by setting the enable bit in the CTRL register to 0, disables spi master pulse generation + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_a3c26e6c7e5aa70bb44ee388a811aa762}\label{_e_f___s_p_i_8c_a3c26e6c7e5aa70bb44ee388a811aa762}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_disableRx@{EF\_SPI\_disableRx}} +\index{EF\_SPI\_disableRx@{EF\_SPI\_disableRx}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_disableRx()}{EF\_SPI\_disableRx()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+disable\+Rx (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi }\end{DoxyParamCaption})} + + + +disables the RX by setting the RX enable bit in the CTRL register to 0, disables storing bytes recieved from slave in RX FIFO + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_a17bb022c768cb9acb92e540dd0d5dcce}\label{_e_f___s_p_i_8c_a17bb022c768cb9acb92e540dd0d5dcce}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_enable@{EF\_SPI\_enable}} +\index{EF\_SPI\_enable@{EF\_SPI\_enable}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_enable()}{EF\_SPI\_enable()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+enable (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi }\end{DoxyParamCaption})} + + + +enables the SPI by setting the enable bit in the CTRL register to 1, enables spi master pulse generation + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_a9b5b4e72c33af4b4a7fc3ab0cdadde2e}\label{_e_f___s_p_i_8c_a9b5b4e72c33af4b4a7fc3ab0cdadde2e}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_enableRx@{EF\_SPI\_enableRx}} +\index{EF\_SPI\_enableRx@{EF\_SPI\_enableRx}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_enableRx()}{EF\_SPI\_enableRx()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+enable\+Rx (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi }\end{DoxyParamCaption})} + + + +enables the RX by setting the RX enable bit in the CTRL register to 1, enables storing bytes recieved from slave in RX FIFO + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_af5ad666ce47ff6bd16cff1627c33372a}\label{_e_f___s_p_i_8c_af5ad666ce47ff6bd16cff1627c33372a}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_FifoRxFlush@{EF\_SPI\_FifoRxFlush}} +\index{EF\_SPI\_FifoRxFlush@{EF\_SPI\_FifoRxFlush}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_FifoRxFlush()}{EF\_SPI\_FifoRxFlush()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+\+Fifo\+Rx\+Flush (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi }\end{DoxyParamCaption})} + + + +flushes the RX FIFO by writing to the RX FIFO FLUSH register + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_a0cbec2da38446744274c64e9585e846c}\label{_e_f___s_p_i_8c_a0cbec2da38446744274c64e9585e846c}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_getIM@{EF\_SPI\_getIM}} +\index{EF\_SPI\_getIM@{EF\_SPI\_getIM}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_getIM()}{EF\_SPI\_getIM()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+get\+IM (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t $\ast$}]{mask }\end{DoxyParamCaption})} + +gets the value of the Interrupts Masking Register; which enable and disables interrupts The mask value is a 6-\/bit value, where each bit corresponds to a specific interrupt +\begin{DoxyItemize} +\item bit 0 TXE \+: Transmit FIFO is Empty. +\item bit 1 TXF \+: Transmit FIFO is Full. +\item bit 2 RXE \+: Receive FIFO is Empty. +\item bit 3 RXF \+: Receive FIFO is Full. +\item bit 4 TXB \+: Transmit FIFO level is Below Threshold. +\item bit 5 RXA \+: Receive FIFO level is Above Threshold. +\end{DoxyItemize} + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ out}} & {\em mask} & The required mask value\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_a8f3ae4eb3cca3c9892bf0fd2ea1af96e}\label{_e_f___s_p_i_8c_a8f3ae4eb3cca3c9892bf0fd2ea1af96e}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_getMIS@{EF\_SPI\_getMIS}} +\index{EF\_SPI\_getMIS@{EF\_SPI\_getMIS}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_getMIS()}{EF\_SPI\_getMIS()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+get\+MIS (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t $\ast$}]{mask }\end{DoxyParamCaption})} + +gets the value of the Masked Interrupt Status Register; which shows the status of the interrupts after masking (ANDing) RIS by IM. The mask value is a 6-\/bit value, where each bit corresponds to a specific interrupt +\begin{DoxyItemize} +\item bit 0 TXE \+: Transmit FIFO is Empty. +\item bit 1 TXF \+: Transmit FIFO is Full. +\item bit 2 RXE \+: Receive FIFO is Empty. +\item bit 3 RXF \+: Receive FIFO is Full. +\item bit 4 TXB \+: Transmit FIFO level is Below Threshold. +\item bit 5 RXA \+: Receive FIFO level is Above Threshold. +\end{DoxyItemize} + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ out}} & {\em mask} & The required mask value\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_a83c5fa1a6e95392f2b3ab02661f40dec}\label{_e_f___s_p_i_8c_a83c5fa1a6e95392f2b3ab02661f40dec}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_getRIS@{EF\_SPI\_getRIS}} +\index{EF\_SPI\_getRIS@{EF\_SPI\_getRIS}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_getRIS()}{EF\_SPI\_getRIS()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+get\+RIS (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t $\ast$}]{mask }\end{DoxyParamCaption})} + +gets the value of the Raw Interrupt Status Register; which shows the status of the interrupts The mask value is a 6-\/bit value, where each bit corresponds to a specific interrupt +\begin{DoxyItemize} +\item bit 0 TXE \+: Transmit FIFO is Empty. +\item bit 1 TXF \+: Transmit FIFO is Full. +\item bit 2 RXE \+: Receive FIFO is Empty. +\item bit 3 RXF \+: Receive FIFO is Full. +\item bit 4 TXB \+: Transmit FIFO level is Below Threshold. +\item bit 5 RXA \+: Receive FIFO level is Above Threshold. +\end{DoxyItemize} + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ out}} & {\em mask} & The required mask value\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_a76b8a68e19fbf8c73de0f0c6a2f1ffa0}\label{_e_f___s_p_i_8c_a76b8a68e19fbf8c73de0f0c6a2f1ffa0}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_readData@{EF\_SPI\_readData}} +\index{EF\_SPI\_readData@{EF\_SPI\_readData}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_readData()}{EF\_SPI\_readData()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+read\+Data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t $\ast$}]{data }\end{DoxyParamCaption})} + + + +reads a byte of data from the RXDATA register + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ out}} & {\em data} & The data read from the RXDATA register\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_a143d8c3d4948fe4b3b673d4f7d37dc22}\label{_e_f___s_p_i_8c_a143d8c3d4948fe4b3b673d4f7d37dc22}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_readRxFifoEmpty@{EF\_SPI\_readRxFifoEmpty}} +\index{EF\_SPI\_readRxFifoEmpty@{EF\_SPI\_readRxFifoEmpty}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_readRxFifoEmpty()}{EF\_SPI\_readRxFifoEmpty()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+read\+Rx\+Fifo\+Empty (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t $\ast$}]{RXfifo\+\_\+state }\end{DoxyParamCaption})} + + + +reads the RX FIFO empty flag from the STATUS register + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ out}} & {\em RXfifo\+\_\+state} & The RX FIFO empty flag value\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_a5ba73cb278ddca9c4e4d7e2de81d086c}\label{_e_f___s_p_i_8c_a5ba73cb278ddca9c4e4d7e2de81d086c}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_readTxFifoEmpty@{EF\_SPI\_readTxFifoEmpty}} +\index{EF\_SPI\_readTxFifoEmpty@{EF\_SPI\_readTxFifoEmpty}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_readTxFifoEmpty()}{EF\_SPI\_readTxFifoEmpty()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+read\+Tx\+Fifo\+Empty (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t $\ast$}]{TXfifo\+\_\+state }\end{DoxyParamCaption})} + + + +reads the TX FIFO empty flag from the STATUS register + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ out}} & {\em TXfifo\+\_\+state} & The TX FIFO empty flag value\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_a825604b02b3136b2ae6b57cd74f7f885}\label{_e_f___s_p_i_8c_a825604b02b3136b2ae6b57cd74f7f885}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_setGclkEnable@{EF\_SPI\_setGclkEnable}} +\index{EF\_SPI\_setGclkEnable@{EF\_SPI\_setGclkEnable}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_setGclkEnable()}{EF\_SPI\_setGclkEnable()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+set\+Gclk\+Enable (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t}]{value }\end{DoxyParamCaption})} + + + +sets the GCLK enable bit in the SPI register to a certain value + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ in}} & {\em value} & The value of the GCLK enable bit\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_a475700f9498d9ab54b03d3e81ace1f0a}\label{_e_f___s_p_i_8c_a475700f9498d9ab54b03d3e81ace1f0a}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_setIM@{EF\_SPI\_setIM}} +\index{EF\_SPI\_setIM@{EF\_SPI\_setIM}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_setIM()}{EF\_SPI\_setIM()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+set\+IM (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t}]{mask }\end{DoxyParamCaption})} + +sets the value of the Interrupts Masking Register; which enable and disables interrupts The mask value is a 6-\/bit value, where each bit corresponds to a specific interrupt +\begin{DoxyItemize} +\item bit 0 TXE \+: Transmit FIFO is Empty. +\item bit 1 TXF \+: Transmit FIFO is Full. +\item bit 2 RXE \+: Receive FIFO is Empty. +\item bit 3 RXF \+: Receive FIFO is Full. +\item bit 4 TXB \+: Transmit FIFO level is Below Threshold. +\item bit 5 RXA \+: Receive FIFO level is Above Threshold. +\end{DoxyItemize} + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ in}} & {\em mask} & The required mask value\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_a07fa3d20aee584b19921035cd715b71b}\label{_e_f___s_p_i_8c_a07fa3d20aee584b19921035cd715b71b}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_waitRxFifoNotEmpty@{EF\_SPI\_waitRxFifoNotEmpty}} +\index{EF\_SPI\_waitRxFifoNotEmpty@{EF\_SPI\_waitRxFifoNotEmpty}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_waitRxFifoNotEmpty()}{EF\_SPI\_waitRxFifoNotEmpty()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+wait\+Rx\+Fifo\+Not\+Empty (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi }\end{DoxyParamCaption})} + + + +waits for the RX FIFO to be not empty by polling the RX FIFO empty flag in the STATUS register + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_a37d6919aa636f75a7ad383d5c03a6595}\label{_e_f___s_p_i_8c_a37d6919aa636f75a7ad383d5c03a6595}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_waitTxFifoEmpty@{EF\_SPI\_waitTxFifoEmpty}} +\index{EF\_SPI\_waitTxFifoEmpty@{EF\_SPI\_waitTxFifoEmpty}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_waitTxFifoEmpty()}{EF\_SPI\_waitTxFifoEmpty()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+wait\+Tx\+Fifo\+Empty (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi }\end{DoxyParamCaption})} + + + +waits for the TX FIFO to be empty by polling the TX FIFO empty flag in the STATUS register + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_a1e57164045e2dc6ba9f3ebffc30f5985}\label{_e_f___s_p_i_8c_a1e57164045e2dc6ba9f3ebffc30f5985}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_writeData@{EF\_SPI\_writeData}} +\index{EF\_SPI\_writeData@{EF\_SPI\_writeData}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_writeData()}{EF\_SPI\_writeData()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+write\+Data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t}]{data }\end{DoxyParamCaption})} + + + +writes a byte of data to the TXDATA register + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ in}} & {\em data} & The data to be written to the TXDATA register\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_a0391f44435674dff1569e37997485578}\label{_e_f___s_p_i_8c_a0391f44435674dff1569e37997485578}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_writePhase@{EF\_SPI\_writePhase}} +\index{EF\_SPI\_writePhase@{EF\_SPI\_writePhase}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_writePhase()}{EF\_SPI\_writePhase()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+write\+Phase (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{bool}]{phase }\end{DoxyParamCaption})} + + + +sets the clock phase of the SPI in the CFG register to a certain value + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ in}} & {\em phase} & The clock phase value\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8c_af12037c75dc828ac46a94b871bce315f}\label{_e_f___s_p_i_8c_af12037c75dc828ac46a94b871bce315f}} +\index{EF\_SPI.c@{EF\_SPI.c}!EF\_SPI\_writepolarity@{EF\_SPI\_writepolarity}} +\index{EF\_SPI\_writepolarity@{EF\_SPI\_writepolarity}!EF\_SPI.c@{EF\_SPI.c}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_writepolarity()}{EF\_SPI\_writepolarity()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+writepolarity (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{bool}]{polarity }\end{DoxyParamCaption})} + + + +sets the clock polarity of the SPI in the CFG register to a certain value + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ in}} & {\em polarity} & The clock polarity value\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} diff --git a/docs/doxygen/latex/_e_f___s_p_i_8h.tex b/docs/doxygen/latex/_e_f___s_p_i_8h.tex new file mode 100644 index 0000000..74d7e56 --- /dev/null +++ b/docs/doxygen/latex/_e_f___s_p_i_8h.tex @@ -0,0 +1,494 @@ +\hypertarget{_e_f___s_p_i_8h}{}\doxysection{EF\+\_\+\+SPI.\+h File Reference} +\label{_e_f___s_p_i_8h}\index{EF\_SPI.h@{EF\_SPI.h}} + + +C header file for SPI APIs which contains the function prototypes. + + +{\ttfamily \#include \char`\"{}EF\+\_\+\+SPI\+\_\+regs.\+h\char`\"{}}\newline +{\ttfamily \#include \char`\"{}EF\+\_\+\+Driver\+\_\+\+Common.\+h\char`\"{}}\newline +\doxysubsection*{Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_a825604b02b3136b2ae6b57cd74f7f885}{EF\+\_\+\+SPI\+\_\+set\+Gclk\+Enable}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t value) +\begin{DoxyCompactList}\small\item\em sets the GCLK enable bit in the SPI register to a certain value \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_a1e57164045e2dc6ba9f3ebffc30f5985}{EF\+\_\+\+SPI\+\_\+write\+Data}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t data) +\begin{DoxyCompactList}\small\item\em writes a byte of data to the TXDATA register \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_a76b8a68e19fbf8c73de0f0c6a2f1ffa0}{EF\+\_\+\+SPI\+\_\+read\+Data}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t $\ast$data) +\begin{DoxyCompactList}\small\item\em reads a byte of data from the RXDATA register \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_af12037c75dc828ac46a94b871bce315f}{EF\+\_\+\+SPI\+\_\+writepolarity}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, bool polarity) +\begin{DoxyCompactList}\small\item\em sets the clock polarity of the SPI in the CFG register to a certain value \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_a0391f44435674dff1569e37997485578}{EF\+\_\+\+SPI\+\_\+write\+Phase}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, bool phase) +\begin{DoxyCompactList}\small\item\em sets the clock phase of the SPI in the CFG register to a certain value \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_a5ba73cb278ddca9c4e4d7e2de81d086c}{EF\+\_\+\+SPI\+\_\+read\+Tx\+Fifo\+Empty}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t $\ast$TXfifo\+\_\+state) +\begin{DoxyCompactList}\small\item\em reads the TX FIFO empty flag from the STATUS register \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_a143d8c3d4948fe4b3b673d4f7d37dc22}{EF\+\_\+\+SPI\+\_\+read\+Rx\+Fifo\+Empty}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t $\ast$RXfifo\+\_\+state) +\begin{DoxyCompactList}\small\item\em reads the RX FIFO empty flag from the STATUS register \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_a37d6919aa636f75a7ad383d5c03a6595}{EF\+\_\+\+SPI\+\_\+wait\+Tx\+Fifo\+Empty}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi) +\begin{DoxyCompactList}\small\item\em waits for the TX FIFO to be empty by polling the TX FIFO empty flag in the STATUS register \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_a07fa3d20aee584b19921035cd715b71b}{EF\+\_\+\+SPI\+\_\+wait\+Rx\+Fifo\+Not\+Empty}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi) +\begin{DoxyCompactList}\small\item\em waits for the RX FIFO to be not empty by polling the RX FIFO empty flag in the STATUS register \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_af5ad666ce47ff6bd16cff1627c33372a}{EF\+\_\+\+SPI\+\_\+\+Fifo\+Rx\+Flush}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi) +\begin{DoxyCompactList}\small\item\em flushes the RX FIFO by writing to the RX FIFO FLUSH register \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_a17bb022c768cb9acb92e540dd0d5dcce}{EF\+\_\+\+SPI\+\_\+enable}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi) +\begin{DoxyCompactList}\small\item\em enables the SPI by setting the enable bit in the CTRL register to 1, enables spi master pulse generation \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_a779126c0c77ab36a9747aa8fe113c08d}{EF\+\_\+\+SPI\+\_\+disable}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi) +\begin{DoxyCompactList}\small\item\em disables the SPI by setting the enable bit in the CTRL register to 0, disables spi master pulse generation \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_a9b5b4e72c33af4b4a7fc3ab0cdadde2e}{EF\+\_\+\+SPI\+\_\+enable\+Rx}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi) +\begin{DoxyCompactList}\small\item\em enables the RX by setting the RX enable bit in the CTRL register to 1, enables storing bytes recieved from slave in RX FIFO \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_a3c26e6c7e5aa70bb44ee388a811aa762}{EF\+\_\+\+SPI\+\_\+disable\+Rx}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi) +\begin{DoxyCompactList}\small\item\em disables the RX by setting the RX enable bit in the CTRL register to 0, disables storing bytes recieved from slave in RX FIFO \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_a8b4118aeb52c24b0b9b20518c920d414}{EF\+\_\+\+SPI\+\_\+assert\+Cs}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi) +\begin{DoxyCompactList}\small\item\em asserts the CS line by setting the SS bit in the CTRL register to 1, asserts the CS line to start a transaction with the slave \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_ab6cdc2b71232f8f3d3fa1e6f9fa6d5ae}{EF\+\_\+\+SPI\+\_\+deassert\+Cs}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi) +\begin{DoxyCompactList}\small\item\em deasserts the CS line by setting the SS bit in the CTRL register to 0, deasserts the CS line to end a transaction with the slave \end{DoxyCompactList}\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_a475700f9498d9ab54b03d3e81ace1f0a}{EF\+\_\+\+SPI\+\_\+set\+IM}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t mask) +\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_a0cbec2da38446744274c64e9585e846c}{EF\+\_\+\+SPI\+\_\+get\+IM}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t $\ast$mask) +\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_a83c5fa1a6e95392f2b3ab02661f40dec}{EF\+\_\+\+SPI\+\_\+get\+RIS}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t $\ast$mask) +\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_a8f3ae4eb3cca3c9892bf0fd2ea1af96e}{EF\+\_\+\+SPI\+\_\+get\+MIS}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t $\ast$mask) +\item +\mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \mbox{\hyperlink{_e_f___s_p_i_8h_a1bd18073e3f75287527f0ee881546b2a}{EF\+\_\+\+SPI\+\_\+set\+ICR}} (\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} spi, uint32\+\_\+t mask) +\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +C header file for SPI APIs which contains the function prototypes. + + + +\doxysubsection{Function Documentation} +\mbox{\Hypertarget{_e_f___s_p_i_8h_a8b4118aeb52c24b0b9b20518c920d414}\label{_e_f___s_p_i_8h_a8b4118aeb52c24b0b9b20518c920d414}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_assertCs@{EF\_SPI\_assertCs}} +\index{EF\_SPI\_assertCs@{EF\_SPI\_assertCs}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_assertCs()}{EF\_SPI\_assertCs()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+assert\+Cs (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi }\end{DoxyParamCaption})} + + + +asserts the CS line by setting the SS bit in the CTRL register to 1, asserts the CS line to start a transaction with the slave + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_ab6cdc2b71232f8f3d3fa1e6f9fa6d5ae}\label{_e_f___s_p_i_8h_ab6cdc2b71232f8f3d3fa1e6f9fa6d5ae}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_deassertCs@{EF\_SPI\_deassertCs}} +\index{EF\_SPI\_deassertCs@{EF\_SPI\_deassertCs}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_deassertCs()}{EF\_SPI\_deassertCs()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+deassert\+Cs (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi }\end{DoxyParamCaption})} + + + +deasserts the CS line by setting the SS bit in the CTRL register to 0, deasserts the CS line to end a transaction with the slave + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_a779126c0c77ab36a9747aa8fe113c08d}\label{_e_f___s_p_i_8h_a779126c0c77ab36a9747aa8fe113c08d}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_disable@{EF\_SPI\_disable}} +\index{EF\_SPI\_disable@{EF\_SPI\_disable}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_disable()}{EF\_SPI\_disable()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+disable (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi }\end{DoxyParamCaption})} + + + +disables the SPI by setting the enable bit in the CTRL register to 0, disables spi master pulse generation + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_a3c26e6c7e5aa70bb44ee388a811aa762}\label{_e_f___s_p_i_8h_a3c26e6c7e5aa70bb44ee388a811aa762}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_disableRx@{EF\_SPI\_disableRx}} +\index{EF\_SPI\_disableRx@{EF\_SPI\_disableRx}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_disableRx()}{EF\_SPI\_disableRx()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+disable\+Rx (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi }\end{DoxyParamCaption})} + + + +disables the RX by setting the RX enable bit in the CTRL register to 0, disables storing bytes recieved from slave in RX FIFO + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_a17bb022c768cb9acb92e540dd0d5dcce}\label{_e_f___s_p_i_8h_a17bb022c768cb9acb92e540dd0d5dcce}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_enable@{EF\_SPI\_enable}} +\index{EF\_SPI\_enable@{EF\_SPI\_enable}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_enable()}{EF\_SPI\_enable()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+enable (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi }\end{DoxyParamCaption})} + + + +enables the SPI by setting the enable bit in the CTRL register to 1, enables spi master pulse generation + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_a9b5b4e72c33af4b4a7fc3ab0cdadde2e}\label{_e_f___s_p_i_8h_a9b5b4e72c33af4b4a7fc3ab0cdadde2e}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_enableRx@{EF\_SPI\_enableRx}} +\index{EF\_SPI\_enableRx@{EF\_SPI\_enableRx}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_enableRx()}{EF\_SPI\_enableRx()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+enable\+Rx (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi }\end{DoxyParamCaption})} + + + +enables the RX by setting the RX enable bit in the CTRL register to 1, enables storing bytes recieved from slave in RX FIFO + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_af5ad666ce47ff6bd16cff1627c33372a}\label{_e_f___s_p_i_8h_af5ad666ce47ff6bd16cff1627c33372a}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_FifoRxFlush@{EF\_SPI\_FifoRxFlush}} +\index{EF\_SPI\_FifoRxFlush@{EF\_SPI\_FifoRxFlush}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_FifoRxFlush()}{EF\_SPI\_FifoRxFlush()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+\+Fifo\+Rx\+Flush (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi }\end{DoxyParamCaption})} + + + +flushes the RX FIFO by writing to the RX FIFO FLUSH register + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_a0cbec2da38446744274c64e9585e846c}\label{_e_f___s_p_i_8h_a0cbec2da38446744274c64e9585e846c}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_getIM@{EF\_SPI\_getIM}} +\index{EF\_SPI\_getIM@{EF\_SPI\_getIM}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_getIM()}{EF\_SPI\_getIM()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+get\+IM (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t $\ast$}]{mask }\end{DoxyParamCaption})} + +gets the value of the Interrupts Masking Register; which enable and disables interrupts The mask value is a 6-\/bit value, where each bit corresponds to a specific interrupt +\begin{DoxyItemize} +\item bit 0 TXE \+: Transmit FIFO is Empty. +\item bit 1 TXF \+: Transmit FIFO is Full. +\item bit 2 RXE \+: Receive FIFO is Empty. +\item bit 3 RXF \+: Receive FIFO is Full. +\item bit 4 TXB \+: Transmit FIFO level is Below Threshold. +\item bit 5 RXA \+: Receive FIFO level is Above Threshold. +\end{DoxyItemize} + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ out}} & {\em mask} & The required mask value\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_a8f3ae4eb3cca3c9892bf0fd2ea1af96e}\label{_e_f___s_p_i_8h_a8f3ae4eb3cca3c9892bf0fd2ea1af96e}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_getMIS@{EF\_SPI\_getMIS}} +\index{EF\_SPI\_getMIS@{EF\_SPI\_getMIS}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_getMIS()}{EF\_SPI\_getMIS()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+get\+MIS (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t $\ast$}]{mask }\end{DoxyParamCaption})} + +gets the value of the Masked Interrupt Status Register; which shows the status of the interrupts after masking (ANDing) RIS by IM. The mask value is a 6-\/bit value, where each bit corresponds to a specific interrupt +\begin{DoxyItemize} +\item bit 0 TXE \+: Transmit FIFO is Empty. +\item bit 1 TXF \+: Transmit FIFO is Full. +\item bit 2 RXE \+: Receive FIFO is Empty. +\item bit 3 RXF \+: Receive FIFO is Full. +\item bit 4 TXB \+: Transmit FIFO level is Below Threshold. +\item bit 5 RXA \+: Receive FIFO level is Above Threshold. +\end{DoxyItemize} + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ out}} & {\em mask} & The required mask value\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_a83c5fa1a6e95392f2b3ab02661f40dec}\label{_e_f___s_p_i_8h_a83c5fa1a6e95392f2b3ab02661f40dec}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_getRIS@{EF\_SPI\_getRIS}} +\index{EF\_SPI\_getRIS@{EF\_SPI\_getRIS}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_getRIS()}{EF\_SPI\_getRIS()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+get\+RIS (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t $\ast$}]{mask }\end{DoxyParamCaption})} + +gets the value of the Raw Interrupt Status Register; which shows the status of the interrupts The mask value is a 6-\/bit value, where each bit corresponds to a specific interrupt +\begin{DoxyItemize} +\item bit 0 TXE \+: Transmit FIFO is Empty. +\item bit 1 TXF \+: Transmit FIFO is Full. +\item bit 2 RXE \+: Receive FIFO is Empty. +\item bit 3 RXF \+: Receive FIFO is Full. +\item bit 4 TXB \+: Transmit FIFO level is Below Threshold. +\item bit 5 RXA \+: Receive FIFO level is Above Threshold. +\end{DoxyItemize} + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ out}} & {\em mask} & The required mask value\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_a76b8a68e19fbf8c73de0f0c6a2f1ffa0}\label{_e_f___s_p_i_8h_a76b8a68e19fbf8c73de0f0c6a2f1ffa0}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_readData@{EF\_SPI\_readData}} +\index{EF\_SPI\_readData@{EF\_SPI\_readData}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_readData()}{EF\_SPI\_readData()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+read\+Data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t $\ast$}]{data }\end{DoxyParamCaption})} + + + +reads a byte of data from the RXDATA register + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ out}} & {\em data} & The data read from the RXDATA register\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_a143d8c3d4948fe4b3b673d4f7d37dc22}\label{_e_f___s_p_i_8h_a143d8c3d4948fe4b3b673d4f7d37dc22}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_readRxFifoEmpty@{EF\_SPI\_readRxFifoEmpty}} +\index{EF\_SPI\_readRxFifoEmpty@{EF\_SPI\_readRxFifoEmpty}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_readRxFifoEmpty()}{EF\_SPI\_readRxFifoEmpty()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+read\+Rx\+Fifo\+Empty (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t $\ast$}]{RXfifo\+\_\+state }\end{DoxyParamCaption})} + + + +reads the RX FIFO empty flag from the STATUS register + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ out}} & {\em RXfifo\+\_\+state} & The RX FIFO empty flag value\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_a5ba73cb278ddca9c4e4d7e2de81d086c}\label{_e_f___s_p_i_8h_a5ba73cb278ddca9c4e4d7e2de81d086c}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_readTxFifoEmpty@{EF\_SPI\_readTxFifoEmpty}} +\index{EF\_SPI\_readTxFifoEmpty@{EF\_SPI\_readTxFifoEmpty}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_readTxFifoEmpty()}{EF\_SPI\_readTxFifoEmpty()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+read\+Tx\+Fifo\+Empty (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t $\ast$}]{TXfifo\+\_\+state }\end{DoxyParamCaption})} + + + +reads the TX FIFO empty flag from the STATUS register + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ out}} & {\em TXfifo\+\_\+state} & The TX FIFO empty flag value\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_a825604b02b3136b2ae6b57cd74f7f885}\label{_e_f___s_p_i_8h_a825604b02b3136b2ae6b57cd74f7f885}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_setGclkEnable@{EF\_SPI\_setGclkEnable}} +\index{EF\_SPI\_setGclkEnable@{EF\_SPI\_setGclkEnable}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_setGclkEnable()}{EF\_SPI\_setGclkEnable()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+set\+Gclk\+Enable (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t}]{value }\end{DoxyParamCaption})} + + + +sets the GCLK enable bit in the SPI register to a certain value + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ in}} & {\em value} & The value of the GCLK enable bit\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_a1bd18073e3f75287527f0ee881546b2a}\label{_e_f___s_p_i_8h_a1bd18073e3f75287527f0ee881546b2a}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_setICR@{EF\_SPI\_setICR}} +\index{EF\_SPI\_setICR@{EF\_SPI\_setICR}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_setICR()}{EF\_SPI\_setICR()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+set\+ICR (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t}]{mask }\end{DoxyParamCaption})} + +sets the value of the Interrupt Clear Register; which clears the interrupts The mask value is a 6-\/bit value, where each bit corresponds to a specific interrupt +\begin{DoxyItemize} +\item bit 0 TXE \+: Transmit FIFO is Empty. +\item bit 1 TXF \+: Transmit FIFO is Full. +\item bit 2 RXE \+: Receive FIFO is Empty. +\item bit 3 RXF \+: Receive FIFO is Full. +\item bit 4 TXB \+: Transmit FIFO level is Below Threshold. +\item bit 5 RXA \+: Receive FIFO level is Above Threshold. +\end{DoxyItemize} + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ in}} & {\em mask} & The required mask value\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_a475700f9498d9ab54b03d3e81ace1f0a}\label{_e_f___s_p_i_8h_a475700f9498d9ab54b03d3e81ace1f0a}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_setIM@{EF\_SPI\_setIM}} +\index{EF\_SPI\_setIM@{EF\_SPI\_setIM}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_setIM()}{EF\_SPI\_setIM()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+set\+IM (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t}]{mask }\end{DoxyParamCaption})} + +sets the value of the Interrupts Masking Register; which enable and disables interrupts The mask value is a 6-\/bit value, where each bit corresponds to a specific interrupt +\begin{DoxyItemize} +\item bit 0 TXE \+: Transmit FIFO is Empty. +\item bit 1 TXF \+: Transmit FIFO is Full. +\item bit 2 RXE \+: Receive FIFO is Empty. +\item bit 3 RXF \+: Receive FIFO is Full. +\item bit 4 TXB \+: Transmit FIFO level is Below Threshold. +\item bit 5 RXA \+: Receive FIFO level is Above Threshold. +\end{DoxyItemize} + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ in}} & {\em mask} & The required mask value\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_a07fa3d20aee584b19921035cd715b71b}\label{_e_f___s_p_i_8h_a07fa3d20aee584b19921035cd715b71b}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_waitRxFifoNotEmpty@{EF\_SPI\_waitRxFifoNotEmpty}} +\index{EF\_SPI\_waitRxFifoNotEmpty@{EF\_SPI\_waitRxFifoNotEmpty}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_waitRxFifoNotEmpty()}{EF\_SPI\_waitRxFifoNotEmpty()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+wait\+Rx\+Fifo\+Not\+Empty (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi }\end{DoxyParamCaption})} + + + +waits for the RX FIFO to be not empty by polling the RX FIFO empty flag in the STATUS register + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_a37d6919aa636f75a7ad383d5c03a6595}\label{_e_f___s_p_i_8h_a37d6919aa636f75a7ad383d5c03a6595}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_waitTxFifoEmpty@{EF\_SPI\_waitTxFifoEmpty}} +\index{EF\_SPI\_waitTxFifoEmpty@{EF\_SPI\_waitTxFifoEmpty}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_waitTxFifoEmpty()}{EF\_SPI\_waitTxFifoEmpty()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+wait\+Tx\+Fifo\+Empty (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi }\end{DoxyParamCaption})} + + + +waits for the TX FIFO to be empty by polling the TX FIFO empty flag in the STATUS register + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_a1e57164045e2dc6ba9f3ebffc30f5985}\label{_e_f___s_p_i_8h_a1e57164045e2dc6ba9f3ebffc30f5985}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_writeData@{EF\_SPI\_writeData}} +\index{EF\_SPI\_writeData@{EF\_SPI\_writeData}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_writeData()}{EF\_SPI\_writeData()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+write\+Data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{uint32\+\_\+t}]{data }\end{DoxyParamCaption})} + + + +writes a byte of data to the TXDATA register + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ in}} & {\em data} & The data to be written to the TXDATA register\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_a0391f44435674dff1569e37997485578}\label{_e_f___s_p_i_8h_a0391f44435674dff1569e37997485578}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_writePhase@{EF\_SPI\_writePhase}} +\index{EF\_SPI\_writePhase@{EF\_SPI\_writePhase}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_writePhase()}{EF\_SPI\_writePhase()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+write\+Phase (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{bool}]{phase }\end{DoxyParamCaption})} + + + +sets the clock phase of the SPI in the CFG register to a certain value + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ in}} & {\em phase} & The clock phase value\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} +\mbox{\Hypertarget{_e_f___s_p_i_8h_af12037c75dc828ac46a94b871bce315f}\label{_e_f___s_p_i_8h_af12037c75dc828ac46a94b871bce315f}} +\index{EF\_SPI.h@{EF\_SPI.h}!EF\_SPI\_writepolarity@{EF\_SPI\_writepolarity}} +\index{EF\_SPI\_writepolarity@{EF\_SPI\_writepolarity}!EF\_SPI.h@{EF\_SPI.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_writepolarity()}{EF\_SPI\_writepolarity()}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} EF\+\_\+\+SPI\+\_\+writepolarity (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}}]{spi, }\item[{bool}]{polarity }\end{DoxyParamCaption})} + + + +sets the clock polarity of the SPI in the CFG register to a certain value + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em spi} & An \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} pointer, which points to the base memory address of SPI registers. \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} is a structure that contains the SPI registers. \\ +\hline +\mbox{\texttt{ in}} & {\em polarity} & The clock polarity value\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +status A value of type \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\+\_\+\+DRIVER\+\_\+\+STATUS}} \+: returns a success or error code +\end{DoxyReturn} diff --git a/docs/doxygen/latex/_e_f___s_p_i_8h_source.tex b/docs/doxygen/latex/_e_f___s_p_i_8h_source.tex new file mode 100644 index 0000000..134ef79 --- /dev/null +++ b/docs/doxygen/latex/_e_f___s_p_i_8h_source.tex @@ -0,0 +1,130 @@ +\hypertarget{_e_f___s_p_i_8h_source}{}\doxysection{EF\+\_\+\+SPI.\+h} +\mbox{\hyperlink{_e_f___s_p_i_8h}{Go to the documentation of this file.}} +\begin{DoxyCode}{0} +\DoxyCodeLine{00001\ \textcolor{comment}{/*}} +\DoxyCodeLine{00002\ \textcolor{comment}{\ \ \ \ Copyright\ 2025\ Efabless\ Corp.}} +\DoxyCodeLine{00003\ \textcolor{comment}{}} +\DoxyCodeLine{00004\ \textcolor{comment}{}} +\DoxyCodeLine{00005\ \textcolor{comment}{\ \ \ \ Licensed\ under\ the\ Apache\ License,\ Version\ 2.0\ (the\ "{}License"{});}} +\DoxyCodeLine{00006\ \textcolor{comment}{\ \ \ \ you\ may\ not\ use\ this\ file\ except\ in\ compliance\ with\ the\ License.}} +\DoxyCodeLine{00007\ \textcolor{comment}{\ \ \ \ You\ may\ obtain\ a\ copy\ of\ the\ License\ at}} +\DoxyCodeLine{00008\ \textcolor{comment}{}} +\DoxyCodeLine{00009\ \textcolor{comment}{\ \ \ \ \ \ \ \ www.apache.org/licenses/LICENSE-\/2.0}} +\DoxyCodeLine{00010\ \textcolor{comment}{}} +\DoxyCodeLine{00011\ \textcolor{comment}{\ \ \ \ Unless\ required\ by\ applicable\ law\ or\ agreed\ to\ in\ writing,\ software}} +\DoxyCodeLine{00012\ \textcolor{comment}{\ \ \ \ distributed\ under\ the\ License\ is\ distributed\ on\ an\ "{}AS\ IS"{}\ BASIS,}} +\DoxyCodeLine{00013\ \textcolor{comment}{\ \ \ \ WITHOUT\ WARRANTIES\ OR\ CONDITIONS\ OF\ ANY\ KIND,\ either\ express\ or\ implied.}} +\DoxyCodeLine{00014\ \textcolor{comment}{\ \ \ \ See\ the\ License\ for\ the\ specific\ language\ governing\ permissions\ and}} +\DoxyCodeLine{00015\ \textcolor{comment}{\ \ \ \ limitations\ under\ the\ License.}} +\DoxyCodeLine{00016\ \textcolor{comment}{}} +\DoxyCodeLine{00017\ \textcolor{comment}{*/}} +\DoxyCodeLine{00018\ } +\DoxyCodeLine{00024\ \textcolor{preprocessor}{\#ifndef\ EF\_SPI\_H}} +\DoxyCodeLine{00025\ \textcolor{preprocessor}{\#define\ EF\_SPI\_H}} +\DoxyCodeLine{00026\ \textcolor{comment}{/******************************************************************************}} +\DoxyCodeLine{00027\ \textcolor{comment}{*\ Includes}} +\DoxyCodeLine{00028\ \textcolor{comment}{******************************************************************************/}} +\DoxyCodeLine{00029\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{_e_f___s_p_i__regs_8h}{EF\_SPI\_regs.h}}"{}}} +\DoxyCodeLine{00030\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{_e_f___driver___common_8h}{EF\_Driver\_Common.h}}"{}}} +\DoxyCodeLine{00031\ } +\DoxyCodeLine{00032\ \textcolor{comment}{/******************************************************************************}} +\DoxyCodeLine{00033\ \textcolor{comment}{*\ Macros\ and\ Constants}} +\DoxyCodeLine{00034\ \textcolor{comment}{******************************************************************************/}} +\DoxyCodeLine{00035\ } +\DoxyCodeLine{00036\ \textcolor{comment}{/******************************************************************************}} +\DoxyCodeLine{00037\ \textcolor{comment}{*\ Typedefs\ and\ Enums}} +\DoxyCodeLine{00038\ \textcolor{comment}{******************************************************************************/}} +\DoxyCodeLine{00039\ } +\DoxyCodeLine{00040\ } +\DoxyCodeLine{00041\ } +\DoxyCodeLine{00042\ \textcolor{comment}{/******************************************************************************}} +\DoxyCodeLine{00043\ \textcolor{comment}{*\ Function\ Prototypes}} +\DoxyCodeLine{00044\ \textcolor{comment}{******************************************************************************/}} +\DoxyCodeLine{00045\ } +\DoxyCodeLine{00047\ } +\DoxyCodeLine{00053\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_a825604b02b3136b2ae6b57cd74f7f885}{EF\_SPI\_setGclkEnable}}\ (\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi,\ uint32\_t\ value);} +\DoxyCodeLine{00054\ } +\DoxyCodeLine{00056\ } +\DoxyCodeLine{00062\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_a1e57164045e2dc6ba9f3ebffc30f5985}{EF\_SPI\_writeData}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi,\ uint32\_t\ data);} +\DoxyCodeLine{00063\ } +\DoxyCodeLine{00065\ } +\DoxyCodeLine{00071\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_a76b8a68e19fbf8c73de0f0c6a2f1ffa0}{EF\_SPI\_readData}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi,\ uint32\_t\ *data);} +\DoxyCodeLine{00072\ } +\DoxyCodeLine{00074\ } +\DoxyCodeLine{00080\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_af12037c75dc828ac46a94b871bce315f}{EF\_SPI\_writepolarity}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi,\ \textcolor{keywordtype}{bool}\ polarity);} +\DoxyCodeLine{00081\ } +\DoxyCodeLine{00083\ } +\DoxyCodeLine{00089\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_a0391f44435674dff1569e37997485578}{EF\_SPI\_writePhase}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi,\ \textcolor{keywordtype}{bool}\ phase);} +\DoxyCodeLine{00090\ } +\DoxyCodeLine{00092\ } +\DoxyCodeLine{00098\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_a5ba73cb278ddca9c4e4d7e2de81d086c}{EF\_SPI\_readTxFifoEmpty}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi,\ uint32\_t\ *TXfifo\_state);} +\DoxyCodeLine{00099\ } +\DoxyCodeLine{00101\ } +\DoxyCodeLine{00107\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_a143d8c3d4948fe4b3b673d4f7d37dc22}{EF\_SPI\_readRxFifoEmpty}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi,\ uint32\_t\ *RXfifo\_state);} +\DoxyCodeLine{00108\ } +\DoxyCodeLine{00110\ } +\DoxyCodeLine{00115\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_a37d6919aa636f75a7ad383d5c03a6595}{EF\_SPI\_waitTxFifoEmpty}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi);} +\DoxyCodeLine{00116\ } +\DoxyCodeLine{00118\ } +\DoxyCodeLine{00123\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_a07fa3d20aee584b19921035cd715b71b}{EF\_SPI\_waitRxFifoNotEmpty}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi);} +\DoxyCodeLine{00124\ } +\DoxyCodeLine{00126\ } +\DoxyCodeLine{00131\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_af5ad666ce47ff6bd16cff1627c33372a}{EF\_SPI\_FifoRxFlush}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi);} +\DoxyCodeLine{00132\ } +\DoxyCodeLine{00134\ } +\DoxyCodeLine{00139\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_a17bb022c768cb9acb92e540dd0d5dcce}{EF\_SPI\_enable}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi);} +\DoxyCodeLine{00140\ } +\DoxyCodeLine{00142\ } +\DoxyCodeLine{00147\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_a779126c0c77ab36a9747aa8fe113c08d}{EF\_SPI\_disable}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi);} +\DoxyCodeLine{00148\ } +\DoxyCodeLine{00150\ } +\DoxyCodeLine{00155\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_a9b5b4e72c33af4b4a7fc3ab0cdadde2e}{EF\_SPI\_enableRx}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi);} +\DoxyCodeLine{00156\ } +\DoxyCodeLine{00158\ } +\DoxyCodeLine{00163\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_a3c26e6c7e5aa70bb44ee388a811aa762}{EF\_SPI\_disableRx}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi);} +\DoxyCodeLine{00164\ } +\DoxyCodeLine{00166\ } +\DoxyCodeLine{00171\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_a8b4118aeb52c24b0b9b20518c920d414}{EF\_SPI\_assertCs}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi);} +\DoxyCodeLine{00172\ } +\DoxyCodeLine{00174\ } +\DoxyCodeLine{00179\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_ab6cdc2b71232f8f3d3fa1e6f9fa6d5ae}{EF\_SPI\_deassertCs}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi);} +\DoxyCodeLine{00180\ } +\DoxyCodeLine{00189\ } +\DoxyCodeLine{00195\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_a475700f9498d9ab54b03d3e81ace1f0a}{EF\_SPI\_setIM}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi,\ uint32\_t\ mask);} +\DoxyCodeLine{00196\ } +\DoxyCodeLine{00197\ \textcolor{comment}{//\ The\ following\ functions\ are\ not\ verified\ yet}} +\DoxyCodeLine{00198\ \textcolor{comment}{/******************************************************************************************************************************************/}} +\DoxyCodeLine{00199\ \textcolor{comment}{/******************************************************************************************************************************************/}} +\DoxyCodeLine{00200\ } +\DoxyCodeLine{00209\ } +\DoxyCodeLine{00215\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_a0cbec2da38446744274c64e9585e846c}{EF\_SPI\_getIM}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi,\ uint32\_t\ *mask);} +\DoxyCodeLine{00216\ } +\DoxyCodeLine{00225\ } +\DoxyCodeLine{00231\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_a83c5fa1a6e95392f2b3ab02661f40dec}{EF\_SPI\_getRIS}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi,\ uint32\_t\ *mask);} +\DoxyCodeLine{00232\ } +\DoxyCodeLine{00233\ } +\DoxyCodeLine{00234\ } +\DoxyCodeLine{00243\ } +\DoxyCodeLine{00249\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_a8f3ae4eb3cca3c9892bf0fd2ea1af96e}{EF\_SPI\_getMIS}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi,\ uint32\_t\ *mask);} +\DoxyCodeLine{00250\ } +\DoxyCodeLine{00251\ } +\DoxyCodeLine{00252\ } +\DoxyCodeLine{00253\ } +\DoxyCodeLine{00262\ } +\DoxyCodeLine{00268\ \mbox{\hyperlink{_e_f___driver___common_8h_ad1c99136d1edfd0a7757f5b81600a351}{EF\_DRIVER\_STATUS}}\ \mbox{\hyperlink{_e_f___s_p_i_8h_a1bd18073e3f75287527f0ee881546b2a}{EF\_SPI\_setICR}}(\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE\_PTR}}\ spi,\ uint32\_t\ mask);} +\DoxyCodeLine{00269\ } +\DoxyCodeLine{00270\ } +\DoxyCodeLine{00271\ \textcolor{comment}{/******************************************************************************}} +\DoxyCodeLine{00272\ \textcolor{comment}{*\ External\ Variables}} +\DoxyCodeLine{00273\ \textcolor{comment}{******************************************************************************/}} +\DoxyCodeLine{00274\ } +\DoxyCodeLine{00275\ } +\DoxyCodeLine{00276\ } +\DoxyCodeLine{00277\ } +\DoxyCodeLine{00278\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ EF\_SPI\_H}} +\DoxyCodeLine{00279\ } +\DoxyCodeLine{00280\ \textcolor{comment}{/******************************************************************************}} +\DoxyCodeLine{00281\ \textcolor{comment}{*\ End\ of\ File}} +\DoxyCodeLine{00282\ \textcolor{comment}{******************************************************************************/}} + +\end{DoxyCode} diff --git a/docs/doxygen/latex/_e_f___s_p_i__regs_8h.tex b/docs/doxygen/latex/_e_f___s_p_i__regs_8h.tex new file mode 100644 index 0000000..2e6f69f --- /dev/null +++ b/docs/doxygen/latex/_e_f___s_p_i__regs_8h.tex @@ -0,0 +1,388 @@ +\hypertarget{_e_f___s_p_i__regs_8h}{}\doxysection{EF\+\_\+\+SPI\+\_\+regs.\+h File Reference} +\label{_e_f___s_p_i__regs_8h}\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +{\ttfamily \#include \char`\"{}EF\+\_\+\+Driver\+\_\+\+Common.\+h\char`\"{}}\newline +\doxysubsection*{Classes} +\begin{DoxyCompactItemize} +\item +struct \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{\+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+}} +\end{DoxyCompactItemize} +\doxysubsection*{Macros} +\begin{DoxyCompactItemize} +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a470cd5845bed94d8b8b358933e4a3442}{IO\+\_\+\+TYPES}} +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}}~volatile const uint32\+\_\+t +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}}~volatile uint32\+\_\+t +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a81f369079976a46554fd9798ab035697}{\+\_\+\+\_\+\+RW}}~volatile uint32\+\_\+t +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ac5e059ea029e36d81058f5a0d9cc9e3c}{EF\+\_\+\+SPI\+\_\+\+CFG\+\_\+\+REG\+\_\+\+CPOL\+\_\+\+BIT}}~((uint32\+\_\+t)0) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a095a4707174b9fa4d590f52b21632ecb}{EF\+\_\+\+SPI\+\_\+\+CFG\+\_\+\+REG\+\_\+\+CPOL\+\_\+\+MASK}}~((uint32\+\_\+t)0x1) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aa1a7b962b5cbcddef4ab2a34eabd4ed0}{EF\+\_\+\+SPI\+\_\+\+CFG\+\_\+\+REG\+\_\+\+CPHA\+\_\+\+BIT}}~((uint32\+\_\+t)1) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab929342cb7b96e3cee17eafc0fe1985d}{EF\+\_\+\+SPI\+\_\+\+CFG\+\_\+\+REG\+\_\+\+CPHA\+\_\+\+MASK}}~((uint32\+\_\+t)0x2) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aade7e6fa25645f1d5c144441b2b389c2}{EF\+\_\+\+SPI\+\_\+\+CTRL\+\_\+\+REG\+\_\+\+SS\+\_\+\+BIT}}~((uint32\+\_\+t)0) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a5281a624fb453b3bf043e5621bef3965}{EF\+\_\+\+SPI\+\_\+\+CTRL\+\_\+\+REG\+\_\+\+SS\+\_\+\+MASK}}~((uint32\+\_\+t)0x1) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab7ee2f2a3382cc62d27b0c8f35580f17}{EF\+\_\+\+SPI\+\_\+\+CTRL\+\_\+\+REG\+\_\+\+ENABLE\+\_\+\+BIT}}~((uint32\+\_\+t)1) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a16ee3bc8b579ed7151236c947105ee45}{EF\+\_\+\+SPI\+\_\+\+CTRL\+\_\+\+REG\+\_\+\+ENABLE\+\_\+\+MASK}}~((uint32\+\_\+t)0x2) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aab5b75ab1618b2f8c7d0d55d37bd57f5}{EF\+\_\+\+SPI\+\_\+\+CTRL\+\_\+\+REG\+\_\+\+RX\+\_\+\+EN\+\_\+\+BIT}}~((uint32\+\_\+t)2) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_af9d5295134a69886e64f1ad2e4b583ed}{EF\+\_\+\+SPI\+\_\+\+CTRL\+\_\+\+REG\+\_\+\+RX\+\_\+\+EN\+\_\+\+MASK}}~((uint32\+\_\+t)0x4) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_abe10f0c7b6422b6da984393ccdab8f64}{EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+TX\+\_\+\+E\+\_\+\+BIT}}~((uint32\+\_\+t)0) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a0742f76dc5c734155f9483ea6808a59d}{EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+TX\+\_\+\+E\+\_\+\+MASK}}~((uint32\+\_\+t)0x1) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_abb0ff8fcfd19ed265190d9aa6bdb7550}{EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+TX\+\_\+\+F\+\_\+\+BIT}}~((uint32\+\_\+t)1) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_af249ea07911103f29bc44ca31694b386}{EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+TX\+\_\+\+F\+\_\+\+MASK}}~((uint32\+\_\+t)0x2) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad97410c80f92b60c499ce81f04746018}{EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+RX\+\_\+\+E\+\_\+\+BIT}}~((uint32\+\_\+t)2) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aa7289ac49f0fbef2b931fae0d2a136ea}{EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+RX\+\_\+\+E\+\_\+\+MASK}}~((uint32\+\_\+t)0x4) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a233519531a39eefca0f1ad884ddfc688}{EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+RX\+\_\+\+F\+\_\+\+BIT}}~((uint32\+\_\+t)3) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a43c28dcf4792491c02ed80242bbeba2c}{EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+RX\+\_\+\+F\+\_\+\+MASK}}~((uint32\+\_\+t)0x8) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a951e9e98da6dbf7b3f1f86d44013a603}{EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+TX\+\_\+\+B\+\_\+\+BIT}}~((uint32\+\_\+t)4) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aa94d64ec8ce3d3fda2496fa69fb9693c}{EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+TX\+\_\+\+B\+\_\+\+MASK}}~((uint32\+\_\+t)0x10) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a03cff033c5e429f83f67c071221d3564}{EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+RX\+\_\+\+A\+\_\+\+BIT}}~((uint32\+\_\+t)5) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ae86785f5f92756bc46988900ad755f8c}{EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+RX\+\_\+\+A\+\_\+\+MASK}}~((uint32\+\_\+t)0x20) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_adc70eb31f3592d0eef2f5aa617e147a3}{EF\+\_\+\+SPI\+\_\+\+RX\+\_\+\+FIFO\+\_\+\+LEVEL\+\_\+\+REG\+\_\+\+LEVEL\+\_\+\+BIT}}~((uint32\+\_\+t)0) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ac1bb71e9a8423ba268478a65211dd234}{EF\+\_\+\+SPI\+\_\+\+RX\+\_\+\+FIFO\+\_\+\+LEVEL\+\_\+\+REG\+\_\+\+LEVEL\+\_\+\+MASK}}~((uint32\+\_\+t)0xf) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a2bd9a947df34afb5d9aee36891b0d5c2}{EF\+\_\+\+SPI\+\_\+\+RX\+\_\+\+FIFO\+\_\+\+THRESHOLD\+\_\+\+REG\+\_\+\+THRESHOLD\+\_\+\+BIT}}~((uint32\+\_\+t)0) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a23a718d6a792c580f06c9086e1b2f08e}{EF\+\_\+\+SPI\+\_\+\+RX\+\_\+\+FIFO\+\_\+\+THRESHOLD\+\_\+\+REG\+\_\+\+THRESHOLD\+\_\+\+MASK}}~((uint32\+\_\+t)0xf) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a4831ed39a5c8de71931fd0f365ec285c}{EF\+\_\+\+SPI\+\_\+\+RX\+\_\+\+FIFO\+\_\+\+FLUSH\+\_\+\+REG\+\_\+\+FLUSH\+\_\+\+BIT}}~((uint32\+\_\+t)0) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_acd9f5e99f7a5d9cc4c38f1914cbec1a6}{EF\+\_\+\+SPI\+\_\+\+RX\+\_\+\+FIFO\+\_\+\+FLUSH\+\_\+\+REG\+\_\+\+FLUSH\+\_\+\+MASK}}~((uint32\+\_\+t)0x1) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ac31f79ffb5d5b9d3c40634c4e7fc38da}{EF\+\_\+\+SPI\+\_\+\+TX\+\_\+\+FIFO\+\_\+\+LEVEL\+\_\+\+REG\+\_\+\+LEVEL\+\_\+\+BIT}}~((uint32\+\_\+t)0) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab4ed42d32d7b6440c8c135876812d824}{EF\+\_\+\+SPI\+\_\+\+TX\+\_\+\+FIFO\+\_\+\+LEVEL\+\_\+\+REG\+\_\+\+LEVEL\+\_\+\+MASK}}~((uint32\+\_\+t)0xf) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_afcd4de96a4fdbbdf0bfb2d1ef0b36ee1}{EF\+\_\+\+SPI\+\_\+\+TX\+\_\+\+FIFO\+\_\+\+THRESHOLD\+\_\+\+REG\+\_\+\+THRESHOLD\+\_\+\+BIT}}~((uint32\+\_\+t)0) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a2c5706ed052b899f8f35f9f430bd6cf8}{EF\+\_\+\+SPI\+\_\+\+TX\+\_\+\+FIFO\+\_\+\+THRESHOLD\+\_\+\+REG\+\_\+\+THRESHOLD\+\_\+\+MASK}}~((uint32\+\_\+t)0xf) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aaf2f79191000527cbe34a7ebdf733b4b}{EF\+\_\+\+SPI\+\_\+\+TX\+\_\+\+FIFO\+\_\+\+FLUSH\+\_\+\+REG\+\_\+\+FLUSH\+\_\+\+BIT}}~((uint32\+\_\+t)0) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a8f08868e69dca4ac8fe7892214240894}{EF\+\_\+\+SPI\+\_\+\+TX\+\_\+\+FIFO\+\_\+\+FLUSH\+\_\+\+REG\+\_\+\+FLUSH\+\_\+\+MASK}}~((uint32\+\_\+t)0x1) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a4666ce8d0e4296894dee3ac12aa24ed9}{EF\+\_\+\+SPI\+\_\+\+TXE\+\_\+\+FLAG}}~((uint32\+\_\+t)0x1) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a42ba708fcfbcd66c33b691df220600a0}{EF\+\_\+\+SPI\+\_\+\+TXF\+\_\+\+FLAG}}~((uint32\+\_\+t)0x2) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab7395a85fac8f34cd0ccf4d2499b7faa}{EF\+\_\+\+SPI\+\_\+\+RXE\+\_\+\+FLAG}}~((uint32\+\_\+t)0x4) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a6465a731b247cffcbb987ac7772b024f}{EF\+\_\+\+SPI\+\_\+\+RXF\+\_\+\+FLAG}}~((uint32\+\_\+t)0x8) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a483437ca3282104510a46bf4c389372d}{EF\+\_\+\+SPI\+\_\+\+TXB\+\_\+\+FLAG}}~((uint32\+\_\+t)0x10) +\item +\#define \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aa02e15edc1acfa7e3f9dfc05b43d1b5f}{EF\+\_\+\+SPI\+\_\+\+RXA\+\_\+\+FLAG}}~((uint32\+\_\+t)0x20) +\end{DoxyCompactItemize} +\doxysubsection*{Typedefs} +\begin{DoxyCompactItemize} +\item +typedef struct \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{\+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+}} \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} +\item +typedef \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}} $\ast$ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}} +\end{DoxyCompactItemize} + + +\doxysubsection{Macro Definition Documentation} +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}\label{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!\_\_R@{\_\_R}} +\index{\_\_R@{\_\_R}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{\_\_R}{\_\_R}} +{\footnotesize\ttfamily \#define \+\_\+\+\_\+R~volatile const uint32\+\_\+t} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a81f369079976a46554fd9798ab035697}\label{_e_f___s_p_i__regs_8h_a81f369079976a46554fd9798ab035697}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!\_\_RW@{\_\_RW}} +\index{\_\_RW@{\_\_RW}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{\_\_RW}{\_\_RW}} +{\footnotesize\ttfamily \#define \+\_\+\+\_\+\+RW~volatile uint32\+\_\+t} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}\label{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!\_\_W@{\_\_W}} +\index{\_\_W@{\_\_W}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{\_\_W}{\_\_W}} +{\footnotesize\ttfamily \#define \+\_\+\+\_\+W~volatile uint32\+\_\+t} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_aa1a7b962b5cbcddef4ab2a34eabd4ed0}\label{_e_f___s_p_i__regs_8h_aa1a7b962b5cbcddef4ab2a34eabd4ed0}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_CFG\_REG\_CPHA\_BIT@{EF\_SPI\_CFG\_REG\_CPHA\_BIT}} +\index{EF\_SPI\_CFG\_REG\_CPHA\_BIT@{EF\_SPI\_CFG\_REG\_CPHA\_BIT}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_CFG\_REG\_CPHA\_BIT}{EF\_SPI\_CFG\_REG\_CPHA\_BIT}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+CFG\+\_\+\+REG\+\_\+\+CPHA\+\_\+\+BIT~((uint32\+\_\+t)1)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_ab929342cb7b96e3cee17eafc0fe1985d}\label{_e_f___s_p_i__regs_8h_ab929342cb7b96e3cee17eafc0fe1985d}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_CFG\_REG\_CPHA\_MASK@{EF\_SPI\_CFG\_REG\_CPHA\_MASK}} +\index{EF\_SPI\_CFG\_REG\_CPHA\_MASK@{EF\_SPI\_CFG\_REG\_CPHA\_MASK}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_CFG\_REG\_CPHA\_MASK}{EF\_SPI\_CFG\_REG\_CPHA\_MASK}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+CFG\+\_\+\+REG\+\_\+\+CPHA\+\_\+\+MASK~((uint32\+\_\+t)0x2)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_ac5e059ea029e36d81058f5a0d9cc9e3c}\label{_e_f___s_p_i__regs_8h_ac5e059ea029e36d81058f5a0d9cc9e3c}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_CFG\_REG\_CPOL\_BIT@{EF\_SPI\_CFG\_REG\_CPOL\_BIT}} +\index{EF\_SPI\_CFG\_REG\_CPOL\_BIT@{EF\_SPI\_CFG\_REG\_CPOL\_BIT}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_CFG\_REG\_CPOL\_BIT}{EF\_SPI\_CFG\_REG\_CPOL\_BIT}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+CFG\+\_\+\+REG\+\_\+\+CPOL\+\_\+\+BIT~((uint32\+\_\+t)0)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a095a4707174b9fa4d590f52b21632ecb}\label{_e_f___s_p_i__regs_8h_a095a4707174b9fa4d590f52b21632ecb}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_CFG\_REG\_CPOL\_MASK@{EF\_SPI\_CFG\_REG\_CPOL\_MASK}} +\index{EF\_SPI\_CFG\_REG\_CPOL\_MASK@{EF\_SPI\_CFG\_REG\_CPOL\_MASK}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_CFG\_REG\_CPOL\_MASK}{EF\_SPI\_CFG\_REG\_CPOL\_MASK}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+CFG\+\_\+\+REG\+\_\+\+CPOL\+\_\+\+MASK~((uint32\+\_\+t)0x1)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_ab7ee2f2a3382cc62d27b0c8f35580f17}\label{_e_f___s_p_i__regs_8h_ab7ee2f2a3382cc62d27b0c8f35580f17}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_CTRL\_REG\_ENABLE\_BIT@{EF\_SPI\_CTRL\_REG\_ENABLE\_BIT}} +\index{EF\_SPI\_CTRL\_REG\_ENABLE\_BIT@{EF\_SPI\_CTRL\_REG\_ENABLE\_BIT}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_CTRL\_REG\_ENABLE\_BIT}{EF\_SPI\_CTRL\_REG\_ENABLE\_BIT}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+CTRL\+\_\+\+REG\+\_\+\+ENABLE\+\_\+\+BIT~((uint32\+\_\+t)1)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a16ee3bc8b579ed7151236c947105ee45}\label{_e_f___s_p_i__regs_8h_a16ee3bc8b579ed7151236c947105ee45}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_CTRL\_REG\_ENABLE\_MASK@{EF\_SPI\_CTRL\_REG\_ENABLE\_MASK}} +\index{EF\_SPI\_CTRL\_REG\_ENABLE\_MASK@{EF\_SPI\_CTRL\_REG\_ENABLE\_MASK}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_CTRL\_REG\_ENABLE\_MASK}{EF\_SPI\_CTRL\_REG\_ENABLE\_MASK}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+CTRL\+\_\+\+REG\+\_\+\+ENABLE\+\_\+\+MASK~((uint32\+\_\+t)0x2)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_aab5b75ab1618b2f8c7d0d55d37bd57f5}\label{_e_f___s_p_i__regs_8h_aab5b75ab1618b2f8c7d0d55d37bd57f5}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_CTRL\_REG\_RX\_EN\_BIT@{EF\_SPI\_CTRL\_REG\_RX\_EN\_BIT}} +\index{EF\_SPI\_CTRL\_REG\_RX\_EN\_BIT@{EF\_SPI\_CTRL\_REG\_RX\_EN\_BIT}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_CTRL\_REG\_RX\_EN\_BIT}{EF\_SPI\_CTRL\_REG\_RX\_EN\_BIT}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+CTRL\+\_\+\+REG\+\_\+\+RX\+\_\+\+EN\+\_\+\+BIT~((uint32\+\_\+t)2)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_af9d5295134a69886e64f1ad2e4b583ed}\label{_e_f___s_p_i__regs_8h_af9d5295134a69886e64f1ad2e4b583ed}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_CTRL\_REG\_RX\_EN\_MASK@{EF\_SPI\_CTRL\_REG\_RX\_EN\_MASK}} +\index{EF\_SPI\_CTRL\_REG\_RX\_EN\_MASK@{EF\_SPI\_CTRL\_REG\_RX\_EN\_MASK}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_CTRL\_REG\_RX\_EN\_MASK}{EF\_SPI\_CTRL\_REG\_RX\_EN\_MASK}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+CTRL\+\_\+\+REG\+\_\+\+RX\+\_\+\+EN\+\_\+\+MASK~((uint32\+\_\+t)0x4)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_aade7e6fa25645f1d5c144441b2b389c2}\label{_e_f___s_p_i__regs_8h_aade7e6fa25645f1d5c144441b2b389c2}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_CTRL\_REG\_SS\_BIT@{EF\_SPI\_CTRL\_REG\_SS\_BIT}} +\index{EF\_SPI\_CTRL\_REG\_SS\_BIT@{EF\_SPI\_CTRL\_REG\_SS\_BIT}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_CTRL\_REG\_SS\_BIT}{EF\_SPI\_CTRL\_REG\_SS\_BIT}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+CTRL\+\_\+\+REG\+\_\+\+SS\+\_\+\+BIT~((uint32\+\_\+t)0)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a5281a624fb453b3bf043e5621bef3965}\label{_e_f___s_p_i__regs_8h_a5281a624fb453b3bf043e5621bef3965}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_CTRL\_REG\_SS\_MASK@{EF\_SPI\_CTRL\_REG\_SS\_MASK}} +\index{EF\_SPI\_CTRL\_REG\_SS\_MASK@{EF\_SPI\_CTRL\_REG\_SS\_MASK}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_CTRL\_REG\_SS\_MASK}{EF\_SPI\_CTRL\_REG\_SS\_MASK}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+CTRL\+\_\+\+REG\+\_\+\+SS\+\_\+\+MASK~((uint32\+\_\+t)0x1)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a4831ed39a5c8de71931fd0f365ec285c}\label{_e_f___s_p_i__regs_8h_a4831ed39a5c8de71931fd0f365ec285c}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_RX\_FIFO\_FLUSH\_REG\_FLUSH\_BIT@{EF\_SPI\_RX\_FIFO\_FLUSH\_REG\_FLUSH\_BIT}} +\index{EF\_SPI\_RX\_FIFO\_FLUSH\_REG\_FLUSH\_BIT@{EF\_SPI\_RX\_FIFO\_FLUSH\_REG\_FLUSH\_BIT}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_RX\_FIFO\_FLUSH\_REG\_FLUSH\_BIT}{EF\_SPI\_RX\_FIFO\_FLUSH\_REG\_FLUSH\_BIT}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+RX\+\_\+\+FIFO\+\_\+\+FLUSH\+\_\+\+REG\+\_\+\+FLUSH\+\_\+\+BIT~((uint32\+\_\+t)0)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_acd9f5e99f7a5d9cc4c38f1914cbec1a6}\label{_e_f___s_p_i__regs_8h_acd9f5e99f7a5d9cc4c38f1914cbec1a6}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_RX\_FIFO\_FLUSH\_REG\_FLUSH\_MASK@{EF\_SPI\_RX\_FIFO\_FLUSH\_REG\_FLUSH\_MASK}} +\index{EF\_SPI\_RX\_FIFO\_FLUSH\_REG\_FLUSH\_MASK@{EF\_SPI\_RX\_FIFO\_FLUSH\_REG\_FLUSH\_MASK}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_RX\_FIFO\_FLUSH\_REG\_FLUSH\_MASK}{EF\_SPI\_RX\_FIFO\_FLUSH\_REG\_FLUSH\_MASK}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+RX\+\_\+\+FIFO\+\_\+\+FLUSH\+\_\+\+REG\+\_\+\+FLUSH\+\_\+\+MASK~((uint32\+\_\+t)0x1)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_adc70eb31f3592d0eef2f5aa617e147a3}\label{_e_f___s_p_i__regs_8h_adc70eb31f3592d0eef2f5aa617e147a3}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_RX\_FIFO\_LEVEL\_REG\_LEVEL\_BIT@{EF\_SPI\_RX\_FIFO\_LEVEL\_REG\_LEVEL\_BIT}} +\index{EF\_SPI\_RX\_FIFO\_LEVEL\_REG\_LEVEL\_BIT@{EF\_SPI\_RX\_FIFO\_LEVEL\_REG\_LEVEL\_BIT}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_RX\_FIFO\_LEVEL\_REG\_LEVEL\_BIT}{EF\_SPI\_RX\_FIFO\_LEVEL\_REG\_LEVEL\_BIT}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+RX\+\_\+\+FIFO\+\_\+\+LEVEL\+\_\+\+REG\+\_\+\+LEVEL\+\_\+\+BIT~((uint32\+\_\+t)0)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_ac1bb71e9a8423ba268478a65211dd234}\label{_e_f___s_p_i__regs_8h_ac1bb71e9a8423ba268478a65211dd234}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_RX\_FIFO\_LEVEL\_REG\_LEVEL\_MASK@{EF\_SPI\_RX\_FIFO\_LEVEL\_REG\_LEVEL\_MASK}} +\index{EF\_SPI\_RX\_FIFO\_LEVEL\_REG\_LEVEL\_MASK@{EF\_SPI\_RX\_FIFO\_LEVEL\_REG\_LEVEL\_MASK}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_RX\_FIFO\_LEVEL\_REG\_LEVEL\_MASK}{EF\_SPI\_RX\_FIFO\_LEVEL\_REG\_LEVEL\_MASK}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+RX\+\_\+\+FIFO\+\_\+\+LEVEL\+\_\+\+REG\+\_\+\+LEVEL\+\_\+\+MASK~((uint32\+\_\+t)0xf)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a2bd9a947df34afb5d9aee36891b0d5c2}\label{_e_f___s_p_i__regs_8h_a2bd9a947df34afb5d9aee36891b0d5c2}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_RX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_BIT@{EF\_SPI\_RX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_BIT}} +\index{EF\_SPI\_RX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_BIT@{EF\_SPI\_RX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_BIT}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_RX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_BIT}{EF\_SPI\_RX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_BIT}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+RX\+\_\+\+FIFO\+\_\+\+THRESHOLD\+\_\+\+REG\+\_\+\+THRESHOLD\+\_\+\+BIT~((uint32\+\_\+t)0)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a23a718d6a792c580f06c9086e1b2f08e}\label{_e_f___s_p_i__regs_8h_a23a718d6a792c580f06c9086e1b2f08e}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_RX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_MASK@{EF\_SPI\_RX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_MASK}} +\index{EF\_SPI\_RX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_MASK@{EF\_SPI\_RX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_MASK}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_RX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_MASK}{EF\_SPI\_RX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_MASK}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+RX\+\_\+\+FIFO\+\_\+\+THRESHOLD\+\_\+\+REG\+\_\+\+THRESHOLD\+\_\+\+MASK~((uint32\+\_\+t)0xf)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_aa02e15edc1acfa7e3f9dfc05b43d1b5f}\label{_e_f___s_p_i__regs_8h_aa02e15edc1acfa7e3f9dfc05b43d1b5f}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_RXA\_FLAG@{EF\_SPI\_RXA\_FLAG}} +\index{EF\_SPI\_RXA\_FLAG@{EF\_SPI\_RXA\_FLAG}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_RXA\_FLAG}{EF\_SPI\_RXA\_FLAG}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+RXA\+\_\+\+FLAG~((uint32\+\_\+t)0x20)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_ab7395a85fac8f34cd0ccf4d2499b7faa}\label{_e_f___s_p_i__regs_8h_ab7395a85fac8f34cd0ccf4d2499b7faa}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_RXE\_FLAG@{EF\_SPI\_RXE\_FLAG}} +\index{EF\_SPI\_RXE\_FLAG@{EF\_SPI\_RXE\_FLAG}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_RXE\_FLAG}{EF\_SPI\_RXE\_FLAG}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+RXE\+\_\+\+FLAG~((uint32\+\_\+t)0x4)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a6465a731b247cffcbb987ac7772b024f}\label{_e_f___s_p_i__regs_8h_a6465a731b247cffcbb987ac7772b024f}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_RXF\_FLAG@{EF\_SPI\_RXF\_FLAG}} +\index{EF\_SPI\_RXF\_FLAG@{EF\_SPI\_RXF\_FLAG}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_RXF\_FLAG}{EF\_SPI\_RXF\_FLAG}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+RXF\+\_\+\+FLAG~((uint32\+\_\+t)0x8)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a03cff033c5e429f83f67c071221d3564}\label{_e_f___s_p_i__regs_8h_a03cff033c5e429f83f67c071221d3564}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_STATUS\_REG\_RX\_A\_BIT@{EF\_SPI\_STATUS\_REG\_RX\_A\_BIT}} +\index{EF\_SPI\_STATUS\_REG\_RX\_A\_BIT@{EF\_SPI\_STATUS\_REG\_RX\_A\_BIT}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_STATUS\_REG\_RX\_A\_BIT}{EF\_SPI\_STATUS\_REG\_RX\_A\_BIT}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+RX\+\_\+\+A\+\_\+\+BIT~((uint32\+\_\+t)5)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_ae86785f5f92756bc46988900ad755f8c}\label{_e_f___s_p_i__regs_8h_ae86785f5f92756bc46988900ad755f8c}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_STATUS\_REG\_RX\_A\_MASK@{EF\_SPI\_STATUS\_REG\_RX\_A\_MASK}} +\index{EF\_SPI\_STATUS\_REG\_RX\_A\_MASK@{EF\_SPI\_STATUS\_REG\_RX\_A\_MASK}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_STATUS\_REG\_RX\_A\_MASK}{EF\_SPI\_STATUS\_REG\_RX\_A\_MASK}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+RX\+\_\+\+A\+\_\+\+MASK~((uint32\+\_\+t)0x20)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_ad97410c80f92b60c499ce81f04746018}\label{_e_f___s_p_i__regs_8h_ad97410c80f92b60c499ce81f04746018}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_STATUS\_REG\_RX\_E\_BIT@{EF\_SPI\_STATUS\_REG\_RX\_E\_BIT}} +\index{EF\_SPI\_STATUS\_REG\_RX\_E\_BIT@{EF\_SPI\_STATUS\_REG\_RX\_E\_BIT}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_STATUS\_REG\_RX\_E\_BIT}{EF\_SPI\_STATUS\_REG\_RX\_E\_BIT}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+RX\+\_\+\+E\+\_\+\+BIT~((uint32\+\_\+t)2)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_aa7289ac49f0fbef2b931fae0d2a136ea}\label{_e_f___s_p_i__regs_8h_aa7289ac49f0fbef2b931fae0d2a136ea}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_STATUS\_REG\_RX\_E\_MASK@{EF\_SPI\_STATUS\_REG\_RX\_E\_MASK}} +\index{EF\_SPI\_STATUS\_REG\_RX\_E\_MASK@{EF\_SPI\_STATUS\_REG\_RX\_E\_MASK}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_STATUS\_REG\_RX\_E\_MASK}{EF\_SPI\_STATUS\_REG\_RX\_E\_MASK}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+RX\+\_\+\+E\+\_\+\+MASK~((uint32\+\_\+t)0x4)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a233519531a39eefca0f1ad884ddfc688}\label{_e_f___s_p_i__regs_8h_a233519531a39eefca0f1ad884ddfc688}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_STATUS\_REG\_RX\_F\_BIT@{EF\_SPI\_STATUS\_REG\_RX\_F\_BIT}} +\index{EF\_SPI\_STATUS\_REG\_RX\_F\_BIT@{EF\_SPI\_STATUS\_REG\_RX\_F\_BIT}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_STATUS\_REG\_RX\_F\_BIT}{EF\_SPI\_STATUS\_REG\_RX\_F\_BIT}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+RX\+\_\+\+F\+\_\+\+BIT~((uint32\+\_\+t)3)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a43c28dcf4792491c02ed80242bbeba2c}\label{_e_f___s_p_i__regs_8h_a43c28dcf4792491c02ed80242bbeba2c}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_STATUS\_REG\_RX\_F\_MASK@{EF\_SPI\_STATUS\_REG\_RX\_F\_MASK}} +\index{EF\_SPI\_STATUS\_REG\_RX\_F\_MASK@{EF\_SPI\_STATUS\_REG\_RX\_F\_MASK}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_STATUS\_REG\_RX\_F\_MASK}{EF\_SPI\_STATUS\_REG\_RX\_F\_MASK}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+RX\+\_\+\+F\+\_\+\+MASK~((uint32\+\_\+t)0x8)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a951e9e98da6dbf7b3f1f86d44013a603}\label{_e_f___s_p_i__regs_8h_a951e9e98da6dbf7b3f1f86d44013a603}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_STATUS\_REG\_TX\_B\_BIT@{EF\_SPI\_STATUS\_REG\_TX\_B\_BIT}} +\index{EF\_SPI\_STATUS\_REG\_TX\_B\_BIT@{EF\_SPI\_STATUS\_REG\_TX\_B\_BIT}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_STATUS\_REG\_TX\_B\_BIT}{EF\_SPI\_STATUS\_REG\_TX\_B\_BIT}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+TX\+\_\+\+B\+\_\+\+BIT~((uint32\+\_\+t)4)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_aa94d64ec8ce3d3fda2496fa69fb9693c}\label{_e_f___s_p_i__regs_8h_aa94d64ec8ce3d3fda2496fa69fb9693c}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_STATUS\_REG\_TX\_B\_MASK@{EF\_SPI\_STATUS\_REG\_TX\_B\_MASK}} +\index{EF\_SPI\_STATUS\_REG\_TX\_B\_MASK@{EF\_SPI\_STATUS\_REG\_TX\_B\_MASK}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_STATUS\_REG\_TX\_B\_MASK}{EF\_SPI\_STATUS\_REG\_TX\_B\_MASK}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+TX\+\_\+\+B\+\_\+\+MASK~((uint32\+\_\+t)0x10)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_abe10f0c7b6422b6da984393ccdab8f64}\label{_e_f___s_p_i__regs_8h_abe10f0c7b6422b6da984393ccdab8f64}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_STATUS\_REG\_TX\_E\_BIT@{EF\_SPI\_STATUS\_REG\_TX\_E\_BIT}} +\index{EF\_SPI\_STATUS\_REG\_TX\_E\_BIT@{EF\_SPI\_STATUS\_REG\_TX\_E\_BIT}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_STATUS\_REG\_TX\_E\_BIT}{EF\_SPI\_STATUS\_REG\_TX\_E\_BIT}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+TX\+\_\+\+E\+\_\+\+BIT~((uint32\+\_\+t)0)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a0742f76dc5c734155f9483ea6808a59d}\label{_e_f___s_p_i__regs_8h_a0742f76dc5c734155f9483ea6808a59d}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_STATUS\_REG\_TX\_E\_MASK@{EF\_SPI\_STATUS\_REG\_TX\_E\_MASK}} +\index{EF\_SPI\_STATUS\_REG\_TX\_E\_MASK@{EF\_SPI\_STATUS\_REG\_TX\_E\_MASK}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_STATUS\_REG\_TX\_E\_MASK}{EF\_SPI\_STATUS\_REG\_TX\_E\_MASK}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+TX\+\_\+\+E\+\_\+\+MASK~((uint32\+\_\+t)0x1)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_abb0ff8fcfd19ed265190d9aa6bdb7550}\label{_e_f___s_p_i__regs_8h_abb0ff8fcfd19ed265190d9aa6bdb7550}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_STATUS\_REG\_TX\_F\_BIT@{EF\_SPI\_STATUS\_REG\_TX\_F\_BIT}} +\index{EF\_SPI\_STATUS\_REG\_TX\_F\_BIT@{EF\_SPI\_STATUS\_REG\_TX\_F\_BIT}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_STATUS\_REG\_TX\_F\_BIT}{EF\_SPI\_STATUS\_REG\_TX\_F\_BIT}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+TX\+\_\+\+F\+\_\+\+BIT~((uint32\+\_\+t)1)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_af249ea07911103f29bc44ca31694b386}\label{_e_f___s_p_i__regs_8h_af249ea07911103f29bc44ca31694b386}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_STATUS\_REG\_TX\_F\_MASK@{EF\_SPI\_STATUS\_REG\_TX\_F\_MASK}} +\index{EF\_SPI\_STATUS\_REG\_TX\_F\_MASK@{EF\_SPI\_STATUS\_REG\_TX\_F\_MASK}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_STATUS\_REG\_TX\_F\_MASK}{EF\_SPI\_STATUS\_REG\_TX\_F\_MASK}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+STATUS\+\_\+\+REG\+\_\+\+TX\+\_\+\+F\+\_\+\+MASK~((uint32\+\_\+t)0x2)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_aaf2f79191000527cbe34a7ebdf733b4b}\label{_e_f___s_p_i__regs_8h_aaf2f79191000527cbe34a7ebdf733b4b}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_TX\_FIFO\_FLUSH\_REG\_FLUSH\_BIT@{EF\_SPI\_TX\_FIFO\_FLUSH\_REG\_FLUSH\_BIT}} +\index{EF\_SPI\_TX\_FIFO\_FLUSH\_REG\_FLUSH\_BIT@{EF\_SPI\_TX\_FIFO\_FLUSH\_REG\_FLUSH\_BIT}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_TX\_FIFO\_FLUSH\_REG\_FLUSH\_BIT}{EF\_SPI\_TX\_FIFO\_FLUSH\_REG\_FLUSH\_BIT}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+TX\+\_\+\+FIFO\+\_\+\+FLUSH\+\_\+\+REG\+\_\+\+FLUSH\+\_\+\+BIT~((uint32\+\_\+t)0)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a8f08868e69dca4ac8fe7892214240894}\label{_e_f___s_p_i__regs_8h_a8f08868e69dca4ac8fe7892214240894}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_TX\_FIFO\_FLUSH\_REG\_FLUSH\_MASK@{EF\_SPI\_TX\_FIFO\_FLUSH\_REG\_FLUSH\_MASK}} +\index{EF\_SPI\_TX\_FIFO\_FLUSH\_REG\_FLUSH\_MASK@{EF\_SPI\_TX\_FIFO\_FLUSH\_REG\_FLUSH\_MASK}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_TX\_FIFO\_FLUSH\_REG\_FLUSH\_MASK}{EF\_SPI\_TX\_FIFO\_FLUSH\_REG\_FLUSH\_MASK}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+TX\+\_\+\+FIFO\+\_\+\+FLUSH\+\_\+\+REG\+\_\+\+FLUSH\+\_\+\+MASK~((uint32\+\_\+t)0x1)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_ac31f79ffb5d5b9d3c40634c4e7fc38da}\label{_e_f___s_p_i__regs_8h_ac31f79ffb5d5b9d3c40634c4e7fc38da}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_TX\_FIFO\_LEVEL\_REG\_LEVEL\_BIT@{EF\_SPI\_TX\_FIFO\_LEVEL\_REG\_LEVEL\_BIT}} +\index{EF\_SPI\_TX\_FIFO\_LEVEL\_REG\_LEVEL\_BIT@{EF\_SPI\_TX\_FIFO\_LEVEL\_REG\_LEVEL\_BIT}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_TX\_FIFO\_LEVEL\_REG\_LEVEL\_BIT}{EF\_SPI\_TX\_FIFO\_LEVEL\_REG\_LEVEL\_BIT}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+TX\+\_\+\+FIFO\+\_\+\+LEVEL\+\_\+\+REG\+\_\+\+LEVEL\+\_\+\+BIT~((uint32\+\_\+t)0)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_ab4ed42d32d7b6440c8c135876812d824}\label{_e_f___s_p_i__regs_8h_ab4ed42d32d7b6440c8c135876812d824}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_TX\_FIFO\_LEVEL\_REG\_LEVEL\_MASK@{EF\_SPI\_TX\_FIFO\_LEVEL\_REG\_LEVEL\_MASK}} +\index{EF\_SPI\_TX\_FIFO\_LEVEL\_REG\_LEVEL\_MASK@{EF\_SPI\_TX\_FIFO\_LEVEL\_REG\_LEVEL\_MASK}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_TX\_FIFO\_LEVEL\_REG\_LEVEL\_MASK}{EF\_SPI\_TX\_FIFO\_LEVEL\_REG\_LEVEL\_MASK}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+TX\+\_\+\+FIFO\+\_\+\+LEVEL\+\_\+\+REG\+\_\+\+LEVEL\+\_\+\+MASK~((uint32\+\_\+t)0xf)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_afcd4de96a4fdbbdf0bfb2d1ef0b36ee1}\label{_e_f___s_p_i__regs_8h_afcd4de96a4fdbbdf0bfb2d1ef0b36ee1}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_TX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_BIT@{EF\_SPI\_TX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_BIT}} +\index{EF\_SPI\_TX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_BIT@{EF\_SPI\_TX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_BIT}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_TX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_BIT}{EF\_SPI\_TX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_BIT}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+TX\+\_\+\+FIFO\+\_\+\+THRESHOLD\+\_\+\+REG\+\_\+\+THRESHOLD\+\_\+\+BIT~((uint32\+\_\+t)0)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a2c5706ed052b899f8f35f9f430bd6cf8}\label{_e_f___s_p_i__regs_8h_a2c5706ed052b899f8f35f9f430bd6cf8}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_TX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_MASK@{EF\_SPI\_TX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_MASK}} +\index{EF\_SPI\_TX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_MASK@{EF\_SPI\_TX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_MASK}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_TX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_MASK}{EF\_SPI\_TX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_MASK}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+TX\+\_\+\+FIFO\+\_\+\+THRESHOLD\+\_\+\+REG\+\_\+\+THRESHOLD\+\_\+\+MASK~((uint32\+\_\+t)0xf)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a483437ca3282104510a46bf4c389372d}\label{_e_f___s_p_i__regs_8h_a483437ca3282104510a46bf4c389372d}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_TXB\_FLAG@{EF\_SPI\_TXB\_FLAG}} +\index{EF\_SPI\_TXB\_FLAG@{EF\_SPI\_TXB\_FLAG}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_TXB\_FLAG}{EF\_SPI\_TXB\_FLAG}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+TXB\+\_\+\+FLAG~((uint32\+\_\+t)0x10)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a4666ce8d0e4296894dee3ac12aa24ed9}\label{_e_f___s_p_i__regs_8h_a4666ce8d0e4296894dee3ac12aa24ed9}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_TXE\_FLAG@{EF\_SPI\_TXE\_FLAG}} +\index{EF\_SPI\_TXE\_FLAG@{EF\_SPI\_TXE\_FLAG}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_TXE\_FLAG}{EF\_SPI\_TXE\_FLAG}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+TXE\+\_\+\+FLAG~((uint32\+\_\+t)0x1)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a42ba708fcfbcd66c33b691df220600a0}\label{_e_f___s_p_i__regs_8h_a42ba708fcfbcd66c33b691df220600a0}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_TXF\_FLAG@{EF\_SPI\_TXF\_FLAG}} +\index{EF\_SPI\_TXF\_FLAG@{EF\_SPI\_TXF\_FLAG}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_TXF\_FLAG}{EF\_SPI\_TXF\_FLAG}} +{\footnotesize\ttfamily \#define EF\+\_\+\+SPI\+\_\+\+TXF\+\_\+\+FLAG~((uint32\+\_\+t)0x2)} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a470cd5845bed94d8b8b358933e4a3442}\label{_e_f___s_p_i__regs_8h_a470cd5845bed94d8b8b358933e4a3442}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!IO\_TYPES@{IO\_TYPES}} +\index{IO\_TYPES@{IO\_TYPES}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{IO\_TYPES}{IO\_TYPES}} +{\footnotesize\ttfamily \#define IO\+\_\+\+TYPES} + + + +\doxysubsection{Typedef Documentation} +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}\label{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_TYPE@{EF\_SPI\_TYPE}} +\index{EF\_SPI\_TYPE@{EF\_SPI\_TYPE}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_TYPE}{EF\_SPI\_TYPE}} +{\footnotesize\ttfamily typedef struct \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{\+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+}} \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}}} + +\mbox{\Hypertarget{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}\label{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}} +\index{EF\_SPI\_regs.h@{EF\_SPI\_regs.h}!EF\_SPI\_TYPE\_PTR@{EF\_SPI\_TYPE\_PTR}} +\index{EF\_SPI\_TYPE\_PTR@{EF\_SPI\_TYPE\_PTR}!EF\_SPI\_regs.h@{EF\_SPI\_regs.h}} +\doxysubsubsection{\texorpdfstring{EF\_SPI\_TYPE\_PTR}{EF\_SPI\_TYPE\_PTR}} +{\footnotesize\ttfamily typedef \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\+\_\+\+SPI\+\_\+\+TYPE}}$\ast$ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+PTR}}} + diff --git a/docs/doxygen/latex/_e_f___s_p_i__regs_8h_source.tex b/docs/doxygen/latex/_e_f___s_p_i__regs_8h_source.tex new file mode 100644 index 0000000..70526a7 --- /dev/null +++ b/docs/doxygen/latex/_e_f___s_p_i__regs_8h_source.tex @@ -0,0 +1,132 @@ +\hypertarget{_e_f___s_p_i__regs_8h_source}{}\doxysection{EF\+\_\+\+SPI\+\_\+regs.\+h} +\mbox{\hyperlink{_e_f___s_p_i__regs_8h}{Go to the documentation of this file.}} +\begin{DoxyCode}{0} +\DoxyCodeLine{00001\ \textcolor{comment}{/*}} +\DoxyCodeLine{00002\ \textcolor{comment}{\ \ \ \ Copyright\ 2024\ Efabless\ Corp.}} +\DoxyCodeLine{00003\ \textcolor{comment}{}} +\DoxyCodeLine{00004\ \textcolor{comment}{\ \ \ \ Author:\ Mohamed\ Shalan\ (mshalan@efabless.com)}} +\DoxyCodeLine{00005\ \textcolor{comment}{}} +\DoxyCodeLine{00006\ \textcolor{comment}{\ \ \ \ Licensed\ under\ the\ Apache\ License,\ Version\ 2.0\ (the\ "{}License"{});}} +\DoxyCodeLine{00007\ \textcolor{comment}{\ \ \ \ you\ may\ not\ use\ this\ file\ except\ in\ compliance\ with\ the\ License.}} +\DoxyCodeLine{00008\ \textcolor{comment}{\ \ \ \ You\ may\ obtain\ a\ copy\ of\ the\ License\ at}} +\DoxyCodeLine{00009\ \textcolor{comment}{}} +\DoxyCodeLine{00010\ \textcolor{comment}{\ \ \ \ \ \ \ \ www.apache.org/licenses/LICENSE-\/2.0}} +\DoxyCodeLine{00011\ \textcolor{comment}{}} +\DoxyCodeLine{00012\ \textcolor{comment}{\ \ \ \ Unless\ required\ by\ applicable\ law\ or\ agreed\ to\ in\ writing,\ software}} +\DoxyCodeLine{00013\ \textcolor{comment}{\ \ \ \ distributed\ under\ the\ License\ is\ distributed\ on\ an\ "{}AS\ IS"{}\ BASIS,}} +\DoxyCodeLine{00014\ \textcolor{comment}{\ \ \ \ WITHOUT\ WARRANTIES\ OR\ CONDITIONS\ OF\ ANY\ KIND,\ either\ express\ or\ implied.}} +\DoxyCodeLine{00015\ \textcolor{comment}{\ \ \ \ See\ the\ License\ for\ the\ specific\ language\ governing\ permissions\ and}} +\DoxyCodeLine{00016\ \textcolor{comment}{\ \ \ \ limitations\ under\ the\ License.}} +\DoxyCodeLine{00017\ \textcolor{comment}{}} +\DoxyCodeLine{00018\ \textcolor{comment}{*/}} +\DoxyCodeLine{00019\ } +\DoxyCodeLine{00020\ \textcolor{preprocessor}{\#ifndef\ EF\_SPIREGS\_H}} +\DoxyCodeLine{00021\ \textcolor{preprocessor}{\#define\ EF\_SPIREGS\_H}} +\DoxyCodeLine{00022\ } +\DoxyCodeLine{00023\ \textcolor{comment}{/******************************************************************************}} +\DoxyCodeLine{00024\ \textcolor{comment}{*\ Includes}} +\DoxyCodeLine{00025\ \textcolor{comment}{******************************************************************************/}} +\DoxyCodeLine{00026\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{_e_f___driver___common_8h}{EF\_Driver\_Common.h}}"{}}} +\DoxyCodeLine{00027\ } +\DoxyCodeLine{00028\ } +\DoxyCodeLine{00029\ \textcolor{comment}{/******************************************************************************}} +\DoxyCodeLine{00030\ \textcolor{comment}{*\ Macros\ and\ Constants}} +\DoxyCodeLine{00031\ \textcolor{comment}{******************************************************************************/}} +\DoxyCodeLine{00032\ \textcolor{preprocessor}{\#ifndef\ IO\_TYPES}} +\DoxyCodeLine{00033\ \textcolor{preprocessor}{\#define\ IO\_TYPES}} +\DoxyCodeLine{00034\ \textcolor{preprocessor}{\#define\ \ \ \_\_R\ \ \ \ \ volatile\ const\ uint32\_t}} +\DoxyCodeLine{00035\ \textcolor{preprocessor}{\#define\ \ \ \_\_W\ \ \ \ \ volatile\ \ \ \ \ \ \ uint32\_t}} +\DoxyCodeLine{00036\ \textcolor{preprocessor}{\#define\ \ \ \_\_RW\ \ \ \ volatile\ \ \ \ \ \ \ uint32\_t}} +\DoxyCodeLine{00037\ \textcolor{preprocessor}{\#endif}} +\DoxyCodeLine{00038\ } +\DoxyCodeLine{00039\ \textcolor{preprocessor}{\#define\ EF\_SPI\_CFG\_REG\_CPOL\_BIT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)0)}} +\DoxyCodeLine{00040\ \textcolor{preprocessor}{\#define\ EF\_SPI\_CFG\_REG\_CPOL\_MASK\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)0x1)}} +\DoxyCodeLine{00041\ \textcolor{preprocessor}{\#define\ EF\_SPI\_CFG\_REG\_CPHA\_BIT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)1)}} +\DoxyCodeLine{00042\ \textcolor{preprocessor}{\#define\ EF\_SPI\_CFG\_REG\_CPHA\_MASK\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)0x2)}} +\DoxyCodeLine{00043\ \textcolor{preprocessor}{\#define\ EF\_SPI\_CTRL\_REG\_SS\_BIT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)0)}} +\DoxyCodeLine{00044\ \textcolor{preprocessor}{\#define\ EF\_SPI\_CTRL\_REG\_SS\_MASK\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)0x1)}} +\DoxyCodeLine{00045\ \textcolor{preprocessor}{\#define\ EF\_SPI\_CTRL\_REG\_ENABLE\_BIT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)1)}} +\DoxyCodeLine{00046\ \textcolor{preprocessor}{\#define\ EF\_SPI\_CTRL\_REG\_ENABLE\_MASK\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)0x2)}} +\DoxyCodeLine{00047\ \textcolor{preprocessor}{\#define\ EF\_SPI\_CTRL\_REG\_RX\_EN\_BIT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)2)}} +\DoxyCodeLine{00048\ \textcolor{preprocessor}{\#define\ EF\_SPI\_CTRL\_REG\_RX\_EN\_MASK\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)0x4)}} +\DoxyCodeLine{00049\ \textcolor{preprocessor}{\#define\ EF\_SPI\_STATUS\_REG\_TX\_E\_BIT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)0)}} +\DoxyCodeLine{00050\ \textcolor{preprocessor}{\#define\ EF\_SPI\_STATUS\_REG\_TX\_E\_MASK\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)0x1)}} +\DoxyCodeLine{00051\ \textcolor{preprocessor}{\#define\ EF\_SPI\_STATUS\_REG\_TX\_F\_BIT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)1)}} +\DoxyCodeLine{00052\ \textcolor{preprocessor}{\#define\ EF\_SPI\_STATUS\_REG\_TX\_F\_MASK\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)0x2)}} +\DoxyCodeLine{00053\ \textcolor{preprocessor}{\#define\ EF\_SPI\_STATUS\_REG\_RX\_E\_BIT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)2)}} +\DoxyCodeLine{00054\ \textcolor{preprocessor}{\#define\ EF\_SPI\_STATUS\_REG\_RX\_E\_MASK\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)0x4)}} +\DoxyCodeLine{00055\ \textcolor{preprocessor}{\#define\ EF\_SPI\_STATUS\_REG\_RX\_F\_BIT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)3)}} +\DoxyCodeLine{00056\ \textcolor{preprocessor}{\#define\ EF\_SPI\_STATUS\_REG\_RX\_F\_MASK\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)0x8)}} +\DoxyCodeLine{00057\ \textcolor{preprocessor}{\#define\ EF\_SPI\_STATUS\_REG\_TX\_B\_BIT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)4)}} +\DoxyCodeLine{00058\ \textcolor{preprocessor}{\#define\ EF\_SPI\_STATUS\_REG\_TX\_B\_MASK\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)0x10)}} +\DoxyCodeLine{00059\ \textcolor{preprocessor}{\#define\ EF\_SPI\_STATUS\_REG\_RX\_A\_BIT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)5)}} +\DoxyCodeLine{00060\ \textcolor{preprocessor}{\#define\ EF\_SPI\_STATUS\_REG\_RX\_A\_MASK\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ((uint32\_t)0x20)}} +\DoxyCodeLine{00061\ \textcolor{preprocessor}{\#define\ EF\_SPI\_RX\_FIFO\_LEVEL\_REG\_LEVEL\_BIT\ \ \ \ \ \ \ \ \ \ ((uint32\_t)0)}} +\DoxyCodeLine{00062\ \textcolor{preprocessor}{\#define\ EF\_SPI\_RX\_FIFO\_LEVEL\_REG\_LEVEL\_MASK\ \ \ \ \ \ \ \ \ ((uint32\_t)0xf)}} +\DoxyCodeLine{00063\ \textcolor{preprocessor}{\#define\ EF\_SPI\_RX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_BIT\ \ ((uint32\_t)0)}} +\DoxyCodeLine{00064\ \textcolor{preprocessor}{\#define\ EF\_SPI\_RX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_MASK\ ((uint32\_t)0xf)}} +\DoxyCodeLine{00065\ \textcolor{preprocessor}{\#define\ EF\_SPI\_RX\_FIFO\_FLUSH\_REG\_FLUSH\_BIT\ \ \ \ \ \ \ \ \ \ ((uint32\_t)0)}} +\DoxyCodeLine{00066\ \textcolor{preprocessor}{\#define\ EF\_SPI\_RX\_FIFO\_FLUSH\_REG\_FLUSH\_MASK\ \ \ \ \ \ \ \ \ ((uint32\_t)0x1)}} +\DoxyCodeLine{00067\ \textcolor{preprocessor}{\#define\ EF\_SPI\_TX\_FIFO\_LEVEL\_REG\_LEVEL\_BIT\ \ \ \ \ \ \ \ \ \ ((uint32\_t)0)}} +\DoxyCodeLine{00068\ \textcolor{preprocessor}{\#define\ EF\_SPI\_TX\_FIFO\_LEVEL\_REG\_LEVEL\_MASK\ \ \ \ \ \ \ \ \ ((uint32\_t)0xf)}} +\DoxyCodeLine{00069\ \textcolor{preprocessor}{\#define\ EF\_SPI\_TX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_BIT\ \ ((uint32\_t)0)}} +\DoxyCodeLine{00070\ \textcolor{preprocessor}{\#define\ EF\_SPI\_TX\_FIFO\_THRESHOLD\_REG\_THRESHOLD\_MASK\ ((uint32\_t)0xf)}} +\DoxyCodeLine{00071\ \textcolor{preprocessor}{\#define\ EF\_SPI\_TX\_FIFO\_FLUSH\_REG\_FLUSH\_BIT\ \ \ \ \ \ \ \ \ \ ((uint32\_t)0)}} +\DoxyCodeLine{00072\ \textcolor{preprocessor}{\#define\ EF\_SPI\_TX\_FIFO\_FLUSH\_REG\_FLUSH\_MASK\ \ \ \ \ \ \ \ \ ((uint32\_t)0x1)}} +\DoxyCodeLine{00073\ } +\DoxyCodeLine{00074\ \textcolor{preprocessor}{\#define\ EF\_SPI\_TXE\_FLAG\ ((uint32\_t)0x1)}} +\DoxyCodeLine{00075\ \textcolor{preprocessor}{\#define\ EF\_SPI\_TXF\_FLAG\ ((uint32\_t)0x2)}} +\DoxyCodeLine{00076\ \textcolor{preprocessor}{\#define\ EF\_SPI\_RXE\_FLAG\ ((uint32\_t)0x4)}} +\DoxyCodeLine{00077\ \textcolor{preprocessor}{\#define\ EF\_SPI\_RXF\_FLAG\ ((uint32\_t)0x8)}} +\DoxyCodeLine{00078\ \textcolor{preprocessor}{\#define\ EF\_SPI\_TXB\_FLAG\ ((uint32\_t)0x10)}} +\DoxyCodeLine{00079\ \textcolor{preprocessor}{\#define\ EF\_SPI\_RXA\_FLAG\ ((uint32\_t)0x20)}} +\DoxyCodeLine{00080\ } +\DoxyCodeLine{00081\ } +\DoxyCodeLine{00082\ \textcolor{comment}{/******************************************************************************}} +\DoxyCodeLine{00083\ \textcolor{comment}{*\ Typedefs\ and\ Enums}} +\DoxyCodeLine{00084\ \textcolor{comment}{******************************************************************************/}} +\DoxyCodeLine{00085\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{\_EF\_SPI\_TYPE\_}}\ \{} +\DoxyCodeLine{00086\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\_\_R}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___a0262003dd1dff3a1dcf49b0c08c40ba9}{RXDATA}};} +\DoxyCodeLine{00087\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\_\_W}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___aac1ffd4b085fe901755a2ad1b5f41528}{TXDATA}};} +\DoxyCodeLine{00088\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\_\_W}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___a31964268b25903ca7a37be5ba5c9b854}{CFG}};} +\DoxyCodeLine{00089\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\_\_W}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___ae89353e226b09310f76d5a3de109088f}{CTRL}};} +\DoxyCodeLine{00090\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\_\_W}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___afa42966f653fd86a90d8343bd36634c2}{PR}};} +\DoxyCodeLine{00091\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\_\_R}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___adce0731ad3a0f1e0903d2c28a98aac98}{STATUS}};} +\DoxyCodeLine{00092\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\_\_R}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___ad3484cafc190c0d0df83f0a945a99699}{reserved\_0}}[16250];} +\DoxyCodeLine{00093\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\_\_R}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___acdaa1e9c52f9af8f44ff4a8cdaabce9c}{RX\_FIFO\_LEVEL}};} +\DoxyCodeLine{00094\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\_\_W}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___ab94b3f3550b7dabb3032012d0628ef30}{RX\_FIFO\_THRESHOLD}};} +\DoxyCodeLine{00095\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\_\_W}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___ad0e9f953a48f16f8d2297993e2763f34}{RX\_FIFO\_FLUSH}};} +\DoxyCodeLine{00096\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\_\_R}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___ace31e2375b8ba37742f0d5e224a6203a}{reserved\_1}}[1];} +\DoxyCodeLine{00097\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\_\_R}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___a47066d2e4989448fefa0668b0dcf7dc0}{TX\_FIFO\_LEVEL}};} +\DoxyCodeLine{00098\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\_\_W}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___a8db011b9afb9e6e91ec787b854299637}{TX\_FIFO\_THRESHOLD}};} +\DoxyCodeLine{00099\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\_\_W}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___a0d7abd6e9e3b681d50fe3929df9026e0}{TX\_FIFO\_FLUSH}};} +\DoxyCodeLine{00100\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\_\_R}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___a2f46338a1b1524a35b3d897e3a952eea}{reserved\_2}}[57];} +\DoxyCodeLine{00101\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a81f369079976a46554fd9798ab035697}{\_\_RW}}\ \ \ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___a5b8438e77bc688c9be746edd82a41a33}{IM}};} +\DoxyCodeLine{00102\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\_\_R}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___abb579ebf283e3ea70d567ea17ca7fc25}{MIS}};} +\DoxyCodeLine{00103\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\_\_R}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___a939c9eabb0a5f81f07549a6328fd9941}{RIS}};} +\DoxyCodeLine{00104\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\_\_W}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___aed0d63b563874f4b6c1b4b32dbe10140}{IC}};} +\DoxyCodeLine{00105\ \ \ \ \ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\_\_W}}\ \ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___a37453b637f735bea892bdba6031a4abc}{GCLK}};} +\DoxyCodeLine{00106\ \}\ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a13327a2a72e415754d4174d9e8c1ce84}{EF\_SPI\_TYPE}};} +\DoxyCodeLine{00107\ } +\DoxyCodeLine{00108\ \textcolor{keyword}{typedef}\ \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{EF\_SPI\_TYPE}}*\ \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ab51eaba59e1d37581be74b95ac7b4b20}{EF\_SPI\_TYPE\_PTR}};} +\DoxyCodeLine{00109\ } +\DoxyCodeLine{00110\ \textcolor{comment}{/******************************************************************************}} +\DoxyCodeLine{00111\ \textcolor{comment}{*\ Function\ Prototypes}} +\DoxyCodeLine{00112\ \textcolor{comment}{******************************************************************************/}} +\DoxyCodeLine{00113\ } +\DoxyCodeLine{00114\ } +\DoxyCodeLine{00115\ } +\DoxyCodeLine{00116\ \textcolor{comment}{/******************************************************************************}} +\DoxyCodeLine{00117\ \textcolor{comment}{*\ External\ Variables}} +\DoxyCodeLine{00118\ \textcolor{comment}{******************************************************************************/}} +\DoxyCodeLine{00119\ } +\DoxyCodeLine{00120\ } +\DoxyCodeLine{00121\ } +\DoxyCodeLine{00122\ } +\DoxyCodeLine{00123\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ EF\_SPIREGS\_H}} +\DoxyCodeLine{00124\ } +\DoxyCodeLine{00125\ \textcolor{comment}{/******************************************************************************}} +\DoxyCodeLine{00126\ \textcolor{comment}{*\ End\ of\ File}} +\DoxyCodeLine{00127\ \textcolor{comment}{******************************************************************************/}} + +\end{DoxyCode} diff --git a/docs/doxygen/latex/annotated.tex b/docs/doxygen/latex/annotated.tex new file mode 100644 index 0000000..e8b56ae --- /dev/null +++ b/docs/doxygen/latex/annotated.tex @@ -0,0 +1,4 @@ +\doxysection{Class List} +Here are the classes, structs, unions and interfaces with brief descriptions\+:\begin{DoxyCompactList} +\item\contentsline{section}{\mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e__}{\+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+}} }{\pageref{struct___e_f___s_p_i___t_y_p_e__}}{} +\end{DoxyCompactList} diff --git a/docs/doxygen/latex/doxygen.sty b/docs/doxygen/latex/doxygen.sty new file mode 100644 index 0000000..dd7b812 --- /dev/null +++ b/docs/doxygen/latex/doxygen.sty @@ -0,0 +1,603 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{doxygen} + +% Packages used by this style file +\RequirePackage{alltt} +%%\RequirePackage{array} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package +\RequirePackage{calc} +\RequirePackage{float} +%%\RequirePackage{ifthen} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package +\RequirePackage{verbatim} +\RequirePackage[table]{xcolor} +\RequirePackage{longtable_doxygen} +\RequirePackage{tabu_doxygen} +\RequirePackage{fancyvrb} +\RequirePackage{tabularx} +\RequirePackage{multicol} +\RequirePackage{multirow} +\RequirePackage{hanging} +\RequirePackage{ifpdf} +\RequirePackage{adjustbox} +\RequirePackage{amssymb} +\RequirePackage{stackengine} +\RequirePackage{enumitem} +\RequirePackage{alphalph} +\RequirePackage[normalem]{ulem} % for strikeout, but don't modify emphasis + +%---------- Internal commands used in this style file ---------------- + +\newcommand{\ensurespace}[1]{% + \begingroup% + \setlength{\dimen@}{#1}% + \vskip\z@\@plus\dimen@% + \penalty -100\vskip\z@\@plus -\dimen@% + \vskip\dimen@% + \penalty 9999% + \vskip -\dimen@% + \vskip\z@skip% hide the previous |\vskip| from |\addvspace| + \endgroup% +} + +\newcommand{\DoxyHorRuler}[1]{% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \ifthenelse{#1=0}% + {% + \hrule% + }% + {% + \hrulefilll% + }% +} +\newcommand{\DoxyLabelFont}{} +\newcommand{\entrylabel}[1]{% + {% + \parbox[b]{\labelwidth-4pt}{% + \makebox[0pt][l]{\DoxyLabelFont#1}% + \vspace{1.5\baselineskip}% + }% + }% +} + +\newenvironment{DoxyDesc}[1]{% + \ensurespace{4\baselineskip}% + \begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + %\setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + }% + \item[#1]% +}{% + \end{list}% +} + +\newsavebox{\xrefbox} +\newlength{\xreflength} +\newcommand{\xreflabel}[1]{% + \sbox{\xrefbox}{#1}% + \setlength{\xreflength}{\wd\xrefbox}% + \ifthenelse{\xreflength>\labelwidth}{% + \begin{minipage}{\textwidth}% + \setlength{\parindent}{0pt}% + \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}% + \end{minipage}% + }{% + \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}% + }% +} + +%---------- Commands used by doxygen LaTeX output generator ---------- + +% Used by
     ... 
    +\newenvironment{DoxyPre}{% + \small% + \begin{alltt}% +}{% + \end{alltt}% + \normalsize% +} +% Necessary for redefining not defined characters, i.e. "Replacement Character" in tex output. +\newlength{\CodeWidthChar} +\newlength{\CodeHeightChar} +\settowidth{\CodeWidthChar}{?} +\settoheight{\CodeHeightChar}{?} +% Necessary for hanging indent +\newlength{\DoxyCodeWidth} + +\newcommand\DoxyCodeLine[1]{ + \ifthenelse{\equal{\detokenize{#1}}{}} + { + \vspace*{\baselineskip} + } + { + \hangpara{\DoxyCodeWidth}{1}{#1}\par + } +} + +\newcommand\NiceSpace{% + \discretionary{}{\kern\fontdimen2\font}{\kern\fontdimen2\font}% +} + +% Used by @code ... @endcode +\newenvironment{DoxyCode}[1]{% + \par% + \scriptsize% + \normalfont\ttfamily% + \rightskip0pt plus 1fil% + \settowidth{\DoxyCodeWidth}{000000}% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \ifthenelse{\equal{#1}{0}} + { + {\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces% + } + { + {\lccode`~32 \lowercase{\global\let~}}\obeyspaces% + } + +}{% + \normalfont% + \normalsize% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% +} + +% Redefining not defined characters, i.e. "Replacement Character" in tex output. +\def\ucr{\adjustbox{width=\CodeWidthChar,height=\CodeHeightChar}{\stackinset{c}{}{c}{-.2pt}{% + \textcolor{white}{\sffamily\bfseries\small ?}}{% + \rotatebox{45}{$\blacksquare$}}}} + +% Used by @example, @include, @includelineno and @dontinclude +\newenvironment{DoxyCodeInclude}[1]{% + \DoxyCode{#1}% +}{% + \endDoxyCode% +} + +% Used by @verbatim ... @endverbatim +\newenvironment{DoxyVerb}{% + \par% + \footnotesize% + \verbatim% +}{% + \endverbatim% + \normalsize% +} + +% Used by @verbinclude +\newenvironment{DoxyVerbInclude}{% + \DoxyVerb% +}{% + \endDoxyVerb% +} + +% Used by numbered lists (using '-#' or
      ...
    ) +\setlistdepth{12} +\newlist{DoxyEnumerate}{enumerate}{12} +\setlist[DoxyEnumerate,1]{label=\arabic*.} +\setlist[DoxyEnumerate,2]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,3]{label=\roman*.} +\setlist[DoxyEnumerate,4]{label=\enumAlphAlphcnt*.} +\setlist[DoxyEnumerate,5]{label=\arabic*.} +\setlist[DoxyEnumerate,6]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,7]{label=\roman*.} +\setlist[DoxyEnumerate,8]{label=\enumAlphAlphcnt*.} +\setlist[DoxyEnumerate,9]{label=\arabic*.} +\setlist[DoxyEnumerate,10]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,11]{label=\roman*.} +\setlist[DoxyEnumerate,12]{label=\enumAlphAlphcnt*.} + +% Used by bullet lists (using '-', @li, @arg, or
      ...
    ) +\setlistdepth{12} +\newlist{DoxyItemize}{itemize}{12} +\setlist[DoxyItemize]{label=\textperiodcentered} + +\setlist[DoxyItemize,1]{label=\textbullet} +\setlist[DoxyItemize,2]{label=\normalfont\bfseries \textendash} +\setlist[DoxyItemize,3]{label=\textasteriskcentered} +\setlist[DoxyItemize,4]{label=\textperiodcentered} + +% Used by description lists (using
    ...
    ) +\newenvironment{DoxyDescription}{% + \description% +}{% + \enddescription% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if caption is specified) +\newenvironment{DoxyImage}{% + \begin{figure}[H]% + \centering% +}{% + \end{figure}% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if no caption is specified) +\newenvironment{DoxyImageNoCaption}{% + \begin{center}% +}{% + \end{center}% +} + +% Used by @image +% (only if inline is specified) +\newenvironment{DoxyInlineImage}{% +}{% +} + +% Used by @attention +\newenvironment{DoxyAttention}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @author and @authors +\newenvironment{DoxyAuthor}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @date +\newenvironment{DoxyDate}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @invariant +\newenvironment{DoxyInvariant}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @note +\newenvironment{DoxyNote}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @post +\newenvironment{DoxyPostcond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @pre +\newenvironment{DoxyPrecond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @copyright +\newenvironment{DoxyCopyright}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @remark +\newenvironment{DoxyRemark}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @return and @returns +\newenvironment{DoxyReturn}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @since +\newenvironment{DoxySince}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @see +\newenvironment{DoxySeeAlso}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @version +\newenvironment{DoxyVersion}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @warning +\newenvironment{DoxyWarning}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @par and @paragraph +\newenvironment{DoxyParagraph}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by parameter lists +\newenvironment{DoxyParams}[2][]{% + \tabulinesep=1mm% + \par% + \ifthenelse{\equal{#1}{}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description + {\ifthenelse{\equal{#1}{1}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc + } + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields of simple structs +\newenvironment{DoxyFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields simple class style enums +\newenvironment{DoxyEnumFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for parameters within a detailed function description +\newenvironment{DoxyParamCaption}{% + \renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}% +}{% +} + +% Used by return value lists +\newenvironment{DoxyRetVals}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by exception lists +\newenvironment{DoxyExceptions}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by template parameter lists +\newenvironment{DoxyTemplParams}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for member lists +\newenvironment{DoxyCompactItemize}{% + \begin{itemize}% + \setlength{\itemsep}{-3pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \setlength{\partopsep}{0pt}% +}{% + \end{itemize}% +} + +% Used for member descriptions +\newenvironment{DoxyCompactList}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + \setlength{\itemsep}{0pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \renewcommand{\makelabel}{\hfill}% + }% +}{% + \end{list}% +} + +% Used for reference lists (@bug, @deprecated, @todo, etc.) +\newenvironment{DoxyRefList}{% + \begin{list}{}{% + \setlength{\labelwidth}{10pt}% + \setlength{\leftmargin}{\labelwidth}% + \addtolength{\leftmargin}{\labelsep}% + \renewcommand{\makelabel}{\xreflabel}% + }% +}{% + \end{list}% +} + +% Used by @bug, @deprecated, @todo, etc. +\newenvironment{DoxyRefDesc}[1]{% + \begin{list}{}{% + \renewcommand\makelabel[1]{\textbf{##1}}% + \settowidth\labelwidth{\makelabel{#1}}% + \setlength\leftmargin{\labelwidth+\labelsep}% + }% +}{% + \end{list}% +} + +% Used by parameter lists and simple sections +\newenvironment{Desc} +{\begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + } +}{% + \end{list}% +} + +% Used by tables +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}% +\newenvironment{TabularC}[1]% +{\tabulinesep=1mm +\begin{longtabu*}spread 0pt [c]{*#1{|X[-1]}|}}% +{\end{longtabu*}\par}% + +\newenvironment{TabularNC}[1]% +{\begin{tabu}spread 0pt [l]{*#1{|X[-1]}|}}% +{\end{tabu}\par}% + +% Used for member group headers +\newenvironment{Indent}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + }% + \item[]\ignorespaces% +}{% + \unskip% + \end{list}% +} + +% Used when hyperlinks are turned off +\newcommand{\doxyref}[3]{% + \textbf{#1} (\textnormal{#2}\,\pageref{#3})% +} + +% Used to link to a table when hyperlinks are turned on +\newcommand{\doxytablelink}[2]{% + \ref{#1}% +} + +% Used to link to a table when hyperlinks are turned off +\newcommand{\doxytableref}[3]{% + \ref{#3}% +} + +% Used by @addindex +\newcommand{\lcurly}{\{} +\newcommand{\rcurly}{\}} + +% Colors used for syntax highlighting +\definecolor{comment}{rgb}{0.5,0.0,0.0} +\definecolor{keyword}{rgb}{0.0,0.5,0.0} +\definecolor{keywordtype}{rgb}{0.38,0.25,0.125} +\definecolor{keywordflow}{rgb}{0.88,0.5,0.0} +\definecolor{preprocessor}{rgb}{0.5,0.38,0.125} +\definecolor{stringliteral}{rgb}{0.0,0.125,0.25} +\definecolor{charliteral}{rgb}{0.0,0.5,0.5} +\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0} +\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43} +\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0} +\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0} + +% Color used for table heading +\newcommand{\tableheadbgcolor}{lightgray}% + +% Version of hypertarget with correct landing location +\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}} + +% possibility to have sections etc. be within the margins +% unfortunately had to copy part of book.cls and add \raggedright +\makeatletter +\newcommand\doxysection{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\raggedright\normalfont\Large\bfseries}} +\newcommand\doxysubsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\large\bfseries}} +\newcommand\doxysubsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxyparagraph{\@startsection{paragraph}{4}{\z@}% + {3.25ex \@plus1ex \@minus.2ex}% + {-1em}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubparagraph{\@startsection{subparagraph}{5}{\parindent}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\raggedright\normalfont\normalsize\bfseries}} +\makeatother +% Define caption that is also suitable in a table +\makeatletter +\def\doxyfigcaption{% +\H@refstepcounter{figure}% +\@dblarg{\@caption{figure}}} +\makeatother + +% Define alpha enumarative names for counters > 26 +\makeatletter +\def\enumalphalphcnt#1{\expandafter\@enumalphalphcnt\csname c@#1\endcsname} +\def\@enumalphalphcnt#1{\alphalph{#1}} +\def\enumAlphAlphcnt#1{\expandafter\@enumAlphAlphcnt\csname c@#1\endcsname} +\def\@enumAlphAlphcnt#1{\AlphAlph{#1}} +\makeatother +\AddEnumerateCounter{\enumalphalphcnt}{\@enumalphalphcnt}{aa} +\AddEnumerateCounter{\enumAlphAlphcnt}{\@enumAlphAlphcnt}{AA} diff --git a/docs/doxygen/latex/files.tex b/docs/doxygen/latex/files.tex new file mode 100644 index 0000000..c3a7cb7 --- /dev/null +++ b/docs/doxygen/latex/files.tex @@ -0,0 +1,7 @@ +\doxysection{File List} +Here is a list of all files with brief descriptions\+:\begin{DoxyCompactList} +\item\contentsline{section}{\mbox{\hyperlink{_e_f___driver___common_8h}{EF\+\_\+\+Driver\+\_\+\+Common.\+h}} \\*C header file for common driver definitions and types }{\pageref{_e_f___driver___common_8h}}{} +\item\contentsline{section}{\mbox{\hyperlink{_e_f___s_p_i_8c}{EF\+\_\+\+SPI.\+c}} \\*C file for SPI APIs which contains the function Implementations }{\pageref{_e_f___s_p_i_8c}}{} +\item\contentsline{section}{\mbox{\hyperlink{_e_f___s_p_i_8h}{EF\+\_\+\+SPI.\+h}} \\*C header file for SPI APIs which contains the function prototypes }{\pageref{_e_f___s_p_i_8h}}{} +\item\contentsline{section}{\mbox{\hyperlink{_e_f___s_p_i__regs_8h}{EF\+\_\+\+SPI\+\_\+regs.\+h}} }{\pageref{_e_f___s_p_i__regs_8h}}{} +\end{DoxyCompactList} diff --git a/docs/doxygen/latex/longtable_doxygen.sty b/docs/doxygen/latex/longtable_doxygen.sty new file mode 100644 index 0000000..a0eb314 --- /dev/null +++ b/docs/doxygen/latex/longtable_doxygen.sty @@ -0,0 +1,448 @@ +%% +%% This is file `longtable.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% longtable.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% The source is maintained by the LaTeX Project team and bug +%% reports for it can be opened at http://latex-project.org/bugs.html +%% (but please observe conditions on bug reports sent to that address!) +%% +%% Copyright 1993-2016 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file was generated from file(s) of the Standard LaTeX `Tools Bundle'. +%% -------------------------------------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This file may only be distributed together with a copy of the LaTeX +%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle' +%% without such generated files. +%% +%% The list of all files belonging to the LaTeX `Tools Bundle' is +%% given in the file `manifest.txt'. +%% +%% File: longtable.dtx Copyright (C) 1990-2001 David Carlisle +\NeedsTeXFormat{LaTeX2e}[1995/06/01] +\ProvidesPackage{longtable_doxygen} + [2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen] +\def\LT@err{\PackageError{longtable}} +\def\LT@warn{\PackageWarning{longtable}} +\def\LT@final@warn{% + \AtEndDocument{% + \LT@warn{Table \@width s have changed. Rerun LaTeX.\@gobbletwo}}% + \global\let\LT@final@warn\relax} +\DeclareOption{errorshow}{% + \def\LT@warn{\PackageInfo{longtable}}} +\DeclareOption{pausing}{% + \def\LT@warn#1{% + \LT@err{#1}{This is not really an error}}} +\DeclareOption{set}{} +\DeclareOption{final}{} +\ProcessOptions +\newskip\LTleft \LTleft=\fill +\newskip\LTright \LTright=\fill +\newskip\LTpre \LTpre=\bigskipamount +\newskip\LTpost \LTpost=\bigskipamount +\newcount\LTchunksize \LTchunksize=20 +\let\c@LTchunksize\LTchunksize +\newdimen\LTcapwidth \LTcapwidth=4in +\newbox\LT@head +\newbox\LT@firsthead +\newbox\LT@foot +\newbox\LT@lastfoot +\newcount\LT@cols +\newcount\LT@rows +\newcounter{LT@tables} +\newcounter{LT@chunks}[LT@tables] +\ifx\c@table\undefined + \newcounter{table} + \def\fnum@table{\tablename~\thetable} +\fi +\ifx\tablename\undefined + \def\tablename{Table} +\fi +\newtoks\LT@p@ftn +\mathchardef\LT@end@pen=30000 +\def\longtable{% + \par + \ifx\multicols\@undefined + \else + \ifnum\col@number>\@ne + \@twocolumntrue + \fi + \fi + \if@twocolumn + \LT@err{longtable not in 1-column mode}\@ehc + \fi + \begingroup + \@ifnextchar[\LT@array{\LT@array[x]}} +\def\LT@array[#1]#2{% + \refstepcounter{table}\stepcounter{LT@tables}% + \if l#1% + \LTleft\z@ \LTright\fill + \else\if r#1% + \LTleft\fill \LTright\z@ + \else\if c#1% + \LTleft\fill \LTright\fill + \fi\fi\fi + \let\LT@mcol\multicolumn + \let\LT@@tabarray\@tabarray + \let\LT@@hl\hline + \def\@tabarray{% + \let\hline\LT@@hl + \LT@@tabarray}% + \let\\\LT@tabularcr\let\tabularnewline\\% + \def\newpage{\noalign{\break}}% + \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}% + \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}% + \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption + \@tempdima\ht\strutbox + \let\@endpbox\LT@endpbox + \ifx\extrarowheight\@undefined + \let\@acol\@tabacol + \let\@classz\@tabclassz \let\@classiv\@tabclassiv + \def\@startpbox{\vtop\LT@startpbox}% + \let\@@startpbox\@startpbox + \let\@@endpbox\@endpbox + \let\LT@LL@FM@cr\@tabularcr + \else + \advance\@tempdima\extrarowheight + \col@sep\tabcolsep + \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr + \fi + \setbox\@arstrutbox\hbox{\vrule + \@height \arraystretch \@tempdima + \@depth \arraystretch \dp \strutbox + \@width \z@}% + \let\@sharp##\let\protect\relax + \begingroup + \@mkpream{#2}% + \xdef\LT@bchunk{% + \global\advance\c@LT@chunks\@ne + \global\LT@rows\z@\setbox\z@\vbox\bgroup + \LT@setprevdepth + \tabskip\LTleft \noexpand\halign to\hsize\bgroup + \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}% + \endgroup + \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols + \LT@make@row + \m@th\let\par\@empty + \everycr{}\lineskip\z@\baselineskip\z@ + \LT@bchunk} +\def\LT@no@pgbk#1[#2]{\penalty #1\@getpen{#2}\ifnum`{=0\fi}} +\def\LT@start{% + \let\LT@start\endgraf + \endgraf\penalty\z@\vskip\LTpre + \dimen@\pagetotal + \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi + \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi + \advance\dimen@ \ht\LT@foot + \dimen@ii\vfuzz + \vfuzz\maxdimen + \setbox\tw@\copy\z@ + \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox + \setbox\tw@\vbox{\unvbox\tw@}% + \vfuzz\dimen@ii + \advance\dimen@ \ht + \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi + \advance\dimen@\dp + \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi + \advance\dimen@ -\pagegoal + \ifdim \dimen@>\z@\vfil\break\fi + \global\@colroom\@colht + \ifvoid\LT@foot\else + \advance\vsize-\ht\LT@foot + \global\advance\@colroom-\ht\LT@foot + \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@ + \maxdepth\z@ + \fi + \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak + \output{\LT@output}} +\def\endlongtable{% + \crcr + \noalign{% + \let\LT@entry\LT@entry@chop + \xdef\LT@save@row{\LT@save@row}}% + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \if@filesw + {\let\LT@entry\LT@entry@write\immediate\write\@auxout{% + \gdef\expandafter\noexpand + \csname LT@\romannumeral\c@LT@tables\endcsname + {\LT@save@row}}}% + \fi + \ifx\LT@save@row\LT@@save@row + \else + \LT@warn{Column \@width s have changed\MessageBreak + in table \thetable}% + \LT@final@warn + \fi + \endgraf\penalty -\LT@end@pen + \endgroup + \global\@mparbottom\z@ + \pagegoal\vsize + \endgraf\penalty\z@\addvspace\LTpost + \ifvoid\footins\else\insert\footins{}\fi} +\def\LT@nofcols#1&{% + \futurelet\@let@token\LT@n@fcols} +\def\LT@n@fcols{% + \advance\LT@cols\@ne + \ifx\@let@token\LT@nofcols + \expandafter\@gobble + \else + \expandafter\LT@nofcols + \fi} +\def\LT@tabularcr{% + \relax\iffalse{\fi\ifnum0=`}\fi + \@ifstar + {\def\crcr{\LT@crcr\noalign{\nobreak}}\let\cr\crcr + \LT@t@bularcr}% + {\LT@t@bularcr}} +\let\LT@crcr\crcr +\let\LT@setprevdepth\relax +\def\LT@t@bularcr{% + \global\advance\LT@rows\@ne + \ifnum\LT@rows=\LTchunksize + \gdef\LT@setprevdepth{% + \prevdepth\z@\global + \global\let\LT@setprevdepth\relax}% + \expandafter\LT@xtabularcr + \else + \ifnum0=`{}\fi + \expandafter\LT@LL@FM@cr + \fi} +\def\LT@xtabularcr{% + \@ifnextchar[\LT@argtabularcr\LT@ntabularcr} +\def\LT@ntabularcr{% + \ifnum0=`{}\fi + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \LT@bchunk} +\def\LT@argtabularcr[#1]{% + \ifnum0=`{}\fi + \ifdim #1>\z@ + \unskip\@xargarraycr{#1}% + \else + \@yargarraycr{#1}% + \fi + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \LT@bchunk} +\def\LT@echunk{% + \crcr\LT@save@row\cr\egroup + \global\setbox\@ne\lastbox + \unskip + \egroup} +\def\LT@entry#1#2{% + \ifhmode\@firstofone{&}\fi\omit + \ifnum#1=\c@LT@chunks + \else + \kern#2\relax + \fi} +\def\LT@entry@chop#1#2{% + \noexpand\LT@entry + {\ifnum#1>\c@LT@chunks + 1}{0pt% + \else + #1}{#2% + \fi}} +\def\LT@entry@write{% + \noexpand\LT@entry^^J% + \@spaces} +\def\LT@kill{% + \LT@echunk + \LT@get@widths + \expandafter\LT@rebox\LT@bchunk} +\def\LT@rebox#1\bgroup{% + #1\bgroup + \unvbox\z@ + \unskip + \setbox\z@\lastbox} +\def\LT@blank@row{% + \xdef\LT@save@row{\expandafter\LT@build@blank + \romannumeral\number\LT@cols 001 }} +\def\LT@build@blank#1{% + \if#1m% + \noexpand\LT@entry{1}{0pt}% + \expandafter\LT@build@blank + \fi} +\def\LT@make@row{% + \global\expandafter\let\expandafter\LT@save@row + \csname LT@\romannumeral\c@LT@tables\endcsname + \ifx\LT@save@row\relax + \LT@blank@row + \else + {\let\LT@entry\or + \if!% + \ifcase\expandafter\expandafter\expandafter\LT@cols + \expandafter\@gobble\LT@save@row + \or + \else + \relax + \fi + !% + \else + \aftergroup\LT@blank@row + \fi}% + \fi} +\let\setlongtables\relax +\def\LT@get@widths{% + \setbox\tw@\hbox{% + \unhbox\@ne + \let\LT@old@row\LT@save@row + \global\let\LT@save@row\@empty + \count@\LT@cols + \loop + \unskip + \setbox\tw@\lastbox + \ifhbox\tw@ + \LT@def@row + \advance\count@\m@ne + \repeat}% + \ifx\LT@@save@row\@undefined + \let\LT@@save@row\LT@save@row + \fi} +\def\LT@def@row{% + \let\LT@entry\or + \edef\@tempa{% + \ifcase\expandafter\count@\LT@old@row + \else + {1}{0pt}% + \fi}% + \let\LT@entry\relax + \xdef\LT@save@row{% + \LT@entry + \expandafter\LT@max@sel\@tempa + \LT@save@row}} +\def\LT@max@sel#1#2{% + {\ifdim#2=\wd\tw@ + #1% + \else + \number\c@LT@chunks + \fi}% + {\the\wd\tw@}} +\def\LT@hline{% + \noalign{\ifnum0=`}\fi + \penalty\@M + \futurelet\@let@token\LT@@hline} +\def\LT@@hline{% + \ifx\@let@token\hline + \global\let\@gtempa\@gobble + \gdef\LT@sep{\penalty-\@medpenalty\vskip\doublerulesep}% + \else + \global\let\@gtempa\@empty + \gdef\LT@sep{\penalty-\@lowpenalty\vskip-\arrayrulewidth}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr + \noalign{\LT@sep}% + \multispan\LT@cols + \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr + \noalign{\penalty\@M}% + \@gtempa} +\def\LT@caption{% + \noalign\bgroup + \@ifnextchar[{\egroup\LT@c@ption\@firstofone}\LT@capti@n} +\def\LT@c@ption#1[#2]#3{% + \LT@makecaption#1\fnum@table{#3}% + \def\@tempa{#2}% + \ifx\@tempa\@empty\else + {\let\\\space + \addcontentsline{lot}{table}{\protect\numberline{\thetable}{#2}}}% + \fi} +\def\LT@capti@n{% + \@ifstar + {\egroup\LT@c@ption\@gobble[]}% + {\egroup\@xdblarg{\LT@c@ption\@firstofone}}} +\def\LT@makecaption#1#2#3{% + \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\LTcapwidth{% + \sbox\@tempboxa{#1{#2: }#3}% + \ifdim\wd\@tempboxa>\hsize + #1{#2: }#3% + \else + \hbox to\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \endgraf\vskip\baselineskip}% + \hss}}} +\def\LT@output{% + \ifnum\outputpenalty <-\@Mi + \ifnum\outputpenalty > -\LT@end@pen + \LT@err{floats and marginpars not allowed in a longtable}\@ehc + \else + \setbox\z@\vbox{\unvbox\@cclv}% + \ifdim \ht\LT@lastfoot>\ht\LT@foot + \dimen@\pagegoal + \advance\dimen@-\ht\LT@lastfoot + \ifdim\dimen@<\ht\z@ + \setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}% + \@makecol + \@outputpage + \setbox\z@\vbox{\box\LT@head}% + \fi + \fi + \global\@colroom\@colht + \global\vsize\@colht + \vbox + {\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}% + \fi + \else + \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}% + \@makecol + \@outputpage + \global\vsize\@colroom + \copy\LT@head\nobreak + \fi} +\def\LT@end@hd@ft#1{% + \LT@echunk + \ifx\LT@start\endgraf + \LT@err + {Longtable head or foot not at start of table}% + {Increase LTchunksize}% + \fi + \setbox#1\box\z@ + \LT@get@widths + \LT@bchunk} +\def\endfirsthead{\LT@end@hd@ft\LT@firsthead} +\def\endhead{\LT@end@hd@ft\LT@head} +\def\endfoot{\LT@end@hd@ft\LT@foot} +\def\endlastfoot{\LT@end@hd@ft\LT@lastfoot} +\def\LT@startpbox#1{% + \bgroup + \let\@footnotetext\LT@p@ftntext + \setlength\hsize{#1}% + \@arrayparboxrestore + \vrule \@height \ht\@arstrutbox \@width \z@} +\def\LT@endpbox{% + \@finalstrut\@arstrutbox + \egroup + \the\LT@p@ftn + \global\LT@p@ftn{}% + \hfil} +\def\LT@p@ftntext#1{% + \edef\@tempa{\the\LT@p@ftn\noexpand\footnotetext[\the\c@footnote]}% + \global\LT@p@ftn\expandafter{\@tempa{#1}}}% + +\@namedef{ver@longtable.sty}{2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen} +\endinput +%% +%% End of file `longtable.sty'. diff --git a/docs/doxygen/latex/refman.tex b/docs/doxygen/latex/refman.tex new file mode 100644 index 0000000..bb3beac --- /dev/null +++ b/docs/doxygen/latex/refman.tex @@ -0,0 +1,202 @@ + % Handle batch mode + % to overcome problems with too many open files + \let\mypdfximage\pdfximage\def\pdfximage{\immediate\mypdfximage} + % Set document class depending on configuration + \documentclass[twoside]{book} + %% moved from doxygen.sty due to workaround for LaTex 2019 version and unmaintained tabu package + \usepackage{ifthen} + \ifx\requestedLaTeXdate\undefined + \usepackage{array} + \else + \usepackage{array}[=2016-10-06] + \fi + %% + % Packages required by doxygen + \usepackage{fixltx2e} % for \textsubscript + \usepackage{doxygen} + \usepackage{graphicx} + \usepackage[utf8]{inputenc} + \usepackage{makeidx} + \PassOptionsToPackage{warn}{textcomp} + \usepackage{textcomp} + \usepackage[nointegrals]{wasysym} + \usepackage{ifxetex} + % NLS support packages + % Define default fonts + % Font selection + \usepackage[T1]{fontenc} + % set main and monospaced font + \usepackage[scaled=.90]{helvet} +\usepackage{courier} +\renewcommand{\familydefault}{\sfdefault} + \usepackage{sectsty} + \allsectionsfont{% + \fontseries{bc}\selectfont% + \color{darkgray}% + } + \renewcommand{\DoxyLabelFont}{% + \fontseries{bc}\selectfont% + \color{darkgray}% + } + \newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}} + % Arguments of doxygenemoji: + % 1) '::' form of the emoji, already LaTeX-escaped + % 2) file with the name of the emoji without the .png extension + % in case image exist use this otherwise use the '::' form + \newcommand{\doxygenemoji}[2]{% + \IfFileExists{./#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{./#2.png}}}{#1}% + } + % Page & text layout + \usepackage{geometry} + \geometry{% + a4paper,% + top=2.5cm,% + bottom=2.5cm,% + left=2.5cm,% + right=2.5cm% + } + \usepackage{changepage} + % Allow a bit of overflow to go unnoticed by other means + \tolerance=750 + \hfuzz=15pt + \hbadness=750 + \setlength{\emergencystretch}{15pt} + \setlength{\parindent}{0cm} + \newcommand{\doxynormalparskip}{\setlength{\parskip}{3ex plus 2ex minus 2ex}} + \newcommand{\doxytocparskip}{\setlength{\parskip}{1ex plus 0ex minus 0ex}} + \doxynormalparskip + % Redefine paragraph/subparagraph environments, using sectsty fonts + \makeatletter + \renewcommand{\paragraph}{% + \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@parafont% + }% + } + \renewcommand{\subparagraph}{% + \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@subparafont% + }% + } + \makeatother + \makeatletter + \newcommand\hrulefilll{\leavevmode\leaders\hrule\hskip 0pt plus 1filll\kern\z@} + \makeatother + % Headers & footers + \usepackage{fancyhdr} + \pagestyle{fancyplain} + \renewcommand{\footrulewidth}{0.4pt} + \fancypagestyle{fancyplain}{ + \fancyhf{} + \fancyhead[LE, RO]{\bfseries\thepage} + \fancyhead[LO]{\bfseries\rightmark} + \fancyhead[RE]{\bfseries\leftmark} + \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen } + } + \fancypagestyle{plain}{ + \fancyhf{} + \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen } + \renewcommand{\headrulewidth}{0pt} + } + \pagestyle{fancyplain} + \renewcommand{\chaptermark}[1]{% + \markboth{#1}{}% + } + \renewcommand{\sectionmark}[1]{% + \markright{\thesection\ #1}% + } + % ToC, LoF, LoT, bibliography, and index + % Indices & bibliography + \usepackage{natbib} + \usepackage[titles]{tocloft} + \setcounter{tocdepth}{3} + \setcounter{secnumdepth}{5} + % creating indexes + \makeindex + \usepackage{newunicodechar} + \newunicodechar{⁻}{${}^{-}$}% Superscript minus + \newunicodechar{²}{${}^{2}$}% Superscript two + \newunicodechar{³}{${}^{3}$}% Superscript three + % Hyperlinks + % Hyperlinks (required, but should be loaded last) + \ifpdf + \usepackage[pdftex,pagebackref=true]{hyperref} + \else + \ifxetex + \usepackage[pagebackref=true]{hyperref} + \else + \usepackage[ps2pdf,pagebackref=true]{hyperref} + \fi + \fi + \hypersetup{% + colorlinks=true,% + linkcolor=blue,% + citecolor=blue,% + unicode,% + pdftitle={EF\+\_\+\+SPI APIs},% + pdfsubject={}% + } + % Custom commands used by the header + % Custom commands + \newcommand{\clearemptydoublepage}{% + \newpage{\pagestyle{empty}\cleardoublepage}% + } + % caption style definition + \usepackage{caption} + \captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top} + % in page table of contents + \usepackage{etoc} + \etocsettocstyle{\doxytocparskip}{\doxynormalparskip} + % prevent numbers overlap the titles in toc + \renewcommand{\numberline}[1]{#1~} +% End of preamble, now comes the document contents +%===== C O N T E N T S ===== +\begin{document} + \raggedbottom + % Titlepage & ToC + % To avoid duplicate page anchors due to reuse of same numbers for + % the index (be it as roman numbers) + \hypersetup{pageanchor=false, + bookmarksnumbered=true, + pdfencoding=unicode + } + \pagenumbering{alph} + \begin{titlepage} + \vspace*{7cm} + \begin{center}% + {\Large EF\+\_\+\+SPI APIs}\\ + \vspace*{1cm} + {\large Generated by Doxygen 1.9.6}\\ + \end{center} + \end{titlepage} + \clearemptydoublepage + \pagenumbering{roman} + \tableofcontents + \clearemptydoublepage + \pagenumbering{arabic} + % re-enable anchors again + \hypersetup{pageanchor=true} +%--- Begin generated contents --- +\chapter{Class Index} +\input{annotated} +\chapter{File Index} +\input{files} +\chapter{Class Documentation} +\input{struct___e_f___s_p_i___t_y_p_e__} +\chapter{File Documentation} +\input{_e_f___driver___common_8h} +\input{_e_f___driver___common_8h_source} +\input{_e_f___s_p_i_8c} +\input{_e_f___s_p_i_8h} +\input{_e_f___s_p_i_8h_source} +\input{_e_f___s_p_i__regs_8h} +\input{_e_f___s_p_i__regs_8h_source} +%--- End generated contents --- +% Index + \backmatter + \newpage + \phantomsection + \clearemptydoublepage + \addcontentsline{toc}{chapter}{\indexname} + \printindex +% Required for some languages (in combination with latexdocumentpre from the header) +\end{document} diff --git a/docs/doxygen/latex/struct___e_f___s_p_i___t_y_p_e__.tex b/docs/doxygen/latex/struct___e_f___s_p_i___t_y_p_e__.tex new file mode 100644 index 0000000..b0ea450 --- /dev/null +++ b/docs/doxygen/latex/struct___e_f___s_p_i___t_y_p_e__.tex @@ -0,0 +1,177 @@ +\hypertarget{struct___e_f___s_p_i___t_y_p_e__}{}\doxysection{\+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+ Struct Reference} +\label{struct___e_f___s_p_i___t_y_p_e__}\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} + + +{\ttfamily \#include $<$EF\+\_\+\+SPI\+\_\+regs.\+h$>$} + +\doxysubsection*{Public Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___a0262003dd1dff3a1dcf49b0c08c40ba9}{RXDATA}} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___aac1ffd4b085fe901755a2ad1b5f41528}{TXDATA}} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___a31964268b25903ca7a37be5ba5c9b854}{CFG}} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___ae89353e226b09310f76d5a3de109088f}{CTRL}} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___afa42966f653fd86a90d8343bd36634c2}{PR}} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___adce0731ad3a0f1e0903d2c28a98aac98}{STATUS}} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___ad3484cafc190c0d0df83f0a945a99699}{reserved\+\_\+0}} \mbox{[}16250\mbox{]} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___acdaa1e9c52f9af8f44ff4a8cdaabce9c}{RX\+\_\+\+FIFO\+\_\+\+LEVEL}} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___ab94b3f3550b7dabb3032012d0628ef30}{RX\+\_\+\+FIFO\+\_\+\+THRESHOLD}} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___ad0e9f953a48f16f8d2297993e2763f34}{RX\+\_\+\+FIFO\+\_\+\+FLUSH}} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___ace31e2375b8ba37742f0d5e224a6203a}{reserved\+\_\+1}} \mbox{[}1\mbox{]} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___a47066d2e4989448fefa0668b0dcf7dc0}{TX\+\_\+\+FIFO\+\_\+\+LEVEL}} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___a8db011b9afb9e6e91ec787b854299637}{TX\+\_\+\+FIFO\+\_\+\+THRESHOLD}} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___a0d7abd6e9e3b681d50fe3929df9026e0}{TX\+\_\+\+FIFO\+\_\+\+FLUSH}} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___a2f46338a1b1524a35b3d897e3a952eea}{reserved\+\_\+2}} \mbox{[}57\mbox{]} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_a81f369079976a46554fd9798ab035697}{\+\_\+\+\_\+\+RW}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___a5b8438e77bc688c9be746edd82a41a33}{IM}} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___abb579ebf283e3ea70d567ea17ca7fc25}{MIS}} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___a939c9eabb0a5f81f07549a6328fd9941}{RIS}} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___aed0d63b563874f4b6c1b4b32dbe10140}{IC}} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \mbox{\hyperlink{struct___e_f___s_p_i___t_y_p_e___a37453b637f735bea892bdba6031a4abc}{GCLK}} +\end{DoxyCompactItemize} + + +\doxysubsection{Member Data Documentation} +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___a31964268b25903ca7a37be5ba5c9b854}\label{struct___e_f___s_p_i___t_y_p_e___a31964268b25903ca7a37be5ba5c9b854}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!CFG@{CFG}} +\index{CFG@{CFG}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{CFG}{CFG}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::\+CFG} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___ae89353e226b09310f76d5a3de109088f}\label{struct___e_f___s_p_i___t_y_p_e___ae89353e226b09310f76d5a3de109088f}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!CTRL@{CTRL}} +\index{CTRL@{CTRL}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{CTRL}{CTRL}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::\+CTRL} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___a37453b637f735bea892bdba6031a4abc}\label{struct___e_f___s_p_i___t_y_p_e___a37453b637f735bea892bdba6031a4abc}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!GCLK@{GCLK}} +\index{GCLK@{GCLK}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{GCLK}{GCLK}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::\+GCLK} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___aed0d63b563874f4b6c1b4b32dbe10140}\label{struct___e_f___s_p_i___t_y_p_e___aed0d63b563874f4b6c1b4b32dbe10140}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!IC@{IC}} +\index{IC@{IC}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{IC}{IC}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::\+IC} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___a5b8438e77bc688c9be746edd82a41a33}\label{struct___e_f___s_p_i___t_y_p_e___a5b8438e77bc688c9be746edd82a41a33}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!IM@{IM}} +\index{IM@{IM}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{IM}{IM}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_a81f369079976a46554fd9798ab035697}{\+\_\+\+\_\+\+RW}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::\+IM} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___abb579ebf283e3ea70d567ea17ca7fc25}\label{struct___e_f___s_p_i___t_y_p_e___abb579ebf283e3ea70d567ea17ca7fc25}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!MIS@{MIS}} +\index{MIS@{MIS}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{MIS}{MIS}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::\+MIS} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___afa42966f653fd86a90d8343bd36634c2}\label{struct___e_f___s_p_i___t_y_p_e___afa42966f653fd86a90d8343bd36634c2}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!PR@{PR}} +\index{PR@{PR}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{PR}{PR}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::\+PR} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___ad3484cafc190c0d0df83f0a945a99699}\label{struct___e_f___s_p_i___t_y_p_e___ad3484cafc190c0d0df83f0a945a99699}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!reserved\_0@{reserved\_0}} +\index{reserved\_0@{reserved\_0}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{reserved\_0}{reserved\_0}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::reserved\+\_\+0\mbox{[}16250\mbox{]}} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___ace31e2375b8ba37742f0d5e224a6203a}\label{struct___e_f___s_p_i___t_y_p_e___ace31e2375b8ba37742f0d5e224a6203a}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!reserved\_1@{reserved\_1}} +\index{reserved\_1@{reserved\_1}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{reserved\_1}{reserved\_1}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::reserved\+\_\+1\mbox{[}1\mbox{]}} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___a2f46338a1b1524a35b3d897e3a952eea}\label{struct___e_f___s_p_i___t_y_p_e___a2f46338a1b1524a35b3d897e3a952eea}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!reserved\_2@{reserved\_2}} +\index{reserved\_2@{reserved\_2}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{reserved\_2}{reserved\_2}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::reserved\+\_\+2\mbox{[}57\mbox{]}} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___a939c9eabb0a5f81f07549a6328fd9941}\label{struct___e_f___s_p_i___t_y_p_e___a939c9eabb0a5f81f07549a6328fd9941}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!RIS@{RIS}} +\index{RIS@{RIS}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{RIS}{RIS}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::\+RIS} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___ad0e9f953a48f16f8d2297993e2763f34}\label{struct___e_f___s_p_i___t_y_p_e___ad0e9f953a48f16f8d2297993e2763f34}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!RX\_FIFO\_FLUSH@{RX\_FIFO\_FLUSH}} +\index{RX\_FIFO\_FLUSH@{RX\_FIFO\_FLUSH}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{RX\_FIFO\_FLUSH}{RX\_FIFO\_FLUSH}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::\+RX\+\_\+\+FIFO\+\_\+\+FLUSH} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___acdaa1e9c52f9af8f44ff4a8cdaabce9c}\label{struct___e_f___s_p_i___t_y_p_e___acdaa1e9c52f9af8f44ff4a8cdaabce9c}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!RX\_FIFO\_LEVEL@{RX\_FIFO\_LEVEL}} +\index{RX\_FIFO\_LEVEL@{RX\_FIFO\_LEVEL}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{RX\_FIFO\_LEVEL}{RX\_FIFO\_LEVEL}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::\+RX\+\_\+\+FIFO\+\_\+\+LEVEL} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___ab94b3f3550b7dabb3032012d0628ef30}\label{struct___e_f___s_p_i___t_y_p_e___ab94b3f3550b7dabb3032012d0628ef30}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!RX\_FIFO\_THRESHOLD@{RX\_FIFO\_THRESHOLD}} +\index{RX\_FIFO\_THRESHOLD@{RX\_FIFO\_THRESHOLD}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{RX\_FIFO\_THRESHOLD}{RX\_FIFO\_THRESHOLD}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::\+RX\+\_\+\+FIFO\+\_\+\+THRESHOLD} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___a0262003dd1dff3a1dcf49b0c08c40ba9}\label{struct___e_f___s_p_i___t_y_p_e___a0262003dd1dff3a1dcf49b0c08c40ba9}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!RXDATA@{RXDATA}} +\index{RXDATA@{RXDATA}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{RXDATA}{RXDATA}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::\+RXDATA} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___adce0731ad3a0f1e0903d2c28a98aac98}\label{struct___e_f___s_p_i___t_y_p_e___adce0731ad3a0f1e0903d2c28a98aac98}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!STATUS@{STATUS}} +\index{STATUS@{STATUS}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{STATUS}{STATUS}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::\+STATUS} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___a0d7abd6e9e3b681d50fe3929df9026e0}\label{struct___e_f___s_p_i___t_y_p_e___a0d7abd6e9e3b681d50fe3929df9026e0}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!TX\_FIFO\_FLUSH@{TX\_FIFO\_FLUSH}} +\index{TX\_FIFO\_FLUSH@{TX\_FIFO\_FLUSH}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{TX\_FIFO\_FLUSH}{TX\_FIFO\_FLUSH}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::\+TX\+\_\+\+FIFO\+\_\+\+FLUSH} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___a47066d2e4989448fefa0668b0dcf7dc0}\label{struct___e_f___s_p_i___t_y_p_e___a47066d2e4989448fefa0668b0dcf7dc0}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!TX\_FIFO\_LEVEL@{TX\_FIFO\_LEVEL}} +\index{TX\_FIFO\_LEVEL@{TX\_FIFO\_LEVEL}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{TX\_FIFO\_LEVEL}{TX\_FIFO\_LEVEL}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_aef00c279597b188e4cdd14d288ddf77a}{\+\_\+\+\_\+R}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::\+TX\+\_\+\+FIFO\+\_\+\+LEVEL} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___a8db011b9afb9e6e91ec787b854299637}\label{struct___e_f___s_p_i___t_y_p_e___a8db011b9afb9e6e91ec787b854299637}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!TX\_FIFO\_THRESHOLD@{TX\_FIFO\_THRESHOLD}} +\index{TX\_FIFO\_THRESHOLD@{TX\_FIFO\_THRESHOLD}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{TX\_FIFO\_THRESHOLD}{TX\_FIFO\_THRESHOLD}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::\+TX\+\_\+\+FIFO\+\_\+\+THRESHOLD} + +\mbox{\Hypertarget{struct___e_f___s_p_i___t_y_p_e___aac1ffd4b085fe901755a2ad1b5f41528}\label{struct___e_f___s_p_i___t_y_p_e___aac1ffd4b085fe901755a2ad1b5f41528}} +\index{\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}!TXDATA@{TXDATA}} +\index{TXDATA@{TXDATA}!\_EF\_SPI\_TYPE\_@{\_EF\_SPI\_TYPE\_}} +\doxysubsubsection{\texorpdfstring{TXDATA}{TXDATA}} +{\footnotesize\ttfamily \mbox{\hyperlink{_e_f___s_p_i__regs_8h_ad8cfe7014044235a4c8d3239c2597f09}{\+\_\+\+\_\+W}} \+\_\+\+EF\+\_\+\+SPI\+\_\+\+TYPE\+\_\+\+::\+TXDATA} + + + +The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} +\item +\mbox{\hyperlink{_e_f___s_p_i__regs_8h}{EF\+\_\+\+SPI\+\_\+regs.\+h}}\end{DoxyCompactItemize} diff --git a/docs/doxygen/latex/tabu_doxygen.sty b/docs/doxygen/latex/tabu_doxygen.sty new file mode 100644 index 0000000..3f17d1d --- /dev/null +++ b/docs/doxygen/latex/tabu_doxygen.sty @@ -0,0 +1,2557 @@ +%% +%% This is file `tabu.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tabu.dtx (with options: `package') +%% +%% This is a generated file. +%% Copyright (FC) 2010-2011 - lppl +%% +%% tabu : 2011/02/26 v2.8 - tabu : Flexible LaTeX tabulars +%% +%% ********************************************************************************************** +%% \begin{tabu} { preamble } => default target: \linewidth or \linegoal +%% \begin{tabu} to { preamble } => target specified +%% \begin{tabu} spread { preamble } => target relative to the ``natural width'' +%% +%% tabu works in text and in math modes. +%% +%% X columns: automatic width adjustment + horizontal and vertical alignment +%% \begin{tabu} { X[4c] X[1c] X[-2ml] } +%% +%% Horizontal lines and / or leaders: +%% \hline\hline => double horizontal line +%% \firsthline\hline => for nested tabulars +%% \lasthline\hline => for nested tabulars +%% \tabucline[line spec]{column-column} => ``funny'' lines (dash/leader) +%% Automatic lines / leaders : +%% \everyrow{\hline\hline} +%% +%% Vertical lines and / or leaders: +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt blue] } +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt on 2pt off 4pt blue] } +%% +%% Fixed vertical spacing adjustment: +%% \extrarowheight= \extrarowdepth= +%% or: \extrarowsep= => may be prefixed by \global +%% +%% Dynamic vertical spacing adjustment: +%% \abovetabulinesep= \belowtabulinesep= +%% or: \tabulinesep= => may be prefixed by \global +%% +%% delarray.sty shortcuts: in math and text modes +%% \begin{tabu} .... \({ preamble }\) +%% +%% Algorithms reports: +%% \tracingtabu=1 \tracingtabu=2 +%% +%% ********************************************************************************************** +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3 of this license or (at your option) any later +%% version. The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% +%% This work consists of the main source file tabu.dtx +%% and the derived files +%% tabu.sty, tabu.pdf, tabu.ins +%% +%% tabu : Flexible LaTeX tabulars +%% lppl copyright 2010-2011 by FC +%% + +\NeedsTeXFormat{LaTeX2e}[2005/12/01] +\ProvidesPackage{tabu_doxygen}[2011/02/26 v2.8 - flexible LaTeX tabulars (FC), frozen version for doxygen] +\RequirePackage{array}[2008/09/09] +\RequirePackage{varwidth}[2009/03/30] +\AtEndOfPackage{\tabu@AtEnd \let\tabu@AtEnd \@undefined} +\let\tabu@AtEnd\@empty +\def\TMP@EnsureCode#1={% + \edef\tabu@AtEnd{\tabu@AtEnd + \catcode#1 \the\catcode#1}% + \catcode#1=% +}% \TMP@EnsureCode +\TMP@EnsureCode 33 = 12 % ! +\TMP@EnsureCode 58 = 12 % : (for siunitx) +\TMP@EnsureCode124 = 12 % | +\TMP@EnsureCode 36 = 3 % $ = math shift +\TMP@EnsureCode 38 = 4 % & = tab alignment character +\TMP@EnsureCode 32 = 10 % space +\TMP@EnsureCode 94 = 7 % ^ +\TMP@EnsureCode 95 = 8 % _ +%% Constants -------------------------------------------------------- +\newcount \c@taburow \def\thetaburow {\number\c@taburow} +\newcount \tabu@nbcols +\newcount \tabu@cnt +\newcount \tabu@Xcol +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcount \tabu@alloc \tabu@alloc=\m@ne +\newcount \tabu@nested +\def\tabu@alloc@{\global\advance\tabu@alloc \@ne \tabu@nested\tabu@alloc} +\newdimen \tabu@target +\newdimen \tabu@spreadtarget +\newdimen \tabu@naturalX +\newdimen \tabucolX +\let\tabu@DELTA \@tempdimc +\let\tabu@thick \@tempdima +\let\tabu@on \@tempdimb +\let\tabu@off \@tempdimc +\newdimen \tabu@Xsum +\newdimen \extrarowdepth +\newdimen \abovetabulinesep +\newdimen \belowtabulinesep +\newdimen \tabustrutrule \tabustrutrule \z@ +\newtoks \tabu@thebody +\newtoks \tabu@footnotes +\newsavebox \tabu@box +\newsavebox \tabu@arstrutbox +\newsavebox \tabu@hleads +\newsavebox \tabu@vleads +\newif \iftabu@colortbl +\newif \iftabu@siunitx +\newif \iftabu@measuring +\newif \iftabu@spread +\newif \iftabu@negcoef +\newif \iftabu@everyrow +\def\tabu@everyrowtrue {\global\let\iftabu@everyrow \iftrue} +\def\tabu@everyrowfalse{\global\let\iftabu@everyrow \iffalse} +\newif \iftabu@long +\newif \iftabuscantokens +\def\tabu@rescan {\tabu@verbatim \scantokens } +%% Utilities (for internal usage) ----------------------------------- +\def\tabu@gobblespace #1 {#1} +\def\tabu@gobbletoken #1#2{#1} +\def\tabu@gobbleX{\futurelet\@let@token \tabu@gobblex} +\def\tabu@gobblex{\if ^^J\noexpand\@let@token \expandafter\@gobble + \else\ifx \@sptoken\@let@token + \expandafter\tabu@gobblespace\expandafter\tabu@gobbleX + \fi\fi +}% \tabu@gobblex +\def\tabu@X{^^J} +{\obeyspaces +\global\let\tabu@spxiii= % saves an active space (for \ifx) +\gdef\tabu@@spxiii{ }} +\def\tabu@ifenvir {% only for \multicolumn + \expandafter\tabu@if@nvir\csname\@currenvir\endcsname +}% \tabu@ifenvir +\def\tabu@if@nvir #1{\csname @\ifx\tabu#1first\else + \ifx\longtabu#1first\else + second\fi\fi oftwo\endcsname +}% \tabu@ifenvir +\def\tabu@modulo #1#2{\numexpr\ifnum\numexpr#1=\z@ 0\else #1-(#1-(#2-1)/2)/(#2)*(#2)\fi} +{\catcode`\&=3 +\gdef\tabu@strtrim #1{% #1 = control sequence to trim + \ifodd 1\ifx #1\@empty \else \ifx #1\space \else 0\fi \fi + \let\tabu@c@l@r \@empty \let#1\@empty + \else \expandafter \tabu@trimspaces #1\@nnil + \fi +}% \tabu@strtrim +\gdef\tabu@trimspaces #1\@nnil{\let\tabu@c@l@r=#2\tabu@firstspace .#1& }% +\gdef\tabu@firstspace #1#2#3 &{\tabu@lastspace #2#3&} +\gdef\tabu@lastspace #1{\def #3{#1}% + \ifx #3\tabu@c@l@r \def\tabu@c@l@r{\protect\color{#1}}\expandafter\remove@to@nnil \fi + \tabu@trimspaces #1\@nnil} +}% \catcode +\def\tabu@sanitizearg #1#2{{% + \csname \ifcsname if@safe@actives\endcsname % + @safe@activestrue\else + relax\fi \endcsname + \edef#2{#1}\tabu@strtrim#2\@onelevel@sanitize#2% + \expandafter}\expandafter\def\expandafter#2\expandafter{#2}% +}% \tabu@sanitizearg +\def\tabu@textbar #1{\begingroup \endlinechar\m@ne \scantokens{\def\:{|}}% + \expandafter\endgroup \expandafter#1\:% !!! semi simple group !!! +}% \tabu@textbar +\def\tabu@everyrow@bgroup{\iftabu@everyrow \begingroup \else \noalign{\ifnum0=`}\fi \fi} +\def\tabu@everyrow@egroup{% + \iftabu@everyrow \expandafter \endgroup \the\toks@ + \else \ifnum0=`{\fi}% + \fi +}% \tabu@everyrow@egroup +\def\tabu@arstrut {\global\setbox\@arstrutbox \hbox{\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \z@}% +}% \tabu@arstrut +\def\tabu@rearstrut {% + \@tempdima \arraystretch\dimexpr\ht\strutbox+\extrarowheight \relax + \@tempdimb \arraystretch\dimexpr\dp\strutbox+\extrarowdepth \relax + \ifodd 1\ifdim \ht\@arstrutbox=\@tempdima + \ifdim \dp\@arstrutbox=\@tempdimb 0 \fi\fi + \tabu@mkarstrut + \fi +}% \tabu@rearstrut +\def\tabu@@DBG #1{\ifdim\tabustrutrule>\z@ \color{#1}\fi} +\def\tabu@DBG@arstrut {\global\setbox\@arstrutbox + \hbox to\z@{\hbox to\z@{\hss + {\tabu@DBG{cyan}\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \z@ + width \tabustrutrule}\kern-\tabustrutrule + {\tabu@DBG{pink}\vrule + height \z@ + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \tabustrutrule}}}% +}% \tabu@DBG@arstrut +\def\tabu@save@decl{\toks\count@ \expandafter{\the\toks\expandafter\count@ + \@nextchar}}% +\def\tabu@savedecl{\ifcat$\d@llarend\else + \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode +}% \tabu@savedecl +\def\tabu@finalstrut #1{\unskip\ifhmode\nobreak\fi\vrule height\z@ depth\z@ width\z@} +\newcommand*\tabuDisableCommands {\g@addto@macro\tabu@trialh@@k } +\let\tabu@trialh@@k \@empty +\def\tabu@nowrite #1#{{\afterassignment}\toks@} +\let\tabu@write\write +\let\tabu@immediate\immediate +\def\tabu@WRITE{\begingroup + \def\immediate\write{\aftergroup\endgroup + \tabu@immediate\tabu@write}% +}% \tabu@WRITE +\expandafter\def\expandafter\tabu@GenericError\expandafter{% + \expandafter\tabu@WRITE\GenericError} +\def\tabu@warn{\tabu@WRITE\PackageWarning{tabu}} +\def\tabu@noxfootnote [#1]{\@gobble} +\def\tabu@nocolor #1#{\@gobble} +\newcommand*\tabu@norowcolor[2][]{} +\def\tabu@maybesiunitx #1{\def\tabu@temp{#1}% + \futurelet\@let@token \tabu@m@ybesiunitx} +\def\tabu@m@ybesiunitx #1{\def\tabu@m@ybesiunitx {% + \ifx #1\@let@token \let\tabu@cellleft \@empty \let\tabu@cellright \@empty \fi + \tabu@temp}% \tabu@m@ybesiunitx +}\expandafter\tabu@m@ybesiunitx \csname siunitx_table_collect_begin:Nn\endcsname +\def\tabu@celllalign@def #1{\def\tabu@celllalign{\tabu@maybesiunitx{#1}}}% +%% Fixed vertical spacing adjustment: \extrarowsep ------------------ +\newcommand*\extrarowsep{\edef\tabu@C@extra{\the\numexpr\tabu@C@extra+1}% + \iftabu@everyrow \aftergroup\tabu@Gextra + \else \aftergroup\tabu@n@Gextra + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@extra} \tabu@extra +}% \extrarowsep +\def\tabu@extra {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setextrasep \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extra +\def\tabu@setextra #1#2{\def\tabu@temp{\tabu@extr@#1#2}\afterassignment\tabu@temp#2} +\def\tabu@extr@ #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extr@ +\def\tabu@setextrasep {\extrarowheight=\extrarowdepth + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth +}% \tabu@setextrasep +\def\tabu@Gextra{\ifx \tabu@G@extra\@empty \else {\tabu@Rextra}\fi} +\def\tabu@n@Gextra{\ifx \tabu@G@extra\@empty \else \noalign{\tabu@Rextra}\fi} +\def\tabu@Rextra{\tabu@Grestore \tabu@G@extra \tabu@C@extra} +\let\tabu@C@extra \z@ +\let\tabu@G@extra \@empty +%% Dynamic vertical spacing adjustment: \tabulinesep ---------------- +\newcommand*\tabulinesep{\edef\tabu@C@linesep{\the\numexpr\tabu@C@linesep+1}% + \iftabu@everyrow \aftergroup\tabu@Glinesep + \else \aftergroup\tabu@n@Glinesep + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@linesep} \tabu@linesep +}% \tabulinesep +\def\tabu@linesep {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setlinesep \abovetabulinesep + \fi \tabu@temp}% +}% \tabu@linesep +\def\tabu@setsep #1#2{\def\tabu@temp{\tabu@sets@p#1#2}\afterassignment\tabu@temp#2} +\def\tabu@sets@p #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep + \fi \tabu@temp}% +}% \tabu@sets@p +\def\tabu@setlinesep {\belowtabulinesep=\abovetabulinesep + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep +}% \tabu@setlinesep +\def\tabu@Glinesep{\ifx \tabu@G@linesep\@empty \else {\tabu@Rlinesep}\fi} +\def\tabu@n@Glinesep{\ifx \tabu@G@linesep\@empty \else \noalign{\tabu@Rlinesep}\fi} +\def\tabu@Rlinesep{\tabu@Grestore \tabu@G@linesep \tabu@C@linesep} +\let\tabu@C@linesep \z@ +\let\tabu@G@linesep \@empty +%% \global\extrarowsep and \global\tabulinesep ------------------- +\def\tabu@Gsave #1#2#3#4{\xdef#1{#1% + \toks#2{\toks\the\currentgrouplevel{\global#3\the#3\global#4\the#4}}}% +}% \tabu@Gsave +\def\tabu@Grestore#1#2{% + \toks#2{}#1\toks\currentgrouplevel\expandafter{\expandafter}\the\toks#2\relax + \ifcat$\the\toks\currentgrouplevel$\else + \global\let#1\@empty \global\let#2\z@ + \the\toks\currentgrouplevel + \fi +}% \tabu@Grestore +%% Setting code for every row --------------------------------------- +\newcommand*\everyrow{\tabu@everyrow@bgroup + \tabu@start \z@ \tabu@stop \z@ \tabu@evrstartstop +}% \everyrow +\def\tabu@evrstartstop {\@ifnextchar^% + {\afterassignment \tabu@evrstartstop \tabu@stop=}% + {\ifx ^\@let@token + \afterassignment\tabu@evrstartstop \tabu@start=% + \else \afterassignment\tabu@everyr@w \toks@ + \fi}% +}% \tabu@evrstartstop +\def\tabu@everyr@w {% + \xdef\tabu@everyrow{% + \noexpand\tabu@everyrowfalse + \let\noalign \relax + \noexpand\tabu@rowfontreset + \iftabu@colortbl \noexpand\tabu@rc@ \fi % \taburowcolors + \let\noexpand\tabu@docline \noexpand\tabu@docline@evr + \the\toks@ + \noexpand\tabu@evrh@@k + \noexpand\tabu@rearstrut + \global\advance\c@taburow \@ne}% + \iftabu@everyrow \toks@\expandafter + {\expandafter\def\expandafter\tabu@evr@L\expandafter{\the\toks@}\ignorespaces}% + \else \xdef\tabu@evr@G{\the\toks@}% + \fi + \tabu@everyrow@egroup +}% \tabu@everyr@w +\def\tabu@evr {\def\tabu@evrh@@k} % for internal use only +\tabu@evr{} +%% line style and leaders ------------------------------------------- +\newcommand*\newtabulinestyle [1]{% + {\@for \@tempa :=#1\do{\expandafter\tabu@newlinestyle \@tempa==\@nil}}% +}% \newtabulinestyle +\def\tabu@newlinestyle #1=#2=#3\@nil{\tabu@getline {#2}% + \tabu@sanitizearg {#1}\@tempa + \ifodd 1\ifx \@tempa\@empty \ifdefined\tabu@linestyle@ 0 \fi\fi + \global\expandafter\let + \csname tabu@linestyle@\@tempa \endcsname =\tabu@thestyle \fi +}% \tabu@newlinestyle +\newcommand*\tabulinestyle [1]{\tabu@everyrow@bgroup \tabu@getline{#1}% + \iftabu@everyrow + \toks@\expandafter{\expandafter \def \expandafter + \tabu@ls@L\expandafter{\tabu@thestyle}\ignorespaces}% + \gdef\tabu@ls@{\tabu@ls@L}% + \else + \global\let\tabu@ls@G \tabu@thestyle + \gdef\tabu@ls@{\tabu@ls@G}% + \fi + \tabu@everyrow@egroup +}% \tabulinestyle +\newcommand*\taburulecolor{\tabu@everyrow@bgroup \tabu@textbar \tabu@rulecolor} +\def\tabu@rulecolor #1{\toks@{}% + \def\tabu@temp #1##1#1{\tabu@ruledrsc{##1}}\@ifnextchar #1% + \tabu@temp + \tabu@rulearc +}% \tabu@rulecolor +\def\tabu@ruledrsc #1{\edef\tabu@temp{#1}\tabu@strtrim\tabu@temp + \ifx \tabu@temp\@empty \def\tabu@temp{\tabu@rule@drsc@ {}{}}% + \else \edef\tabu@temp{\noexpand\tabu@rule@drsc@ {}{\tabu@temp}}% + \fi + \tabu@temp +}% \tabu@ruledrsc@ +\def\tabu@ruledrsc@ #1#{\tabu@rule@drsc@ {#1}} +\def\tabu@rule@drsc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@{\let\CT@drsc@ \relax}% + \else \toks@{\def\CT@drsc@{\color #1{#2}}}% + \fi + \else + \ifx \\#1#2\\\global\let\CT@drsc@ \relax + \else \gdef\CT@drsc@{\color #1{#2}}% + \fi + \fi + \tabu@rulearc +}% \tabu@rule@drsc@ +\def\tabu@rulearc #1#{\tabu@rule@arc@ {#1}} +\def\tabu@rule@arc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@\expandafter{\the\toks@ \def\CT@arc@{}}% + \else \toks@\expandafter{\the\toks@ \def\CT@arc@{\color #1{#2}}}% + \fi + \toks@\expandafter{\the\toks@ + \let\tabu@arc@L \CT@arc@ + \let\tabu@drsc@L \CT@drsc@ + \ignorespaces}% + \else + \ifx \\#1#2\\\gdef\CT@arc@{}% + \else \gdef\CT@arc@{\color #1{#2}}% + \fi + \global\let\tabu@arc@G \CT@arc@ + \global\let\tabu@drsc@G \CT@drsc@ + \fi + \tabu@everyrow@egroup +}% \tabu@rule@arc@ +\def\taburowcolors {\tabu@everyrow@bgroup \@testopt \tabu@rowcolors 1} +\def\tabu@rowcolors [#1]#2#{\tabu@rowc@lors{#1}{#2}} +\def\tabu@rowc@lors #1#2#3{% + \toks@{}\@defaultunits \count@ =\number0#2\relax \@nnil + \@defaultunits \tabu@start =\number0#1\relax \@nnil + \ifnum \count@<\tw@ \count@=\tw@ \fi + \advance\tabu@start \m@ne + \ifnum \tabu@start<\z@ \tabu@start \z@ \fi + \tabu@rowcolorseries #3\in@..\in@ \@nnil +}% \tabu@rowcolors +\def\tabu@rowcolorseries #1..#2\in@ #3\@nnil {% + \ifx \in@#1\relax + \iftabu@everyrow \toks@{\def\tabu@rc@{}\let\tabu@rc@L \tabu@rc@}% + \else \gdef\tabu@rc@{}\global\let\tabu@rc@G \tabu@rc@ + \fi + \else + \ifx \\#2\\\tabu@rowcolorserieserror \fi + \tabu@sanitizearg{#1}\tabu@temp + \tabu@sanitizearg{#2}\@tempa + \advance\count@ \m@ne + \iftabu@everyrow + \def\tabu@rc@ ##1##2##3##4{\def\tabu@rc@{% + \ifnum ##2=\c@taburow + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{##3}{##4}\fi + \ifnum \c@taburow<##2 \else + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\z@ + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}\fi}% + }\edef\x{\noexpand\tabu@rc@ {\the\count@} + {\the\tabu@start} + {\tabu@temp} + {\@tempa}% + }\x + \toks@\expandafter{\expandafter\def\expandafter\tabu@rc@\expandafter{\tabu@rc@}}% + \toks@\expandafter{\the\toks@ \let\tabu@rc@L \tabu@rc@ \ignorespaces}% + \else % inside \noalign + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{\tabu@temp}{\@tempa}% + \expandafter\resetcolorseries\expandafter[\the\count@]{tabu@rcseries@\the\tabu@nested}% + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \let\noalign \relax \rowcolor{tabu@rc@\the\tabu@nested}% + \def\tabu@rc@ ##1##2{\gdef\tabu@rc@{% + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\@ne + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}}% + }\edef\x{\noexpand\tabu@rc@{\the\count@}{\the\c@taburow}}\x + \global\let\tabu@rc@G \tabu@rc@ + \fi + \fi + \tabu@everyrow@egroup +}% \tabu@rowcolorseries +\tabuDisableCommands {\let\tabu@rc@ \@empty } +\def\tabu@rowcolorserieserror {\PackageError{tabu} + {Invalid syntax for \string\taburowcolors + \MessageBreak Please look at the documentation!}\@ehd +}% \tabu@rowcolorserieserror +\newcommand*\tabureset {% + \tabulinesep=\z@ \extrarowsep=\z@ \extratabsurround=\z@ + \tabulinestyle{}\everyrow{}\taburulecolor||{}\taburowcolors{}% +}% \tabureset +%% Parsing the line styles ------------------------------------------ +\def\tabu@getline #1{\begingroup + \csname \ifcsname if@safe@actives\endcsname % + @safe@activestrue\else + relax\fi \endcsname + \edef\tabu@temp{#1}\tabu@sanitizearg{#1}\@tempa + \let\tabu@thestyle \relax + \ifcsname tabu@linestyle@\@tempa \endcsname + \edef\tabu@thestyle{\endgroup + \def\tabu@thestyle{\expandafter\noexpand + \csname tabu@linestyle@\@tempa\endcsname}% + }\tabu@thestyle + \else \expandafter\tabu@definestyle \tabu@temp \@nil + \fi +}% \tabu@getline +\def\tabu@definestyle #1#2\@nil {\endlinechar \m@ne \makeatletter + \tabu@thick \maxdimen \tabu@on \maxdimen \tabu@off \maxdimen + \let\tabu@c@lon \@undefined \let\tabu@c@loff \@undefined + \ifodd 1\ifcat .#1\else\ifcat\relax #1\else 0\fi\fi % catcode 12 or non expandable cs + \def\tabu@temp{\tabu@getparam{thick}}% + \else \def\tabu@temp{\tabu@getparam{thick}\maxdimen}% + \fi + {% + \let\tabu@ \relax + \def\:{\obeyspaces \tabu@oXIII \tabu@commaXIII \edef\:}% (space active \: happy ;-)) + \scantokens{\:{\tabu@temp #1#2 \tabu@\tabu@}}% + \expandafter}\expandafter + \def\expandafter\:\expandafter{\:}% line spec rewritten now ;-) + \def\;{\def\:}% + \scantokens\expandafter{\expandafter\;\expandafter{\:}}% space is now inactive (catcode 10) + \let\tabu@ \tabu@getcolor \:% all arguments are ready now ;-) + \ifdefined\tabu@c@lon \else \let\tabu@c@lon\@empty \fi + \ifx \tabu@c@lon\@empty \def\tabu@c@lon{\CT@arc@}\fi + \ifdefined\tabu@c@loff \else \let\tabu@c@loff \@empty \fi + \ifdim \tabu@on=\maxdimen \ifdim \tabu@off<\maxdimen + \tabu@on \tabulineon \fi\fi + \ifdim \tabu@off=\maxdimen \ifdim \tabu@on<\maxdimen + \tabu@off \tabulineoff \fi\fi + \ifodd 1\ifdim \tabu@off=\maxdimen \ifdim \tabu@on=\maxdimen 0 \fi\fi + \in@true % + \else \in@false % + \fi + \ifdim\tabu@thick=\maxdimen \def\tabu@thick{\arrayrulewidth}% + \else \edef\tabu@thick{\the\tabu@thick}% + \fi + \edef \tabu@thestyle ##1##2{\endgroup + \def\tabu@thestyle{% + \ifin@ \noexpand\tabu@leadersstyle {\tabu@thick} + {\the\tabu@on}{##1} + {\the\tabu@off}{##2}% + \else \noexpand\tabu@rulesstyle + {##1\vrule width \tabu@thick}% + {##1\leaders \hrule height \tabu@thick \hfil}% + \fi}% + }\expandafter \expandafter + \expandafter \tabu@thestyle \expandafter + \expandafter \expandafter + {\expandafter\tabu@c@lon\expandafter}\expandafter{\tabu@c@loff}% +}% \tabu@definestyle +{\catcode`\O=\active \lccode`\O=`\o \catcode`\,=\active + \lowercase{\gdef\tabu@oXIII {\catcode`\o=\active \let O=\tabu@oxiii}} + \gdef\tabu@commaXIII {\catcode`\,=\active \let ,=\space} +}% \catcode +\def\tabu@oxiii #1{% + \ifcase \ifx n#1\z@ \else + \ifx f#1\@ne\else + \tw@ \fi\fi + \expandafter\tabu@onxiii + \or \expandafter\tabu@ofxiii + \else o% + \fi#1}% +\def\tabu@onxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx \tabu@spxiii#2\@ne\else + \tw@ \fi\fi\fi + \tabu@getparam{on}#2\expandafter\@gobble + \or \expandafter\tabu@onxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}}% +\def\tabu@ofxiii #1#2{% + \ifx #2f\expandafter\tabu@offxiii + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@offxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx\tabu@spxiii#2\@ne \else + \tw@ \fi\fi\fi + \tabu@getparam{off}#2\expandafter\@gobble + \or \expandafter\tabu@offxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@getparam #1{\tabu@ \csname tabu@#1\endcsname=} +\def\tabu@getcolor #1{% \tabu@ <- \tabu@getcolor after \edef + \ifx \tabu@#1\else % no more spec + \let\tabu@theparam=#1\afterassignment \tabu@getc@l@r #1\fi +}% \tabu@getcolor +\def\tabu@getc@l@r #1\tabu@ {% + \def\tabu@temp{#1}\tabu@strtrim \tabu@temp + \ifx \tabu@temp\@empty + \else%\ifcsname \string\color@\tabu@temp \endcsname % if the color exists + \ifx \tabu@theparam \tabu@off \let\tabu@c@loff \tabu@c@l@r + \else \let\tabu@c@lon \tabu@c@l@r + \fi + %\else \tabu@warncolour{\tabu@temp}% + \fi%\fi + \tabu@ % next spec +}% \tabu@getc@l@r +\def\tabu@warncolour #1{\PackageWarning{tabu} + {Color #1 is not defined. Default color used}% +}% \tabu@warncolour +\def\tabu@leadersstyle #1#2#3#4#5{\def\tabu@leaders{{#1}{#2}{#3}{#4}{#5}}% + \ifx \tabu@leaders\tabu@leaders@G \else + \tabu@LEADERS{#1}{#2}{#3}{#4}{#5}\fi +}% \tabu@leadersstyle +\def\tabu@rulesstyle #1#2{\let\tabu@leaders \@undefined + \gdef\tabu@thevrule{#1}\gdef\tabu@thehrule{#2}% +}% \tabu@rulesstyle +%% The leaders boxes ------------------------------------------------ +\def\tabu@LEADERS #1#2#3#4#5{%% width, dash, dash color, gap, gap color + {\let\color \tabu@color % => during trials -> \color = \tabu@nocolor + {% % but the leaders boxes should have colors ! + \def\@therule{\vrule}\def\@thick{height}\def\@length{width}% + \def\@box{\hbox}\def\@unbox{\unhbox}\def\@elt{\wd}% + \def\@skip{\hskip}\def\@ss{\hss}\def\tabu@leads{\tabu@hleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thehleaders \tabu@theleaders + }% + {% + \def\@therule{\hrule}\def\@thick{width}\def\@length{height}% + \def\@box{\vbox}\def\@unbox{\unvbox}\def\@elt{\ht}% + \def\@skip{\vskip}\def\@ss{\vss}\def\tabu@leads{\tabu@vleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thevleaders \tabu@theleaders + }% + \gdef\tabu@leaders@G{{#1}{#2}{#3}{#4}{#5}}% + }% +}% \tabu@LEADERS +\def\tabu@therule #1#2{\@therule \@thick#1\@length\dimexpr#2/2 \@depth\z@} +\def\tabu@l@@d@rs #1#2#3#4#5{%% width, dash, dash color, gap, gap color + \global\setbox \tabu@leads=\@box{% + {#3\tabu@therule{#1}{#2}}% + \ifx\\#5\\\@skip#4\else{#5\tabu@therule{#1}{#4*2}}\fi + {#3\tabu@therule{#1}{#2}}}% + \global\setbox\tabu@leads=\@box to\@elt\tabu@leads{\@ss + {#3\tabu@therule{#1}{#2}}\@unbox\tabu@leads}% + \edef\tabu@theleaders ##1{\def\noexpand\tabu@theleaders {% + {##1\tabu@therule{#1}{#2}}% + \xleaders \copy\tabu@leads \@ss + \tabu@therule{0pt}{-#2}{##1\tabu@therule{#1}{#2}}}% + }\tabu@theleaders{#3}% +}% \tabu@l@@d@rs +%% \tabu \endtabu \tabu* \longtabu \endlongtabu \longtabu* ---------- +\newcommand*\tabu {\tabu@longfalse + \ifmmode \def\tabu@ {\array}\def\endtabu {\endarray}% + \else \def\tabu@ {\tabu@tabular}\def\endtabu {\endtabular}\fi + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endtabu*\endcsname{\endtabu}% + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {tabu} +\let\tabu@tabular \tabular % +\expandafter\def\csname tabu*\endcsname{\tabuscantokenstrue \tabu} +\newcommand*\longtabu {\tabu@longtrue + \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi + \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}% + \LTchunksize=\@M + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endlongtabu*\endcsname{\endlongtabu}% + \let\LT@startpbox \tabu@LT@startpbox % \everypar{ array struts } + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {longtabu} +\expandafter\def\csname longtabu*\endcsname{\tabuscantokenstrue \longtabu} +\def\tabu@nolongtabu{\PackageError{tabu} + {longtabu requires the longtable package}\@ehd} +%% Read the target and then : \tabular or \@array ------------------ +\def\tabu@settarget {\futurelet\@let@token \tabu@sett@rget } +\def\tabu@sett@rget {\tabu@target \z@ + \ifcase \ifx \bgroup\@let@token \z@ \else + \ifx \@sptoken\@let@token \@ne \else + \if t\@let@token \tw@ \else + \if s\@let@token \thr@@\else + \z@\fi\fi\fi\fi + \expandafter\tabu@begin + \or \expandafter\tabu@gobblespace\expandafter\tabu@settarget + \or \expandafter\tabu@to + \or \expandafter\tabu@spread + \fi +}% \tabu@sett@rget +\def\tabu@to to{\def\tabu@halignto{to}\tabu@gettarget} +\def\tabu@spread spread{\tabu@spreadtrue\def\tabu@halignto{spread}\tabu@gettarget} +\def\tabu@gettarget {\afterassignment\tabu@linegoaltarget \tabu@target } +\def\tabu@linegoaltarget {\futurelet\tabu@temp \tabu@linegoalt@rget } +\def\tabu@linegoalt@rget {% + \ifx \tabu@temp\LNGL@setlinegoal + \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal + \tabu@begin +}% \tabu@linegoalt@rget +\def\tabu@begin #1#{% + \iftabu@measuring \expandafter\tabu@nestedmeasure \fi + \ifdim \tabu@target=\z@ \let\tabu@halignto \@empty + \else \edef\tabu@halignto{\tabu@halignto\the\tabu@target}% + \fi + \@testopt \tabu@tabu@ \tabu@aligndefault #1\@nil +}% \tabu@begin +\long\def\tabu@tabu@ [#1]#2\@nil #3{\tabu@setup + \def\tabu@align {#1}\def\tabu@savedpream{\NC@find #3}% + \tabu@ [\tabu@align ]#2{#3\tabu@rewritefirst }% +}% \tabu@tabu@ +\def\tabu@nestedmeasure {% + \ifodd 1\iftabu@spread \else \ifdim\tabu@target=\z@ \else 0 \fi\fi\relax + \tabu@spreadtrue + \else \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}% + \expandafter\tabu@collectbody\expandafter\tabu@quickrule + \expandafter\endgroup + \fi +}% \tabu@nestedmeasure +\def\tabu@quickrule {\indent\vrule height\z@ depth\z@ width\tabu@target} +%% \tabu@setup \tabu@init \tabu@indent +\def\tabu@setup{\tabu@alloc@ + \ifcase \tabu@nested + \ifmmode \else \iftabu@spread\else \ifdim\tabu@target=\z@ + \let\tabu@afterendpar \par + \fi\fi\fi + \def\tabu@aligndefault{c}\tabu@init \tabu@indent + \else % + \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth + \fi + \let\tabu@thetarget \tabudefaulttarget \let\tabu@restored \@undefined + \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}% + \everycr{}\let\@startpbox \tabu@startpbox % for nested tabu inside longtabu... + \let\@endpbox \tabu@endpbox % idem " " " " " " + \let\@tabarray \tabu@tabarray % idem " " " " " " + \tabu@setcleanup \tabu@setreset +}% \tabu@setup +\def\tabu@init{\tabu@starttimer \tabu@measuringfalse + \edef\tabu@hfuzz {\the\dimexpr\hfuzz+1sp}\global\tabu@footnotes{}% + \let\firsthline \tabu@firsthline \let\lasthline \tabu@lasthline + \let\firstline \tabu@firstline \let\lastline \tabu@lastline + \let\hline \tabu@hline \let\@xhline \tabu@xhline + \let\color \tabu@color \let\@arstrutbox \tabu@arstrutbox + \iftabu@colortbl\else\let\LT@@hline \tabu@LT@@hline \fi + \tabu@trivlist % + \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext + \let\@xfootnote \tabu@xfootnote \let\centering \tabu@centering + \let\raggedright \tabu@raggedright \let\raggedleft \tabu@raggedleft + \let\tabudecimal \tabu@tabudecimal \let\Centering \tabu@Centering + \let\RaggedRight \tabu@RaggedRight \let\RaggedLeft \tabu@RaggedLeft + \let\justifying \tabu@justifying \let\rowfont \tabu@rowfont + \let\fbox \tabu@fbox \let\color@b@x \tabu@color@b@x + \let\tabu@@everycr \everycr \let\tabu@@everypar \everypar + \let\tabu@prepnext@tokORI \prepnext@tok\let\prepnext@tok \tabu@prepnext@tok + \let\tabu@multicolumnORI\multicolumn \let\multicolumn \tabu@multicolumn + \let\tabu@startpbox \@startpbox % for nested tabu inside longtabu pfff !!! + \let\tabu@endpbox \@endpbox % idem " " " " " " " + \let\tabu@tabarray \@tabarray % idem " " " " " " " + \tabu@adl@fix \let\endarray \tabu@endarray % colortbl & arydshln (delarray) + \iftabu@colortbl\CT@everycr\expandafter{\expandafter\iftabu@everyrow \the\CT@everycr \fi}\fi +}% \tabu@init +\def\tabu@indent{% correction for indentation + \ifdim \parindent>\z@\ifx \linewidth\tabudefaulttarget + \everypar\expandafter{% + \the\everypar\everypar\expandafter{\the\everypar}% + \setbox\z@=\lastbox + \ifdim\wd\z@>\z@ \edef\tabu@thetarget + {\the\dimexpr -\wd\z@+\tabudefaulttarget}\fi + \box\z@}% + \fi\fi +}% \tabu@indent +\def\tabu@setcleanup {% saves last global assignments + \ifodd 1\ifmmode \else \iftabu@long \else 0\fi\fi\relax + \def\tabu@aftergroupcleanup{% + \def\tabu@aftergroupcleanup{\aftergroup\tabu@cleanup}}% + \else + \def\tabu@aftergroupcleanup{% + \aftergroup\aftergroup\aftergroup\tabu@cleanup + \let\tabu@aftergroupcleanup \relax}% + \fi + \let\tabu@arc@Gsave \tabu@arc@G + \let\tabu@arc@G \tabu@arc@L % + \let\tabu@drsc@Gsave \tabu@drsc@G + \let\tabu@drsc@G \tabu@drsc@L % + \let\tabu@ls@Gsave \tabu@ls@G + \let\tabu@ls@G \tabu@ls@L % + \let\tabu@rc@Gsave \tabu@rc@G + \let\tabu@rc@G \tabu@rc@L % + \let\tabu@evr@Gsave \tabu@evr@G + \let\tabu@evr@G \tabu@evr@L % + \let\tabu@celllalign@save \tabu@celllalign + \let\tabu@cellralign@save \tabu@cellralign + \let\tabu@cellleft@save \tabu@cellleft + \let\tabu@cellright@save \tabu@cellright + \let\tabu@@celllalign@save \tabu@@celllalign + \let\tabu@@cellralign@save \tabu@@cellralign + \let\tabu@@cellleft@save \tabu@@cellleft + \let\tabu@@cellright@save \tabu@@cellright + \let\tabu@rowfontreset@save \tabu@rowfontreset + \let\tabu@@rowfontreset@save\tabu@@rowfontreset + \let\tabu@rowfontreset \@empty + \edef\tabu@alloc@save {\the\tabu@alloc}% restore at \tabu@reset + \edef\c@taburow@save {\the\c@taburow}% + \edef\tabu@naturalX@save {\the\tabu@naturalX}% + \let\tabu@naturalXmin@save \tabu@naturalXmin + \let\tabu@naturalXmax@save \tabu@naturalXmax + \let\tabu@mkarstrut@save \tabu@mkarstrut + \edef\tabu@clarstrut{% + \extrarowheight \the\dimexpr \ht\@arstrutbox-\ht\strutbox \relax + \extrarowdepth \the\dimexpr \dp\@arstrutbox-\dp\strutbox \relax + \let\noexpand\@arraystretch \@ne \noexpand\tabu@rearstrut}% +}% \tabu@setcleanup +\def\tabu@cleanup {\begingroup + \globaldefs\@ne \tabu@everyrowtrue + \let\tabu@arc@G \tabu@arc@Gsave + \let\CT@arc@ \tabu@arc@G + \let\tabu@drsc@G \tabu@drsc@Gsave + \let\CT@drsc@ \tabu@drsc@G + \let\tabu@ls@G \tabu@ls@Gsave + \let\tabu@ls@ \tabu@ls@G + \let\tabu@rc@G \tabu@rc@Gsave + \let\tabu@rc@ \tabu@rc@G + \let\CT@do@color \relax + \let\tabu@evr@G \tabu@evr@Gsave + \let\tabu@celllalign \tabu@celllalign@save + \let\tabu@cellralign \tabu@cellralign@save + \let\tabu@cellleft \tabu@cellleft@save + \let\tabu@cellright \tabu@cellright@save + \let\tabu@@celllalign \tabu@@celllalign@save + \let\tabu@@cellralign \tabu@@cellralign@save + \let\tabu@@cellleft \tabu@@cellleft@save + \let\tabu@@cellright \tabu@@cellright@save + \let\tabu@rowfontreset \tabu@rowfontreset@save + \let\tabu@@rowfontreset \tabu@@rowfontreset@save + \tabu@naturalX =\tabu@naturalX@save + \let\tabu@naturalXmax \tabu@naturalXmax@save + \let\tabu@naturalXmin \tabu@naturalXmin@save + \let\tabu@mkarstrut \tabu@mkarstrut@save + \c@taburow =\c@taburow@save + \ifcase \tabu@nested \tabu@alloc \m@ne\fi + \endgroup % + \ifcase \tabu@nested + \the\tabu@footnotes \global\tabu@footnotes{}% + \tabu@afterendpar \tabu@elapsedtime + \fi + \tabu@clarstrut + \everyrow\expandafter {\tabu@evr@G}% +}% \tabu@cleanup +\let\tabu@afterendpar \relax +\def\tabu@setreset {% + \edef\tabu@savedparams {% \relax for \tabu@message@save + \ifmmode \col@sep \the\arraycolsep + \else \col@sep \the\tabcolsep \fi \relax + \arrayrulewidth \the\arrayrulewidth \relax + \doublerulesep \the\doublerulesep \relax + \extratabsurround \the\extratabsurround \relax + \extrarowheight \the\extrarowheight \relax + \extrarowdepth \the\extrarowdepth \relax + \abovetabulinesep \the\abovetabulinesep \relax + \belowtabulinesep \the\belowtabulinesep \relax + \def\noexpand\arraystretch{\arraystretch}% + \ifdefined\minrowclearance \minrowclearance\the\minrowclearance\relax\fi}% + \begingroup + \@temptokena\expandafter{\tabu@savedparams}% => only for \savetabu / \usetabu + \ifx \tabu@arc@L\relax \else \tabu@setsave \tabu@arc@L \fi + \ifx \tabu@drsc@L\relax \else \tabu@setsave \tabu@drsc@L \fi + \tabu@setsave \tabu@ls@L \tabu@setsave \tabu@evr@L + \expandafter \endgroup \expandafter + \def\expandafter\tabu@saved@ \expandafter{\the\@temptokena + \let\tabu@arc@G \tabu@arc@L + \let\tabu@drsc@G \tabu@drsc@L + \let\tabu@ls@G \tabu@ls@L + \let\tabu@rc@G \tabu@rc@L + \let\tabu@evr@G \tabu@evr@L}% + \def\tabu@reset{\tabu@savedparams + \tabu@everyrowtrue \c@taburow \z@ + \let\CT@arc@ \tabu@arc@L + \let\CT@drsc@ \tabu@drsc@L + \let\tabu@ls@ \tabu@ls@L + \let\tabu@rc@ \tabu@rc@L + \global\tabu@alloc \tabu@alloc@save + \everyrow\expandafter{\tabu@evr@L}}% +}% \tabu@reset +\def\tabu@setsave #1{\expandafter\tabu@sets@ve #1\@nil{#1}} +\long\def\tabu@sets@ve #1\@nil #2{\@temptokena\expandafter{\the\@temptokena \def#2{#1}}} +%% The Rewriting Process ------------------------------------------- +\def\tabu@newcolumntype #1{% + \expandafter\tabu@new@columntype + \csname NC@find@\string#1\expandafter\endcsname + \csname NC@rewrite@\string#1\endcsname + {#1}% +}% \tabu@newcolumntype +\def\tabu@new@columntype #1#2#3{% + \def#1##1#3{\NC@{##1}}% + \let#2\relax \newcommand*#2% +}% \tabu@new@columntype +\def\tabu@privatecolumntype #1{% + \expandafter\tabu@private@columntype + \csname NC@find@\string#1\expandafter\endcsname + \csname NC@rewrite@\string#1\expandafter\endcsname + \csname tabu@NC@find@\string#1\expandafter\endcsname + \csname tabu@NC@rewrite@\string#1\endcsname + {#1}% +}% \tabu@privatecolumntype +\def\tabu@private@columntype#1#2#3#4{% + \g@addto@macro\tabu@privatecolumns{\let#1#3\let#2#4}% + \tabu@new@columntype#3#4% +}% \tabu@private@columntype +\let\tabu@privatecolumns \@empty +\newcommand*\tabucolumn [1]{\expandafter \def \expandafter + \tabu@highprioritycolumns\expandafter{\tabu@highprioritycolumns + \NC@do #1}}% +\let\tabu@highprioritycolumns \@empty +%% The | ``column'' : rewriting process -------------------------- +\tabu@privatecolumntype |{\tabu@rewritevline} +\newcommand*\tabu@rewritevline[1][]{\tabu@vlinearg{#1}% + \expandafter \NC@find \tabu@rewritten} +\def\tabu@lines #1{% + \ifx|#1\else \tabu@privatecolumntype #1{\tabu@rewritevline}\fi + \NC@list\expandafter{\the\NC@list \NC@do #1}% +}% \tabu@lines@ +\def\tabu@vlinearg #1{% + \ifx\\#1\\\def\tabu@thestyle {\tabu@ls@}% + \else\tabu@getline {#1}% + \fi + \def\tabu@rewritten ##1{\def\tabu@rewritten{!{##1\tabu@thevline}}% + }\expandafter\tabu@rewritten\expandafter{\tabu@thestyle}% + \expandafter \tabu@keepls \tabu@thestyle \@nil +}% \tabu@vlinearg +\def\tabu@keepls #1\@nil{% + \ifcat $\@cdr #1\@nil $% + \ifx \relax#1\else + \ifx \tabu@ls@#1\else + \let#1\relax + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@savels\noexpand#1}\fi\fi\fi +}% \tabu@keepls +\def\tabu@thevline {\begingroup + \ifdefined\tabu@leaders + \setbox\@tempboxa=\vtop to\dimexpr + \ht\@arstrutbox+\dp\@arstrutbox{{\tabu@thevleaders}}% + \ht\@tempboxa=\ht\@arstrutbox \dp\@tempboxa=\dp\@arstrutbox + \box\@tempboxa + \else + \tabu@thevrule + \fi \endgroup +}% \tabu@thevline +\def\tabu@savels #1{% + \expandafter\let\csname\string#1\endcsname #1% + \expandafter\def\expandafter\tabu@reset\expandafter{\tabu@reset + \tabu@resetls#1}}% +\def\tabu@resetls #1{\expandafter\let\expandafter#1\csname\string#1\endcsname}% +%% \multicolumn inside tabu environment ----------------------------- +\tabu@newcolumntype \tabu@rewritemulticolumn{% + \aftergroup \tabu@endrewritemulticolumn % after \@mkpream group + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \tabu@savedecl + \tabu@privatecolumns + \NC@list\expandafter{\the\expandafter\NC@list \tabu@NC@list}% + \let\tabu@savels \relax + \NC@find +}% \tabu@rewritemulticolumn +\def\tabu@endrewritemulticolumn{\gdef\tabu@mkpreambuffer{}\endgroup} +\def\tabu@multicolumn{\tabu@ifenvir \tabu@multic@lumn \tabu@multicolumnORI} +\long\def\tabu@multic@lumn #1#2#3{\multispan{#1}\begingroup + \tabu@everyrowtrue + \NC@list{\NC@do \tabu@rewritemulticolumn}% + \expandafter\@gobbletwo % gobbles \multispan{#1} + \tabu@multicolumnORI{#1}{\tabu@rewritemulticolumn #2}% + {\iftabuscantokens \tabu@rescan \else \expandafter\@firstofone \fi + {#3}}% +}% \tabu@multic@lumn +%% The X column(s): rewriting process ----------------------------- +\tabu@privatecolumntype X[1][]{\begingroup \tabu@siunitx{\endgroup \tabu@rewriteX {#1}}} +\def\tabu@nosiunitx #1{#1{}{}\expandafter \NC@find \tabu@rewritten } +\def\tabu@siunitx #1{\@ifnextchar \bgroup + {\tabu@rewriteX@Ss{#1}} + {\tabu@nosiunitx{#1}}} +\def\tabu@rewriteX@Ss #1#2{\@temptokena{}% + \@defaultunits \let\tabu@temp =#2\relax\@nnil + \ifodd 1\ifx S\tabu@temp \else \ifx s\tabu@temp \else 0 \fi\fi + \def\NC@find{\def\NC@find >####1####2<####3\relax{#1 {####1}{####3}% + }\expandafter\NC@find \the\@temptokena \relax + }\expandafter\NC@rewrite@S \@gobble #2\relax + \else \tabu@siunitxerror + \fi + \expandafter \NC@find \tabu@rewritten +}% \tabu@rewriteX@Ss +\def\tabu@siunitxerror {\PackageError{tabu}{Not a S nor s column ! + \MessageBreak X column can only embed siunitx S or s columns}\@ehd +}% \tabu@siunitxerror +\def\tabu@rewriteX #1#2#3{\tabu@Xarg {#1}{#2}{#3}% + \iftabu@measuring + \else \tabu@measuringtrue % first X column found in the preamble + \let\@halignto \relax \let\tabu@halignto \relax + \iftabu@spread \tabu@spreadtarget \tabu@target \tabu@target \z@ + \else \tabu@spreadtarget \z@ \fi + \ifdim \tabu@target=\z@ + \setlength\tabu@target \tabu@thetarget + \tabu@message{\tabu@message@defaulttarget}% + \else \tabu@message{\tabu@message@target}\fi + \fi +}% \tabu@rewriteX +\def\tabu@rewriteXrestore #1#2#3{\let\@halignto \relax + \def\tabu@rewritten{l}} +\def\tabu@Xarg #1#2#3{% + \advance\tabu@Xcol \@ne \let\tabu@Xlcr \@empty + \let\tabu@Xdisp \@empty \let\tabu@Xmath \@empty + \ifx\\#1\\% + \def\tabu@rewritten{p}\tabucolX \p@ % + \else + \let\tabu@rewritten \@empty \let\tabu@temp \@empty \tabucolX \z@ + \tabu@Xparse {}#1\relax + \fi + \tabu@Xrewritten{#2}{#3}% +}% \tabu@Xarg +\def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest} +\expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}} +\def\tabu@Xtest{% + \ifcase \ifx \relax\@let@token \z@ \else + \if ,\@let@token \m@ne\else + \if p\@let@token 1\else + \if m\@let@token 2\else + \if b\@let@token 3\else + \if l\@let@token 4\else + \if c\@let@token 5\else + \if r\@let@token 6\else + \if j\@let@token 7\else + \if L\@let@token 8\else + \if C\@let@token 9\else + \if R\@let@token 10\else + \if J\@let@token 11\else + \ifx \@sptoken\@let@token 12\else + \if .\@let@token 13\else + \if -\@let@token 13\else + \ifcat $\@let@token 14\else + 15\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \or \tabu@Xtype {p}% + \or \tabu@Xtype {m}% + \or \tabu@Xtype {b}% + \or \tabu@Xalign \raggedright\relax + \or \tabu@Xalign \centering\relax + \or \tabu@Xalign \raggedleft\relax + \or \tabu@Xalign \tabu@justify\relax + \or \tabu@Xalign \RaggedRight\raggedright + \or \tabu@Xalign \Centering\centering + \or \tabu@Xalign \RaggedLeft\raggedleft + \or \tabu@Xalign \justifying\tabu@justify + \or \expandafter \tabu@Xparsespace + \or \expandafter \tabu@Xcoef + \or \expandafter \tabu@Xm@th + \or \tabu@Xcoef{}% + \else\expandafter \tabu@Xparse + \fi +}% \tabu@Xtest +\def\tabu@Xalign #1#2{% + \ifx \tabu@Xlcr\@empty \else \PackageWarning{tabu} + {Duplicate horizontal alignment specification}\fi + \ifdefined#1\def\tabu@Xlcr{#1}\let#1\relax + \else \def\tabu@Xlcr{#2}\let#2\relax\fi + \expandafter\tabu@Xparse +}% \tabu@Xalign +\def\tabu@Xtype #1{% + \ifx \tabu@rewritten\@empty \else \PackageWarning{tabu} + {Duplicate vertical alignment specification}\fi + \def\tabu@rewritten{#1}\expandafter\tabu@Xparse +}% \tabu@Xtype +\def\tabu@Xcoef#1{\edef\tabu@temp{\tabu@temp#1}% + \afterassignment\tabu@Xc@ef \tabu@cnt\number\if-#10\fi +}% \tabu@Xcoef +\def\tabu@Xc@ef{\advance\tabucolX \tabu@temp\the\tabu@cnt\p@ + \tabu@Xparse{}% +}% \tabu@Xc@ef +\def\tabu@Xm@th #1{\futurelet \@let@token \tabu@Xd@sp} +\def\tabu@Xd@sp{\let\tabu@Xmath=$% + \ifx $\@let@token \def\tabu@Xdisp{\displaystyle}% + \expandafter\tabu@Xparse + \else \expandafter\tabu@Xparse\expandafter{\expandafter}% + \fi +}% \tabu@Xd@sp +\def\tabu@Xrewritten {% + \ifx \tabu@rewritten\@empty \def\tabu@rewritten{p}\fi + \ifdim \tabucolX<\z@ \tabu@negcoeftrue + \else\ifdim \tabucolX=\z@ \tabucolX \p@ + \fi\fi + \edef\tabu@temp{{\the\tabu@Xcol}{\tabu@strippt\tabucolX}}% + \edef\tabu@Xcoefs{\tabu@Xcoefs \tabu@ \tabu@temp}% + \edef\tabu@rewritten ##1##2{\def\noexpand\tabu@rewritten{% + >{\tabu@Xlcr \ifx$\tabu@Xmath$\tabu@Xdisp\fi ##1}% + \tabu@rewritten {\tabu@hsize \tabu@temp}% + <{##2\ifx$\tabu@Xmath$\fi}}% + }\tabu@rewritten +}% \tabu@Xrewritten +\def\tabu@hsize #1#2{% + \ifdim #2\p@<\z@ + \ifdim \tabucolX=\maxdimen \tabu@wd{#1}\else + \ifdim \tabu@wd{#1}<-#2\tabucolX \tabu@wd{#1}\else -#2\tabucolX\fi + \fi + \else #2\tabucolX + \fi +}% \tabu@hsize +%% \usetabu and \preamble: rewriting process --------------------- +\tabu@privatecolumntype \usetabu [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\let\tabu@rewriteX \tabu@rewriteXrestore + \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}% + \fi +}% \NC@rewrite@\usetabu +\tabu@privatecolumntype \preamble [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\csname tabu@saved@\string#1\expandafter\endcsname\expandafter\z@}% + \fi +}% \NC@rewrite@\preamble +%% Controlling the rewriting process ------------------------------- +\tabu@newcolumntype \tabu@rewritefirst{% + \iftabu@long \aftergroup \tabu@longpream % + \else \aftergroup \tabu@pream + \fi + \let\tabu@ \relax \let\tabu@hsize \relax + \let\tabu@Xcoefs \@empty \let\tabu@savels \relax + \tabu@Xcol \z@ \tabu@cnt \tw@ + \gdef\tabu@mkpreambuffer{\tabu@{}}\tabu@measuringfalse + \global\setbox\@arstrutbox \box\@arstrutbox + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \NC@list\expandafter{\the\NC@list \NC@do X}% + \iftabu@siunitx % + \NC@list\expandafter{\the\NC@list \NC@do S\NC@do s}\fi + \NC@list\expandafter{\the\expandafter\NC@list \tabu@highprioritycolumns}% + \expandafter\def\expandafter\tabu@NC@list\expandafter{% + \the\expandafter\NC@list \tabu@NC@list}% % * | X S + \NC@list\expandafter{\expandafter \NC@do \expandafter\usetabu + \expandafter \NC@do \expandafter\preamble + \the\NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \tabu@savedecl + \tabu@privatecolumns + \edef\tabu@prev{\the\@temptokena}\NC@find \tabu@rewritemiddle +}% NC@rewrite@\tabu@rewritefirst +\tabu@newcolumntype \tabu@rewritemiddle{% + \edef\tabu@temp{\the\@temptokena}\NC@find \tabu@rewritelast +}% \NC@rewrite@\tabu@rewritemiddle +\tabu@newcolumntype \tabu@rewritelast{% + \ifx \tabu@temp\tabu@prev \advance\tabu@cnt \m@ne + \NC@list\expandafter{\tabu@NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \else \let\tabu@prev\tabu@temp + \fi + \ifcase \tabu@cnt \expandafter\tabu@endrewrite + \else \expandafter\NC@find \expandafter\tabu@rewritemiddle + \fi +}% \NC@rewrite@\tabu@rewritelast +%% Choosing the strategy -------------------------------------------- +\def\tabu@endrewrite {% + \let\tabu@temp \NC@find + \ifx \@arrayright\relax \let\@arrayright \@empty \fi + \count@=% + \ifx \@finalstrut\tabu@finalstrut \z@ % outer in mode 0 print + \iftabu@measuring + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@target \csname tabu@\the\tabu@nested.T\endcsname + \tabucolX \csname tabu@\the\tabu@nested.X\endcsname + \edef\@halignto {\ifx\@arrayright\@empty to\tabu@target\fi}}% + \fi + \else\iftabu@measuring 4 % X columns + \xdef\tabu@mkpreambuffer{\tabu@{\tabu@mkpreambuffer + \tabu@target \the\tabu@target + \tabu@spreadtarget \the\tabu@spreadtarget}% + \def\noexpand\tabu@Xcoefs{\tabu@Xcoefs}% + \edef\tabu@halignto{\ifx \@arrayright\@empty to\tabu@target\fi}}% + \let\tabu@Xcoefs \relax + \else\ifcase\tabu@nested \thr@@ % outer, no X + \global\let\tabu@afterendpar \relax + \else \@ne % inner, no X, outer in mode 1 or 2 + \fi + \ifdefined\tabu@usetabu + \else \ifdim\tabu@target=\z@ + \else \let\tabu@temp \tabu@extracolsep + \fi\fi + \fi + \fi + \xdef\tabu@mkpreambuffer{\count@ \the\count@ \tabu@mkpreambuffer}% + \tabu@temp +}% \tabu@endrewrite +\def\tabu@extracolsep{\@defaultunits \expandafter\let + \expandafter\tabu@temp \expandafter=\the\@temptokena \relax\@nnil + \ifx \tabu@temp\@sptoken + \expandafter\tabu@gobblespace \expandafter\tabu@extracolsep + \else + \edef\tabu@temp{\noexpand\NC@find + \if |\noexpand\tabu@temp @% + \else\if !\noexpand\tabu@temp @% + \else !% + \fi\fi + {\noexpand\extracolsep\noexpand\@flushglue}}% + \fi + \tabu@temp +}% \tabu@extrac@lsep +%% Implementing the strategy ---------------------------------------- +\long\def\tabu@pream #1\@preamble {% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \ifdefined\tabu@usetabu \tabu@usetabu \tabu@target \z@ \fi + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\tabu@aftergroupcleanup}% + \tabu@thebody =\expandafter{\the\expandafter\tabu@thebody + \@preamble}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@pream +\long\def\tabu@longpream #1\LT@bchunk #2\LT@bchunk{% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\LT@bchunk #2\tabu@aftergroupcleanup \LT@bchunk}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@longpream +\def\tabu@select {% + \ifnum\tabu@nested>\z@ \tabuscantokensfalse \fi + \ifnum \count@=\@ne \iftabu@measuring \count@=\tw@ \fi\fi + \ifcase \count@ + \global\let\tabu@elapsedtime \relax + \tabu@seteverycr + \expandafter \tabuthepreamble % vertical adjustment (inherited from outer) + \or % exit in vertical measure + struts per cell because no X and outer in mode 3 + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \tabu@seteverycr + \expandafter \tabuthepreamble + \or % exit without measure because no X and outer in mode 4 + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@seteverycr + \expandafter \tabuthepreamble + \else % needs trials + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@savecounters + \expandafter \tabu@setstrategy + \fi +}% \tabu@select +\def\tabu@@ {\gdef\tabu@mkpreambuffer} +%% Protections to set up before trials ------------------------------ +\def\tabu@setstrategy {\begingroup % + \tabu@trialh@@k \tabu@cnt \z@ % number of trials + \hbadness \@M \let\hbadness \@tempcnta + \hfuzz \maxdimen \let\hfuzz \@tempdima + \let\write \tabu@nowrite\let\GenericError \tabu@GenericError + \let\savetabu \@gobble \let\tabudefaulttarget \linewidth + \let\@footnotetext \@gobble \let\@xfootnote \tabu@xfootnote + \let\color \tabu@nocolor\let\rowcolor \tabu@norowcolor + \let\tabu@aftergroupcleanup \relax % only after the last trial + \tabu@mkpreambuffer + \ifnum \count@>\thr@@ \let\@halignto \@empty \tabucolX@init + \def\tabu@lasttry{\m@ne\p@}\fi + \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\iftabuscantokens \endlinechar=10 \obeyspaces \fi % + \tabu@collectbody \tabu@strategy % +}% \tabu@setstrategy +\def\tabu@savecounters{% + \def\@elt ##1{\csname c@##1\endcsname\the\csname c@##1\endcsname}% + \edef\tabu@clckpt {\begingroup \globaldefs=\@ne \cl@@ckpt \endgroup}\let\@elt \relax +}% \tabu@savecounters +\def\tabucolX@init {% \tabucolX <= \tabu@target / (sum coefs > 0) + \dimen@ \z@ \tabu@Xsum \z@ \tabucolX \z@ \let\tabu@ \tabu@Xinit \tabu@Xcoefs + \ifdim \dimen@>\z@ + \@tempdima \dimexpr \tabu@target *\p@/\dimen@ + \tabu@hfuzz\relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \fi +}% \tabucolX@init +\def\tabu@Xinit #1#2{\tabu@Xcol #1 \advance \tabu@Xsum + \ifdim #2\p@>\z@ #2\p@ \advance\dimen@ #2\p@ + \else -#2\p@ \tabu@negcoeftrue + \@tempdima \dimexpr \tabu@target*\p@/\dimexpr-#2\p@\relax \relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \tabu@wddef{#1}{0pt}% + \fi +}% \tabu@Xinit +%% Collecting the environment body ---------------------------------- +\long\def\tabu@collectbody #1#2\end #3{% + \edef\tabu@stack{\tabu@pushbegins #2\begin\end\expandafter\@gobble\tabu@stack}% + \ifx \tabu@stack\@empty + \toks@\expandafter{\expandafter\tabu@thebody\expandafter{\the\toks@ #2}% + \def\tabu@end@envir{\end{#3}}% + \iftabuscantokens + \iftabu@long \def\tabu@endenvir {\end{#3}\tabu@gobbleX}% + \else \def\tabu@endenvir {\let\endarray \@empty + \end{#3}\tabu@gobbleX}% + \fi + \else \def\tabu@endenvir {\end{#3}}\fi}% + \let\tabu@collectbody \tabu@endofcollect + \else\def\tabu@temp{#3}% + \ifx \tabu@temp\@empty \toks@\expandafter{\the\toks@ #2\end }% + \else \ifx\tabu@temp\tabu@@spxiii \toks@\expandafter{\the\toks@ #2\end #3}% + \else \ifx\tabu@temp\tabu@X \toks@\expandafter{\the\toks@ #2\end #3}% + \else \toks@\expandafter{\the\toks@ #2\end{#3}}% + \fi\fi\fi + \fi + \tabu@collectbody{#1}% +}% \tabu@collectbody +\long\def\tabu@pushbegins#1\begin#2{\ifx\end#2\else b\expandafter\tabu@pushbegins\fi}% +\def\tabu@endofcollect #1{\ifnum0=`{}\fi + \expandafter\endgroup \the\toks@ #1% +}% \tabu@endofcollect +%% The trials: switching between strategies ------------------------- +\def\tabu@strategy {\relax % stops \count@ assignment ! + \ifcase\count@ % case 0 = print with vertical adjustment (outer is finished) + \expandafter \tabu@endoftrials + \or % case 1 = exit in vertical measure (outer in mode 3) + \expandafter\xdef\csname tabu@\the\tabu@nested.T\endcsname{\the\tabu@target}% + \expandafter\xdef\csname tabu@\the\tabu@nested.X\endcsname{\the\tabucolX}% + \expandafter \tabu@endoftrials + \or % case 2 = exit with a rule replacing the table (outer in mode 4) + \expandafter \tabu@quickend + \or % case 3 = outer is in mode 3 because of no X + \begingroup + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \expandafter \tabu@measuring + \else % case 4 = horizontal measure + \begingroup + \global\let\tabu@elapsedtime \tabu@message@etime + \long\def\multicolumn##1##2##3{\multispan{##1}}% + \let\tabu@startpboxORI \@startpbox + \iftabu@spread + \def\tabu@naturalXmax {\z@}% + \let\tabu@naturalXmin \tabu@naturalXmax + \tabu@evr{\global\tabu@naturalX \z@}% + \let\@startpbox \tabu@startpboxmeasure + \else\iftabu@negcoef + \let\@startpbox \tabu@startpboxmeasure + \else \let\@startpbox \tabu@startpboxquick + \fi\fi + \expandafter \tabu@measuring + \fi +}% \tabu@strategy +\def\tabu@measuring{\expandafter \tabu@trial \expandafter + \count@ \the\count@ \tabu@endtrial +}% \tabu@measuring +\def\tabu@trial{\iftabu@long \tabu@longtrial \else \tabu@shorttrial \fi} +\def\tabu@shorttrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + $\iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \csname tabu@adl@endtrial\endcsname + \endarray}$\egroup % got \tabu@box +}% \tabu@shorttrial +\def\tabu@longtrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + \iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \tabuendlongtrial}\egroup % got \tabu@box +}% \tabu@longtrial +\def\tabuendlongtrial{% no @ allowed for \scantokens + \LT@echunk \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne + \LT@get@widths +}% \tabuendlongtrial +\def\tabu@adl@endtrial{% + \crcr \noalign{\global\adl@ncol \tabu@nbcols}}% anything global is crap, junky and fails ! +\def\tabu@seteverycr {\tabu@reset + \everycr \expandafter{\the\everycr \tabu@everycr}% + \let\everycr \tabu@noeverycr % +}% \tabu@seteverycr +\def\tabu@noeverycr{{\aftergroup\tabu@restoreeverycr \afterassignment}\toks@} +\def\tabu@restoreeverycr {\let\everycr \tabu@@everycr} +\def\tabu@everycr {\iftabu@everyrow \noalign{\tabu@everyrow}\fi} +\def\tabu@endoftrials {% + \iftabuscantokens \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\expandafter \tabu@closetrialsgroup \expandafter + \tabu@rescan \expandafter{% + \expandafter\tabuthepreamble + \the\expandafter\tabu@thebody + \iftabu@long \else \endarray \fi}} + {\expandafter\tabu@closetrialsgroup \expandafter + \tabuthepreamble + \the\tabu@thebody}% + \tabu@endenvir % Finish ! +}% \tabu@endoftrials +\def\tabu@closetrialsgroup {% + \toks@\expandafter{\tabu@endenvir}% + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target + \tabu@cnt \the\tabu@cnt + \def\noexpand\tabu@endenvir{\the\toks@}% + %Quid de \@halignto = \tabu@halignto ?? + }% \tabu@bufferX + \tabu@bufferX + \ifcase\tabu@nested % print out (outer in mode 0) + \global\tabu@cnt \tabu@cnt + \tabu@evr{\tabu@verticaldynamicadjustment}% + \tabu@celllalign@def{\everypar{}}\let\tabu@cellralign \@empty + \let\@finalstrut \tabu@finalstrut + \else % vertical measure of nested tabu + \tabu@evr{\tabu@verticalinit}% + \tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \fi + \tabu@clckpt \let\@halignto \tabu@halignto + \let\@halignto \@empty + \tabu@seteverycr + \ifdim \tabustrutrule>\z@ \ifnum\tabu@nested=\z@ + \setbox\@arstrutbox \box\voidb@x % force \@arstrutbox to be rebuilt (visible struts) + \fi\fi +}% \tabu@closetrialsgroup +\def\tabu@quickend {\expandafter \endgroup \expandafter + \tabu@target \the\tabu@target \tabu@quickrule + \let\endarray \relax \tabu@endenvir +}% \tabu@quickend +\def\tabu@endtrial {\relax % stops \count@ assignment ! + \ifcase \count@ \tabu@err % case 0 = impossible here + \or \tabu@err % case 1 = impossible here + \or \tabu@err % case 2 = impossible here + \or % case 3 = outer goes into mode 0 + \def\tabu@bufferX{\endgroup}\count@ \z@ + \else % case 4 = outer goes into mode 3 + \iftabu@spread \tabu@spreadarith % inner into mode 1 (outer in mode 3) + \else \tabu@arith % or 2 (outer in mode 4) + \fi + \count@=% + \ifcase\tabu@nested \thr@@ % outer goes into mode 3 + \else\iftabu@measuring \tw@ % outer is in mode 4 + \else \@ne % outer is in mode 3 + \fi\fi + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% + \fi + \expandafter \tabu@bufferX \expandafter + \count@ \the\count@ \tabu@strategy +}% \tabu@endtrial +\def\tabu@err{\errmessage{(tabu) Internal impossible error! (\count@=\the\count@)}} +%% The algorithms: compute the widths / stop or go on --------------- +\def\tabu@arithnegcoef {% + \@tempdima \z@ \dimen@ \z@ \let\tabu@ \tabu@arith@negcoef \tabu@Xcoefs +}% \tabu@arithnegcoef +\def\tabu@arith@negcoef #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ % saturated by definition + \advance\@tempdima #2\tabucolX + \else + \ifdim -#2\tabucolX <\tabu@wd{#1}% c_i X < natural width <= \tabu@target-> saturated + \advance\dimen@ -#2\p@ + \advance\@tempdima -#2\tabucolX + \else + \advance\@tempdima \tabu@wd{#1}% natural width <= c_i X => neutralised + \ifdim \tabu@wd{#1}<\tabu@target \else % neutralised + \advance\dimen@ -#2\p@ % saturated (natural width = tabu@target) + \fi + \fi + \fi +}% \tabu@arith@negcoef +\def\tabu@givespace #1#2{% here \tabu@DELTA < \z@ + \ifdim \@tempdima=\z@ + \tabu@wddef{#1}{\the\dimexpr -\tabu@DELTA*\p@/\tabu@Xsum}% + \else + \tabu@wddef{#1}{\the\dimexpr \tabu@hsize{#1}{#2} + *(\p@ -\tabu@DELTA*\p@/\@tempdima)/\p@\relax}% + \fi +}% \tabu@givespace +\def\tabu@arith {\advance\tabu@cnt \@ne + \ifnum \tabu@cnt=\@ne \tabu@message{\tabu@titles}\fi + \tabu@arithnegcoef + \@tempdimb \dimexpr \wd\tabu@box -\@tempdima \relax % + \tabu@DELTA = \dimexpr \wd\tabu@box - \tabu@target \relax + \tabu@message{\tabu@message@arith}% + \ifdim \tabu@DELTA <\tabu@hfuzz + \ifdim \tabu@DELTA<\z@ % wd (tabu)<\tabu@target ? + \let\tabu@ \tabu@givespace \tabu@Xcoefs + \advance\@tempdima \@tempdimb \advance\@tempdima -\tabu@DELTA % for message + \else % already converged: nothing to do but nearly impossible... + \fi + \tabucolX \maxdimen + \tabu@measuringfalse + \else % need for narrower X columns + \tabucolX =\dimexpr (\@tempdima -\tabu@DELTA) *\p@/\tabu@Xsum \relax + \tabu@measuringtrue + \@whilesw \iftabu@measuring\fi {% + \advance\tabu@cnt \@ne + \tabu@arithnegcoef + \tabu@DELTA =\dimexpr \@tempdima+\@tempdimb -\tabu@target \relax % always < 0 here + \tabu@message{\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \@tempdima+\@tempdimb { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim -\tabu@DELTA<\tabu@hfuzz \tabu@spaces target ok\else + \tabu@msgalign \dimexpr -\tabu@DELTA *\p@/\dimen@ {}{}{}{}{}\@@ + \fi}% + \ifdim -\tabu@DELTA<\tabu@hfuzz + \advance\@tempdima \@tempdimb % for message + \tabu@measuringfalse + \else + \advance\tabucolX \dimexpr -\tabu@DELTA *\p@/\dimen@ \relax + \fi + }% + \fi + \tabu@message{\tabu@message@reached}% + \edef\tabu@bufferX{\endgroup \tabu@cnt \the\tabu@cnt + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% +}% \tabu@arith +\def\tabu@spreadarith {% + \dimen@ \z@ \@tempdima \tabu@naturalXmax \let\tabu@ \tabu@spread@arith \tabu@Xcoefs + \edef\tabu@naturalXmin {\the\dimexpr\tabu@naturalXmin*\dimen@/\p@}% + \@tempdimc =\dimexpr \wd\tabu@box -\tabu@naturalXmax+\tabu@naturalXmin \relax + \iftabu@measuring + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \edef\tabu@bufferX{\endgroup \tabucolX \the\tabucolX \tabu@target\the\tabu@target}% + \else + \tabu@message{\tabu@message@spreadarith}% + \ifdim \dimexpr \@tempdimc+\tabu@spreadtarget >\tabu@target + \tabu@message{(tabu) spread + \ifdim \@tempdimc>\tabu@target useless here: default target used% + \else too large: reduced to fit default target\fi.}% + \else + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \tabu@message{(tabu) spread: New target set to \the\tabu@target^^J}% + \fi + \begingroup \let\tabu@wddef \@gobbletwo + \@tempdimb \@tempdima + \tabucolX@init + \tabu@arithnegcoef + \wd\tabu@box =\dimexpr \wd\tabu@box +\@tempdima-\@tempdimb \relax + \expandafter\endgroup \expandafter\tabucolX \the\tabucolX + \tabu@arith + \fi +}% \tabu@spreadarith +\def\tabu@spread@arith #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ + \else \advance\@tempdima \tabu@wd{#1}\relax + \fi +}% \tabu@spread@arith +%% Reporting in the .log file --------------------------------------- +\def\tabu@message@defaulttarget{% + \ifnum\tabu@nested=\z@^^J(tabu) Default target: + \ifx\tabudefaulttarget\linewidth \string\linewidth + \ifdim \tabu@thetarget=\linewidth \else + -\the\dimexpr\linewidth-\tabu@thetarget\fi = + \else\ifx\tabudefaulttarget\linegoal\string\linegoal= + \fi\fi + \else (tabu) Default target (nested): \fi + \the\tabu@target \on@line + \ifnum\tabu@nested=\z@ , page \the\c@page\fi} +\def\tabu@message@target {^^J(tabu) Target specified: + \the\tabu@target \on@line, page \the\c@page} +\def\tabu@message@arith {\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim \tabu@DELTA<\tabu@hfuzz giving space\else + \tabu@msgalign \dimexpr (\@tempdima-\tabu@DELTA) *\p@/\tabu@Xsum -\tabucolX {}{}{}{}{}\@@ + \fi +}% \tabu@message@arith +\def\tabu@message@spreadarith {\tabu@spreadheader + \tabu@msgalign \tabu@spreadtarget { }{ }{ }{ }{}\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{}\@@ + \tabu@msgalign -\tabu@naturalXmax { }{}{}{}{}\@@ + \tabu@msgalign \tabu@naturalXmin { }{ }{ }{ }{}\@@ + \tabu@msgalign \ifdim \dimexpr\@tempdimc>\tabu@target \tabu@target + \else \@tempdimc+\tabu@spreadtarget \fi + {}{}{}{}{}\@@} +\def\tabu@message@negcoef #1#2{ + \tabu@spaces\tabu@spaces\space * #1. X[\rem@pt#2]: + \space width = \tabu@wd {#1} + \expandafter\string\csname tabu@\the\tabu@nested.W\number#1\endcsname + \ifdim -\tabu@pt#2\tabucolX<\tabu@target + < \number-\rem@pt#2 X + = \the\dimexpr -\tabu@pt#2\tabucolX \relax + \else + <= \the\tabu@target\space < \number-\rem@pt#2 X\fi} +\def\tabu@message@reached{\tabu@header + ******* Reached Target: + hfuzz = \tabu@hfuzz\on@line\space *******} +\def\tabu@message@etime{\edef\tabu@stoptime{\the\pdfelapsedtime}% + \tabu@message{(tabu)\tabu@spaces Time elapsed during measure: + \the\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax sec + \the\numexpr\numexpr(\tabu@stoptime-\tabu@starttime) + -\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax*65536\relax + *1000/65536\relax ms \tabu@spaces(\the\tabu@cnt\space + cycle\ifnum\tabu@cnt>\@ne s\fi)^^J^^J}} +\def\tabu@message@verticalsp {% + \ifdim \@tempdima>\tabu@ht + \ifdim \@tempdimb>\tabu@dp + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@ + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J% + \else + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@^^J% + \fi + \else\ifdim \@tempdimb>\tabu@dp + \tabu@spaces\tabu@spaces\tabu@spaces + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J\fi + \fi +}% \tabu@message@verticalsp +\edef\tabu@spaces{\@spaces} +\def\tabu@strippt{\expandafter\tabu@pt\the} +{\@makeother\P \@makeother\T\lowercase{\gdef\tabu@pt #1PT{#1}}} +\def\tabu@msgalign{\expandafter\tabu@msg@align\the\dimexpr} +\def\tabu@msgalign@PT{\expandafter\tabu@msg@align\romannumeral-`\0\tabu@strippt} +\def\do #1{% + \def\tabu@msg@align##1.##2##3##4##5##6##7##8##9\@@{% + \ifnum##1<10 #1 #1\else + \ifnum##1<100 #1 \else + \ifnum##1<\@m #1\fi\fi\fi + ##1.##2##3##4##5##6##7##8#1}% + \def\tabu@header{(tabu) \ifnum\tabu@cnt<10 #1\fi\the\tabu@cnt) }% + \def\tabu@titles{\ifnum \tabu@nested=\z@ + (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target + #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}% + \def\tabu@spreadheader{% + (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 #1 Nat. X #1 #1 #1 #1Nat. Min. + #1 New Target^^J% + (tabu) sprd} + \def\tabu@message@save {\begingroup + \def\x ####1{\tabu@msg@align ####1{ }{ }{ }{ }{}\@@} + \def\z ####1{\expandafter\x\expandafter{\romannumeral-`\0\tabu@strippt + \dimexpr####1\p@{ }{ }}}% + \let\color \relax \def\tabu@rulesstyle ####1####2{\detokenize{####1}}% + \let\CT@arc@ \relax \let\@preamble \@gobble + \let\tabu@savedpream \@firstofone + \let\tabu@savedparams \@firstofone + \def\tabu@target ####1\relax {(tabu) target #1 #1 #1 #1 #1 = \x{####1}^^J}% + \def\tabucolX ####1\relax {(tabu) X columns width#1 = \x{####1}^^J}% + \def\tabu@nbcols ####1\relax {(tabu) Number of columns: \z{####1}^^J}% + \def\tabu@aligndefault ####1{(tabu) Default alignment: #1 #1 ####1^^J}% + \def\col@sep ####1\relax {(tabu) column sep #1 #1 #1 = \x{####1}^^J}% + \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = \x{####1}}% + \def\doublerulesep ####1\relax { doublerulesep = \x{####1}^^J}% + \def\extratabsurround####1\relax{(tabu) extratabsurround = \x{####1}^^J}% + \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = \x{####1}}% + \def\extrarowdepth ####1\relax {extrarowdepth = \x{####1}^^J}% + \def\abovetabulinesep####1\relax{(tabu) abovetabulinesep=\x{####1} }% + \def\belowtabulinesep####1\relax{ belowtabulinesep=\x{####1}^^J}% + \def\arraystretch ####1{(tabu) arraystretch #1 #1 = \z{####1}^^J}% + \def\minrowclearance####1\relax{(tabu) minrowclearance #1 = \x{####1}^^J}% + \def\tabu@arc@L ####1{(tabu) taburulecolor #1 #1 = ####1^^J}% + \def\tabu@drsc@L ####1{(tabu) tabudoublerulecolor= ####1^^J}% + \def\tabu@evr@L ####1{(tabu) everyrow #1 #1 #1 #1 = \detokenize{####1}^^J}% + \def\tabu@ls@L ####1{(tabu) line style = \detokenize{####1}^^J}% + \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}% + \def\tabu@wddef####1####2{(tabu) Natural width ####1 = \x{####2}^^J}% + \let\edef \@gobbletwo \let\def \@empty \let\let \@gobbletwo + \tabu@message{% + (tabu) \string\savetabu{\tabu@temp}: \on@line^^J% + \tabu@usetabu \@nil^^J}% + \endgroup} +}\do{ } +%% Measuring the natural width (varwidth) - store the results ------- +\def\tabu@startpboxmeasure #1{\bgroup % entering \vtop + \edef\tabu@temp{\expandafter\@secondoftwo \ifx\tabu@hsize #1\else\relax\fi}% + \ifodd 1\ifx \tabu@temp\@empty 0 \else % starts with \tabu@hsize ? + \iftabu@spread \else % if spread -> measure + \ifdim \tabu@temp\p@>\z@ 0 \fi\fi\fi% if coef>0 -> do not measure + \let\@startpbox \tabu@startpboxORI % restore immediately (nesting) + \tabu@measuringtrue % for the quick option... + \tabu@Xcol =\expandafter\@firstoftwo\ifx\tabu@hsize #1\fi + \ifdim \tabu@temp\p@>\z@ \ifdim \tabu@temp\tabucolX<\tabu@target + \tabu@target=\tabu@temp\tabucolX \fi\fi + \setbox\tabu@box \hbox \bgroup + \begin{varwidth}\tabu@target + \let\FV@ListProcessLine \tabu@FV@ListProcessLine % \hbox to natural width... + \narrowragged \arraybackslash \parfillskip \@flushglue + \ifdefined\pdfadjustspacing \pdfadjustspacing\z@ \fi + \bgroup \aftergroup\tabu@endpboxmeasure + \ifdefined \cellspacetoplimit \tabu@cellspacepatch \fi + \else \expandafter\@gobble + \tabu@startpboxquick{#1}% \@gobble \bgroup + \fi +}% \tabu@startpboxmeasure +\def\tabu@cellspacepatch{\def\bcolumn##1\@nil{}\let\ecolumn\@empty + \bgroup\color@begingroup} +\def\tabu@endpboxmeasure {% + \@finalstrut \@arstrutbox + \end{varwidth}\egroup % + \ifdim \tabu@temp\p@ <\z@ % neg coef + \ifdim \tabu@wd\tabu@Xcol <\wd\tabu@box + \tabu@wddef\tabu@Xcol {\the\wd\tabu@box}% + \tabu@debug{\tabu@message@endpboxmeasure}% + \fi + \else % spread coef>0 + \global\advance \tabu@naturalX \wd\tabu@box + \@tempdima =\dimexpr \wd\tabu@box *\p@/\dimexpr \tabu@temp\p@\relax \relax + \ifdim \tabu@naturalXmax <\tabu@naturalX + \xdef\tabu@naturalXmax {\the\tabu@naturalX}\fi + \ifdim \tabu@naturalXmin <\@tempdima + \xdef\tabu@naturalXmin {\the\@tempdima}\fi + \fi + \box\tabu@box \egroup % end of \vtop (measure) restore \tabu@target +}% \tabu@endpboxmeasure +\def\tabu@wddef #1{\expandafter\xdef + \csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@wd #1{\csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@message@endpboxmeasure{\tabu@spaces\tabu@spaces<-> % <-> save natural wd + \the\tabu@Xcol. X[\tabu@temp]: + target = \the\tabucolX \space + \expandafter\expandafter\expandafter\string\tabu@wd\tabu@Xcol + =\tabu@wd\tabu@Xcol +}% \tabu@message@endpboxmeasure +\def\tabu@startpboxquick {\bgroup + \let\@startpbox \tabu@startpboxORI % restore immediately + \let\tabu \tabu@quick % \begin is expanded before... + \expandafter\@gobble \@startpbox % gobbles \bgroup +}% \tabu@startpboxquick +\def\tabu@quick {\begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\tabu@collectbody \tabu@endquick +}% \tabu@quick +\def\tabu@endquick {% + \ifodd 1\ifx\tabu@end@envir\tabu@endtabu \else + \ifx\tabu@end@envir\tabu@endtabus \else 0\fi\fi\relax + \endgroup + \else \let\endtabu \relax + \tabu@end@envir + \fi +}% \tabu@quick +\def\tabu@endtabu {\end{tabu}} +\def\tabu@endtabus {\end{tabu*}} +%% Measuring the heights and depths - store the results ------------- +\def\tabu@verticalmeasure{\everypar{}% + \ifnum \currentgrouptype>12 % 14=semi-simple, 15=math shift group + \setbox\tabu@box =\hbox\bgroup + \let\tabu@verticalspacing \tabu@verticalsp@lcr + \d@llarbegin % after \hbox ... + \else + \edef\tabu@temp{\ifnum\currentgrouptype=5\vtop + \else\ifnum\currentgrouptype=12\vcenter + \else\vbox\fi\fi}% + \setbox\tabu@box \hbox\bgroup$\tabu@temp \bgroup + \let\tabu@verticalspacing \tabu@verticalsp@pmb + \fi +}% \tabu@verticalmeasure +\def\tabu@verticalsp@lcr{% + \d@llarend \egroup % + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \noindent\vrule height\@tempdima depth\@tempdimb +}% \tabu@verticalsp@lcr +\def\tabu@verticalsp@pmb{% inserts struts as needed + \par \expandafter\egroup + \expandafter$\expandafter + \egroup \expandafter + \@tempdimc \the\prevdepth + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \let\@finalstrut \@gobble + \hrule height\@tempdima depth\@tempdimb width\hsize +%% \box\tabu@box +}% \tabu@verticalsp@pmb + +\def\tabu@verticalinit{% + \ifnum \c@taburow=\z@ \tabu@rearstrut \fi % after \tabu@reset ! + \advance\c@taburow \@ne + \tabu@htdef{\the\ht\@arstrutbox}\tabu@dpdef{\the\dp\@arstrutbox}% + \advance\c@taburow \m@ne +}% \tabu@verticalinit +\def\tabu@htdef {\expandafter\xdef \csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@ht {\csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@dpdef {\expandafter\xdef \csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@dp {\csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@verticaldynamicadjustment {% + \advance\c@taburow \@ne + \extrarowheight \dimexpr\tabu@ht - \ht\strutbox + \extrarowdepth \dimexpr\tabu@dp - \dp\strutbox + \let\arraystretch \@empty + \advance\c@taburow \m@ne +}% \tabu@verticaldynamicadjustment +\def\tabuphantomline{\crcr \noalign{% + {\globaldefs \@ne + \setbox\@arstrutbox \box\voidb@x + \let\tabu@@celllalign \tabu@celllalign + \let\tabu@@cellralign \tabu@cellralign + \let\tabu@@cellleft \tabu@cellleft + \let\tabu@@cellright \tabu@cellright + \let\tabu@@thevline \tabu@thevline + \let\tabu@celllalign \@empty + \let\tabu@cellralign \@empty + \let\tabu@cellright \@empty + \let\tabu@cellleft \@empty + \let\tabu@thevline \relax}% + \edef\tabu@temp{\tabu@multispan \tabu@nbcols{\noindent &}}% + \toks@\expandafter{\tabu@temp \noindent\tabu@everyrowfalse \cr + \noalign{\tabu@rearstrut + {\globaldefs\@ne + \let\tabu@celllalign \tabu@@celllalign + \let\tabu@cellralign \tabu@@cellralign + \let\tabu@cellleft \tabu@@cellleft + \let\tabu@cellright \tabu@@cellright + \let\tabu@thevline \tabu@@thevline}}}% + \expandafter}\the\toks@ +}% \tabuphantomline +%% \firsthline and \lasthline corrections --------------------------- +\def\tabu@firstline {\tabu@hlineAZ \tabu@firsthlinecorrection {}} +\def\tabu@firsthline{\tabu@hlineAZ \tabu@firsthlinecorrection \hline} +\def\tabu@lastline {\tabu@hlineAZ \tabu@lasthlinecorrection {}} +\def\tabu@lasthline {\tabu@hlineAZ \tabu@lasthlinecorrection \hline} +\def\tabu@hline {% replaces \hline if no colortbl (see \AtBeginDocument) + \noalign{\ifnum0=`}\fi + {\CT@arc@\hrule height\arrayrulewidth}% + \futurelet \tabu@temp \tabu@xhline +}% \tabu@hline +\def\tabu@xhline{% + \ifx \tabu@temp \hline + {\ifx \CT@drsc@\relax \vskip + \else\ifx \CT@drsc@\@empty \vskip + \else \CT@drsc@\hrule height + \fi\fi + \doublerulesep}% + \fi + \ifnum0=`{\fi}% +}% \tabu@xhline +\def\tabu@hlineAZ #1#2{\noalign{\ifnum0=`}\fi \dimen@ \z@ \count@ \z@ + \toks@{}\def\tabu@hlinecorrection{#1}\def\tabu@temp{#2}% + \tabu@hlineAZsurround +}% \tabu@hlineAZ +\newcommand*\tabu@hlineAZsurround[1][\extratabsurround]{% + \extratabsurround #1\let\tabucline \tabucline@scan + \let\hline \tabu@hlinescan \let\firsthline \hline + \let\cline \tabu@clinescan \let\lasthline \hline + \expandafter \futurelet \expandafter \tabu@temp + \expandafter \tabu@nexthlineAZ \tabu@temp +}% \tabu@hlineAZsurround +\def\tabu@hlinescan {\tabu@thick \arrayrulewidth \tabu@xhlineAZ \hline} +\def\tabu@clinescan #1{\tabu@thick \arrayrulewidth \tabu@xhlineAZ {\cline{#1}}} +\def\tabucline@scan{\@testopt \tabucline@sc@n {}} +\def\tabucline@sc@n #1[#2]{\tabu@xhlineAZ {\tabucline[{#1}]{#2}}} +\def\tabu@nexthlineAZ{% + \ifx \tabu@temp\hline \else + \ifx \tabu@temp\cline \else + \ifx \tabu@temp\tabucline \else + \tabu@hlinecorrection + \fi\fi\fi +}% \tabu@nexthlineAZ +\def\tabu@xhlineAZ #1{% + \toks@\expandafter{\the\toks@ #1}% + \@tempdimc \tabu@thick % The last line width + \ifcase\count@ \@tempdimb \tabu@thick % The first line width + \else \advance\dimen@ \dimexpr \tabu@thick+\doublerulesep \relax + \fi + \advance\count@ \@ne \futurelet \tabu@temp \tabu@nexthlineAZ +}% \tabu@xhlineAZ +\def\tabu@firsthlinecorrection{% \count@ = number of \hline -1 + \@tempdima \dimexpr \ht\@arstrutbox+\dimen@ + \edef\firsthline{% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + height \the\dimexpr\@tempdima+\extratabsurround + depth \dp\@arstrutbox + width \tabustrutrule}\hss}\cr + \noalign{\vskip -\the\dimexpr \@tempdima+\@tempdimb + +\dp\@arstrutbox \relax}% + \the\toks@ + }\ifnum0=`{\fi + \expandafter}\firsthline % we are then ! +}% \tabu@firsthlinecorrection +\def\tabu@lasthlinecorrection{% + \@tempdima \dimexpr \dp\@arstrutbox+\dimen@+\@tempdimb+\@tempdimc + \edef\lasthline{% + \the\toks@ + \noalign{\vskip -\the\dimexpr\dimen@+\@tempdimb+\dp\@arstrutbox}% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + depth \the\dimexpr \dp\@arstrutbox+\@tempdimb+\dimen@ + +\extratabsurround-\@tempdimc + height \z@ + width \tabustrutrule}\hss}\cr + }\ifnum0=`{\fi + \expandafter}\lasthline % we are then ! +}% \tabu@lasthlinecorrection +\def\tabu@LT@@hline{% + \ifx\LT@next\hline + \global\let\LT@next \@gobble + \ifx \CT@drsc@\relax + \gdef\CT@LT@sep{% + \noalign{\penalty-\@medpenalty\vskip\doublerulesep}}% + \else + \gdef\CT@LT@sep{% + \multispan\LT@cols{% + \CT@drsc@\leaders\hrule\@height\doublerulesep\hfill}\cr}% + \fi + \else + \global\let\LT@next\empty + \gdef\CT@LT@sep{% + \noalign{\penalty-\@lowpenalty\vskip-\arrayrulewidth}}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \CT@LT@sep + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \noalign{\penalty\@M}% + \LT@next +}% \tabu@LT@@hline +%% Horizontal lines : \tabucline ------------------------------------ +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcommand*\tabucline{\noalign{\ifnum0=`}\fi \tabu@cline} +\newcommand*\tabu@cline[2][]{\tabu@startstop{#2}% + \ifnum \tabu@stop<\z@ \toks@{}% + \else \tabu@clinearg{#1}\tabu@thestyle + \edef\tabucline{\toks@{% + \ifnum \tabu@start>\z@ \omit + \tabu@multispan\tabu@start {\span\omit}&\fi + \omit \tabu@multispan\tabu@stop {\span\omit}% + \tabu@thehline\cr + }}\tabucline + \tabu@tracinglines{(tabu:tabucline) Style: #1^^J\the\toks@^^J^^J}% + \fi + \futurelet \tabu@temp \tabu@xcline +}% \tabu@cline +\def\tabu@clinearg #1{% + \ifx\\#1\\\let\tabu@thestyle \tabu@ls@ + \else \@defaultunits \expandafter\let\expandafter\@tempa + \romannumeral-`\0#1\relax \@nnil + \ifx \hbox\@tempa \tabu@clinebox{#1}% + \else\ifx \box\@tempa \tabu@clinebox{#1}% + \else\ifx \vbox\@tempa \tabu@clinebox{#1}% + \else\ifx \vtop\@tempa \tabu@clinebox{#1}% + \else\ifx \copy\@tempa \tabu@clinebox{#1}% + \else\ifx \leaders\@tempa \tabu@clineleads{#1}% + \else\ifx \cleaders\@tempa \tabu@clineleads{#1}% + \else\ifx \xleaders\@tempa \tabu@clineleads{#1}% + \else\tabu@getline {#1}% + \fi\fi\fi\fi\fi\fi\fi\fi + \fi +}% \tabu@clinearg +\def\tabu@clinebox #1{\tabu@clineleads{\xleaders#1\hss}} +\def\tabu@clineleads #1{% + \let\tabu@thestyle \relax \let\tabu@leaders \@undefined + \gdef\tabu@thehrule{#1}} +\def\tabu@thehline{\begingroup + \ifdefined\tabu@leaders + \noexpand\tabu@thehleaders + \else \noexpand\tabu@thehrule + \fi \endgroup +}% \tabu@thehline +\def\tabu@xcline{% + \ifx \tabu@temp\tabucline + \toks@\expandafter{\the\toks@ \noalign + {\ifx\CT@drsc@\relax \vskip + \else \CT@drsc@\hrule height + \fi + \doublerulesep}}% + \fi + \tabu@docline +}% \tabu@xcline +\def\tabu@docline {\ifnum0=`{\fi \expandafter}\the\toks@} +\def\tabu@docline@evr {\xdef\tabu@doclineafter{\the\toks@}% + \ifnum0=`{\fi}\aftergroup\tabu@doclineafter} +\def\tabu@multispan #1#2{% + \ifnum\numexpr#1>\@ne #2\expandafter\tabu@multispan + \else \expandafter\@gobbletwo + \fi {#1-1}{#2}% +}% \tabu@multispan +\def\tabu@startstop #1{\tabu@start@stop #1\relax 1-\tabu@nbcols \@nnil} +\def\tabu@start@stop #1-#2\@nnil{% + \@defaultunits \tabu@start\number 0#1\relax \@nnil + \@defaultunits \tabu@stop \number 0#2\relax \@nnil + \tabu@stop \ifnum \tabu@start>\tabu@nbcols \m@ne + \else\ifnum \tabu@stop=\z@ \tabu@nbcols + \else\ifnum \tabu@stop>\tabu@nbcols \tabu@nbcols + \else \tabu@stop + \fi\fi\fi + \advance\tabu@start \m@ne + \ifnum \tabu@start>\z@ \advance\tabu@stop -\tabu@start \fi +}% \tabu@start@stop +%% Numbers: siunitx S columns (and \tabudecimal) ------------------- +\def\tabu@tabudecimal #1{% + \def\tabu@decimal{#1}\@temptokena{}% + \let\tabu@getdecimal@ \tabu@getdecimal@ignorespaces + \tabu@scandecimal +}% \tabu@tabudecimal +\def\tabu@scandecimal{\futurelet \tabu@temp \tabu@getdecimal@} +\def\tabu@skipdecimal#1{#1\tabu@scandecimal} +\def\tabu@getdecimal@ignorespaces{% + \ifcase 0\ifx\tabu@temp\ignorespaces\else + \ifx\tabu@temp\@sptoken1\else + 2\fi\fi\relax + \let\tabu@getdecimal@ \tabu@getdecimal + \expandafter\tabu@skipdecimal + \or \expandafter\tabu@gobblespace\expandafter\tabu@scandecimal + \else \expandafter\tabu@skipdecimal + \fi +}% \tabu@getdecimal@ignorespaces +\def\tabu@get@decimal#1{\@temptokena\expandafter{\the\@temptokena #1}% + \tabu@scandecimal} +\def\do#1{% + \def\tabu@get@decimalspace#1{% + \@temptokena\expandafter{\the\@temptokena #1}\tabu@scandecimal}% +}\do{ } +\let\tabu@@tabudecimal \tabu@tabudecimal +\def\tabu@getdecimal{% + \ifcase 0\ifx 0\tabu@temp\else + \ifx 1\tabu@temp\else + \ifx 2\tabu@temp\else + \ifx 3\tabu@temp\else + \ifx 4\tabu@temp\else + \ifx 5\tabu@temp\else + \ifx 6\tabu@temp\else + \ifx 7\tabu@temp\else + \ifx 8\tabu@temp\else + \ifx 9\tabu@temp\else + \ifx .\tabu@temp\else + \ifx ,\tabu@temp\else + \ifx -\tabu@temp\else + \ifx +\tabu@temp\else + \ifx e\tabu@temp\else + \ifx E\tabu@temp\else + \ifx\tabu@cellleft\tabu@temp1\else + \ifx\ignorespaces\tabu@temp1\else + \ifx\@sptoken\tabu@temp2\else + 3\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \expandafter\tabu@get@decimal + \or \expandafter\tabu@skipdecimal + \or \expandafter\tabu@get@decimalspace + \else\expandafter\tabu@printdecimal + \fi +}% \tabu@getdecimal +\def\tabu@printdecimal{% + \edef\tabu@temp{\the\@temptokena}% + \ifx\tabu@temp\@empty\else + \ifx\tabu@temp\space\else + \expandafter\tabu@decimal\expandafter{\the\@temptokena}% + \fi\fi +}% \tabu@printdecimal +%% Verbatim inside X columns ---------------------------------------- +\def\tabu@verbatim{% + \let\verb \tabu@verb + \let\FV@DefineCheckEnd \tabu@FV@DefineCheckEnd +}% \tabu@verbatim +\let\tabu@ltx@verb \verb +\def\tabu@verb{\@ifstar {\tabu@ltx@verb*} \tabu@ltx@verb} +\def\tabu@fancyvrb {% + \def\tabu@FV@DefineCheckEnd ##1{% + \def\tabu@FV@DefineCheckEnd{% + ##1% + \let\FV@CheckEnd \tabu@FV@CheckEnd + \let\FV@@CheckEnd \tabu@FV@@CheckEnd + \let\FV@@@CheckEnd \tabu@FV@@@CheckEnd + \edef\FV@EndScanning{% + \def\noexpand\next{\noexpand\end{\FV@EnvironName}}% + \global\let\noexpand\FV@EnvironName\relax + \noexpand\next}% + \xdef\FV@EnvironName{\detokenize\expandafter{\FV@EnvironName}}}% + }\expandafter\tabu@FV@DefineCheckEnd\expandafter{\FV@DefineCheckEnd} +}% \tabu@fancyvrb +\def\tabu@FV@CheckEnd #1{\expandafter\FV@@CheckEnd \detokenize{#1\end{}}\@nil} +\edef\tabu@FV@@@CheckEnd {\detokenize{\end{}}} +\begingroup +\catcode`\[1 \catcode`\]2 +\@makeother\{ \@makeother\} + \edef\x[\endgroup + \def\noexpand\tabu@FV@@CheckEnd ##1\detokenize[\end{]##2\detokenize[}]##3% + ]\x \@nil{\def\@tempa{#2}\def\@tempb{#3}} +\def\tabu@FV@ListProcessLine #1{% + \hbox {%to \hsize{% + \kern\leftmargin + \hbox {%to \linewidth{% + \FV@LeftListNumber + \FV@LeftListFrame + \FancyVerbFormatLine{#1}\hss +%% DG/SR modification begin - Jan. 28, 1998 (for numbers=right add-on) +%% \FV@RightListFrame}% + \FV@RightListFrame + \FV@RightListNumber}% +%% DG/SR modification end + \hss}} +%% \savetabu -------------------------------------------------------- +\newcommand*\savetabu[1]{\noalign{% + \tabu@sanitizearg{#1}\tabu@temp + \ifx \tabu@temp\@empty \tabu@savewarn{}{The tabu will not be saved}\else + \@ifundefined{tabu@saved@\tabu@temp}{}{\tabu@savewarn{#1}{Overwriting}}% + \ifdefined\tabu@restored \expandafter\let + \csname tabu@saved@\tabu@temp \endcsname \tabu@restored + \else {\tabu@save}% + \fi + \fi}% +}% \savetabu +\def\tabu@save {% + \toks0\expandafter{\tabu@saved@}% + \iftabu@negcoef + \let\tabu@wddef \relax \let\tabu@ \tabu@savewd \edef\tabu@savewd{\tabu@Xcoefs}% + \toks0\expandafter{\the\toks\expandafter0\tabu@savewd}\fi + \toks1\expandafter{\tabu@savedpream}% + \toks2\expandafter{\tabu@savedpreamble}% + \let\@preamble \relax + \let\tabu@savedpream \relax \let\tabu@savedparams \relax + \edef\tabu@preamble{% + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \edef\tabu@usetabu{% + \def\@preamble {\noexpand\the\toks2}% + \tabu@target \the\tabu@target \relax + \tabucolX \the\tabucolX \relax + \tabu@nbcols \the\tabu@nbcols \relax + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \let\tabu@aligndefault \relax \let\@sharp \relax + \edef\@tempa{\noexpand\tabu@s@ved + {\tabu@usetabu} + {\tabu@preamble} + {\the\toks1}}\@tempa + \tabu@message@save +}% \tabu@save +\long\def\tabu@s@ved #1#2#3{% + \def\tabu@usetabu{#1}% + \expandafter\gdef\csname tabu@saved@\tabu@temp\endcsname ##1{% + \ifodd ##1% \usetabu + \tabu@measuringfalse \tabu@spreadfalse % Just in case... + \gdef\tabu@usetabu {% + \ifdim \tabu@target>\z@ \tabu@warn@usetabu \fi + \global\let\tabu@usetabu \@undefined + \def\@halignto {to\tabu@target}% + #1% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \else % \preamble + \gdef\tabu@preamble {% + \global\let\tabu@preamble \@undefined + #2% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \fi + #3}% +}% \tabu@s@ved +\def\tabu@aligndefault@text {\tabu@aligndefault}% +\def\tabu@warn@usetabu {\PackageWarning{tabu} + {Specifying a target with \string\usetabu\space is useless + \MessageBreak The target cannot be changed!}} +\def\tabu@savewd #1#2{\ifdim #2\p@<\z@ \tabu@wddef{#1}{\tabu@wd{#1}}\fi} +\def\tabu@savewarn#1#2{\PackageInfo{tabu} + {User-name `#1' already used for \string\savetabu + \MessageBreak #2}}% +\def\tabu@saveerr#1{\PackageError{tabu} + {User-name `#1' is unknown for \string\usetabu + \MessageBreak I cannot restore an unknown preamble!}\@ehd} +%% \rowfont --------------------------------------------------------- +\newskip \tabu@cellskip +\def\tabu@rowfont{\ifdim \baselineskip=\z@\noalign\fi + {\ifnum0=`}\fi \tabu@row@font} +\newcommand*\tabu@row@font[2][]{% + \ifnum7=\currentgrouptype + \global\let\tabu@@cellleft \tabu@cellleft + \global\let\tabu@@cellright \tabu@cellright + \global\let\tabu@@celllalign \tabu@celllalign + \global\let\tabu@@cellralign \tabu@cellralign + \global\let\tabu@@rowfontreset\tabu@rowfontreset + \fi + \global\let\tabu@rowfontreset \tabu@rowfont@reset + \expandafter\gdef\expandafter\tabu@cellleft\expandafter{\tabu@cellleft #2}% + \ifcsname tabu@cell@#1\endcsname % row alignment + \csname tabu@cell@#1\endcsname \fi + \ifnum0=`{\fi}% end of group / noalign group +}% \rowfont +\def\tabu@ifcolorleavevmode #1{\let\color \tabu@leavevmodecolor #1\let\color\tabu@color}% +\def\tabu@rowfont@reset{% + \global\let\tabu@rowfontreset \tabu@@rowfontreset + \global\let\tabu@cellleft \tabu@@cellleft + \global\let\tabu@cellright \tabu@@cellright + \global\let\tabu@cellfont \@empty + \global\let\tabu@celllalign \tabu@@celllalign + \global\let\tabu@cellralign \tabu@@cellralign +}% \tabu@@rowfontreset +\let\tabu@rowfontreset \@empty % overwritten \AtBeginDocument if colortbl +%% \tabu@prepnext@tok ----------------------------------------------- +\newif \iftabu@cellright +\def\tabu@prepnext@tok{% + \ifnum \count@<\z@ % + \@tempcnta \@M % + \tabu@nbcols\z@ + \let\tabu@fornoopORI \@fornoop + \tabu@cellrightfalse + \else + \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left + \advance \tabu@nbcols \@ne + \iftabu@cellright % before-previous token is right and is finished + \tabu@cellrightfalse % + \tabu@righttok + \fi + \tabu@lefttok + \or % (case 1) previous token is right + \tabu@cellrighttrue \let\@fornoop \tabu@lastnoop + \else % special column: do not change the token + \iftabu@cellright % before-previous token is right + \tabu@cellrightfalse + \tabu@righttok + \fi + \fi % \ifcase + \fi + \tabu@prepnext@tokORI +}% \tabu@prepnext@tok +\long\def\tabu@lastnoop#1\@@#2#3{\tabu@lastn@@p #2\@nextchar \in@\in@@} +\def\tabu@lastn@@p #1\@nextchar #2#3\in@@{% + \ifx \in@#2\else + \let\@fornoop \tabu@fornoopORI + \xdef\tabu@mkpreambuffer{\tabu@nbcols\the\tabu@nbcols \tabu@mkpreambuffer}% + \toks0\expandafter{\expandafter\tabu@everyrowtrue \the\toks0}% + \expandafter\prepnext@tok + \fi +}% \tabu@lastnoop +\def\tabu@righttok{% + \advance \count@ \m@ne + \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}% + \advance \count@ \@ne +}% \tabu@righttok +\def\tabu@lefttok{\toks\count@\expandafter{\expandafter\tabu@celllalign + \the\toks\count@ \tabu@cellleft}% after because of $ +}% \tabu@lefttok +%% Neutralisation of glues ------------------------------------------ +\let\tabu@cellleft \@empty +\let\tabu@cellright \@empty +\tabu@celllalign@def{\tabu@cellleft}% +\let\tabu@cellralign \@empty +\def\tabu@cell@align #1#2#3{% + \let\tabu@maybesiunitx \toks@ \tabu@celllalign + \global \expandafter \tabu@celllalign@def \expandafter {\the\toks@ #1}% + \toks@\expandafter{\tabu@cellralign #2}% + \xdef\tabu@cellralign{\the\toks@}% + \toks@\expandafter{\tabu@cellleft #3}% + \xdef\tabu@cellleft{\the\toks@}% +}% \tabu@cell@align +\def\tabu@cell@l{% force alignment to left + \tabu@cell@align + {\tabu@removehfil \raggedright \tabu@cellleft}% left + {\tabu@flush1\tabu@ignorehfil}% right + \raggedright +}% \tabu@cell@l +\def\tabu@cell@c{% force alignment to center + \tabu@cell@align + {\tabu@removehfil \centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \centering +}% \tabu@cell@c +\def\tabu@cell@r{% force alignment to right + \tabu@cell@align + {\tabu@removehfil \raggedleft \tabu@flush1\tabu@cellleft} + \tabu@ignorehfil + \raggedleft +}% \tabu@cell@r +\def\tabu@cell@j{% force justification (for p, m, b columns) + \tabu@cell@align + {\tabu@justify\tabu@cellleft} + {} + \tabu@justify +}% \tabu@cell@j +\def\tabu@justify{% + \leftskip\z@skip \@rightskip\leftskip \rightskip\@rightskip + \parfillskip\@flushglue +}% \tabu@justify +%% ragged2e settings +\def\tabu@cell@L{% force alignment to left (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedRight \tabu@cellleft} + {\tabu@flush 1\tabu@ignorehfil} + \RaggedRight +}% \tabu@cell@L +\def\tabu@cell@C{% force alignment to center (ragged2e) + \tabu@cell@align + {\tabu@removehfil \Centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \Centering +}% \tabu@cell@C +\def\tabu@cell@R{% force alignment to right (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedLeft \tabu@flush 1\tabu@cellleft} + \tabu@ignorehfil + \RaggedLeft +}% \tabu@cell@R +\def\tabu@cell@J{% force justification (ragged2e) + \tabu@cell@align + {\justifying \tabu@cellleft} + {} + \justifying +}% \tabu@cell@J +\def\tabu@flush#1{% + \iftabu@colortbl % colortbl uses \hfill rather than \hfil + \hskip \ifnum13<\currentgrouptype \stretch{#1}% + \else \ifdim#1pt<\p@ \tabu@cellskip + \else \stretch{#1} + \fi\fi \relax + \else % array.sty + \ifnum 13<\currentgrouptype + \hfil \hskip1sp \relax \fi + \fi +}% \tabu@flush +\let\tabu@hfil \hfil +\let\tabu@hfill \hfill +\let\tabu@hskip \hskip +\def\tabu@removehfil{% + \iftabu@colortbl + \unkern \tabu@cellskip =\lastskip + \ifnum\gluestretchorder\tabu@cellskip =\tw@ \hskip-\tabu@cellskip + \else \tabu@cellskip \z@skip + \fi + \else + \ifdim\lastskip=1sp\unskip\fi + \ifnum\gluestretchorder\lastskip =\@ne + \hfilneg % \hfilneg for array.sty but not for colortbl... + \fi + \fi +}% \tabu@removehfil +\def\tabu@ignorehfil{\aftergroup \tabu@nohfil} +\def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil + \def\hfil{\let\hfil \tabu@hfil}% local to (alignment template) group +}% \tabu@nohfil +\def\tabu@colortblalignments {% if colortbl + \def\tabu@nohfil{% + \def\hfil {\let\hfil \tabu@hfil}% local to (alignment template) group + \def\hfill {\let\hfill \tabu@hfill}% (colortbl uses \hfill) pfff... + \def\hskip ####1\relax{\let\hskip \tabu@hskip}}% local +}% \tabu@colortblalignments +%% Taking care of footnotes and hyperfootnotes ---------------------- +\long\def\tabu@footnotetext #1{% + \edef\@tempa{\the\tabu@footnotes + \noexpand\footnotetext [\the\csname c@\@mpfn\endcsname]}% + \global\tabu@footnotes\expandafter{\@tempa {#1}}}% +\long\def\tabu@xfootnotetext [#1]#2{% + \global\tabu@footnotes\expandafter{\the\tabu@footnotes + \footnotetext [{#1}]{#2}}} +\let\tabu@xfootnote \@xfootnote +\long\def\tabu@Hy@ftntext{\tabu@Hy@ftntxt {\the \c@footnote }} +\long\def\tabu@Hy@xfootnote [#1]{% + \begingroup + \value\@mpfn #1\relax + \protected@xdef \@thefnmark {\thempfn}% + \endgroup + \@footnotemark \tabu@Hy@ftntxt {#1}% +}% \tabu@Hy@xfootnote +\long\def\tabu@Hy@ftntxt #1#2{% + \edef\@tempa{% + \the\tabu@footnotes + \begingroup + \value\@mpfn #1\relax + \noexpand\protected@xdef\noexpand\@thefnmark {\noexpand\thempfn}% + \expandafter \noexpand \expandafter + \tabu@Hy@footnotetext \expandafter{\Hy@footnote@currentHref}% + }% + \global\tabu@footnotes\expandafter{\@tempa {#2}% + \endgroup}% +}% \tabu@Hy@ftntxt +\long\def\tabu@Hy@footnotetext #1#2{% + \H@@footnotetext{% + \ifHy@nesting + \hyper@@anchor {#1}{#2}% + \else + \Hy@raisedlink{% + \hyper@@anchor {#1}{\relax}% + }% + \def\@currentHref {#1}% + \let\@currentlabelname \@empty + #2% + \fi + }% +}% \tabu@Hy@footnotetext +%% No need for \arraybackslash ! ------------------------------------ +\def\tabu@latextwoe {% +\def\tabu@temp##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@centering \centering \arraybackslash +\tabu@temp \tabu@raggedleft \raggedleft \arraybackslash +\tabu@temp \tabu@raggedright \raggedright \arraybackslash +}% \tabu@latextwoe +\def\tabu@raggedtwoe {% +\def\tabu@temp ##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@Centering \Centering \arraybackslash +\tabu@temp \tabu@RaggedLeft \RaggedLeft \arraybackslash +\tabu@temp \tabu@RaggedRight \RaggedRight \arraybackslash +\tabu@temp \tabu@justifying \justifying \arraybackslash +}% \tabu@raggedtwoe +\def\tabu@normalcrbackslash{\let\\\@normalcr} +\def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{% + \expandafter\tabu@normalcrbackslash \@trivlist}} +%% Utilities: \fbox \fcolorbox and \tabudecimal ------------------- +\def\tabu@fbox {\leavevmode\afterassignment\tabu@beginfbox \setbox\@tempboxa\hbox} +\def\tabu@beginfbox {\bgroup \kern\fboxsep + \bgroup\aftergroup\tabu@endfbox} +\def\tabu@endfbox {\kern\fboxsep\egroup\egroup + \@frameb@x\relax} +\def\tabu@color@b@x #1#2{\leavevmode \bgroup + \def\tabu@docolor@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}% + \afterassignment\tabu@begincolor@b@x \setbox\z@ \hbox +}% \tabu@color@b@x +\def\tabu@begincolor@b@x {\kern\fboxsep \bgroup + \aftergroup\tabu@endcolor@b@x \set@color} +\def\tabu@endcolor@b@x {\kern\fboxsep \egroup + \dimen@\ht\z@ \advance\dimen@ \fboxsep \ht\z@ \dimen@ + \dimen@\dp\z@ \advance\dimen@ \fboxsep \dp\z@ \dimen@ + \tabu@docolor@b@x \egroup +}% \tabu@endcolor@b@x +%% Corrections (arydshln, delarray, colortbl) ----------------------- +\def\tabu@fix@arrayright {%% \@arrayright is missing from \endarray + \iftabu@colortbl + \ifdefined\adl@array % + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup % + \@arrayright % + \gdef\@preamble{}}% + \else % + \def\tabu@endarray{% + \crcr \egroup \egroup % + \@arrayright % + \gdef\@preamble{}\CT@end}% + \fi + \else + \ifdefined\adl@array % + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \egroup % + \@arrayright % + \gdef\@preamble{}}% + \else % + \PackageWarning{tabu} + {\string\@arrayright\space is missing from the + \MessageBreak definition of \string\endarray. + \MessageBreak Compatibility with delarray.sty is broken.}% + \fi\fi +}% \tabu@fix@arrayright +\def\tabu@adl@xarraydashrule #1#2#3{% + \ifnum\@lastchclass=\adl@class@start\else + \ifnum\@lastchclass=\@ne\else + \ifnum\@lastchclass=5 \else % @-arg (class 5) and !-arg (class 1) + \adl@leftrulefalse \fi\fi % must be treated the same + \fi + \ifadl@zwvrule\else \ifadl@inactive\else + \@addtopreamble{\vrule\@width\arrayrulewidth + \@height\z@ \@depth\z@}\fi \fi + \ifadl@leftrule + \@addtopreamble{\adl@vlineL{\CT@arc@}{\adl@dashgapcolor}% + {\number#1}#3}% + \else \@addtopreamble{\adl@vlineR{\CT@arc@}{\adl@dashgapcolor}% + {\number#2}#3} + \fi +}% \tabu@adl@xarraydashrule +\def\tabu@adl@act@endpbox {% + \unskip \ifhmode \nobreak \fi \@finalstrut \@arstrutbox + \egroup \egroup + \adl@colhtdp \box\adl@box \hfil +}% \tabu@adl@act@endpbox +\def\tabu@adl@fix {% + \let\adl@xarraydashrule \tabu@adl@xarraydashrule % arydshln + \let\adl@act@endpbox \tabu@adl@act@endpbox % arydshln + \let\adl@act@@endpbox \tabu@adl@act@endpbox % arydshln + \let\@preamerror \@preamerr % arydshln +}% \tabu@adl@fix +%% Correction for longtable' \@startbox definition ------------------ +%% => \everypar is ``missing'' : TeX should be in vertical mode +\def\tabu@LT@startpbox #1{% + \bgroup + \let\@footnotetext\LT@p@ftntext + \setlength\hsize{#1}% + \@arrayparboxrestore + \everypar{% + \vrule \@height \ht\@arstrutbox \@width \z@ + \everypar{}}% +}% \tabu@LT@startpbox +%% \tracingtabu and the package options ------------------ +\DeclareOption{delarray}{\AtEndOfPackage{\RequirePackage{delarray}}} +\DeclareOption{linegoal}{% + \AtEndOfPackage{% + \RequirePackage{linegoal}[2010/12/07]% + \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX +}} +\DeclareOption{scantokens}{\tabuscantokenstrue} +\DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu=\tw@}} +\def\tracingtabu {\begingroup\@ifnextchar=% + {\afterassignment\tabu@tracing\count@} + {\afterassignment\tabu@tracing\count@1\relax}} +\def\tabu@tracing{\expandafter\endgroup + \expandafter\tabu@tr@cing \the\count@ \relax +}% \tabu@tracing +\def\tabu@tr@cing #1\relax {% + \ifnum#1>\thr@@ \let\tabu@tracinglines\message + \else \let\tabu@tracinglines\@gobble + \fi + \ifnum#1>\tw@ \let\tabu@DBG \tabu@@DBG + \def\tabu@mkarstrut {\tabu@DBG@arstrut}% + \tabustrutrule 1.5\p@ + \else \let\tabu@DBG \@gobble + \def\tabu@mkarstrut {\tabu@arstrut}% + \tabustrutrule \z@ + \fi + \ifnum#1>\@ne \let\tabu@debug \message + \else \let\tabu@debug \@gobble + \fi + \ifnum#1>\z@ + \let\tabu@message \message + \let\tabu@tracing@save \tabu@message@save + \let\tabu@starttimer \tabu@pdftimer + \else + \let\tabu@message \@gobble + \let\tabu@tracing@save \@gobble + \let\tabu@starttimer \relax + \fi +}% \tabu@tr@cing +%% Setup \AtBeginDocument +\AtBeginDocument{\tabu@AtBeginDocument} +\def\tabu@AtBeginDocument{\let\tabu@AtBeginDocument \@undefined + \ifdefined\arrayrulecolor \tabu@colortbltrue % + \tabu@colortblalignments % different glues are used + \else \tabu@colortblfalse \fi + \ifdefined\CT@arc@ \else \let\CT@arc@ \relax \fi + \ifdefined\CT@drsc@\else \let\CT@drsc@ \relax \fi + \let\tabu@arc@L \CT@arc@ \let\tabu@drsc@L \CT@drsc@ + \ifodd 1\ifcsname siunitx_table_collect_begin:Nn\endcsname % + \expandafter\ifx + \csname siunitx_table_collect_begin:Nn\endcsname\relax 0\fi\fi\relax + \tabu@siunitxtrue + \else \let\tabu@maybesiunitx \@firstofone % + \let\tabu@siunitx \tabu@nosiunitx + \tabu@siunitxfalse + \fi + \ifdefined\adl@array % + \else \let\tabu@adl@fix \relax + \let\tabu@adl@endtrial \@empty \fi + \ifdefined\longtable % + \else \let\longtabu \tabu@nolongtabu \fi + \ifdefined\cellspacetoplimit \tabu@warn@cellspace\fi + \csname\ifcsname ifHy@hyperfootnotes\endcsname % + ifHy@hyperfootnotes\else iffalse\fi\endcsname + \let\tabu@footnotetext \tabu@Hy@ftntext + \let\tabu@xfootnote \tabu@Hy@xfootnote \fi + \ifdefined\FV@DefineCheckEnd% + \tabu@fancyvrb \fi + \ifdefined\color % + \let\tabu@color \color + \def\tabu@leavevmodecolor ##1{% + \def\tabu@leavevmodecolor {\leavevmode ##1}% + }\expandafter\tabu@leavevmodecolor\expandafter{\color}% + \else + \let\tabu@color \tabu@nocolor + \let\tabu@leavevmodecolor \@firstofone \fi + \tabu@latextwoe + \ifdefined\@raggedtwoe@everyselectfont % + \tabu@raggedtwoe + \else + \let\tabu@cell@L \tabu@cell@l + \let\tabu@cell@R \tabu@cell@r + \let\tabu@cell@C \tabu@cell@c + \let\tabu@cell@J \tabu@cell@j \fi + \expandafter\in@ \expandafter\@arrayright \expandafter{\endarray}% + \ifin@ \let\tabu@endarray \endarray + \else \tabu@fix@arrayright \fi% + \everyrow{}% +}% \tabu@AtBeginDocument +\def\tabu@warn@cellspace{% + \PackageWarning{tabu}{% + Package cellspace has some limitations + \MessageBreak And redefines some macros of array.sty. + \MessageBreak Please use \string\tabulinesep\space to control + \MessageBreak vertical spacing of lines inside tabu environment}% +}% \tabu@warn@cellspace +%% tabu Package initialisation +\tabuscantokensfalse +\let\tabu@arc@G \relax +\let\tabu@drsc@G \relax +\let\tabu@evr@G \@empty +\let\tabu@rc@G \@empty +\def\tabu@ls@G {\tabu@linestyle@}% +\let\tabu@@rowfontreset \@empty % +\let\tabu@@celllalign \@empty +\let\tabu@@cellralign \@empty +\let\tabu@@cellleft \@empty +\let\tabu@@cellright \@empty +\def\tabu@naturalXmin {\z@} +\def\tabu@naturalXmax {\z@} +\let\tabu@rowfontreset \@empty +\def\tabulineon {4pt}\let\tabulineoff \tabulineon +\tabu@everyrowtrue +\ifdefined\pdfelapsedtime % + \def\tabu@pdftimer {\xdef\tabu@starttime{\the\pdfelapsedtime}}% +\else \let\tabu@pdftimer \relax \let\tabu@message@etime \relax +\fi +\tracingtabu=\z@ +\newtabulinestyle {=\maxdimen}% creates the 'factory' settings \tabu@linestyle@ +\tabulinestyle{} +\taburowcolors{} +\let\tabudefaulttarget \linewidth +\ProcessOptions* % \ProcessOptions* is quicker ! +\endinput +%% +%% End of file `tabu.sty'. diff --git a/docs/doxygen/xml/Doxyfile.xml b/docs/doxygen/xml/Doxyfile.xml new file mode 100644 index 0000000..b408dae --- /dev/null +++ b/docs/doxygen/xml/Doxyfile.xml @@ -0,0 +1,386 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/doxygen/xml/_e_f___driver___common_8h.xml b/docs/doxygen/xml/_e_f___driver___common_8h.xml new file mode 100644 index 0000000..2e230ec --- /dev/null +++ b/docs/doxygen/xml/_e_f___driver___common_8h.xml @@ -0,0 +1,232 @@ + + + + EF_Driver_Common.h + stdint.h + stdbool.h + stddef.h + EF_SPI.h + EF_SPI_regs.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + EF_DRIVER_OK + ((uint32_t)0) + +Operation succeeded. + + + + + + + + + EF_DRIVER_ERROR + ((uint32_t)1) + +Unspecified error. + + + + + + + + + EF_DRIVER_ERROR_BUSY + ((uint32_t)2) + +Driver is busy. + + + + + + + + + EF_DRIVER_ERROR_TIMEOUT + ((uint32_t)3) + +Timeout occurred. + + + + + + + + + EF_DRIVER_ERROR_UNSUPPORTED + ((uint32_t)4) + +Operation not supported. + + + + + + + + + EF_DRIVER_ERROR_PARAMETER + ((uint32_t)5) + +Parameter error. + + + + + + + + + EF_DRIVER_ERROR_SPECIFIC + ((uint32_t)6) + +Start of driver specific errors. + + + + + + + + + + + uint32_t + typedef uint32_t EF_DRIVER_STATUS + + EF_DRIVER_STATUS + +A type that is used to return the status of the driver functions. + + + + + + + + + +C header file for common driver definitions and types. + + + + +/* +Copyright2025EfablessCorp. + + +LicensedundertheApacheLicense,Version2.0(the"License"); +youmaynotusethisfileexceptincompliancewiththeLicense. +YoumayobtainacopyoftheLicenseat + +www.apache.org/licenses/LICENSE-2.0 + +Unlessrequiredbyapplicablelaworagreedtoinwriting,software +distributedundertheLicenseisdistributedonan"ASIS"BASIS, +WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied. +SeetheLicenseforthespecificlanguagegoverningpermissionsand +limitationsundertheLicense. + +*/ + +#ifndefEF_DRIVER_COMMON_H +#defineEF_DRIVER_COMMON_H + +/****************************************************************************** +*Includes +******************************************************************************/ +#include<stdint.h> +#include<stdbool.h> +#include<stddef.h> + + +/****************************************************************************** +*MacrosandConstants +******************************************************************************/ +/*Generalreturncodes*/ +#defineEF_DRIVER_OK((uint32_t)0) +#defineEF_DRIVER_ERROR((uint32_t)1) +#defineEF_DRIVER_ERROR_BUSY((uint32_t)2) +#defineEF_DRIVER_ERROR_TIMEOUT((uint32_t)3) +#defineEF_DRIVER_ERROR_UNSUPPORTED((uint32_t)4) +#defineEF_DRIVER_ERROR_PARAMETER((uint32_t)5) +#defineEF_DRIVER_ERROR_SPECIFIC((uint32_t)6) + + +/****************************************************************************** +*TypedefsandEnums +******************************************************************************/ + +typedefuint32_tEF_DRIVER_STATUS; + + +/****************************************************************************** +*ExternalVariables +******************************************************************************/ + + +/****************************************************************************** +*FunctionPrototypes +******************************************************************************/ + + +#endif//EF_DRIVER_COMMON_H + +/****************************************************************************** +*EndofFile +******************************************************************************/ + + + + diff --git a/docs/doxygen/xml/_e_f___s_p_i_8c.xml b/docs/doxygen/xml/_e_f___s_p_i_8c.xml new file mode 100644 index 0000000..cf08413 --- /dev/null +++ b/docs/doxygen/xml/_e_f___s_p_i_8c.xml @@ -0,0 +1,1197 @@ + + + + EF_SPI.c + EF_SPI.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + EF_SPI_C + + + + + + + + + + EF_SPI_TXDATA_MAX_VALUE + 0x000000FF + + + + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_setGclkEnable + (EF_SPI_TYPE_PTR spi, uint32_t value) + EF_SPI_setGclkEnable + + EF_SPI_TYPE_PTR + spi + + + uint32_t + value + + +sets the GCLK enable bit in the SPI register to a certain value + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +value + + +The value of the GCLK enable bit + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_writeData + (EF_SPI_TYPE_PTR spi, uint32_t data) + EF_SPI_writeData + + EF_SPI_TYPE_PTR + spi + + + uint32_t + data + + +writes a byte of data to the TXDATA register + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +data + + +The data to be written to the TXDATA register + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_readData + (EF_SPI_TYPE_PTR spi, uint32_t *data) + EF_SPI_readData + + EF_SPI_TYPE_PTR + spi + + + uint32_t * + data + + +reads a byte of data from the RXDATA register + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +data + + +The data read from the RXDATA register + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_writepolarity + (EF_SPI_TYPE_PTR spi, bool polarity) + EF_SPI_writepolarity + + EF_SPI_TYPE_PTR + spi + + + bool + polarity + + +sets the clock polarity of the SPI in the CFG register to a certain value + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +polarity + + +The clock polarity value + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_writePhase + (EF_SPI_TYPE_PTR spi, bool phase) + EF_SPI_writePhase + + EF_SPI_TYPE_PTR + spi + + + bool + phase + + +sets the clock phase of the SPI in the CFG register to a certain value + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +phase + + +The clock phase value + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_readTxFifoEmpty + (EF_SPI_TYPE_PTR spi, uint32_t *TXfifo_state) + EF_SPI_readTxFifoEmpty + + EF_SPI_TYPE_PTR + spi + + + uint32_t * + TXfifo_state + + +reads the TX FIFO empty flag from the STATUS register + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +TXfifo_state + + +The TX FIFO empty flag value + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_readRxFifoEmpty + (EF_SPI_TYPE_PTR spi, uint32_t *RXfifo_state) + EF_SPI_readRxFifoEmpty + + EF_SPI_TYPE_PTR + spi + + + uint32_t * + RXfifo_state + + +reads the RX FIFO empty flag from the STATUS register + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +RXfifo_state + + +The RX FIFO empty flag value + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_waitTxFifoEmpty + (EF_SPI_TYPE_PTR spi) + EF_SPI_waitTxFifoEmpty + + EF_SPI_TYPE_PTR + spi + + +waits for the TX FIFO to be empty by polling the TX FIFO empty flag in the STATUS register + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_waitRxFifoNotEmpty + (EF_SPI_TYPE_PTR spi) + EF_SPI_waitRxFifoNotEmpty + + EF_SPI_TYPE_PTR + spi + + +waits for the RX FIFO to be not empty by polling the RX FIFO empty flag in the STATUS register + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_FifoRxFlush + (EF_SPI_TYPE_PTR spi) + EF_SPI_FifoRxFlush + + EF_SPI_TYPE_PTR + spi + + +flushes the RX FIFO by writing to the RX FIFO FLUSH register + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_enable + (EF_SPI_TYPE_PTR spi) + EF_SPI_enable + + EF_SPI_TYPE_PTR + spi + + +enables the SPI by setting the enable bit in the CTRL register to 1, enables spi master pulse generation + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_disable + (EF_SPI_TYPE_PTR spi) + EF_SPI_disable + + EF_SPI_TYPE_PTR + spi + + +disables the SPI by setting the enable bit in the CTRL register to 0, disables spi master pulse generation + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_enableRx + (EF_SPI_TYPE_PTR spi) + EF_SPI_enableRx + + EF_SPI_TYPE_PTR + spi + + +enables the RX by setting the RX enable bit in the CTRL register to 1, enables storing bytes recieved from slave in RX FIFO + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_disableRx + (EF_SPI_TYPE_PTR spi) + EF_SPI_disableRx + + EF_SPI_TYPE_PTR + spi + + +disables the RX by setting the RX enable bit in the CTRL register to 0, disables storing bytes recieved from slave in RX FIFO + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_assertCs + (EF_SPI_TYPE_PTR spi) + EF_SPI_assertCs + + EF_SPI_TYPE_PTR + spi + + +asserts the CS line by setting the SS bit in the CTRL register to 1, asserts the CS line to start a transaction with the slave + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_deassertCs + (EF_SPI_TYPE_PTR spi) + EF_SPI_deassertCs + + EF_SPI_TYPE_PTR + spi + + +deasserts the CS line by setting the SS bit in the CTRL register to 0, deasserts the CS line to end a transaction with the slave + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_setIM + (EF_SPI_TYPE_PTR spi, uint32_t mask) + EF_SPI_setIM + + EF_SPI_TYPE_PTR + spi + + + uint32_t + mask + + + + +sets the value of the Interrupts Masking Register; which enable and disables interrupts The mask value is a 6-bit value, where each bit corresponds to a specific interrupt +bit 0 TXE : Transmit FIFO is Empty. +bit 1 TXF : Transmit FIFO is Full. +bit 2 RXE : Receive FIFO is Empty. +bit 3 RXF : Receive FIFO is Full. +bit 4 TXB : Transmit FIFO level is Below Threshold. +bit 5 RXA : Receive FIFO level is Above Threshold. + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +mask + + +The required mask value + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_getIM + (EF_SPI_TYPE_PTR spi, uint32_t *mask) + EF_SPI_getIM + + EF_SPI_TYPE_PTR + spi + + + uint32_t * + mask + + + + +gets the value of the Interrupts Masking Register; which enable and disables interrupts The mask value is a 6-bit value, where each bit corresponds to a specific interrupt +bit 0 TXE : Transmit FIFO is Empty. +bit 1 TXF : Transmit FIFO is Full. +bit 2 RXE : Receive FIFO is Empty. +bit 3 RXF : Receive FIFO is Full. +bit 4 TXB : Transmit FIFO level is Below Threshold. +bit 5 RXA : Receive FIFO level is Above Threshold. + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +mask + + +The required mask value + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_getRIS + (EF_SPI_TYPE_PTR spi, uint32_t *mask) + EF_SPI_getRIS + + EF_SPI_TYPE_PTR + spi + + + uint32_t * + mask + + + + +gets the value of the Raw Interrupt Status Register; which shows the status of the interrupts The mask value is a 6-bit value, where each bit corresponds to a specific interrupt +bit 0 TXE : Transmit FIFO is Empty. +bit 1 TXF : Transmit FIFO is Full. +bit 2 RXE : Receive FIFO is Empty. +bit 3 RXF : Receive FIFO is Full. +bit 4 TXB : Transmit FIFO level is Below Threshold. +bit 5 RXA : Receive FIFO level is Above Threshold. + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +mask + + +The required mask value + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_getMIS + (EF_SPI_TYPE_PTR spi, uint32_t *mask) + EF_SPI_getMIS + + EF_SPI_TYPE_PTR + spi + + + uint32_t * + mask + + + + +gets the value of the Masked Interrupt Status Register; which shows the status of the interrupts after masking (ANDing) RIS by IM. The mask value is a 6-bit value, where each bit corresponds to a specific interrupt +bit 0 TXE : Transmit FIFO is Empty. +bit 1 TXF : Transmit FIFO is Full. +bit 2 RXE : Receive FIFO is Empty. +bit 3 RXF : Receive FIFO is Full. +bit 4 TXB : Transmit FIFO level is Below Threshold. +bit 5 RXA : Receive FIFO level is Above Threshold. + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +mask + + +The required mask value + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + +C file for SPI APIs which contains the function Implementations. + + + + +/* +Copyright2025EfablessCorp. + + +LicensedundertheApacheLicense,Version2.0(the"License"); +youmaynotusethisfileexceptincompliancewiththeLicense. +YoumayobtainacopyoftheLicenseat + +www.apache.org/licenses/LICENSE-2.0 + +Unlessrequiredbyapplicablelaworagreedtoinwriting,software +distributedundertheLicenseisdistributedonan"ASIS"BASIS, +WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied. +SeetheLicenseforthespecificlanguagegoverningpermissionsand +limitationsundertheLicense. + +*/ + +#ifndefEF_SPI_C +#defineEF_SPI_C + + +/****************************************************************************** +*Includes +******************************************************************************/ +#include"EF_SPI.h" + + + +/****************************************************************************** +*File-SpecificMacrosandConstants +******************************************************************************/ + + + +/****************************************************************************** +*StaticVariables +******************************************************************************/ + + + +/****************************************************************************** +*StaticFunctionPrototypes +******************************************************************************/ + + + +/****************************************************************************** +*FunctionDefinitions +******************************************************************************/ +#defineEF_SPI_TXDATA_MAX_VALUE0x000000FF + +EF_DRIVER_STATUSEF_SPI_setGclkEnable(EF_SPI_TYPE_PTRspi,uint32_tvalue){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; + +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}elseif(value>(uint32_t)0x1){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifvalueisoutofrange +}else{ +spi->GCLK=value;//SettheGCLKenablebittothegivenvalue +} + +returnstatus; +} + +EF_DRIVER_STATUSEF_SPI_writeData(EF_SPI_TYPE_PTRspi,uint32_tdata){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; + +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}elseif(data>EF_SPI_TXDATA_MAX_VALUE){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifdataisoutofrange +}else{ +spi->TXDATA=data;//WritethedatatotheTXDATAregister +} +returnstatus; +} + +EF_DRIVER_STATUSEF_SPI_readData(EF_SPI_TYPE_PTRspi,uint32_t*data){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; + +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}elseif(data==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifdataisNULL +//i.e.thereisnomemorylocationtostorethevalue +}else{ +*data=spi->RXDATA; +} +returnstatus; +} + +EF_DRIVER_STATUSEF_SPI_writepolarity(EF_SPI_TYPE_PTRspi,boolpolarity){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}else{ +uint32_tconfig=spi->CFG; +if(polarity) +{config|=EF_SPI_CFG_REG_CPOL_MASK;} +else +{config&=~EF_SPI_CFG_REG_CPOL_MASK;} +spi->CFG=config; +} +returnstatus; +} + +EF_DRIVER_STATUSEF_SPI_writePhase(EF_SPI_TYPE_PTRspi,boolphase){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}else{ + +uint32_tconfig=spi->CFG; +if(phase) +{config|=EF_SPI_CFG_REG_CPHA_MASK;} +else +{config&=~EF_SPI_CFG_REG_CPHA_MASK;} +spi->CFG=config; +} +returnstatus; +} + + +EF_DRIVER_STATUSEF_SPI_readTxFifoEmpty(EF_SPI_TYPE_PTRspi,uint32_t*TXfifo_state){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; + +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}elseif(TXfifo_state==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifTXfifo_stateisNULL +//i.e.thereisnomemorylocationtostorethevalue +}else{ +*TXfifo_state=spi->STATUS&EF_SPI_STATUS_REG_TX_E_MASK; +} + +returnstatus; +} + +EF_DRIVER_STATUSEF_SPI_readRxFifoEmpty(EF_SPI_TYPE_PTRspi,uint32_t*RXfifo_state){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; + +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}elseif(RXfifo_state==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifRXfifo_stateisNULL +//i.e.thereisnomemorylocationtostorethevalue +}else{ +*RXfifo_state=(spi->STATUS&EF_SPI_STATUS_REG_RX_E_MASK)>>EF_SPI_STATUS_REG_RX_E_BIT; +} +returnstatus; +} + + +EF_DRIVER_STATUSEF_SPI_waitTxFifoEmpty(EF_SPI_TYPE_PTRspi){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; + +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}else{ +uint32_tTXfifo_state; +do{ +status=EF_SPI_readTxFifoEmpty(spi,&TXfifo_state); +}while((status==EF_DRIVER_OK)&&(TXfifo_state==(uint32_t)0)); +} +returnstatus; +} + +EF_DRIVER_STATUSEF_SPI_waitRxFifoNotEmpty(EF_SPI_TYPE_PTRspi){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; + +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}else{ +uint32_tRXfifo_state; +do{ +status=EF_SPI_readRxFifoEmpty(spi,&RXfifo_state); +}while((status==EF_DRIVER_OK)&&(RXfifo_state==(uint32_t)1)); +} +returnstatus; +} + +EF_DRIVER_STATUSEF_SPI_FifoRxFlush(EF_SPI_TYPE_PTRspi){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; + +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}else{ +spi->RX_FIFO_FLUSH=1; +} +returnstatus; +} + +EF_DRIVER_STATUSEF_SPI_enable(EF_SPI_TYPE_PTRspi){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; + +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}else{ +spi->CTRL|=EF_SPI_CTRL_REG_ENABLE_MASK; +} +returnstatus; +} + +EF_DRIVER_STATUSEF_SPI_disable(EF_SPI_TYPE_PTRspi){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; + +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}else{ +spi->CTRL&=~EF_SPI_CTRL_REG_ENABLE_MASK; +} +returnstatus; +} + +EF_DRIVER_STATUSEF_SPI_enableRx(EF_SPI_TYPE_PTRspi){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; + +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}else{ +spi->CTRL|=EF_SPI_CTRL_REG_RX_EN_MASK; +} +returnstatus; +} + +EF_DRIVER_STATUSEF_SPI_disableRx(EF_SPI_TYPE_PTRspi){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; + +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}else{ +spi->CTRL&=~EF_SPI_CTRL_REG_RX_EN_MASK; +} +returnstatus; +} + +EF_DRIVER_STATUSEF_SPI_assertCs(EF_SPI_TYPE_PTRspi){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; + +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}else{ +spi->CTRL|=EF_SPI_CTRL_REG_SS_MASK; +} +returnstatus; +} + +EF_DRIVER_STATUSEF_SPI_deassertCs(EF_SPI_TYPE_PTRspi){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; + +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}else{ +spi->CTRL&=~EF_SPI_CTRL_REG_SS_MASK; +} +returnstatus; +} + + +EF_DRIVER_STATUSEF_SPI_setIM(EF_SPI_TYPE_PTRspi,uint32_tmask){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; + +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}else{ + +spi->IM=mask; +} +returnstatus; +} + +EF_DRIVER_STATUSEF_SPI_getIM(EF_SPI_TYPE_PTRspi,uint32_t*mask){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; + +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}elseif(mask==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifmaskisNULL +//i.e.thereisnomemorylocationtostorethevalue +}else{ +*mask=spi->IM; +} +returnstatus; +} + + +EF_DRIVER_STATUSEF_SPI_getRIS(EF_SPI_TYPE_PTRspi,uint32_t*mask){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; + +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}elseif(mask==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifmaskisNULL +//i.e.thereisnomemorylocationtostorethevalue +}else{ +*mask=spi->STATUS; +} +returnstatus; +} + +EF_DRIVER_STATUSEF_SPI_getMIS(EF_SPI_TYPE_PTRspi,uint32_t*mask){ + +EF_DRIVER_STATUSstatus=EF_DRIVER_OK; + +if(spi==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifspiisNULL +}elseif(mask==NULL){ +status=EF_DRIVER_ERROR_PARAMETER;//ReturnEF_DRIVER_ERROR_PARAMETERifmaskisNULL +//i.e.thereisnomemorylocationtostorethevalue +}else{ +*mask=spi->STATUS&spi->IM; +} +returnstatus; +} + + + + + +/****************************************************************************** +*StaticFunctionDefinitions +******************************************************************************/ + + + + +#endif//EF_SPI_C + +/****************************************************************************** +*EndofFile +******************************************************************************/ + + + + diff --git a/docs/doxygen/xml/_e_f___s_p_i_8h.xml b/docs/doxygen/xml/_e_f___s_p_i_8h.xml new file mode 100644 index 0000000..c65d3a1 --- /dev/null +++ b/docs/doxygen/xml/_e_f___s_p_i_8h.xml @@ -0,0 +1,1005 @@ + + + + EF_SPI.h + EF_SPI_regs.h + EF_Driver_Common.h + EF_SPI.c + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_setGclkEnable + (EF_SPI_TYPE_PTR spi, uint32_t value) + EF_SPI_setGclkEnable + + EF_SPI_TYPE_PTR + spi + + + uint32_t + value + + +sets the GCLK enable bit in the SPI register to a certain value + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +value + + +The value of the GCLK enable bit + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_writeData + (EF_SPI_TYPE_PTR spi, uint32_t data) + EF_SPI_writeData + + EF_SPI_TYPE_PTR + spi + + + uint32_t + data + + +writes a byte of data to the TXDATA register + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +data + + +The data to be written to the TXDATA register + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_readData + (EF_SPI_TYPE_PTR spi, uint32_t *data) + EF_SPI_readData + + EF_SPI_TYPE_PTR + spi + + + uint32_t * + data + + +reads a byte of data from the RXDATA register + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +data + + +The data read from the RXDATA register + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_writepolarity + (EF_SPI_TYPE_PTR spi, bool polarity) + EF_SPI_writepolarity + + EF_SPI_TYPE_PTR + spi + + + bool + polarity + + +sets the clock polarity of the SPI in the CFG register to a certain value + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +polarity + + +The clock polarity value + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_writePhase + (EF_SPI_TYPE_PTR spi, bool phase) + EF_SPI_writePhase + + EF_SPI_TYPE_PTR + spi + + + bool + phase + + +sets the clock phase of the SPI in the CFG register to a certain value + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +phase + + +The clock phase value + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_readTxFifoEmpty + (EF_SPI_TYPE_PTR spi, uint32_t *TXfifo_state) + EF_SPI_readTxFifoEmpty + + EF_SPI_TYPE_PTR + spi + + + uint32_t * + TXfifo_state + + +reads the TX FIFO empty flag from the STATUS register + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +TXfifo_state + + +The TX FIFO empty flag value + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_readRxFifoEmpty + (EF_SPI_TYPE_PTR spi, uint32_t *RXfifo_state) + EF_SPI_readRxFifoEmpty + + EF_SPI_TYPE_PTR + spi + + + uint32_t * + RXfifo_state + + +reads the RX FIFO empty flag from the STATUS register + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +RXfifo_state + + +The RX FIFO empty flag value + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_waitTxFifoEmpty + (EF_SPI_TYPE_PTR spi) + EF_SPI_waitTxFifoEmpty + + EF_SPI_TYPE_PTR + spi + + +waits for the TX FIFO to be empty by polling the TX FIFO empty flag in the STATUS register + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_waitRxFifoNotEmpty + (EF_SPI_TYPE_PTR spi) + EF_SPI_waitRxFifoNotEmpty + + EF_SPI_TYPE_PTR + spi + + +waits for the RX FIFO to be not empty by polling the RX FIFO empty flag in the STATUS register + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_FifoRxFlush + (EF_SPI_TYPE_PTR spi) + EF_SPI_FifoRxFlush + + EF_SPI_TYPE_PTR + spi + + +flushes the RX FIFO by writing to the RX FIFO FLUSH register + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_enable + (EF_SPI_TYPE_PTR spi) + EF_SPI_enable + + EF_SPI_TYPE_PTR + spi + + +enables the SPI by setting the enable bit in the CTRL register to 1, enables spi master pulse generation + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_disable + (EF_SPI_TYPE_PTR spi) + EF_SPI_disable + + EF_SPI_TYPE_PTR + spi + + +disables the SPI by setting the enable bit in the CTRL register to 0, disables spi master pulse generation + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_enableRx + (EF_SPI_TYPE_PTR spi) + EF_SPI_enableRx + + EF_SPI_TYPE_PTR + spi + + +enables the RX by setting the RX enable bit in the CTRL register to 1, enables storing bytes recieved from slave in RX FIFO + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_disableRx + (EF_SPI_TYPE_PTR spi) + EF_SPI_disableRx + + EF_SPI_TYPE_PTR + spi + + +disables the RX by setting the RX enable bit in the CTRL register to 0, disables storing bytes recieved from slave in RX FIFO + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_assertCs + (EF_SPI_TYPE_PTR spi) + EF_SPI_assertCs + + EF_SPI_TYPE_PTR + spi + + +asserts the CS line by setting the SS bit in the CTRL register to 1, asserts the CS line to start a transaction with the slave + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_deassertCs + (EF_SPI_TYPE_PTR spi) + EF_SPI_deassertCs + + EF_SPI_TYPE_PTR + spi + + +deasserts the CS line by setting the SS bit in the CTRL register to 0, deasserts the CS line to end a transaction with the slave + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_setIM + (EF_SPI_TYPE_PTR spi, uint32_t mask) + EF_SPI_setIM + + EF_SPI_TYPE_PTR + spi + + + uint32_t + mask + + + + +sets the value of the Interrupts Masking Register; which enable and disables interrupts The mask value is a 6-bit value, where each bit corresponds to a specific interrupt +bit 0 TXE : Transmit FIFO is Empty. +bit 1 TXF : Transmit FIFO is Full. +bit 2 RXE : Receive FIFO is Empty. +bit 3 RXF : Receive FIFO is Full. +bit 4 TXB : Transmit FIFO level is Below Threshold. +bit 5 RXA : Receive FIFO level is Above Threshold. + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +mask + + +The required mask value + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_getIM + (EF_SPI_TYPE_PTR spi, uint32_t *mask) + EF_SPI_getIM + + EF_SPI_TYPE_PTR + spi + + + uint32_t * + mask + + + + +gets the value of the Interrupts Masking Register; which enable and disables interrupts The mask value is a 6-bit value, where each bit corresponds to a specific interrupt +bit 0 TXE : Transmit FIFO is Empty. +bit 1 TXF : Transmit FIFO is Full. +bit 2 RXE : Receive FIFO is Empty. +bit 3 RXF : Receive FIFO is Full. +bit 4 TXB : Transmit FIFO level is Below Threshold. +bit 5 RXA : Receive FIFO level is Above Threshold. + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +mask + + +The required mask value + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_getRIS + (EF_SPI_TYPE_PTR spi, uint32_t *mask) + EF_SPI_getRIS + + EF_SPI_TYPE_PTR + spi + + + uint32_t * + mask + + + + +gets the value of the Raw Interrupt Status Register; which shows the status of the interrupts The mask value is a 6-bit value, where each bit corresponds to a specific interrupt +bit 0 TXE : Transmit FIFO is Empty. +bit 1 TXF : Transmit FIFO is Full. +bit 2 RXE : Receive FIFO is Empty. +bit 3 RXF : Receive FIFO is Full. +bit 4 TXB : Transmit FIFO level is Below Threshold. +bit 5 RXA : Receive FIFO level is Above Threshold. + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +mask + + +The required mask value + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_getMIS + (EF_SPI_TYPE_PTR spi, uint32_t *mask) + EF_SPI_getMIS + + EF_SPI_TYPE_PTR + spi + + + uint32_t * + mask + + + + +gets the value of the Masked Interrupt Status Register; which shows the status of the interrupts after masking (ANDing) RIS by IM. The mask value is a 6-bit value, where each bit corresponds to a specific interrupt +bit 0 TXE : Transmit FIFO is Empty. +bit 1 TXF : Transmit FIFO is Full. +bit 2 RXE : Receive FIFO is Empty. +bit 3 RXF : Receive FIFO is Full. +bit 4 TXB : Transmit FIFO level is Below Threshold. +bit 5 RXA : Receive FIFO level is Above Threshold. + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +mask + + +The required mask value + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + EF_DRIVER_STATUS + EF_DRIVER_STATUS EF_SPI_setICR + (EF_SPI_TYPE_PTR spi, uint32_t mask) + EF_SPI_setICR + + EF_SPI_TYPE_PTR + spi + + + uint32_t + mask + + + + +sets the value of the Interrupt Clear Register; which clears the interrupts The mask value is a 6-bit value, where each bit corresponds to a specific interrupt +bit 0 TXE : Transmit FIFO is Empty. +bit 1 TXF : Transmit FIFO is Full. +bit 2 RXE : Receive FIFO is Empty. +bit 3 RXF : Receive FIFO is Full. +bit 4 TXB : Transmit FIFO level is Below Threshold. +bit 5 RXA : Receive FIFO level is Above Threshold. + + + + +spi + + +An EF_SPI_TYPE pointer, which points to the base memory address of SPI registers. EF_SPI_TYPE is a structure that contains the SPI registers. + + + + +mask + + +The required mask value + + + +status A value of type EF_DRIVER_STATUS : returns a success or error code + + + + + + + + + +C header file for SPI APIs which contains the function prototypes. + + + + +/* +Copyright2025EfablessCorp. + + +LicensedundertheApacheLicense,Version2.0(the"License"); +youmaynotusethisfileexceptincompliancewiththeLicense. +YoumayobtainacopyoftheLicenseat + +www.apache.org/licenses/LICENSE-2.0 + +Unlessrequiredbyapplicablelaworagreedtoinwriting,software +distributedundertheLicenseisdistributedonan"ASIS"BASIS, +WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied. +SeetheLicenseforthespecificlanguagegoverningpermissionsand +limitationsundertheLicense. + +*/ + +#ifndefEF_SPI_H +#defineEF_SPI_H +/****************************************************************************** +*Includes +******************************************************************************/ +#include"EF_SPI_regs.h" +#include"EF_Driver_Common.h" + +/****************************************************************************** +*MacrosandConstants +******************************************************************************/ + +/****************************************************************************** +*TypedefsandEnums +******************************************************************************/ + + + +/****************************************************************************** +*FunctionPrototypes +******************************************************************************/ + + +EF_DRIVER_STATUSEF_SPI_setGclkEnable(EF_SPI_TYPE_PTRspi,uint32_tvalue); + + +EF_DRIVER_STATUSEF_SPI_writeData(EF_SPI_TYPE_PTRspi,uint32_tdata); + + +EF_DRIVER_STATUSEF_SPI_readData(EF_SPI_TYPE_PTRspi,uint32_t*data); + + +EF_DRIVER_STATUSEF_SPI_writepolarity(EF_SPI_TYPE_PTRspi,boolpolarity); + + +EF_DRIVER_STATUSEF_SPI_writePhase(EF_SPI_TYPE_PTRspi,boolphase); + + +EF_DRIVER_STATUSEF_SPI_readTxFifoEmpty(EF_SPI_TYPE_PTRspi,uint32_t*TXfifo_state); + + +EF_DRIVER_STATUSEF_SPI_readRxFifoEmpty(EF_SPI_TYPE_PTRspi,uint32_t*RXfifo_state); + + +EF_DRIVER_STATUSEF_SPI_waitTxFifoEmpty(EF_SPI_TYPE_PTRspi); + + +EF_DRIVER_STATUSEF_SPI_waitRxFifoNotEmpty(EF_SPI_TYPE_PTRspi); + + +EF_DRIVER_STATUSEF_SPI_FifoRxFlush(EF_SPI_TYPE_PTRspi); + + +EF_DRIVER_STATUSEF_SPI_enable(EF_SPI_TYPE_PTRspi); + + +EF_DRIVER_STATUSEF_SPI_disable(EF_SPI_TYPE_PTRspi); + + +EF_DRIVER_STATUSEF_SPI_enableRx(EF_SPI_TYPE_PTRspi); + + +EF_DRIVER_STATUSEF_SPI_disableRx(EF_SPI_TYPE_PTRspi); + + +EF_DRIVER_STATUSEF_SPI_assertCs(EF_SPI_TYPE_PTRspi); + + +EF_DRIVER_STATUSEF_SPI_deassertCs(EF_SPI_TYPE_PTRspi); + + +EF_DRIVER_STATUSEF_SPI_setIM(EF_SPI_TYPE_PTRspi,uint32_tmask); + +//Thefollowingfunctionsarenotverifiedyet +/******************************************************************************************************************************************/ +/******************************************************************************************************************************************/ + + +EF_DRIVER_STATUSEF_SPI_getIM(EF_SPI_TYPE_PTRspi,uint32_t*mask); + + +EF_DRIVER_STATUSEF_SPI_getRIS(EF_SPI_TYPE_PTRspi,uint32_t*mask); + + + + +EF_DRIVER_STATUSEF_SPI_getMIS(EF_SPI_TYPE_PTRspi,uint32_t*mask); + + + + + +EF_DRIVER_STATUSEF_SPI_setICR(EF_SPI_TYPE_PTRspi,uint32_tmask); + + +/****************************************************************************** +*ExternalVariables +******************************************************************************/ + + + + +#endif//EF_SPI_H + +/****************************************************************************** +*EndofFile +******************************************************************************/ + + + + diff --git a/docs/doxygen/xml/_e_f___s_p_i__regs_8h.xml b/docs/doxygen/xml/_e_f___s_p_i__regs_8h.xml new file mode 100644 index 0000000..e923473 --- /dev/null +++ b/docs/doxygen/xml/_e_f___s_p_i__regs_8h.xml @@ -0,0 +1,701 @@ + + + + EF_SPI_regs.h + EF_Driver_Common.h + EF_SPI.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + _EF_SPI_TYPE_ + + + IO_TYPES + + + + + + + + + + __R + volatile const uint32_t + + + + + + + + + + __W + volatile uint32_t + + + + + + + + + + __RW + volatile uint32_t + + + + + + + + + + EF_SPI_CFG_REG_CPOL_BIT + ((uint32_t)0) + + + + + + + + + + EF_SPI_CFG_REG_CPOL_MASK + ((uint32_t)0x1) + + + + + + + + + + EF_SPI_CFG_REG_CPHA_BIT + ((uint32_t)1) + + + + + + + + + + EF_SPI_CFG_REG_CPHA_MASK + ((uint32_t)0x2) + + + + + + + + + + EF_SPI_CTRL_REG_SS_BIT + ((uint32_t)0) + + + + + + + + + + EF_SPI_CTRL_REG_SS_MASK + ((uint32_t)0x1) + + + + + + + + + + EF_SPI_CTRL_REG_ENABLE_BIT + ((uint32_t)1) + + + + + + + + + + EF_SPI_CTRL_REG_ENABLE_MASK + ((uint32_t)0x2) + + + + + + + + + + EF_SPI_CTRL_REG_RX_EN_BIT + ((uint32_t)2) + + + + + + + + + + EF_SPI_CTRL_REG_RX_EN_MASK + ((uint32_t)0x4) + + + + + + + + + + EF_SPI_STATUS_REG_TX_E_BIT + ((uint32_t)0) + + + + + + + + + + EF_SPI_STATUS_REG_TX_E_MASK + ((uint32_t)0x1) + + + + + + + + + + EF_SPI_STATUS_REG_TX_F_BIT + ((uint32_t)1) + + + + + + + + + + EF_SPI_STATUS_REG_TX_F_MASK + ((uint32_t)0x2) + + + + + + + + + + EF_SPI_STATUS_REG_RX_E_BIT + ((uint32_t)2) + + + + + + + + + + EF_SPI_STATUS_REG_RX_E_MASK + ((uint32_t)0x4) + + + + + + + + + + EF_SPI_STATUS_REG_RX_F_BIT + ((uint32_t)3) + + + + + + + + + + EF_SPI_STATUS_REG_RX_F_MASK + ((uint32_t)0x8) + + + + + + + + + + EF_SPI_STATUS_REG_TX_B_BIT + ((uint32_t)4) + + + + + + + + + + EF_SPI_STATUS_REG_TX_B_MASK + ((uint32_t)0x10) + + + + + + + + + + EF_SPI_STATUS_REG_RX_A_BIT + ((uint32_t)5) + + + + + + + + + + EF_SPI_STATUS_REG_RX_A_MASK + ((uint32_t)0x20) + + + + + + + + + + EF_SPI_RX_FIFO_LEVEL_REG_LEVEL_BIT + ((uint32_t)0) + + + + + + + + + + EF_SPI_RX_FIFO_LEVEL_REG_LEVEL_MASK + ((uint32_t)0xf) + + + + + + + + + + EF_SPI_RX_FIFO_THRESHOLD_REG_THRESHOLD_BIT + ((uint32_t)0) + + + + + + + + + + EF_SPI_RX_FIFO_THRESHOLD_REG_THRESHOLD_MASK + ((uint32_t)0xf) + + + + + + + + + + EF_SPI_RX_FIFO_FLUSH_REG_FLUSH_BIT + ((uint32_t)0) + + + + + + + + + + EF_SPI_RX_FIFO_FLUSH_REG_FLUSH_MASK + ((uint32_t)0x1) + + + + + + + + + + EF_SPI_TX_FIFO_LEVEL_REG_LEVEL_BIT + ((uint32_t)0) + + + + + + + + + + EF_SPI_TX_FIFO_LEVEL_REG_LEVEL_MASK + ((uint32_t)0xf) + + + + + + + + + + EF_SPI_TX_FIFO_THRESHOLD_REG_THRESHOLD_BIT + ((uint32_t)0) + + + + + + + + + + EF_SPI_TX_FIFO_THRESHOLD_REG_THRESHOLD_MASK + ((uint32_t)0xf) + + + + + + + + + + EF_SPI_TX_FIFO_FLUSH_REG_FLUSH_BIT + ((uint32_t)0) + + + + + + + + + + EF_SPI_TX_FIFO_FLUSH_REG_FLUSH_MASK + ((uint32_t)0x1) + + + + + + + + + + EF_SPI_TXE_FLAG + ((uint32_t)0x1) + + + + + + + + + + EF_SPI_TXF_FLAG + ((uint32_t)0x2) + + + + + + + + + + EF_SPI_RXE_FLAG + ((uint32_t)0x4) + + + + + + + + + + EF_SPI_RXF_FLAG + ((uint32_t)0x8) + + + + + + + + + + EF_SPI_TXB_FLAG + ((uint32_t)0x10) + + + + + + + + + + EF_SPI_RXA_FLAG + ((uint32_t)0x20) + + + + + + + + + + + + struct _EF_SPI_TYPE_ + typedef struct _EF_SPI_TYPE_ EF_SPI_TYPE + + EF_SPI_TYPE + + + + + + + + + + EF_SPI_TYPE * + typedef EF_SPI_TYPE* EF_SPI_TYPE_PTR + + EF_SPI_TYPE_PTR + + + + + + + + + + + + + + +/* +Copyright2024EfablessCorp. + +Author:MohamedShalan(mshalan@efabless.com) + +LicensedundertheApacheLicense,Version2.0(the"License"); +youmaynotusethisfileexceptincompliancewiththeLicense. +YoumayobtainacopyoftheLicenseat + +www.apache.org/licenses/LICENSE-2.0 + +Unlessrequiredbyapplicablelaworagreedtoinwriting,software +distributedundertheLicenseisdistributedonan"ASIS"BASIS, +WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied. +SeetheLicenseforthespecificlanguagegoverningpermissionsand +limitationsundertheLicense. + +*/ + +#ifndefEF_SPIREGS_H +#defineEF_SPIREGS_H + +/****************************************************************************** +*Includes +******************************************************************************/ +#include"EF_Driver_Common.h" + + +/****************************************************************************** +*MacrosandConstants +******************************************************************************/ +#ifndefIO_TYPES +#defineIO_TYPES +#define__Rvolatileconstuint32_t +#define__Wvolatileuint32_t +#define__RWvolatileuint32_t +#endif + +#defineEF_SPI_CFG_REG_CPOL_BIT((uint32_t)0) +#defineEF_SPI_CFG_REG_CPOL_MASK((uint32_t)0x1) +#defineEF_SPI_CFG_REG_CPHA_BIT((uint32_t)1) +#defineEF_SPI_CFG_REG_CPHA_MASK((uint32_t)0x2) +#defineEF_SPI_CTRL_REG_SS_BIT((uint32_t)0) +#defineEF_SPI_CTRL_REG_SS_MASK((uint32_t)0x1) +#defineEF_SPI_CTRL_REG_ENABLE_BIT((uint32_t)1) +#defineEF_SPI_CTRL_REG_ENABLE_MASK((uint32_t)0x2) +#defineEF_SPI_CTRL_REG_RX_EN_BIT((uint32_t)2) +#defineEF_SPI_CTRL_REG_RX_EN_MASK((uint32_t)0x4) +#defineEF_SPI_STATUS_REG_TX_E_BIT((uint32_t)0) +#defineEF_SPI_STATUS_REG_TX_E_MASK((uint32_t)0x1) +#defineEF_SPI_STATUS_REG_TX_F_BIT((uint32_t)1) +#defineEF_SPI_STATUS_REG_TX_F_MASK((uint32_t)0x2) +#defineEF_SPI_STATUS_REG_RX_E_BIT((uint32_t)2) +#defineEF_SPI_STATUS_REG_RX_E_MASK((uint32_t)0x4) +#defineEF_SPI_STATUS_REG_RX_F_BIT((uint32_t)3) +#defineEF_SPI_STATUS_REG_RX_F_MASK((uint32_t)0x8) +#defineEF_SPI_STATUS_REG_TX_B_BIT((uint32_t)4) +#defineEF_SPI_STATUS_REG_TX_B_MASK((uint32_t)0x10) +#defineEF_SPI_STATUS_REG_RX_A_BIT((uint32_t)5) +#defineEF_SPI_STATUS_REG_RX_A_MASK((uint32_t)0x20) +#defineEF_SPI_RX_FIFO_LEVEL_REG_LEVEL_BIT((uint32_t)0) +#defineEF_SPI_RX_FIFO_LEVEL_REG_LEVEL_MASK((uint32_t)0xf) +#defineEF_SPI_RX_FIFO_THRESHOLD_REG_THRESHOLD_BIT((uint32_t)0) +#defineEF_SPI_RX_FIFO_THRESHOLD_REG_THRESHOLD_MASK((uint32_t)0xf) +#defineEF_SPI_RX_FIFO_FLUSH_REG_FLUSH_BIT((uint32_t)0) +#defineEF_SPI_RX_FIFO_FLUSH_REG_FLUSH_MASK((uint32_t)0x1) +#defineEF_SPI_TX_FIFO_LEVEL_REG_LEVEL_BIT((uint32_t)0) +#defineEF_SPI_TX_FIFO_LEVEL_REG_LEVEL_MASK((uint32_t)0xf) +#defineEF_SPI_TX_FIFO_THRESHOLD_REG_THRESHOLD_BIT((uint32_t)0) +#defineEF_SPI_TX_FIFO_THRESHOLD_REG_THRESHOLD_MASK((uint32_t)0xf) +#defineEF_SPI_TX_FIFO_FLUSH_REG_FLUSH_BIT((uint32_t)0) +#defineEF_SPI_TX_FIFO_FLUSH_REG_FLUSH_MASK((uint32_t)0x1) + +#defineEF_SPI_TXE_FLAG((uint32_t)0x1) +#defineEF_SPI_TXF_FLAG((uint32_t)0x2) +#defineEF_SPI_RXE_FLAG((uint32_t)0x4) +#defineEF_SPI_RXF_FLAG((uint32_t)0x8) +#defineEF_SPI_TXB_FLAG((uint32_t)0x10) +#defineEF_SPI_RXA_FLAG((uint32_t)0x20) + + +/****************************************************************************** +*TypedefsandEnums +******************************************************************************/ +typedefstruct_EF_SPI_TYPE_{ +__RRXDATA; +__WTXDATA; +__WCFG; +__WCTRL; +__WPR; +__RSTATUS; +__Rreserved_0[16250]; +__RRX_FIFO_LEVEL; +__WRX_FIFO_THRESHOLD; +__WRX_FIFO_FLUSH; +__Rreserved_1[1]; +__RTX_FIFO_LEVEL; +__WTX_FIFO_THRESHOLD; +__WTX_FIFO_FLUSH; +__Rreserved_2[57]; +__RWIM; +__RMIS; +__RRIS; +__WIC; +__WGCLK; +}EF_SPI_TYPE; + +typedefEF_SPI_TYPE*EF_SPI_TYPE_PTR; + +/****************************************************************************** +*FunctionPrototypes +******************************************************************************/ + + + +/****************************************************************************** +*ExternalVariables +******************************************************************************/ + + + + +#endif//EF_SPIREGS_H + +/****************************************************************************** +*EndofFile +******************************************************************************/ + + + + diff --git a/docs/doxygen/xml/combine.xslt b/docs/doxygen/xml/combine.xslt new file mode 100644 index 0000000..3bfa82c --- /dev/null +++ b/docs/doxygen/xml/combine.xslt @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/docs/doxygen/xml/compound.xsd b/docs/doxygen/xml/compound.xsd new file mode 100644 index 0000000..a10b58d --- /dev/null +++ b/docs/doxygen/xml/compound.xsd @@ -0,0 +1,1305 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The mentioned file will be located in the directory as specified by XML_OUTPUT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/doxygen/xml/doxyfile.xsd b/docs/doxygen/xml/doxyfile.xsd new file mode 100644 index 0000000..fbfc2c1 --- /dev/null +++ b/docs/doxygen/xml/doxyfile.xsd @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/doxygen/xml/index.xml b/docs/doxygen/xml/index.xml new file mode 100644 index 0000000..7366a45 --- /dev/null +++ b/docs/doxygen/xml/index.xml @@ -0,0 +1,130 @@ + + + _EF_SPI_TYPE_ + RXDATA + TXDATA + CFG + CTRL + PR + STATUS + reserved_0 + RX_FIFO_LEVEL + RX_FIFO_THRESHOLD + RX_FIFO_FLUSH + reserved_1 + TX_FIFO_LEVEL + TX_FIFO_THRESHOLD + TX_FIFO_FLUSH + reserved_2 + IM + MIS + RIS + IC + GCLK + + EF_Driver_Common.h + EF_DRIVER_OK + EF_DRIVER_ERROR + EF_DRIVER_ERROR_BUSY + EF_DRIVER_ERROR_TIMEOUT + EF_DRIVER_ERROR_UNSUPPORTED + EF_DRIVER_ERROR_PARAMETER + EF_DRIVER_ERROR_SPECIFIC + EF_DRIVER_STATUS + + EF_SPI.c + EF_SPI_C + EF_SPI_TXDATA_MAX_VALUE + EF_SPI_setGclkEnable + EF_SPI_writeData + EF_SPI_readData + EF_SPI_writepolarity + EF_SPI_writePhase + EF_SPI_readTxFifoEmpty + EF_SPI_readRxFifoEmpty + EF_SPI_waitTxFifoEmpty + EF_SPI_waitRxFifoNotEmpty + EF_SPI_FifoRxFlush + EF_SPI_enable + EF_SPI_disable + EF_SPI_enableRx + EF_SPI_disableRx + EF_SPI_assertCs + EF_SPI_deassertCs + EF_SPI_setIM + EF_SPI_getIM + EF_SPI_getRIS + EF_SPI_getMIS + + EF_SPI.h + EF_SPI_setGclkEnable + EF_SPI_writeData + EF_SPI_readData + EF_SPI_writepolarity + EF_SPI_writePhase + EF_SPI_readTxFifoEmpty + EF_SPI_readRxFifoEmpty + EF_SPI_waitTxFifoEmpty + EF_SPI_waitRxFifoNotEmpty + EF_SPI_FifoRxFlush + EF_SPI_enable + EF_SPI_disable + EF_SPI_enableRx + EF_SPI_disableRx + EF_SPI_assertCs + EF_SPI_deassertCs + EF_SPI_setIM + EF_SPI_getIM + EF_SPI_getRIS + EF_SPI_getMIS + EF_SPI_setICR + + EF_SPI_regs.h + IO_TYPES + __R + __W + __RW + EF_SPI_CFG_REG_CPOL_BIT + EF_SPI_CFG_REG_CPOL_MASK + EF_SPI_CFG_REG_CPHA_BIT + EF_SPI_CFG_REG_CPHA_MASK + EF_SPI_CTRL_REG_SS_BIT + EF_SPI_CTRL_REG_SS_MASK + EF_SPI_CTRL_REG_ENABLE_BIT + EF_SPI_CTRL_REG_ENABLE_MASK + EF_SPI_CTRL_REG_RX_EN_BIT + EF_SPI_CTRL_REG_RX_EN_MASK + EF_SPI_STATUS_REG_TX_E_BIT + EF_SPI_STATUS_REG_TX_E_MASK + EF_SPI_STATUS_REG_TX_F_BIT + EF_SPI_STATUS_REG_TX_F_MASK + EF_SPI_STATUS_REG_RX_E_BIT + EF_SPI_STATUS_REG_RX_E_MASK + EF_SPI_STATUS_REG_RX_F_BIT + EF_SPI_STATUS_REG_RX_F_MASK + EF_SPI_STATUS_REG_TX_B_BIT + EF_SPI_STATUS_REG_TX_B_MASK + EF_SPI_STATUS_REG_RX_A_BIT + EF_SPI_STATUS_REG_RX_A_MASK + EF_SPI_RX_FIFO_LEVEL_REG_LEVEL_BIT + EF_SPI_RX_FIFO_LEVEL_REG_LEVEL_MASK + EF_SPI_RX_FIFO_THRESHOLD_REG_THRESHOLD_BIT + EF_SPI_RX_FIFO_THRESHOLD_REG_THRESHOLD_MASK + EF_SPI_RX_FIFO_FLUSH_REG_FLUSH_BIT + EF_SPI_RX_FIFO_FLUSH_REG_FLUSH_MASK + EF_SPI_TX_FIFO_LEVEL_REG_LEVEL_BIT + EF_SPI_TX_FIFO_LEVEL_REG_LEVEL_MASK + EF_SPI_TX_FIFO_THRESHOLD_REG_THRESHOLD_BIT + EF_SPI_TX_FIFO_THRESHOLD_REG_THRESHOLD_MASK + EF_SPI_TX_FIFO_FLUSH_REG_FLUSH_BIT + EF_SPI_TX_FIFO_FLUSH_REG_FLUSH_MASK + EF_SPI_TXE_FLAG + EF_SPI_TXF_FLAG + EF_SPI_RXE_FLAG + EF_SPI_RXF_FLAG + EF_SPI_TXB_FLAG + EF_SPI_RXA_FLAG + EF_SPI_TYPE + EF_SPI_TYPE_PTR + + diff --git a/docs/doxygen/xml/index.xsd b/docs/doxygen/xml/index.xsd new file mode 100644 index 0000000..cfb7041 --- /dev/null +++ b/docs/doxygen/xml/index.xsd @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/doxygen/xml/struct___e_f___s_p_i___t_y_p_e__.xml b/docs/doxygen/xml/struct___e_f___s_p_i___t_y_p_e__.xml new file mode 100644 index 0000000..6263dcc --- /dev/null +++ b/docs/doxygen/xml/struct___e_f___s_p_i___t_y_p_e__.xml @@ -0,0 +1,316 @@ + + + + _EF_SPI_TYPE_ + EF_SPI_regs.h + + + __R + __R _EF_SPI_TYPE_::RXDATA + + RXDATA + _EF_SPI_TYPE_::RXDATA + + + + + + + + + + __W + __W _EF_SPI_TYPE_::TXDATA + + TXDATA + _EF_SPI_TYPE_::TXDATA + + + + + + + + + + __W + __W _EF_SPI_TYPE_::CFG + + CFG + _EF_SPI_TYPE_::CFG + + + + + + + + + + __W + __W _EF_SPI_TYPE_::CTRL + + CTRL + _EF_SPI_TYPE_::CTRL + + + + + + + + + + __W + __W _EF_SPI_TYPE_::PR + + PR + _EF_SPI_TYPE_::PR + + + + + + + + + + __R + __R _EF_SPI_TYPE_::STATUS + + STATUS + _EF_SPI_TYPE_::STATUS + + + + + + + + + + __R + __R _EF_SPI_TYPE_::reserved_0[16250] + [16250] + reserved_0 + _EF_SPI_TYPE_::reserved_0 + + + + + + + + + + __R + __R _EF_SPI_TYPE_::RX_FIFO_LEVEL + + RX_FIFO_LEVEL + _EF_SPI_TYPE_::RX_FIFO_LEVEL + + + + + + + + + + __W + __W _EF_SPI_TYPE_::RX_FIFO_THRESHOLD + + RX_FIFO_THRESHOLD + _EF_SPI_TYPE_::RX_FIFO_THRESHOLD + + + + + + + + + + __W + __W _EF_SPI_TYPE_::RX_FIFO_FLUSH + + RX_FIFO_FLUSH + _EF_SPI_TYPE_::RX_FIFO_FLUSH + + + + + + + + + + __R + __R _EF_SPI_TYPE_::reserved_1[1] + [1] + reserved_1 + _EF_SPI_TYPE_::reserved_1 + + + + + + + + + + __R + __R _EF_SPI_TYPE_::TX_FIFO_LEVEL + + TX_FIFO_LEVEL + _EF_SPI_TYPE_::TX_FIFO_LEVEL + + + + + + + + + + __W + __W _EF_SPI_TYPE_::TX_FIFO_THRESHOLD + + TX_FIFO_THRESHOLD + _EF_SPI_TYPE_::TX_FIFO_THRESHOLD + + + + + + + + + + __W + __W _EF_SPI_TYPE_::TX_FIFO_FLUSH + + TX_FIFO_FLUSH + _EF_SPI_TYPE_::TX_FIFO_FLUSH + + + + + + + + + + __R + __R _EF_SPI_TYPE_::reserved_2[57] + [57] + reserved_2 + _EF_SPI_TYPE_::reserved_2 + + + + + + + + + + __RW + __RW _EF_SPI_TYPE_::IM + + IM + _EF_SPI_TYPE_::IM + + + + + + + + + + __R + __R _EF_SPI_TYPE_::MIS + + MIS + _EF_SPI_TYPE_::MIS + + + + + + + + + + __R + __R _EF_SPI_TYPE_::RIS + + RIS + _EF_SPI_TYPE_::RIS + + + + + + + + + + __W + __W _EF_SPI_TYPE_::IC + + IC + _EF_SPI_TYPE_::IC + + + + + + + + + + __W + __W _EF_SPI_TYPE_::GCLK + + GCLK + _EF_SPI_TYPE_::GCLK + + + + + + + + + + + + + + + + _EF_SPI_TYPE_CFG + _EF_SPI_TYPE_CTRL + _EF_SPI_TYPE_GCLK + _EF_SPI_TYPE_IC + _EF_SPI_TYPE_IM + _EF_SPI_TYPE_MIS + _EF_SPI_TYPE_PR + _EF_SPI_TYPE_reserved_0 + _EF_SPI_TYPE_reserved_1 + _EF_SPI_TYPE_reserved_2 + _EF_SPI_TYPE_RIS + _EF_SPI_TYPE_RX_FIFO_FLUSH + _EF_SPI_TYPE_RX_FIFO_LEVEL + _EF_SPI_TYPE_RX_FIFO_THRESHOLD + _EF_SPI_TYPE_RXDATA + _EF_SPI_TYPE_STATUS + _EF_SPI_TYPE_TX_FIFO_FLUSH + _EF_SPI_TYPE_TX_FIFO_LEVEL + _EF_SPI_TYPE_TX_FIFO_THRESHOLD + _EF_SPI_TYPE_TXDATA + + + diff --git a/docs/doxygen/xml/xml.xsd b/docs/doxygen/xml/xml.xsd new file mode 100644 index 0000000..9f80fe1 --- /dev/null +++ b/docs/doxygen/xml/xml.xsd @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/fw/Doxyfile b/fw/Doxyfile new file mode 100644 index 0000000..13a396f --- /dev/null +++ b/fw/Doxyfile @@ -0,0 +1,2851 @@ +# Doxyfile 1.10.0 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). +# +# Note: +# +# Use doxygen to compare the used configuration file with the template +# configuration file: +# doxygen -x [configFile] +# Use doxygen to compare the used configuration file with the template +# configuration file without replacing the environment variables or CMake type +# replacement variables: +# doxygen -x_noenv [configFile] + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the configuration +# file that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# https://www.gnu.org/software/libiconv/ for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "EF_SPI APIs" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# With the PROJECT_ICON tag one can specify an icon that is included in the tabs +# when the HTML document is shown. Doxygen will copy the logo to the output +# directory. + +PROJECT_ICON = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY =../docs/doxygen + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 +# sub-directories (in 2 levels) under the output directory of each output format +# and will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to +# control the number of sub-directories. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# Controls the number of sub-directories that will be created when +# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every +# level increment doubles the number of directories, resulting in 4096 +# directories at level 8 which is the default and also the maximum value. The +# sub-directories are organized in 2 levels, the first level always has a fixed +# number of 16 directories. +# Minimum value: 0, maximum value: 8, default value: 8. +# This tag requires that the tag CREATE_SUBDIRS is set to YES. + +CREATE_SUBDIRS_LEVEL = 8 + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, +# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English +# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, +# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with +# English messages), Korean, Korean-en (Korean with English messages), Latvian, +# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, +# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, +# Swedish, Turkish, Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# By default Python docstrings are displayed as preformatted text and doxygen's +# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the +# doxygen's special commands can be used and the contents of the docstring +# documentation blocks is shown as doxygen documentation. +# The default value is: YES. + +PYTHON_DOCSTRING = YES + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:^^" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". Note that you cannot put \n's in the value part of an alias +# to insert newlines (in the resulting output). You can put ^^ in the value part +# of an alias to insert a newline as if a physical newline was in the original +# file. When you need a literal { or } or , in the value part of an alias you +# have to escape them by means of a backslash (\), this can lead to conflicts +# with the commands \{ and \} for these it is advised to use the version @{ and +# @} or use a double escape (\\{ and \\}) + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice +# sources only. Doxygen will then generate output that is more tailored for that +# language. For instance, namespaces will be presented as modules, types will be +# separated into more groups, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_SLICE = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, +# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files). For instance to make doxygen treat .inc files +# as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. When specifying no_extension you should add +# * to the FILE_PATTERNS. +# +# Note see also the list of default file extension mappings. + +EXTENSION_MAPPING = md=markdown + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See https://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 5. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 5 + +# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to +# generate identifiers for the Markdown headings. Note: Every identifier is +# unique. +# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a +# sequence number starting at 0 and GITHUB use the lower case version of title +# with any whitespace replaced by '-' and punctuation characters removed. +# The default value is: DOXYGEN. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +MARKDOWN_ID_STYLE = DOXYGEN + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use +# during processing. When set to 0 doxygen will based this on the number of +# cores available in the system. You can set it explicitly to a value larger +# than 0 to get more control over the balance between CPU load and processing +# speed. At this moment only the input processing can be done using multiple +# threads. Since this is still an experimental feature the default is set to 1, +# which effectively disables parallel processing. Please report any issues you +# encounter. Generating dot graphs in parallel is controlled by the +# DOT_NUM_THREADS setting. +# Minimum value: 0, maximum value: 32, default value: 1. + +NUM_PROC_THREADS = 1 + +# If the TIMESTAMP tag is set different from NO then each generated page will +# contain the date or date and time when the page was generated. Setting this to +# NO can help when comparing the output of multiple runs. +# Possible values are: YES, NO, DATETIME and DATE. +# The default value is: NO. + +TIMESTAMP = NO + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If this flag is set to YES, the name of an unnamed parameter in a declaration +# will be determined by the corresponding definition. By default unnamed +# parameters remain unnamed in the output. +# The default value is: YES. + +RESOLVE_UNNAMED_PARAMS = YES + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# will also hide undocumented C++ concepts if enabled. This option has no effect +# if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# declarations. If set to NO, these declarations will be included in the +# documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# With the correct setting of option CASE_SENSE_NAMES doxygen will better be +# able to match the capabilities of the underlying filesystem. In case the +# filesystem is case sensitive (i.e. it supports files in the same directory +# whose names only differ in casing), the option must be set to YES to properly +# deal with such files in case they appear in the input. For filesystems that +# are not case sensitive the option should be set to NO to properly deal with +# output files written for symbols that only differ in casing, such as for two +# classes, one named CLASS and the other named Class, and to also support +# references to files without having to specify the exact matching casing. On +# Windows (including Cygwin) and MacOS, users should typically set this option +# to NO, whereas on Linux or other Unix flavors it should typically be set to +# YES. +# Possible values are: SYSTEM, NO and YES. +# The default value is: SYSTEM. + +CASE_SENSE_NAMES = SYSTEM + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class +# will show which file needs to be included to use the class. +# The default value is: YES. + +SHOW_HEADERFILE = YES + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. See also section "Changing the +# layout of pages" for information. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as documenting some parameters in +# a documented function twice, or documenting parameters that don't exist or +# using markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete +# function parameter documentation. If set to NO, doxygen will accept that some +# parameters have no documentation without warning. +# The default value is: YES. + +WARN_IF_INCOMPLETE_DOC = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong parameter +# documentation, but not about the absence of documentation. If EXTRACT_ALL is +# set to YES then this flag will automatically be disabled. See also +# WARN_IF_INCOMPLETE_DOC +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about +# undocumented enumeration values. If set to NO, doxygen will accept +# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: NO. + +WARN_IF_UNDOC_ENUM_VAL = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS +# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but +# at the end of the doxygen process doxygen will return with a non-zero status. +# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves +# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not +# write the warning messages in between other messages but write them at the end +# of a run, in case a WARN_LOGFILE is defined the warning messages will be +# besides being in the defined file also be shown at the end of a run, unless +# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case +# the behavior will remain as with the setting FAIL_ON_WARNINGS. +# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# See also: WARN_LINE_FORMAT +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# In the $text part of the WARN_FORMAT command it is possible that a reference +# to a more specific place is given. To make it easier to jump to this place +# (outside of doxygen) the user can define a custom "cut" / "paste" string. +# Example: +# WARN_LINE_FORMAT = "'vi $file +$line'" +# See also: WARN_FORMAT +# The default value is: at line $line of file $file. + +WARN_LINE_FORMAT = "at line $line of file $file" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). In case the file specified cannot be opened for writing the +# warning and error messages are written to standard error. When as file - is +# specified the warning and error messages are written to standard output +# (stdout). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: +# https://www.gnu.org/software/libiconv/) for the list of possible encodings. +# See also: INPUT_FILE_ENCODING +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify +# character encoding on a per file pattern basis. Doxygen will compare the file +# name with each pattern and apply the encoding instead of the default +# INPUT_ENCODING) if there is a match. The character encodings are a list of the +# form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding +# "INPUT_ENCODING" for further information on supported encodings. + +INPUT_FILE_ENCODING = + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# Note the list of default checked file patterns might differ from the list of +# default file extension mappings. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm, +# *.cpp, *.cppm, *.ccm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, +# *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, +# *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to +# be provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cxxm \ + *.cpp \ + *.cppm \ + *.ccm \ + *.c++ \ + *.c++m \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.ixx \ + *.l \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.pyw \ + *.f90 \ + *.f95 \ + *.f03 \ + *.f08 \ + *.f18 \ + *.f \ + *.for \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf \ + *.ice + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# ANamespace::AClass, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that doxygen will use the data processed and written to standard output +# for further processing, therefore nothing else, like debug statements or used +# commands (so in case of a Windows batch file always use @echo OFF), should be +# written to standard output. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +# The Fortran standard specifies that for fixed formatted Fortran code all +# characters from position 72 are to be considered as comment. A common +# extension is to allow longer lines before the automatic comment starts. The +# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can +# be processed before the automatic comment starts. +# Minimum value: 7, maximum value: 10000, default value: 72. + +FORTRAN_COMMENT_AFTER = 72 + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# multi-line macros, enums or list initialized variables directly into the +# documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# entity all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see https://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes) +# that should be ignored while generating the index headers. The IGNORE_PREFIX +# tag works for classes, function and member names. The entity will be placed in +# the alphabetical list under the first letter of the entity name that remains +# after removing the prefix. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). +# Note: Since the styling of scrollbars can currently not be overruled in +# Webkit/Chromium, the styling will be left out of the default doxygen.css if +# one or more extra stylesheets have been specified. So if scrollbar +# customization is desired it has to be added explicitly. For an example see the +# documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output +# should be rendered with a dark or light theme. +# Possible values are: LIGHT always generate light mode output, DARK always +# generate dark mode output, AUTO_LIGHT automatically set the mode according to +# the user preference, use light mode if no preference is set (the default), +# AUTO_DARK automatically set the mode according to the user preference, use +# dark mode if no preference is set and TOGGLE allow to user to switch between +# light and dark mode via a button. +# The default value is: AUTO_LIGHT. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE = AUTO_LIGHT + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a color-wheel, see +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use gray-scales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via JavaScript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have JavaScript, +# like the Qt help browser. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_MENUS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be +# dynamically folded and expanded in the generated HTML source code. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_CODE_FOLDING = YES + +# If the HTML_COPY_CLIPBOARD tag is set to YES then doxygen will show an icon in +# the top right corner of code and text fragments that allows the user to copy +# its content to the clipboard (provided this is supported by the browser). +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COPY_CLIPBOARD = YES + +# Doxygen stores a couple of settings persistently in the browser (via e.g. +# cookies). By default these settings apply to all HTML pages generated by +# doxygen across all projects. The HTML_PROJECT_COOKIE tag can be used to store +# the settings under a project specific key, such that the user preferences will +# be stored separately. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_PROJECT_COOKIE = + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: +# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To +# create a documentation set, doxygen will generate a Makefile in the HTML +# output directory. Running make will produce the docset in that directory and +# running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy +# genXcode/_index.html for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag determines the URL of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDURL = + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# on Windows. In the beginning of 2021 Microsoft took the original page, with +# a.o. the download links, offline the HTML help workshop was already many years +# in maintenance mode). You can download the HTML help workshop from the web +# archives at Installation executable (see: +# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo +# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the main .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# The SITEMAP_URL tag is used to specify the full URL of the place where the +# generated documentation will be placed on the server by the user during the +# deployment of the documentation. The generated sitemap is called sitemap.xml +# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL +# is specified no sitemap is generated. For information about the sitemap +# protocol see https://www.sitemaps.org +# This tag requires that the tag GENERATE_HTML is set to YES. + +SITEMAP_URL = + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location (absolute path +# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to +# run qhelpgenerator on the generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine tune the look of the index (see "Fine-tuning the output"). As an +# example, the default style sheet generated by doxygen has an example that +# shows how to put an image at the root of the tree instead of the PROJECT_NAME. +# Since the tree basically has the same information as the tab index, you could +# consider setting DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the +# FULL_SIDEBAR option determines if the side bar is limited to only the treeview +# area (value NO) or if it should extend to the full height of the window (value +# YES). Setting this to YES gives a layout similar to +# https://docs.readthedocs.io with more room for contents, but less room for the +# project logo, title, and description. If either GENERATE_TREEVIEW or +# DISABLE_INDEX is set to NO, this option has no effect. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FULL_SIDEBAR = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email +# addresses. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +OBFUSCATE_EMAILS = YES + +# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg +# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see +# https://inkscape.org) to generate formulas as SVG images instead of PNGs for +# the HTML output. These images will generally look nicer at scaled resolutions. +# Possible values are: png (the default) and svg (looks nicer but requires the +# pdf2svg or inkscape tool). +# The default value is: png. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FORMULA_FORMAT = png + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands +# to create new LaTeX commands to be used in formulas as building blocks. See +# the section "Including formulas" for details. + +FORMULA_MACROFILE = + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# https://www.mathjax.org) which uses client side JavaScript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# With MATHJAX_VERSION it is possible to specify the MathJax version to be used. +# Note that the different versions of MathJax have different requirements with +# regards to the different settings, so it is possible that also other MathJax +# settings have to be changed when switching between the different MathJax +# versions. +# Possible values are: MathJax_2 and MathJax_3. +# The default value is: MathJax_2. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_VERSION = MathJax_2 + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. For more details about the output format see MathJax +# version 2 (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3 +# (see: +# http://docs.mathjax.org/en/latest/web/components/output.html). +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility. This is the name for Mathjax version 2, for MathJax version 3 +# this will be translated into chtml), NativeMML (i.e. MathML. Only supported +# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This +# is the name for Mathjax version 3, for MathJax version 2 this will be +# translated into HTML-CSS) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from https://www.mathjax.org before deployment. The default value is: +# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 +# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# for MathJax version 2 (see +# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions): +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# For example for MathJax version 3 (see +# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): +# MATHJAX_EXTENSIONS = ams +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /