module ItsAutoInterop_TypesAndValues {
    
    // Libcommon
    import from LibCommon_BasicTypesAndValues all;
    import from LibCommon_DataStrings all;
    
    // LibIts
    import from ITS_Container language "ASN.1:1997" all;
    
    /**
     * @desc Information required to uniquelly describe an EUT
     * @member mid              MID value of the device
     * @member stationId        Station ID value of the device
     * @member ll_mac_address   Link layer MAC address of the device
     */
    type record EutDescription {
        Oct6        mid,
        StationID   stationId,
        Oct6        ll_mac_address
    } // End of type EutDescription_
    
    /**
     * @desc Define a list of uniquelly described EUTs
     */
    type record of EutDescription EutDescriptions;
    
    group hmiPrimitives {
        
        /**
         * @desc HMI message to initialize HMI's IUT 
         * @member hashedId8 In case of secured mode set, hashedId8 indicate which certificate the HMI's IUT shall use
         */
        type record HmiInitialize {
            Oct8 hashedId8 
        } // End of type HmiInitialize
        
        type union HmiAutoInteropResults { 
          boolean hmiInitializeResult
        } // End of type HmiAutoInteropResults
        
        type HmiAutoInteropResults.hmiInitializeResult HmiInitializeResult;
        
        type record HmiNeighborEventInd { // TODO Simplify using EutDescription 
            Oct6    mid,
            UInt32  stationId 
        } // End of type HmiNeighborEventInd
        
        /**
         * @desc Define a list of uniquelly described EUTs
         * @remark 'set of' is used in order to use superset
         */
        type set of HmiNeighborEventInd HmiNeighborEventInds;
        
        /**
         * @desc TODO
         */
        type record of HmiNeighborEventInds HmiNeighborEventIndList;
        
        /**
         * @desc The list of Traffic Sign Information
         * @see ISO/TS 14823 Clause 6.2 Information Elements
         * @see ISO/TS 14823 Table 1 — Information Elements
         */
        type enumerated TrafficSignPictogramClass { e_dangerWarning, e_regulatory, e_informative };
        
        /**
         * @desc The list of Ambient/Road Condition Information
         * @see ISO/TS 14823 Clause 6.2 Information Elements
         * @see ISO/TS 14823 Table 1 — Information Elements
         */
        type enumerated AmbientOrRoadConditionPictogramClass { e_ambientCondition, e_roadCondition }
        
        /**
         * @see ISO/TS 14823 Clause 6.2 Information Elements
         * @see ISO/TS 14823 Table 2 — Code Ordering (without attribute data)
         */
        type record HmiSignageEventInd { // TODO To be refined
            UInt16                                  countryCode,
            TrafficSignPictogramClass               trafficSignPictogramClass optional,
            UInt8                                   trafficSignPictogramNature optional,
            AmbientOrRoadConditionPictogramClass    ambientOrRoadConditionPictogramClass optional,
            UInt8                                   ambientOrRoadConditionPictogramNature optional
        } // End of type HmiSignageEventInd
        
        /**
         * @desc TODO
         */
        type record of HmiSignageEventInd HmiSignageEventIndList;
        
    } // End of group hmiPrimitives
    
} with {
    encode "RAW"; 
    variant ""
} // End of module ItsAutoInterop_TypesAndValues
