HFCC-01 Low-Level Software (LLSW) Rel_6802_HFCC-01-RP-CSAR-CB
Loading...
Searching...
No Matches
discreteOut.h File Reference
#include "commonDataTypes.h"
#include "driverStatus.h"
Include dependency graph for discreteOut.h:
discreteOut.h Node1 discreteOut.h Node2 commonDataTypes.h Node1->Node2 Node3 driverStatus.h Node1->Node3
This graph shows which files directly or indirectly include this file:
discreteOut.h Node1 discreteOut.h Node2 discreteOut.c Node1->Node2 Node3 modDiscreteOut.c Node1->Node3 Node4 modHsb.c Node1->Node4

Go to the source code of this file.

Data Structures

struct  DOutPbitStatus
 Discrete Output Power-On Built-In Test (PBIT) Diagnostic Status Structure. More...
struct  DOutCbit1ChSGSubStatus
 Discrete Output Bank 1 Supply-Ground (SG) Sub-Channel CBIT Diagnostic Status Structure. More...
struct  DOutCbit1ChSGStatus
 Discrete Output Bank 1 Supply-Ground (SG) Channel CBIT Status Structure. More...
struct  DOutCbit1ChStatus
 Discrete Output Bank 1 Channel CBIT Diagnostic Bitfield Structure. More...
struct  DOutCbit2ChStatus
 Discrete Output Bank 2 Channel CBIT Diagnostic Bitfield Structure. More...
struct  DOutCbit2ChSGSubStatus
 Discrete Output Bank 2 Supply-Ground (SG) Sub-Channel CBIT Diagnostic Status Structure. More...
struct  DOutCbit2ChSGStatus
 Discrete Output Bank 2 Supply-Ground (SG) Channel CBIT Status Structure. More...
struct  DOutCbit1Status
 Discrete Output Bank 1 Complete CBIT Diagnostic Status Structure. More...
struct  DOutCbit2Status
 Discrete Output Bank 2 Complete CBIT Diagnostic Status Structure. More...
struct  DOutCbitStatus
 Discrete Output Composite Dual-Bank CBIT Diagnostic Status Structure. More...
struct  DOutBankCfg
 Discrete Output Hardware Bank Overvoltage and Underload Configuration Structure. More...
struct  DOutDevHandler
 Discrete Output Peripheral Hardware Device Handler Structure. More...

Macros

#define DOUT_MFB_MAX   (2U)
#define DOUT_DEV_MAX   (11U)

Enumerations

enum  DOutBITState { DOUT_BIT_PASS = 0U , DOUT_BIT_FAIL = 1U }
 Discrete Output Built-In Test (BIT) Pass/Fail Evaluation State. More...

Functions

DriverStatus discreteOut_reset (const DOutDevHandler dOutDevHdl)
 discreteOut_reset.
DriverStatus discreteOut_getPbit (const DOutDevHandler dOutDevHdl, DOutPbitStatus *pbitStatus, const UInt8 devNum)
 discreteOut_getPbit.
DriverStatus discreteOut_getCbit (const DOutDevHandler dOutDevHdl, DOutCbitStatus *cbitStatus, const UInt8 devNum)
 discreteOut_getCbit.
DriverStatus discreteOut_getTemp (const DOutDevHandler dOutDevHdl, Float32 *temp)
 discreteOut_getTemp.
DriverStatus discreteOut_devicesConfig (const DOutDevHandler dOutDevHdl, const DOutBankCfg bankConfig)
 discreteOut_devicesConfig.
DriverStatus discreteOut_writeChState (const DOutDevHandler dOutDevHdl, const UInt8 channelNum, const Bool dOutLogic)
 discreteOut_writeChState.

Detailed Description

Author
Ramza Anuar ramza.nosp@m..anu.nosp@m.ar@tu.nosp@m.sas..nosp@m.my

Discrete Output device driver header file

Macro Definition Documentation

◆ DOUT_DEV_MAX

#define DOUT_DEV_MAX   (11U)

◆ DOUT_MFB_MAX

#define DOUT_MFB_MAX   (2U)

Enumeration Type Documentation

◆ DOutBITState

Discrete Output Built-In Test (BIT) Pass/Fail Evaluation State.

Enumerator
DOUT_BIT_PASS 

Discrete Output BIT for NO ERROR condition is 0.

DOUT_BIT_FAIL 

Discrete Output BIT for ERROR condition is 1.

Discrete Output BIT for ERROR condition is 1.

Function Documentation

◆ discreteOut_devicesConfig()

DriverStatus discreteOut_devicesConfig ( const DOutDevHandler dOutDevHdl,
const DOutBankCfg bankConfig )

discreteOut_devicesConfig.

discreteOut set device configuration.

Parameters
[in]dOutDevHdlThe discrete output device handler.
[in]bankConfigThe bank configuration value.
Returns
DriverStatus - Driver status return code, If no error occurs during the operation of the function, it returns DRV_SUCCESS. Otherwise related error message is returned.
Return values
DRV_SUCCESS: Success.
DRV_WRITE_FAILED: Failed to write to the device or module.
DRV_READ_FAILED: Failed to read from the device or module.

Low-Level Software Requirements (LLR)

Low-Level Requirement Specification: discreteOut_devicesConfig

Requirement ID Parent HLR ID Detailed Low-Level Requirement Statement (EARS Format) Software Unit Reference Verification Method Status
LLR_DISCRETEOUT_DISCRETEOUT_DEVICESCONFIG_01 HLR_DOUT_39816 WHEN invoked, the discreteOut_devicesConfig() function SHALL read the current bank configuration register MMAP_DOUT_BANK_CFG_DEV using readDiscreteOutReg(). discreteOut.c:discreteOut_devicesConfig() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_DEVICESCONFIG_02 HLR_DOUT_39816 WHEN the register read operation fails (status not equal to DRV_SUCCESS), the discreteOut_devicesConfig() function SHALL abort processing and return that failure status. discreteOut.c:discreteOut_devicesConfig() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_DEVICESCONFIG_03 HLR_DOUT_39816 WHEN bank configuration overvoltage is enabled (bankConfig.overVoltage is TRUE), the discreteOut_devicesConfig() function SHALL set bit 0 in the configuration word. discreteOut.c:discreteOut_devicesConfig() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_DEVICESCONFIG_04 HLR_DOUT_39816 WHEN bank configuration overvoltage is disabled (bankConfig.overVoltage is FALSE), the discreteOut_devicesConfig() function SHALL clear bit 0 in the configuration word. discreteOut.c:discreteOut_devicesConfig() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_DEVICESCONFIG_05 HLR_DOUT_39816 WHEN bank configuration underload is enabled (bankConfig.underLoad is TRUE), the discreteOut_devicesConfig() function SHALL set bit 1 in the configuration word. discreteOut.c:discreteOut_devicesConfig() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_DEVICESCONFIG_06 HLR_DOUT_39816 WHEN bank configuration underload is disabled (bankConfig.underLoad is FALSE), the discreteOut_devicesConfig() function SHALL clear bit 1 in the configuration word. discreteOut.c:discreteOut_devicesConfig() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_DEVICESCONFIG_07 HLR_DOUT_39816 WHEN bank configuration bits are updated, the discreteOut_devicesConfig() function SHALL write the configured word to register MMAP_DOUT_BANK_CFG_DEV using writeDiscreteOutReg(). discreteOut.c:discreteOut_devicesConfig() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_DEVICESCONFIG_08 HLR_DOUT_39816 WHEN all operational processing completes successfully, the discreteOut_devicesConfig() function SHALL return DRV_SUCCESS. discreteOut.c:discreteOut_devicesConfig() Test Closed

Control Coupling Diagram (CCD)

ControlCouplingStructureChart Caller discreteOut_devicesConfig() [Low-Level Device Drivers] Target readDiscreteOutReg() [Low-Level Driver Helper] Caller:s->Target:n l_t0->l_b0   dOutDevHdl (Flag) l_t1->l_b1   bankConfig (Flag) r_b0->r_t0   statusCode (DriverStatus)
Control Coupling Structure Chart

Data Coupling Diagram (DCD)

DataCouplingStructureChart Caller discreteOut_devicesConfig() [Low-Level Device Drivers] Target readDiscreteOutReg() [Low-Level Driver Helper] Caller:s->Target:n l_t0->l_b0   dOutDevHdl (Payload) l_t1->l_b1   bankConfig (Payload) r_b0->r_t0   stateTelemetry (Internal State)
Data Coupling Structure Chart

Control Flow Diagram (CFD)

cfd_discreteOut_devicesConfig start Entry: discreteOut_devicesConfig() guard_1 LLR_01: Guard Check Is a driver operation reports a failure status other than DRV_SUCCESS? start->guard_1 err_exit_1 LLR_01 Error Exit abort processing and return `retStatus` guard_1->err_exit_1 YES (TRUE) guard_2 LLR_02: Guard Check Is `bankConfig.overVoltage` is equal to `TRUE`? guard_1->guard_2 err_exit_2 LLR_02 Error Exit execute conditional operational branch guard_2->err_exit_2 YES (TRUE) guard_3 LLR_03: Guard Check Is `bankConfig.underLoad` is equal to `TRUE`? guard_2->guard_3 err_exit_3 LLR_03 Error Exit execute conditional operational branch guard_3->err_exit_3 YES (TRUE) act_4 LLR_04: Action Step read the device block members memory offset (DOUT_BANK_CFG_DEV) at physical offset `0x0000` (`MMAP_DOUT_BANK_CFG_DEV`) using `readDiscreteOutReg()` guard_3->act_4 NO (FALSE) act_5 LLR_05: Action Step write the device block members memory offset (DOUT_BANK_CFG_DEV) at physical offset `0x0000` (`MMAP_DOUT_BANK_CFG_DEV`) using `writeDiscreteOutReg()` act_4->act_5 success_exit LLR_06: Final Exit return `DRV_SUCCESS` act_5->success_exit
Control Flow Diagram

Data Flow Diagram (DFD)

dfd_discreteOut_devicesConfig in_store Input Data Sources & Parameters • dOutDevHdl (const DOutDevHandler) • bankConfig (const DOutBankCfg) proc_1 LLR_01: Data Validation Check • Evaluate Parameter / State: retStatus in_store->proc_1 Validated Input Data proc_2 LLR_02: Data Validation Check • Evaluate Parameter / State: bankConfig proc_1->proc_2 Validated Input Data proc_3 LLR_03: Data Validation Check • Evaluate Parameter / State: bankConfig proc_2->proc_3 Validated Input Data proc_4 LLR_04: Data Payload Transformation • Process payload via readDiscreteOutReg() proc_3->proc_4 Data Payload (readDiscreteOutReg) proc_5 LLR_05: Data Payload Transformation • Process payload via writeDiscreteOutReg() proc_4->proc_5 Data Payload (writeDiscreteOutReg) proc_6 LLR_06: Status Output Packaging • Format Return Payload: DriverStatus proc_5->proc_6 Final Output Data out_sink Output Data Sinks & Status Return • Status Payload (DriverStatus) proc_6->out_sink Output Data & Status Code
Data Flow Diagram
Here is the call graph for this function:
discreteOut_devicesConfig Node1 discreteOut_devicesConfig Node1->Node1 Node2 readDiscreteOutReg Node1->Node2 Node6 writeDiscreteOutReg Node1->Node6 Node2->Node2 Node3 interDrv_Read32 Node2->Node3 Node3->Node3 Node4 interDrv_isAddressValid Node3->Node4 Node5 memoryMap_Read32 Node3->Node5 Node4->Node4 Node5->Node5 Node6->Node6 Node7 interDrv_Write32 Node6->Node7 Node7->Node4 Node7->Node7 Node8 memoryMap_Write32 Node7->Node8 Node8->Node8
Here is the caller graph for this function:
discreteOut_devicesConfig Node1 discreteOut_devicesConfig Node1->Node1 Node2 modDiscreteOut_devicesConfig Node1->Node2 Node2->Node2

◆ discreteOut_getCbit()

DriverStatus discreteOut_getCbit ( const DOutDevHandler dOutDevHdl,
DOutCbitStatus * cbitStatus,
const UInt8 devNum )

discreteOut_getCbit.

discreteOut get CBIT status.

Parameters
[in]dOutDevHdlThe discrete output device handler.
[out]cbitStatusThe pointer of CBIT status value.
[in]devNumThe discrete output device number.
Returns
DriverStatus - Driver status return code, If no error occurs during the operation of the function, it returns DRV_SUCCESS. Otherwise related error message is returned.
Return values
DRV_SUCCESS: Success.
DRV_READ_FAILED: Failed to read from the device or module.
DRV_INVALID_PARAM: The provided address pointer is invalid.

Low-Level Software Requirements (LLR)

Low-Level Requirement Specification: discreteOut_getCbit

Requirement ID Parent HLR ID Detailed Low-Level Requirement Statement (EARS Format) Software Unit Reference Verification Method Status
LLR_DISCRETEOUT_DISCRETEOUT_GETCBIT_01 HLR_DOUT_23590 WHEN the pointer cbitStatus is NULL (invalid), the discreteOut_getCbit() function SHALL abort processing and return DRV_INVALID_PARAM. discreteOut.c:discreteOut_getCbit() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_GETCBIT_02 HLR_DOUT_23590 WHEN devNum is between 0 and 7, the discreteOut_getCbit() function SHALL select device bank index 0. discreteOut.c:discreteOut_getCbit() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_GETCBIT_03 HLR_DOUT_23590 WHEN devNum is between 8 and 10, the discreteOut_getCbit() function SHALL select device bank index 1. discreteOut.c:discreteOut_getCbit() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_GETCBIT_04 HLR_DOUT_23590 WHEN the device bank index is resolved, the discreteOut_getCbit() function SHALL read the CBIT status register MMAP_DOUT_CBIT_STATUS using readDiscreteOutReg(). discreteOut.c:discreteOut_getCbit() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_GETCBIT_05 HLR_DOUT_23590 WHEN the CBIT status register is read successfully, the discreteOut_getCbit() function SHALL unpack hardware telemetry bits for power good, over/under temperature, overvoltage lockout, and underload shutdown for the specified device into cbitStatus. discreteOut.c:discreteOut_getCbit() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_GETCBIT_06 HLR_DOUT_23590 WHEN all operational processing completes successfully, the discreteOut_getCbit() function SHALL return DRV_SUCCESS. discreteOut.c:discreteOut_getCbit() Test Closed

Control Coupling Diagram (CCD)

ControlCouplingStructureChart Caller discreteOut_getCbit() [Low-Level Device Drivers] Target memoryOper_set() [Low-Level Driver Helper] Caller:s->Target:n l_t0->l_b0   dOutDevHdl (Flag) l_t1->l_b1   devNum (Flag) r_b0->r_t0   statusCode (DriverStatus)
Control Coupling Structure Chart

Data Coupling Diagram (DCD)

DataCouplingStructureChart Caller discreteOut_getCbit() [Low-Level Device Drivers] Target memoryOper_set() [Low-Level Driver Helper] Caller:s->Target:n l_t0->l_b0   dOutDevHdl (Payload) l_t1->l_b1   devNum (Payload) r_b0->r_t0   *cbitStatus (Output Data)
Data Coupling Structure Chart

Control Flow Diagram (CFD)

cfd_discreteOut_getCbit start Entry: discreteOut_getCbit() guard_1 LLR_01: Guard Check Is the pointer `cbitStatus` is NULL (invalid)? start->guard_1 err_exit_1 LLR_01 Error Exit abort processing and return `DRV_INVALID_PARAM` guard_1->err_exit_1 YES (TRUE) guard_2 LLR_02: Guard Check Is `devNum` is equal to `0` or `devNum` is equal to `1` or `devNum` is equal to `2` or `devNum` is equal to `3` or `devNum` is equal to `4` or `devNum` is equal to `5` or `devNum` is equal to `6` or `devNum` is equal to `7`? guard_1->guard_2 err_exit_2 LLR_02 Error Exit execute conditional operational branch guard_2->err_exit_2 YES (TRUE) guard_3 LLR_03: Guard Check Is `devNum` is equal to `8` or `devNum` is equal to `9` or `devNum` is equal to `10`? guard_2->guard_3 err_exit_3 LLR_03 Error Exit execute conditional operational branch guard_3->err_exit_3 YES (TRUE) guard_4 LLR_04: Guard Check Is a driver operation reports a failure status other than DRV_SUCCESS? guard_3->guard_4 err_exit_4 LLR_04 Error Exit abort processing and return `retStatus` guard_4->err_exit_4 YES (TRUE) guard_5 LLR_05: Guard Check Is (`devIdx` is equal to `0`) && (`devNum` is equal to `0`)? guard_4->guard_5 err_exit_5 LLR_05 Error Exit execute conditional operational branch guard_5->err_exit_5 YES (TRUE) guard_6 LLR_06: Guard Check Is (`devIdx` is equal to `1`) && (`devNum` is equal to `0`)? guard_5->guard_6 err_exit_6 LLR_06 Error Exit execute conditional operational branch guard_6->err_exit_6 YES (TRUE) guard_7 LLR_07: Guard Check Is `devNum` is equal to `0`? guard_6->guard_7 err_exit_7 LLR_07 Error Exit execute conditional operational branch guard_7->err_exit_7 YES (TRUE) guard_8 LLR_08: Guard Check Is `devNum` is equal to `1`? guard_7->guard_8 err_exit_8 LLR_08 Error Exit execute conditional operational branch guard_8->err_exit_8 YES (TRUE) guard_9 LLR_09: Guard Check Is `devNum` is equal to `2`? guard_8->guard_9 err_exit_9 LLR_09 Error Exit execute conditional operational branch guard_9->err_exit_9 YES (TRUE) guard_10 LLR_10: Guard Check Is `devNum` is equal to `3`? guard_9->guard_10 err_exit_10 LLR_10 Error Exit execute conditional operational branch guard_10->err_exit_10 YES (TRUE) guard_11 LLR_11: Guard Check Is `devNum` is equal to `4`? guard_10->guard_11 err_exit_11 LLR_11 Error Exit execute conditional operational branch guard_11->err_exit_11 YES (TRUE) guard_12 LLR_12: Guard Check Is `devNum` is equal to `5`? guard_11->guard_12 err_exit_12 LLR_12 Error Exit execute conditional operational branch guard_12->err_exit_12 YES (TRUE) guard_13 LLR_13: Guard Check Is `devNum` is equal to `6`? guard_12->guard_13 err_exit_13 LLR_13 Error Exit execute conditional operational branch guard_13->err_exit_13 YES (TRUE) guard_14 LLR_14: Guard Check Is `devNum` is equal to `7`? guard_13->guard_14 err_exit_14 LLR_14 Error Exit execute conditional operational branch guard_14->err_exit_14 YES (TRUE) guard_15 LLR_15: Guard Check Is `devNum` is equal to `8`? guard_14->guard_15 err_exit_15 LLR_15 Error Exit execute conditional operational branch guard_15->err_exit_15 YES (TRUE) guard_16 LLR_16: Guard Check Is `devNum` is equal to `9`? guard_15->guard_16 err_exit_16 LLR_16 Error Exit execute conditional operational branch guard_16->err_exit_16 YES (TRUE) guard_17 LLR_17: Guard Check Is `devNum` is equal to `10`? guard_16->guard_17 err_exit_17 LLR_17 Error Exit execute conditional operational branch guard_17->err_exit_17 YES (TRUE) act_18 LLR_18: Action Step invoke routine `memoryOper_set()` to execute target subsystem hardware operation guard_17->act_18 NO (FALSE) act_19 LLR_19: Action Step read the Discrete Output CBIT Status Register (CBIT_STATUS) at physical offset `0x005C` (`MMAP_DOUT_CBIT_STATUS`) using `readDiscreteOutReg()` act_18->act_19 act_20 LLR_20: Action Step invoke bitwise routine `READ_BIT()` to extract target channel status bit from register payload act_19->act_20 act_21 LLR_21: Action Step invoke routine `GET_HB_FIELD()` to execute target subsystem hardware operation act_20->act_21 success_exit LLR_22: Final Exit return `DRV_SUCCESS` act_21->success_exit
Control Flow Diagram

Data Flow Diagram (DFD)

dfd_discreteOut_getCbit in_store Input Data Sources & Parameters • dOutDevHdl (const DOutDevHandler) • devNum (const UInt8) proc_1 LLR_01: Data Validation Check • Evaluate Parameter / State: cbitStatus in_store->proc_1 Validated Input Data proc_2 LLR_02: Data Validation Check • Evaluate Parameter / State: devNum proc_1->proc_2 Validated Input Data proc_3 LLR_03: Data Validation Check • Evaluate Parameter / State: devNum proc_2->proc_3 Validated Input Data proc_4 LLR_04: Data Validation Check • Evaluate Parameter / State: retStatus proc_3->proc_4 Validated Input Data proc_5 LLR_05: Data Validation Check • Evaluate Parameter / State: devIdx proc_4->proc_5 Validated Input Data proc_6 LLR_06: Data Validation Check • Evaluate Parameter / State: devIdx proc_5->proc_6 Validated Input Data proc_7 LLR_07: Data Validation Check • Evaluate Parameter / State: devNum proc_6->proc_7 Validated Input Data proc_8 LLR_08: Data Validation Check • Evaluate Parameter / State: devNum proc_7->proc_8 Validated Input Data proc_9 LLR_09: Data Validation Check • Evaluate Parameter / State: devNum proc_8->proc_9 Validated Input Data proc_10 LLR_10: Data Validation Check • Evaluate Parameter / State: devNum proc_9->proc_10 Validated Input Data proc_11 LLR_11: Data Validation Check • Evaluate Parameter / State: devNum proc_10->proc_11 Validated Input Data proc_12 LLR_12: Data Validation Check • Evaluate Parameter / State: devNum proc_11->proc_12 Validated Input Data proc_13 LLR_13: Data Validation Check • Evaluate Parameter / State: devNum proc_12->proc_13 Validated Input Data proc_14 LLR_14: Data Validation Check • Evaluate Parameter / State: devNum proc_13->proc_14 Validated Input Data proc_15 LLR_15: Data Validation Check • Evaluate Parameter / State: devNum proc_14->proc_15 Validated Input Data proc_16 LLR_16: Data Validation Check • Evaluate Parameter / State: devNum proc_15->proc_16 Validated Input Data proc_17 LLR_17: Data Validation Check • Evaluate Parameter / State: devNum proc_16->proc_17 Validated Input Data proc_18 LLR_18: Data Payload Transformation • Process payload via memoryOper_set() proc_17->proc_18 Data Payload (memoryOper_set) proc_19 LLR_19: Data Payload Transformation • Process payload via readDiscreteOutReg() proc_18->proc_19 Data Payload (readDiscreteOutReg) proc_20 LLR_20: Data Payload Transformation • Process payload via READ_BIT() proc_19->proc_20 Data Payload (READ_BIT) proc_21 LLR_21: Data Payload Transformation • Process payload via GET_HB_FIELD() proc_20->proc_21 Data Payload (GET_HB_FIELD) proc_22 LLR_22: Status Output Packaging • Format Return Payload: DriverStatus proc_21->proc_22 Final Output Data out_sink Output Data Sinks & Status Return • cbitStatus (DOutCbitStatus) proc_22->out_sink Output Data & Status Code
Data Flow Diagram
Here is the call graph for this function:
discreteOut_getCbit Node1 discreteOut_getCbit Node1->Node1 Node2 readDiscreteOutReg Node1->Node2 Node2->Node2 Node3 interDrv_Read32 Node2->Node3 Node3->Node3 Node4 interDrv_isAddressValid Node3->Node4 Node5 memoryMap_Read32 Node3->Node5 Node4->Node4 Node5->Node5
Here is the caller graph for this function:
discreteOut_getCbit Node1 discreteOut_getCbit Node1->Node1 Node2 modHsb_getDiscreteOutCbit Node1->Node2 Node2->Node2

◆ discreteOut_getPbit()

DriverStatus discreteOut_getPbit ( const DOutDevHandler dOutDevHdl,
DOutPbitStatus * pbitStatus,
const UInt8 devNum )

discreteOut_getPbit.

discreteOut get PBIT status.

Parameters
[in]dOutDevHdlThe discrete output device handler.
[out]pbitStatusThe pointer of PBIT status value.
[in]devNumThe discrete output device number.
Returns
DriverStatus - Driver status return code, If no error occurs during the operation of the function, it returns DRV_SUCCESS. Otherwise related error message is returned.
Return values
DRV_SUCCESS: Success.
DRV_READ_FAILED: Failed to read from the device or module.
DRV_INVALID_PARAM: The provided address pointer is invalid.

Low-Level Software Requirements (LLR)

Low-Level Requirement Specification: discreteOut_getPbit

Requirement ID Parent HLR ID Detailed Low-Level Requirement Statement (EARS Format) Software Unit Reference Verification Method Status
LLR_DISCRETEOUT_DISCRETEOUT_GETPBIT_01 HLR_DOUT_321 WHEN the pointer pbitStatus is NULL (invalid), the discreteOut_getPbit() function SHALL abort processing and return DRV_INVALID_PARAM. discreteOut.c:discreteOut_getPbit() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_GETPBIT_02 HLR_DOUT_321 WHEN devNum is between 0 and 7, the discreteOut_getPbit() function SHALL select device bank index 0. discreteOut.c:discreteOut_getPbit() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_GETPBIT_03 HLR_DOUT_321 WHEN devNum is between 8 and 10, the discreteOut_getPbit() function SHALL select device bank index 1. discreteOut.c:discreteOut_getPbit() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_GETPBIT_04 HLR_DOUT_321 WHEN the device bank index is resolved, the discreteOut_getPbit() function SHALL read the PBIT status register MMAP_DOUT_PBIT_STATUS using readDiscreteOutReg(). discreteOut.c:discreteOut_getPbit() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_GETPBIT_05 HLR_DOUT_321 WHEN the PBIT status register is read successfully, the discreteOut_getPbit() function SHALL unpack hardware telemetry bits for power good, over/under temperature, and built-in test pattern results into pbitStatus. discreteOut.c:discreteOut_getPbit() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_GETPBIT_06 HLR_DOUT_321 WHEN all operational processing completes successfully, the discreteOut_getPbit() function SHALL return DRV_SUCCESS. discreteOut.c:discreteOut_getPbit() Test Closed

Control Coupling Diagram (CCD)

ControlCouplingStructureChart Caller discreteOut_getPbit() [Low-Level Device Drivers] Target memoryOper_set() [Low-Level Driver Helper] Caller:s->Target:n l_t0->l_b0   dOutDevHdl (Flag) l_t1->l_b1   devNum (Flag) r_b0->r_t0   statusCode (DriverStatus)
Control Coupling Structure Chart

Data Coupling Diagram (DCD)

DataCouplingStructureChart Caller discreteOut_getPbit() [Low-Level Device Drivers] Target memoryOper_set() [Low-Level Driver Helper] Caller:s->Target:n l_t0->l_b0   dOutDevHdl (Payload) l_t1->l_b1   devNum (Payload) r_b0->r_t0   *pbitStatus (Output Data)
Data Coupling Structure Chart

Control Flow Diagram (CFD)

cfd_discreteOut_getPbit start Entry: discreteOut_getPbit() guard_1 LLR_01: Guard Check Is the pointer `pbitStatus` is NULL (invalid)? start->guard_1 err_exit_1 LLR_01 Error Exit abort processing and return `DRV_INVALID_PARAM` guard_1->err_exit_1 YES (TRUE) guard_2 LLR_02: Guard Check Is `devNum` is equal to `0` or `devNum` is equal to `1` or `devNum` is equal to `2` or `devNum` is equal to `3` or `devNum` is equal to `4` or `devNum` is equal to `5` or `devNum` is equal to `6` or `devNum` is equal to `7`? guard_1->guard_2 err_exit_2 LLR_02 Error Exit execute conditional operational branch guard_2->err_exit_2 YES (TRUE) guard_3 LLR_03: Guard Check Is `devNum` is equal to `8` or `devNum` is equal to `9` or `devNum` is equal to `10`? guard_2->guard_3 err_exit_3 LLR_03 Error Exit execute conditional operational branch guard_3->err_exit_3 YES (TRUE) guard_4 LLR_04: Guard Check Is a driver operation reports a failure status other than DRV_SUCCESS? guard_3->guard_4 err_exit_4 LLR_04 Error Exit abort processing and return `retStatus` guard_4->err_exit_4 YES (TRUE) act_5 LLR_05: Action Step invoke routine `memoryOper_set()` to execute target subsystem hardware operation guard_4->act_5 NO (FALSE) act_6 LLR_06: Action Step read the Discrete Output PBIT Status Register (PBIT_STATUS) at physical offset `0x0058` (`MMAP_DOUT_PBIT_STATUS`) using `readDiscreteOutReg()` act_5->act_6 act_7 LLR_07: Action Step invoke bitwise routine `READ_BIT()` to extract target channel status bit from register payload act_6->act_7 success_exit LLR_08: Final Exit return `DRV_SUCCESS` act_7->success_exit
Control Flow Diagram

Data Flow Diagram (DFD)

dfd_discreteOut_getPbit in_store Input Data Sources & Parameters • dOutDevHdl (const DOutDevHandler) • devNum (const UInt8) proc_1 LLR_01: Data Validation Check • Evaluate Parameter / State: pbitStatus in_store->proc_1 Validated Input Data proc_2 LLR_02: Data Validation Check • Evaluate Parameter / State: devNum proc_1->proc_2 Validated Input Data proc_3 LLR_03: Data Validation Check • Evaluate Parameter / State: devNum proc_2->proc_3 Validated Input Data proc_4 LLR_04: Data Validation Check • Evaluate Parameter / State: retStatus proc_3->proc_4 Validated Input Data proc_5 LLR_05: Data Payload Transformation • Process payload via memoryOper_set() proc_4->proc_5 Data Payload (memoryOper_set) proc_6 LLR_06: Data Payload Transformation • Process payload via readDiscreteOutReg() proc_5->proc_6 Data Payload (readDiscreteOutReg) proc_7 LLR_07: Data Payload Transformation • Process payload via READ_BIT() proc_6->proc_7 Data Payload (READ_BIT) proc_8 LLR_08: Status Output Packaging • Format Return Payload: DriverStatus proc_7->proc_8 Final Output Data out_sink Output Data Sinks & Status Return • pbitStatus (DOutPbitStatus) proc_8->out_sink Output Data & Status Code
Data Flow Diagram
Here is the call graph for this function:
discreteOut_getPbit Node1 discreteOut_getPbit Node1->Node1 Node2 readDiscreteOutReg Node1->Node2 Node2->Node2 Node3 interDrv_Read32 Node2->Node3 Node3->Node3 Node4 interDrv_isAddressValid Node3->Node4 Node5 memoryMap_Read32 Node3->Node5 Node4->Node4 Node5->Node5
Here is the caller graph for this function:
discreteOut_getPbit Node1 discreteOut_getPbit Node1->Node1 Node2 modHsb_getDiscreteOutPbit Node1->Node2 Node2->Node2

◆ discreteOut_getTemp()

DriverStatus discreteOut_getTemp ( const DOutDevHandler dOutDevHdl,
Float32 * temp )

discreteOut_getTemp.

discreteOut get temperature value in degree celsius (C).

Parameters
[in]dOutDevHdlThe discrete output device handler.
[out]tempThe pointer of temperature value in degree celsius (C).
Returns
DriverStatus - Driver status return code, If no error occurs during the operation of the function, it returns DRV_SUCCESS. Otherwise related error message is returned.
Return values
DRV_SUCCESS: Success.
DRV_READ_FAILED: Failed to read from the device or module.
DRV_INVALID_PARAM: The provided address pointer is invalid.

Low-Level Software Requirements (LLR)

Low-Level Requirement Specification: discreteOut_getTemp

Requirement ID Parent HLR ID Detailed Low-Level Requirement Statement (EARS Format) Software Unit Reference Verification Method Status
LLR_DISCRETEOUT_DISCRETEOUT_GETTEMP_01 HLR_DOUT_30818 WHEN the pointer temp is NULL (invalid), the discreteOut_getTemp() function SHALL abort processing and return DRV_INVALID_PARAM. discreteOut.c:discreteOut_getTemp() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_GETTEMP_02 HLR_DOUT_30818 WHEN a driver operation reports a failure status other than DRV_SUCCESS, the discreteOut_getTemp() function SHALL abort processing and return that driver failure status. discreteOut.c:discreteOut_getTemp() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_GETTEMP_03 HLR_DOUT_30818 WHEN preconditions are satisfied, the discreteOut_getTemp() function SHALL read the Discrete Output Temperature Register (TEMP_RAW) at physical offset 0x0060 (MMAP_DOUT_TEMP_RAW) using readDiscreteOutReg(). discreteOut.c:discreteOut_getTemp() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_GETTEMP_04 HLR_DOUT_30818 WHEN all operational processing completes successfully, the discreteOut_getTemp() function SHALL return DRV_SUCCESS. discreteOut.c:discreteOut_getTemp() Test Closed

Control Coupling Diagram (CCD)

ControlCouplingStructureChart Caller discreteOut_getTemp() [Low-Level Device Drivers] Target readDiscreteOutReg() [Low-Level Driver Helper] Caller:s->Target:n l_t0->l_b0   dOutDevHdl (Flag) r_b0->r_t0   statusCode (DriverStatus)
Control Coupling Structure Chart

Data Coupling Diagram (DCD)

DataCouplingStructureChart Caller discreteOut_getTemp() [Low-Level Device Drivers] Target readDiscreteOutReg() [Low-Level Driver Helper] Caller:s->Target:n l_t0->l_b0   dOutDevHdl (Payload) r_b0->r_t0   *temp (Output Data)
Data Coupling Structure Chart

Control Flow Diagram (CFD)

cfd_discreteOut_getTemp start Entry: discreteOut_getTemp() guard_1 LLR_01: Guard Check Is the pointer `temp` is NULL (invalid)? start->guard_1 err_exit_1 LLR_01 Error Exit abort processing and return `DRV_INVALID_PARAM` guard_1->err_exit_1 YES (TRUE) guard_2 LLR_02: Guard Check Is a driver operation reports a failure status other than DRV_SUCCESS? guard_1->guard_2 err_exit_2 LLR_02 Error Exit abort processing and return `retStatus` guard_2->err_exit_2 YES (TRUE) act_3 LLR_03: Action Step read the Discrete Output Temperature Register (TEMP_RAW) at physical offset `0x0060` (`MMAP_DOUT_TEMP_RAW`) using `readDiscreteOutReg()` guard_2->act_3 NO (FALSE) success_exit LLR_04: Final Exit return `DRV_SUCCESS` act_3->success_exit
Control Flow Diagram

Data Flow Diagram (DFD)

dfd_discreteOut_getTemp in_store Input Data Sources & Parameters • dOutDevHdl (const DOutDevHandler) proc_1 LLR_01: Data Validation Check • Evaluate Parameter / State: temp in_store->proc_1 Validated Input Data proc_2 LLR_02: Data Validation Check • Evaluate Parameter / State: retStatus proc_1->proc_2 Validated Input Data proc_3 LLR_03: Data Payload Transformation • Process payload via readDiscreteOutReg() proc_2->proc_3 Data Payload (readDiscreteOutReg) proc_4 LLR_04: Status Output Packaging • Format Return Payload: DriverStatus proc_3->proc_4 Final Output Data out_sink Output Data Sinks & Status Return • temp (Float32) proc_4->out_sink Output Data & Status Code
Data Flow Diagram
Here is the call graph for this function:
discreteOut_getTemp Node1 discreteOut_getTemp Node1->Node1 Node2 readDiscreteOutReg Node1->Node2 Node2->Node2 Node3 interDrv_Read32 Node2->Node3 Node3->Node3 Node4 interDrv_isAddressValid Node3->Node4 Node5 memoryMap_Read32 Node3->Node5 Node4->Node4 Node5->Node5
Here is the caller graph for this function:
discreteOut_getTemp Node1 discreteOut_getTemp Node1->Node1 Node2 modHsb_getDiscreteOutCbit Node1->Node2 Node2->Node2

◆ discreteOut_reset()

DriverStatus discreteOut_reset ( const DOutDevHandler dOutDevHdl)

discreteOut_reset.

Reset the discrete output module. The reset operation is performed by setting the reset bit of the discrete output module to 1 and then setting it back to 0.

Parameters
[in]dOutDevHdlThe discrete output device handler.
Returns
DriverStatus - Driver status return code, If no error occurs during the operation of the function, it returns DRV_SUCCESS. Otherwise related error message is returned.
Return values
DRV_SUCCESS: Success.
DRV_WRITE_FAILED: Failed to write to the device or module.

Low-Level Software Requirements (LLR)

Low-Level Requirement Specification: discreteOut_reset

Requirement ID Parent HLR ID Detailed Low-Level Requirement Statement (EARS Format) Software Unit Reference Verification Method Status
LLR_DISCRETEOUT_DISCRETEOUT_RESET_01 HLR_DOUT_30817 WHEN a driver operation reports a failure status other than DRV_SUCCESS, the discreteOut_reset() function SHALL abort processing and return that driver failure status. discreteOut.c:discreteOut_reset() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_RESET_02 HLR_DOUT_30817 WHEN preconditions are satisfied, the discreteOut_reset() function SHALL write the device block members memory offset (DOUT_RESET_MODULE) at physical offset 0x0028 (MMAP_DOUT_RESET_MODULE) using writeDiscreteOutReg(). discreteOut.c:discreteOut_reset() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_RESET_03 HLR_DOUT_30817 WHEN the reset register is asserted, the discreteOut_reset() function SHALL wait for a minimum hardware reset pulse width delay of 100 microseconds before deasserting. discreteOut.c:discreteOut_reset() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_RESET_04 HLR_DOUT_30817 WHEN all operational processing completes successfully, the discreteOut_reset() function SHALL return DRV_SUCCESS. discreteOut.c:discreteOut_reset() Test Closed

Control Coupling Diagram (CCD)

ControlCouplingStructureChart Caller discreteOut_reset() [Low-Level Device Drivers] Target writeDiscreteOutReg() [Low-Level Driver Helper] Caller:s->Target:n l_t0->l_b0   dOutDevHdl (Flag) r_b0->r_t0   statusCode (DriverStatus)
Control Coupling Structure Chart

Data Coupling Diagram (DCD)

DataCouplingStructureChart Caller discreteOut_reset() [Low-Level Device Drivers] Target writeDiscreteOutReg() [Low-Level Driver Helper] Caller:s->Target:n l_t0->l_b0   dOutDevHdl (Payload) r_b0->r_t0   stateTelemetry (Internal State)
Data Coupling Structure Chart

Control Flow Diagram (CFD)

cfd_discreteOut_reset start Entry: discreteOut_reset() guard_1 LLR_01: Guard Check Is a driver operation reports a failure status other than DRV_SUCCESS? start->guard_1 err_exit_1 LLR_01 Error Exit abort processing and return `retStatus` guard_1->err_exit_1 YES (TRUE) act_2 LLR_02: Action Step write the device block members memory offset (DOUT_RESET_MODULE) at physical offset `0x0028` (`MMAP_DOUT_RESET_MODULE`) using `writeDiscreteOutReg()` guard_1->act_2 NO (FALSE) act_3 LLR_03: Action Step invoke routine `timeOper_delay()` to execute required hardware timing delay act_2->act_3 success_exit LLR_04: Final Exit return `DRV_SUCCESS` act_3->success_exit
Control Flow Diagram

Data Flow Diagram (DFD)

dfd_discreteOut_reset in_store Input Data Sources & Parameters • dOutDevHdl (const DOutDevHandler) proc_1 LLR_01: Data Validation Check • Evaluate Parameter / State: retStatus in_store->proc_1 Validated Input Data proc_2 LLR_02: Data Payload Transformation • Process payload via writeDiscreteOutReg() proc_1->proc_2 Data Payload (writeDiscreteOutReg) proc_3 LLR_03: Data Payload Transformation • Process payload via timeOper_delay() proc_2->proc_3 Data Payload (timeOper_delay) proc_4 LLR_04: Status Output Packaging • Format Return Payload: DriverStatus proc_3->proc_4 Final Output Data out_sink Output Data Sinks & Status Return • Status Payload (DriverStatus) proc_4->out_sink Output Data & Status Code
Data Flow Diagram
Here is the call graph for this function:
discreteOut_reset Node1 discreteOut_reset Node1->Node1 Node2 writeDiscreteOutReg Node1->Node2 Node2->Node2 Node3 interDrv_Write32 Node2->Node3 Node3->Node3 Node4 interDrv_isAddressValid Node3->Node4 Node5 memoryMap_Write32 Node3->Node5 Node4->Node4 Node5->Node5
Here is the caller graph for this function:
discreteOut_reset Node1 discreteOut_reset Node1->Node1 Node2 modDiscreteOut_initReset Node1->Node2 Node2->Node2 Node3 modConfig_init Node2->Node3 Node4 modConfig_reset Node2->Node4 Node3->Node3 Node4->Node4 Node5 modConfig_close Node4->Node5 Node5->Node5

◆ discreteOut_writeChState()

DriverStatus discreteOut_writeChState ( const DOutDevHandler dOutDevHdl,
const UInt8 channelNum,
const Bool dOutLogic )

discreteOut_writeChState.

Write the discrete output state.

Parameters
[in]dOutDevHdlThe discrete output device handler.
[in]channelNumThe channel number.
[in]dOutLogicThe logic state to set.
Returns
DriverStatus - Driver status return code, If no error occurs during the operation of the function, it returns DRV_SUCCESS. Otherwise related error message is returned.
Return values
DRV_SUCCESS: Success.
DRV_WRITE_FAILED: Failed to write to the device or module.
DRV_READ_FAILED: Failed to read from the device or module.
DRV_INVALID_CHANNEL: The channel number is invalid.

Low-Level Software Requirements (LLR)

Low-Level Requirement Specification: discreteOut_writeChState

Requirement ID Parent HLR ID Detailed Low-Level Requirement Statement (EARS Format) Software Unit Reference Verification Method Status
LLR_DISCRETEOUT_DISCRETEOUT_WRITECHSTATE_01 HLR_DOUT_234 WHEN channel number channelNum exceeds DOUT_CHANNEL_MAX, the discreteOut_writeChState() function SHALL abort processing and return DRV_INVALID_CHANNEL. discreteOut.c:discreteOut_writeChState() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_WRITECHSTATE_02 HLR_DOUT_234 WHEN channel validation passes, the discreteOut_writeChState() function SHALL read the current channel state register MMAP_DOUT_BANK_CH_STATE using readDiscreteOutReg(). discreteOut.c:discreteOut_writeChState() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_WRITECHSTATE_03 HLR_DOUT_234 WHEN dOutLogic is TRUE, the discreteOut_writeChState() function SHALL set bit channelNum in the channel state register value. discreteOut.c:discreteOut_writeChState() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_WRITECHSTATE_04 HLR_DOUT_234 WHEN dOutLogic is FALSE, the discreteOut_writeChState() function SHALL clear bit channelNum in the channel state register value. discreteOut.c:discreteOut_writeChState() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_WRITECHSTATE_05 HLR_DOUT_234 WHEN the channel bit is updated, the discreteOut_writeChState() function SHALL write the modified register value to MMAP_DOUT_BANK_CH_STATE using writeDiscreteOutReg(). discreteOut.c:discreteOut_writeChState() Test Closed
LLR_DISCRETEOUT_DISCRETEOUT_WRITECHSTATE_06 HLR_DOUT_234 WHEN all operational processing completes successfully, the discreteOut_writeChState() function SHALL return DRV_SUCCESS. discreteOut.c:discreteOut_writeChState() Test Closed

Control Coupling Diagram (CCD)

ControlCouplingStructureChart Caller discreteOut_writeChState() [Low-Level Device Drivers] Target readDiscreteOutReg() [Low-Level Driver Helper] Caller:s->Target:n l_t0->l_b0   dOutDevHdl (Flag) l_t1->l_b1   channelNum (Flag) l_t2->l_b2   dOutLogic (Flag) r_b0->r_t0   statusCode (DriverStatus)
Control Coupling Structure Chart

Data Coupling Diagram (DCD)

DataCouplingStructureChart Caller discreteOut_writeChState() [Low-Level Device Drivers] Target readDiscreteOutReg() [Low-Level Driver Helper] Caller:s->Target:n l_t0->l_b0   dOutDevHdl (Payload) l_t1->l_b1   channelNum (Payload) l_t2->l_b2   dOutLogic (Payload) r_b0->r_t0   stateTelemetry (Internal State)
Data Coupling Structure Chart

Control Flow Diagram (CFD)

cfd_discreteOut_writeChState start Entry: discreteOut_writeChState() guard_1 LLR_01: Guard Check Is the channel number is greater than `DOUT_CHANNEL_MAX`? start->guard_1 err_exit_1 LLR_01 Error Exit abort processing and return `DRV_INVALID_CHANNEL` guard_1->err_exit_1 YES (TRUE) guard_2 LLR_02: Guard Check Is a driver operation reports a failure status other than DRV_SUCCESS? guard_1->guard_2 err_exit_2 LLR_02 Error Exit abort processing and return `retStatus` guard_2->err_exit_2 YES (TRUE) guard_3 LLR_03: Guard Check Is `dOutLogic` is equal to `TRUE`? guard_2->guard_3 err_exit_3 LLR_03 Error Exit execute conditional operational branch guard_3->err_exit_3 YES (TRUE) act_4 LLR_04: Action Step read the device block members memory offset (DOUT_BANK_CH_STATE) at physical offset `0x0078` (`MMAP_DOUT_BANK_CH_STATE`) using `readDiscreteOutReg()` guard_3->act_4 NO (FALSE) act_5 LLR_05: Action Step write the device block members memory offset (DOUT_BANK_CH_STATE) at physical offset `0x0078` (`MMAP_DOUT_BANK_CH_STATE`) using `writeDiscreteOutReg()` act_4->act_5 success_exit LLR_06: Final Exit return `DRV_SUCCESS` act_5->success_exit
Control Flow Diagram

Data Flow Diagram (DFD)

dfd_discreteOut_writeChState in_store Input Data Sources & Parameters • dOutDevHdl (const DOutDevHandler) • channelNum (const UInt8) • dOutLogic (const Bool) proc_1 LLR_01: Data Validation Check • Evaluate Parameter / State: channelNum in_store->proc_1 Validated Input Data proc_2 LLR_02: Data Validation Check • Evaluate Parameter / State: retStatus proc_1->proc_2 Validated Input Data proc_3 LLR_03: Data Validation Check • Evaluate Parameter / State: dOutLogic proc_2->proc_3 Validated Input Data proc_4 LLR_04: Data Payload Transformation • Process payload via readDiscreteOutReg() proc_3->proc_4 Data Payload (readDiscreteOutReg) proc_5 LLR_05: Data Payload Transformation • Process payload via writeDiscreteOutReg() proc_4->proc_5 Data Payload (writeDiscreteOutReg) proc_6 LLR_06: Status Output Packaging • Format Return Payload: DriverStatus proc_5->proc_6 Final Output Data out_sink Output Data Sinks & Status Return • Status Payload (DriverStatus) proc_6->out_sink Output Data & Status Code
Data Flow Diagram
Here is the call graph for this function:
discreteOut_writeChState Node1 discreteOut_writeChState Node1->Node1 Node2 readDiscreteOutReg Node1->Node2 Node6 writeDiscreteOutReg Node1->Node6 Node2->Node2 Node3 interDrv_Read32 Node2->Node3 Node3->Node3 Node4 interDrv_isAddressValid Node3->Node4 Node5 memoryMap_Read32 Node3->Node5 Node4->Node4 Node5->Node5 Node6->Node6 Node7 interDrv_Write32 Node6->Node7 Node7->Node4 Node7->Node7 Node8 memoryMap_Write32 Node7->Node8 Node8->Node8
Here is the caller graph for this function:
discreteOut_writeChState Node1 discreteOut_writeChState Node1->Node1 Node2 modDiscreteOut_write Node1->Node2 Node2->Node2 Node3 modDiscreteOut_initReset Node2->Node3 Node3->Node3 Node4 modConfig_init Node3->Node4 Node5 modConfig_reset Node3->Node5 Node4->Node4 Node5->Node5 Node6 modConfig_close Node5->Node6 Node6->Node6