Library Architecture - Infineon/pas-co2-sensor GitHub Wiki
The PAS CO2 Sensor library follows the architecture shown in the stack diagram:
The monolithic core library can be universally integrated across any low level peripheral drivers, embedded operating system, and middleware of each software framework.
The reusability and interoperability is achieved by defining a Platform Abstraction Layer (PAL) interface which is implemented by each framework for its specific hardware abstraction layer and operating system resources APIs.
Additionally, the core library API is accommodated and adapted to the particularities of each software framework. The framework API wrappers intend to harmonize the core library API with that of the software development framework in which it is integrated, making it easier for the users already familiarized with the development framework.
The support for the multiple hardware platforms is then provided by each development framework.
The specific PAS CO2 Sensor library modules are depicted more specifically below:
In the next sections, the information of the main architecture modules for the PAS CO2 Sensor library is extended.
Core Library
The core library contains all the library logic and high level functionalities of the sensor peripheral. The core library remains C++ agnostic by interacting with the specific platform (and framework) through a Platform Abstraction Layer interface. No other dependencies than standard C/C++ modules and the PAL are found in these sources.
Two high level API classes are provided to operate the sensor. The PASCO2Serial class enables the sensor features available using the I2C or UART interfaces. On the other hand, the PASCO2Pulse class supports the PWM output based sensor interface. Both are derived classes from the PASCO2 class, which provides a more granular and lower level API. It groups all sensor features, interfaces and sensor configuration options in one class. Find more information in the PAS CO2 Serial API and PAS CO2 Pulse API sections.
Below these APIs the registers, I2C, PWM, and UART modules are implemented in terms of different classes. For those with hardware dependencies, their lower level access are based on the PAL interfaces defined for the library. The logger support is also included here. As this is more an utility, it might be made an independent module in future.
These code sources can be found under "src/corelib".
Platform Abstraction Layer (PAL) Interface
The Platform Abstraction Layer Interface is implemented via abstract C++ classes declaring all the necessary platform resources and functionalities that need to be provided by the specific framework-platform implementation.
The PAL CO2 Sensor specifies in its PAL modules a GPIO class, Timer class, I2C class, UART class, PWM class and Logger class. Its implementation is located in the "src/pal" folder.
The PAL interfaces functions, behavior description, and implementation details, can be found in the PAL Interface section.
Framework PAL
The PAL interface is defined for each embedded software framework through its low level peripheral drivers and operating system resources APIs. The abstract classes declared in the "src/pal" sources are inherited and defined in this layer.
The "src/framework/sample_fmwk/pal" folder contains the PAL implementation for the particular framework.
Find more information about the supported software development frameworks in the Software Frameworks section.
Framework API Wrapper
The idea behind this layer is to adapt the library in order to comply with the programming conventions of the integrated programming framework or ecosystem.
Operating system libraries, low level driver of hardware peripherals (digital input/outputs, PWM, analog conversion, etc.) or other middleware resources are implemented for each development framework following certain patterns for functions, parameters, and primitive types.
At these level, certain platform functionalities required by PAS CO2 Sensor can be already defined and adapted to the API available resources: functions prototypes, framework core libraries, low level driver HAL, programming patterns, and even framework feel and look aspects.
The frameworks wrapper API files are located in the "src/framework/sample_fmwk/wrapper" folders.
Find more information about each software development frameworks API in the Software Frameworks section.
Predefined Hardware Platforms
Given a particular hardware platform and development software framework, most of the resources and its configuration can be already determined by default. This part of the framework API just define some pre-configured instances for common and officially supported evaluation kits based configurations.
These instances are available in the "src/framework/sample_fmwk/wrapper/pas-co2-platf-xxx.hpp/cpp" source files.
Check out the supported ones in the Hardware Platforms section.