An on-board panel embedded software data processing system

By combining multithreading and message queues in the airborne data acquisition and loading module, the risks of thread priority inversion and deadlock in the airborne panel embedded software data processing system are resolved, achieving stable and low-cost data transmission.

CN122240346APending Publication Date: 2026-06-19CHENGDU ZIRUI QINGYUN AEROSPACE TECH CO LTD

Patent Information

Authority / Receiving Office
CN · China
Patent Type
Applications(China)
Current Assignee / Owner
CHENGDU ZIRUI QINGYUN AEROSPACE TECH CO LTD
Filing Date
2026-03-19
Publication Date
2026-06-19

AI Technical Summary

Technical Problem

Existing airborne panel embedded software data processing systems have risks of thread priority inversion or deadlock at the data interaction interface, leading to system instability. At the same time, the equipment is expensive, the cables are messy, and maintenance is inconvenient.

Method used

It employs an onboard data acquisition module and a loading module, combining multi-threading and message queues to parse data and send it uniformly, reducing system resource consumption, and utilizes DMA to transfer data, thereby reducing CPU usage.

Benefits of technology

It enables real-time data interaction through multiple communication interfaces, reduces system resource consumption, ensures real-time transmission and system stability, and reduces equipment costs and cable clutter.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN122240346A_ABST
    Figure CN122240346A_ABST
Patent Text Reader

Abstract

This invention relates to the field of flight simulator technology, specifically to an airborne panel embedded software data processing system; it includes an airborne data acquisition module and an airborne data loading module; the airborne data acquisition module controls the cockpit panel switch acquisition and lighting; the airborne data loading module stores key system log information and loads key flight missions and configurations; the received data is parsed from each interface and sent to the same thread for data processing via a message queue, reducing system resource consumption.
Need to check novelty before this filing date? Find Prior Art

Description

Technical Field

[0001] This invention relates to the field of flight simulator technology, and more specifically, to an airborne panel embedded software data processing system. Background Technology

[0002] Existing airborne panel embedded software data processing systems are too finely segmented, with some panels requiring very few signals to be collected. This results in high product costs and messy internal cabling, making later maintenance difficult.

[0003] Existing airborne panel embedded software data processing systems use multi-threading and mutex locks to implement multiple data interaction interfaces. In certain special scenarios, thread priority inversion or deadlock may occur, which may pose a risk to the stable operation of the system. Summary of the Invention

[0004] To address the aforementioned problems in the prior art, this invention proposes an airborne panel embedded software data processing system, comprising an airborne data acquisition module and an airborne data loading module. The airborne data acquisition module controls the acquisition of cockpit panel switches and lights; the airborne data loading module stores key system log information and loads and provides key flight missions and configurations; and the received data is parsed from each interface and sent to the same thread for processing via a message queue, thereby reducing system resource consumption.

[0005] The specific implementation details of this invention are as follows: An airborne panel embedded software data processing system includes an airborne data acquisition module and an airborne data loading module; The airborne data acquisition module is used to control the data acquisition and lighting of the cockpit dashboard. The airborne data loading module is used to store critical system log information and load and provide critical flight missions and configurations.

[0006] To better realize the present invention, the airborne data loading module further includes an RS422 data parsing thread and an RS422 data sending thread; The RS422 data parsing thread is used to parse the data in the RS422 data sending thread serial port buffer according to the set protocol frame and send it to the communication receiving message queue. The RS422 data sending thread is used to call DMA to send 1 byte of data after system initialization, set the DMA status register, and wait for data in the data sending message queue in a loop. When data is needed in the message queue, DMA is called to send it, and the system delays to wait for whether the DMA sending is complete. While waiting, the CPU control is released to other threads for execution.

[0007] To better realize the present invention, the airborne data loading module further includes an Ethernet data sending thread and an Ethernet data receiving and processing thread; The Ethernet data sending thread is used to upload device status and load data. After obtaining the Ethernet sending message queue, it sends Ethernet data via socket. The Ethernet data receiving and processing thread is used to detect the socket handle status to determine whether the network cable is properly connected. When the connection is broken, the network cable hot-plug function is implemented by deleting the socket. When a valid data frame is received, the data is parsed and sent to the message queue.

[0008] To better realize the present invention, the airborne data loading module further includes a USB hard disk read / write processing thread, a basic task processing thread, and a communication data frame processing thread; The USB hard drive read / write processing thread is used to obtain data parsing from the data loading message queue and execute corresponding operations, including 2-channel RS422 data loading and logging, Ethernet data loading and logging, and device log recording; The basic task processing thread is used for device BIT status detection, LED status processing, interface data loading timeout counting, and RTC acquisition. The communication data frame processing thread is used to obtain data from the communication data message queue, parse and complete the configuration data settings, and send the data loading instructions of the RS422 interface and Ethernet interface to the data loading message queue.

[0009] To better realize the present invention, the airborne data acquisition module further includes a network port communication receiving thread and a network port communication sending thread; The network interface communication receiving thread is used to copy data to the buffer buf array when Ethernet data is received, and to process the received data when the length of the received data is greater than 0. The network port communication sending thread is used to detect whether the network is connected. If the network is normal, it checks whether there is data in the network port data sending message queue. If there is, it sends the data.

[0010] To better realize the present invention, the airborne data acquisition module further includes an RS422 communication thread and a communication processing thread; The RS422 communication thread is used to initialize RS422 related data, determine whether there is data in the RS422 buffer, and if so, parse the data in the RS422 buffer and put the data into the data receiving message queue; otherwise, determine whether there is a message in the RS422 sending data message queue, and if so, upload the data; otherwise, set a delay and continue to determine whether there is data in the RS422 buffer. The communication processing thread is used to acquire and parse the data in the communication data receiving queue, set the PWM output, discrete output, and parameter settings according to the parsed content, and reply to the corresponding host computer. It also constructs a timed upload protocol frame and judges whether its various states have changed. If so, it immediately puts the protocol frame into the timed upload protocol frame and the communication data sending message queue; otherwise, it puts it into the communication data receiving message queue at regular intervals.

[0011] To better realize the present invention, the airborne data acquisition module further includes a discrete input acquisition thread and an ADC acquisition thread; The discrete input acquisition thread is used to acquire switch button signals. By sampling the button state multiple times, it ensures that the level is stable before determining the button action, thus avoiding false triggering due to jitter. The ADC acquisition thread is used to filter the acquired data.

[0012] To better realize the present invention, the airborne data acquisition module further includes a bit self-test processing thread and a basic data processing thread; The Bit self-test processing thread is used to periodically self-test the device Bit. The basic data processing thread is used to process the LED indicator status and reset the watchdog timer.

[0013] To better realize the present invention, the airborne data acquisition module further includes a communication data receiving message queue; The communication data receiving message queue includes a message length and a message BUF. It is used to parse the received data, put the length of the command frame into the communication data receiving message queue, and finally the communication processing thread retrieves the message from the communication data receiving message queue for processing.

[0014] To better realize the present invention, the airborne data acquisition module further includes a communication data transmission queue; The communication data sending queue includes data to be sent and data identifiers, including network port 1 message sending queue, network port 2 message sending queue, RS422_1 message sending queue, RS422_2 message sending queue, and RS422_3 message sending queue. The members in the queue include length, message identifier, and data.

[0015] The present invention has the following beneficial effects: (1) The present invention sets the airborne data acquisition module to perform real-time data interaction through multiple communication interfaces. The serial port data interaction is implemented by multi-threading + DMA. The communication interface consumes low CPU resources when uploading or receiving data, thus ensuring the real-time performance of the transmission.

[0016] (2) The present invention parses the data received from each interface and sends it to the same thread for data processing through a message queue, thereby reducing the consumption of system resources. Attached Figure Description

[0017] Figure 1 The flowchart of the RS422 receiving thread processing provided by the present invention.

[0018] Figure 2 The software flowchart of the RS422 transmission thread provided by the present invention.

[0019] Figure 3 The software block diagram of the Ethernet transmission thread provided by the present invention.

[0020] Figure 4 This is a software block diagram of the Ethernet receive processing thread provided by the present invention.

[0021] Figure 5 The software flowchart for the USB hard disk read / write thread provided by this invention is shown.

[0022] Figure 6 The software block diagram for the basic task processing thread provided by this invention.

[0023] Figure 7 The software block diagram for the communication data frame processing thread provided by the present invention.

[0024] Figure 8 The flowchart of the IAP remote upgrade function provided by the present invention.

[0025] Figure 9 The flowchart of the network port 1 communication receiving thread provided by the present invention.

[0026] Figure 10 The flowchart of the communication sending thread of Network Port 1 provided by the present invention is shown.

[0027] Figure 11 The flowchart of the network interface 2 communication thread provided by the present invention.

[0028] Figure 12 The flowchart of the RS422 communication thread provided by the present invention.

[0029] Figure 13 The flowchart of the communication processing thread provided by the present invention.

[0030] Figure 14 The flowchart of the discrete input acquisition thread provided by the present invention is shown.

[0031] Figure 15 The flowchart of the ADC acquisition thread provided by this invention.

[0032] Figure 16 The flowchart of the Bit self-test processing thread provided by the present invention is shown.

[0033] Figure 17 The flowchart for sending communication data messages provided by this invention.

[0034] Figure 18 A flowchart of the communication data sending message queue provided by the present invention. Detailed Implementation

[0035] To more clearly illustrate the technical solutions of the embodiments of the present invention, the technical solutions of the embodiments of the present invention will be clearly and completely described below with reference to the accompanying drawings. It should be understood that the described embodiments are only a part of the embodiments of the present invention, and not all of the embodiments, and therefore should not be regarded as a limitation on the scope of protection. Based on the embodiments of the present invention, all other embodiments obtained by those skilled in the art without creative effort are within the scope of protection of the present invention.

[0036] In the description of this invention, it should be noted that, unless otherwise explicitly specified and limited, the terms "set up," "connected," and "linked" should be interpreted broadly. For example, they can refer to a fixed connection, a detachable connection, or an integral connection; they can refer to a mechanical connection or an electrical connection; they can refer to a direct connection or an indirect connection through an intermediate medium; and they can refer to the internal connection of two components. Those skilled in the art can understand the specific meaning of the above terms in this invention based on the specific circumstances.

[0037] Example 1: This embodiment proposes an airborne panel embedded software data processing system, including an airborne data acquisition module and an airborne data loading module; The airborne data acquisition module is used to control the data acquisition and lighting of the cockpit dashboard. The airborne data loading module is used to store critical system log information and load and provide critical flight missions and configurations.

[0038] Working principle: This embodiment stores key system log information and loads key flight missions and configurations by setting up an airborne data loading module; after parsing the data received from each interface, the data is sent to the same thread for data processing through a message queue, which reduces system resource consumption.

[0039] Example 2: This embodiment describes the airborne data loading module based on a specific example of Embodiment 1 described above.

[0040] The airborne data loading module includes an RS422 data parsing thread and an RS422 data sending thread; The RS422 data parsing thread is used to parse the data in the RS422 data sending thread serial port buffer according to the set protocol frame and send it to the communication receiving message queue. The RS422 data sending thread is used to call DMA to send 1 byte of data after system initialization, set the DMA status register, and wait for data in the data sending message queue in a loop. When data is needed in the message queue, DMA is called to send it, and the system delays to wait for whether the DMA sending is complete. While waiting, the CPU control is released to other threads for execution.

[0041] like Figure 1 As shown, in this embodiment, the RS422 serial port parsing thread processes the data in the RS422 Port1 and RS422 Port2 serial port buffers, parses the data according to the specified protocol frame, and sends the parsed data to the communication receive message queue.

[0042] like Figure 2 As shown, the RS422 data transmission thread uses a message queue plus DMA for automatic transmission. After system initialization, it sends 1 byte of data by calling DMA, sets the DMA status register, and waits for data in the data transmission message queue in a loop. When data is needed in the message queue, it calls DMA to send the data and waits for the DMA transmission to complete by delaying the system. While waiting, it releases the CPU control to other threads for execution.

[0043] The airborne data loading module also includes an Ethernet data sending thread and an Ethernet data receiving and processing thread. The Ethernet data sending thread is used to upload device status and load data. After obtaining the Ethernet sending message queue, it sends Ethernet data via socket. The Ethernet data receiving and processing thread is used to detect the socket handle status to determine whether the network cable is properly connected. When the connection is broken, the network cable hot-plug function is implemented by deleting the socket. When a valid data frame is received, the data is parsed and sent to the message queue.

[0044] like Figure 3 As shown, the Ethernet sending thread is used for device status and data loading. After obtaining the Ethernet sending message queue, it sends Ethernet data via socket.

[0045] like Figure 4The Ethernet receiving thread shown enters receiving mode after initializing and binding the IP and port. It has the function of hot-plugging the network cable. It determines whether the network cable is properly connected by detecting the socket handle status. When the connection is broken, the hot-plugging function is realized by deleting the socket. When a valid data frame is received, the data is parsed and sent to the message queue.

[0046] The airborne data loading module also includes a USB hard disk read / write processing thread, a basic task processing thread, and a communication data frame processing thread; The USB hard drive read / write processing thread is used to obtain data parsing from the data loading message queue and execute corresponding operations, including 2-channel RS422 data loading and logging, Ethernet data loading and logging, and device log recording; like Figure 5 As shown, the USB hard drive read / write processing thread obtains data from the data loading message queue, parses the data, and performs corresponding operations, including 2-channel RS422 data loading and logging, Ethernet data loading and logging, and device log recording.

[0047] like Figure 6 As shown, the basic processing equipment includes BIT status detection, LED status processing, data loading timeout counting for each interface, and RTC acquisition.

[0048] The basic task processing thread is used for device BIT status detection, LED status processing, interface data loading timeout counting, and RTC acquisition. The communication data frame processing thread is used to obtain data from the communication data message queue, parse and complete the configuration data settings, and send the data loading instructions of the RS422 interface and Ethernet interface to the data loading message queue.

[0049] like Figure 7 As shown, the communication data frame processing thread acquires data from the communication data message queue and parses it to complete functions such as configuration data settings, RTC settings, and hard disk data destruction. It then sends data loading commands from the RS422 and Ethernet interfaces to the data loading message queue.

[0050] The other parts of this embodiment are the same as those in Embodiment 1 above, so they will not be described again.

[0051] Example 3: This embodiment describes the airborne data acquisition module based on any one of the above embodiments 1-2, using a specific embodiment.

[0052] like Figure 8As shown, the airborne data acquisition module has an IAP remote upgrade function. This function can upgrade the chip's program via an RS422 serial port. Upon power-up, the program has a 3-second wait period to see if the host computer sends an update command. If so, it first backs up the existing program on the chip, and then the host computer transmits the upgraded program. Otherwise, it runs the existing program on the chip. Backing up the old program here is to prevent update failures or rollbacks of previous programs.

[0053] The airborne data acquisition module includes a network port communication receiving thread and a network port communication sending thread; The network interface communication receiving thread is used to copy data to the buffer buf array when Ethernet data is received, and to process the received data when the length of the received data is greater than 0. The network port communication sending thread is used to detect whether the network is connected. If the network is normal, it checks whether there is data in the network port data sending message queue. If there is, it sends the data.

[0054] like Figure 9 As shown, Ethernet communication uses UDP. A socket is used; when Ethernet data is received, it is copied to a buffer array (buf). When the length of the received data is greater than 0, the received data is processed.

[0055] like Figure 10 As shown, the main function of the network port 1 communication sending thread is to detect whether the network is connected. If the network is normal, it checks whether there is data in the network port 1 data sending message queue. If there is, it sends the data.

[0056] like Figure 11 As shown, network port 2 adopts the hardware circuit method of external network port chip. The chip and MCU use SPI transmission method, and its main functions are the same as those of network port 1.

[0057] The airborne data acquisition module also includes an RS422 communication thread and a communication processing thread; The RS422 communication thread is used to initialize RS422 related data, determine whether there is data in the RS422 buffer, and if so, parse the data in the RS422 buffer and put the data into the data receiving message queue; otherwise, determine whether there is a message in the RS422 sending data message queue, and if so, upload the data; otherwise, set a delay and continue to determine whether there is data in the RS422 buffer. The communication processing thread is used to acquire and parse the data in the communication data receiving queue, set the PWM output, discrete output, and parameter settings according to the parsed content, and reply to the corresponding host computer. It also constructs a timed upload protocol frame and judges whether its various states have changed. If so, it immediately puts the protocol frame into the timed upload protocol frame and the communication data sending message queue; otherwise, it puts it into the communication data receiving message queue at regular intervals.

[0058] like Figure 12 As shown, this embedded function mainly has 3 RS422 serial ports. Each RS422 has an independent thread to handle related business. Their functions are basically the same. Data transmission and reception are carried out using DMA. a) Data reception is processed asynchronously. b) Data transmission mainly depends on whether there are messages in the RS422 communication message queue.

[0059] like Figure 13 As shown, the communication processing thread works as follows: it acquires and parses data from the communication data receiving queue, sets the PWM output, discrete output, and parameter settings based on the parsed content, and simultaneously replies to the corresponding host computer. It constructs a timed upload protocol frame (including discrete input status, ADC acquisition value, and bit self-test status) and checks if any of its states have changed. If so, it immediately puts the protocol frame into the timed upload protocol frame queues of network port 1, network port 2, RS422_1, RS422_2, and RS422_3 communication data sending message queues; otherwise, it puts it into the communication data sending message queues every 200ms.

[0060] The airborne data acquisition module also includes a discrete input acquisition thread and an ADC acquisition thread; The discrete input acquisition thread is used to acquire switch button signals. By sampling the button state multiple times, it ensures that the level is stable before determining the button action, thus avoiding false triggering due to jitter. like Figure 14 As shown, discrete input acquisition of switch button signals, and multiple sampling of button states to ensure level stability before determining button action, thus avoiding false triggering due to jitter.

[0061] The ADC acquisition thread is used to filter the acquired data.

[0062] like Figure 15 As shown, the ADC acquisition mainly uses an external chip for acquisition hardware circuitry. This chip communicates with the MCU via SPI, and after acquiring the data, it performs filtering processing on the data.

[0063] The airborne data acquisition module also includes a bit self-test processing thread and a basic data processing thread; The Bit self-test processing thread is used to periodically self-test the device Bit. like Figure 16 As shown, the BIT detection and basic data processing thread includes device bit cycle self-test, which includes the stack usage of each thread, 5V power supply status, 3.3V power supply status, board temperature, network status detection, communication status detection, etc.

[0064] The basic data processing thread is used to process the LED indicator status and reset the watchdog timer.

[0065] The airborne data acquisition module also includes a communication data receiving message queue; The communication data receiving message queue includes a message length and a message BUF. It is used to parse the received data, put the length of the command frame into the communication data receiving message queue, and finally the communication processing thread retrieves the message from the communication data receiving message queue for processing.

[0066] like Figure 17 As shown, the communication data receiving message queue consists of a message length and a message buffer. The system receives data from RS422 interface 1, RS422 interface 2, RS422 interface 3, Ethernet interface 1, and Ethernet interface 2, then parses the data commands, and places the length of the command frame into the communication data receiving message queue. Finally, the communication processing thread retrieves messages from the communication data receiving message queue for processing (including setting configuration data, PWM data, and discrete output status).

[0067] The airborne data acquisition module also includes a communication data transmission queue; The communication data sending queue includes data to be sent and data identifiers, including network port 1 message sending queue, network port 2 message sending queue, RS422_1 message sending queue, RS422_2 message sending queue, and RS422_3 message sending queue. The members in the queue include length, message identifier, and data.

[0068] like Figure 18 As shown, the communication data transmission message mainly consists of five queues, each containing the data to be transmitted and a data identifier. These queues are: Network Port 1 message transmission queue, Network Port 2 message transmission queue, RS422_1 message transmission queue, RS422_2 message transmission queue, and RS422_3 message transmission queue. The members in each queue include: length, message identifier, and data.

[0069] The other parts of this embodiment are the same as any one of the above embodiments 1-2, so they will not be described again.

[0070] The above description is merely a preferred embodiment of the present invention and is not intended to limit the present invention in any way. Any simple modifications or equivalent changes made to the above embodiments based on the technical essence of the present invention shall fall within the protection scope of the present invention.

Claims

1. An airborne panel embedded software data processing system, characterized in that, Includes an airborne data acquisition module and an airborne data loading module; The airborne data acquisition module is used to control the data acquisition and lighting of the cockpit dashboard. The airborne data loading module is used to store critical system log information and load and provide critical flight missions and configurations.

2. The airborne panel embedded software data processing system according to claim 1, characterized in that, The airborne data loading module includes an RS422 data parsing thread and an RS422 data sending thread; The RS422 data parsing thread is used to parse the data in the RS422 data sending thread serial port buffer according to the set protocol frame and send it to the communication receiving message queue. The RS422 data sending thread is used to call DMA to send 1 byte of data after system initialization, set the DMA status register, and wait for data in the data sending message queue in a loop. When there is data in the message queue, DMA is called to send the data, and the system delays to wait for whether the DMA sending is complete. While waiting, the CPU control is released to other threads for execution.

3. The airborne panel embedded software data processing system according to claim 2, characterized in that, The airborne data loading module also includes an Ethernet data sending thread and an Ethernet data receiving and processing thread. The Ethernet data sending thread is used to upload device status and load data. After obtaining the Ethernet sending message queue, it sends Ethernet data through a socket. The Ethernet data receiving and processing thread is used to detect the socket handle status to determine whether the network cable is properly connected. When the connection is broken, the network cable hot-plug function is implemented by deleting the socket. When a valid data frame is received, the data is parsed and sent to the message queue.

4. The airborne panel embedded software data processing system according to claim 2, characterized in that, The airborne data loading module also includes a USB hard disk read / write processing thread, a basic task processing thread, and a communication data frame processing thread; The USB hard drive read / write processing thread is used to obtain data parsing from the data loading message queue and execute corresponding operations, including 2-channel RS422 data loading and logging, Ethernet data loading and logging, and device log recording; The basic task processing thread is used for device BIT status detection, LED status processing, interface data loading timeout counting, and RTC acquisition. The communication data frame processing thread is used to obtain data from the communication data message queue, parse and complete the configuration data settings, and send the data loading instructions of the RS422 interface and Ethernet interface to the data loading message queue.

5. The airborne panel embedded software data processing system according to claim 1, characterized in that, The airborne data acquisition module includes a network port communication receiving thread and a network port communication sending thread; The network interface communication receiving thread is used to copy data to the buffer buf array when Ethernet data is received, and to process the received data when the length of the received data is greater than 0. The network port communication sending thread is used to detect whether the network is connected. If the network is normal, it checks whether there is data in the network port data sending message queue. If there is, it sends the data.

6. The airborne panel embedded software data processing system according to claim 5, characterized in that, The airborne data acquisition module also includes an RS422 communication thread and a communication processing thread; The RS422 communication thread is used to initialize RS422 related data, determine whether there is data in the RS422 buffer, and if so, parse the data in the RS422 buffer and put the data into the data receiving message queue; otherwise, determine whether there is a message in the RS422 sending data message queue, and if so, upload the data; otherwise, set a delay and continue to determine whether there is data in the RS422 buffer. The communication processing thread is used to acquire and parse the data in the communication data receiving queue, set the PWM output, discrete output, and parameter settings according to the parsed content, and reply to the corresponding host computer. It also constructs a timed upload protocol frame and judges whether its various states have changed. If so, it immediately puts the protocol frame into the timed upload protocol frame and the communication data sending message queue; otherwise, it puts it into the communication data receiving message queue at regular intervals.

7. The airborne panel embedded software data processing system according to claim 5, characterized in that, The airborne data acquisition module also includes a discrete input acquisition thread and an ADC acquisition thread; The discrete input acquisition thread is used to acquire switch button signals. By sampling the button state multiple times, it ensures that the level is stable before determining the button action, thus avoiding false triggering due to jitter. The ADC acquisition thread is used to filter the acquired data.

8. The airborne panel embedded software data processing system according to claim 5, characterized in that, The airborne data acquisition module also includes a bit self-test processing thread and a basic data processing thread; The Bit self-test processing thread is used to periodically self-test the device Bit. The basic data processing thread is used to process the LED indicator status and reset the watchdog timer.

9. The airborne panel embedded software data processing system according to claim 5, characterized in that, The airborne data acquisition module also includes a communication data receiving message queue; The communication data receiving message queue includes a message length and a message BUF. It is used to parse the received data, put the length of the command frame into the communication data receiving message queue, and finally the communication processing thread retrieves the message from the communication data receiving message queue for processing.

10. The airborne panel embedded software data processing system according to claim 5, characterized in that, The airborne data acquisition module also includes a communication data transmission queue; The communication data sending queue includes data to be sent and data identifiers, including network port 1 message sending queue, network port 2 message sending queue, RS422_1 message sending queue, RS422_2 message sending queue, and RS422_3 message sending queue. The members in the queue include length, message identifier, and data.