[r2]: / IoDrvSysfsGPIO / IoDrvSysfsGPIO / ICmpIoDrv / IoDrvUpdateConfiguration / svnobj  Maximize  Restore  History

Download this file

74 lines (71 with data), 18.0 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
VAR_INPUT
	nCount : DINT;
VAR
	// connectors
	pChildChild : POINTER TO IoConfigConnector;	
	pdwGPIONr : POINTER TO UINT;
	pszSysFsPrefix : POINTER TO STRING;
	pszGPIODirName : POINTER TO STRING;
	Result : RTS_IEC_RESULT;
m_pConnector := IoMgrConfigGetConnector(pConnectorList, ADR(nCount), m_wModuleType, m_dwInstance);
IF m_pConnector = 0 THEN
	IoDrvUpdateConfiguration := ERRORS.ERR_PARAMETER;
//check if device is enabled in the device tree
_bDeactivated := NOT IsConnectorEnabled(m_pConnector);
IF m_pConnector^.hIoDrv = 0 THEN
	//always needed for reconfigure!
	m_pConnector^.hIoDrv := m_hInterface;
	m_pConnector^.pFather^.hIoDrv := m_hInterface;
IF _bDeactivated THEN
	IoDrvUpdateConfiguration := CmpErrors.Errors.ERR_OK;
IF m_pConnector^.hIoDrv = m_hInterface THEN
	{IF defined (pou:IoMgrConfigSetDiagnosis)}
	IoMgrConfigSetDiagnosis(m_pConnector,
							ConnectorFlags.CF_DRIVER_AVAILABLE OR
							ConnectorFlags.CF_CONNECTOR_FOUND OR
							ConnectorFlags.CF_CONNECTOR_CONFIGURED OR
							ConnectorFlags.CF_CONNECTOR_ACTIVE);
	{END_IF}
	
	IoMgrConfigSetDiagnosis(m_pConnector^.pFather,
	{IF defined (pou:IoMgrSetDriverProperties)}			
		//Note: background diagnosis property flag is optional (supported with 3.5.1.0 runtime)	
	{END_IF}										
	//Go through all childs of the device
			pChildChild := IoMgrConfigGetFirstChild(pChild, ADR(nCount), m_pConnector);
			WHILE (pChildChild <> 0) DO
				IF IsConnectorEnabled(pChildChild) THEN
					pChildChild^.hIoDrv := m_hInterface;	
					
					{IF defined (pou:IoMgrConfigSetDiagnosis)}
								IoMgrConfigSetDiagnosis(pChildChild,
													ConnectorFlags.CF_DRIVER_AVAILABLE OR
													ConnectorFlags.CF_CONNECTOR_FOUND);
					{END_IF}
					//Read magic boolean flag nr
					pParameter := IoMgrConfigGetParameter(pChildChild, 10000);
					IF pParameter <> 0 THEN
							IoDrvUpdateConfiguration := CmpErrors.Errors.ERR_EXCEPTION;
							strLogMessage := CONCAT(strLogMessage,' exceeds max possible nr of gpios: ');
							CmpLog.LogAdd2(CmpLog.LOG_STD_LOGGER, 0,CmpLog.LogClass.LOG_EXCEPTION, CmpErrors.Errors.ERR_EXCEPTION, 0,strLogMessage );
							{IF defined (pou:IoMgrConfigSetDiagnosis)}
							IoMgrConfigSetDiagnosis(pChildChild,
												ConnectorFlags.CF_CONNECTOR_ERROR OR
												ConnectorFlags.CF_CONNECTOR_BUS_ERROR);
							{END_IF}
							RETURN;
						END_IF
						// 
						pParameter := IoMgrConfigGetParameter(pChildChild, 5001);
						IF pParameter <> 0 THEN
							pszGPIODirName := IoMgrConfigGetParameterValuePointer(pParameter, ADR(Result));
						//Input
								IoDrvUpdateConfiguration := CmpErrors.Errors.ERR_EXCEPTION;
								strLogMessage := CONCAT(strLogMessage,') is already assigned as input. Check and fix the configuration.');
								strLogMessage := CONCAT(strLogMessage,') is already assigned as output. Check and fix the configuration.');
							GPIOUsedIn := GPIOUsedIn OR SHL(1,pdwGPIONr^);
													ConnectorFlags.CF_CONNECTOR_CONFIGURED OR
													ConnectorFlags.CF_CONNECTOR_ACTIVE);
						pParameter := IoMgrConfigGetParameter(pChildChild, 2000);		(* outputs *)
							GPIOUsedOut := GPIOUsedOut OR SHL(1,pdwGPIONr^);	
				pChildChild := IoMgrConfigGetNextChild(pChildChild, ADR(nCount), pChild);
			END_WHILE
		END_IF