///////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2000-2018 Ericsson Telecom AB
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v2.0
// which accompanies this distribution, and is available at
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
//
// Contributors:
// Lenard Nagy
// version R2A
///////////////////////////////////////////////////////////////////////////////

// Raspberry Pi GPIO port
//
// The recommended use is to extend the GPIO_Base component 
// where the whole GPIO is declared as a port array
//
//
//	Otherwise when a port of this type is used it MUST be 
//      named as "gpio[2-27]"
//
//	E.g.: 
//	type component GPIO {
//		port GPIO_Pin_Port gpio24;
//		port GPIO_Pin_Port gpio[2..27]		
//	}
//

module GPIOPinPort {
	
	type enumerated GPIO_PIN_DIRECTION {
	  IN,	//"in"
	  OUT	//"out"
	}

	type enumerated GPIO_PIN_VALUE {
	  LOW,	//"0"
	  HIGH  //"1"
	}
	
	type record GPIO_PIN_STATUS {
	  boolean            is_exported,
	  GPIO_PIN_DIRECTION direction,
	  GPIO_PIN_VALUE     val
	}
	
	type port GPIO_Pin_Port message {
	  out 
		GPIO_PIN_DIRECTION, GPIO_PIN_VALUE, GPIO_PIN_STATUS
          in 
		GPIO_PIN_VALUE, GPIO_PIN_STATUS;
	}

	type component GPIO_Base {
	  port GPIO_Pin_Port gpio[2..27]
	}
}
