FUNCTION SysfsGPIOExportAll : BOOL
VAR_INPUT
pszSysFsDirname : POINTER TO STRING;
END_VAR
VAR
i : INT;
szDirEntry: STRING(255);
diMaxDirEntry: INT := 255;
Result: RTS_IEC_RESULT;
DirInfo : SysDir.DirInfo;
hDir: RTS_IEC_HANDLE;
iGpioNr : INT := -1;
szBase: STRING(255);
szNGPIO: STRING(255);
szPathGpioChipNr: STRING(255);
szLabel: STRING(255);
iGPIOBase: INT;
Result := SysDir.SysDirRead(hDir, szDirEntry, diMaxDirEntry, ADR(DirInfo));
WHILE Result = 0 DO
szPathGpioChipNr := CONCAT(CONCAT(pszSysFsDirname^, szDirEntry),'/');
szNGPIO := ReadFileString(CONCAT(szPathGpioChipNr, 'ngpio'));
iGPIONr := STRING_TO_INT(szNGPIO);
// now export all GPIOs from this chip if enabled
FOR i := iGPIOBase TO (iGPIOBase + iGPIONr) - 1 DO
Result := SysDir.SysDirRead(hDir, szDirEntry, diMaxDirEntry, ADR(DirInfo));
END_WHILE
// done, now close hDir
SysDir.SysDirClose(hDir);
hDir := RTS_INVALID_HANDLE;
END_IF