summaryrefslogtreecommitdiffstats
path: root/templates/machine/m3ulcb-nogfx/50_local.conf.inc
blob: 521dedb461ec7e84d9bc728b9d14dbb4c223989b (plain)
1
2
3
MACHINE = "m3ulcb"
#see meta-agl/meta-agl-bsp/conf/include/agl_m3ulcb-nogfx.inc
require conf/include/agl_m3ulcb-nogfx.inc
>351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932
/*------------------------------------------------------------------------------------------------*/
/* UNICENS V2.1.0-3491                                                                            */
/* Copyright (c) 2017 Microchip Technology Germany II GmbH & Co. KG.                              */
/*                                                                                                */
/* This program is free software: you can redistribute it and/or modify                           */
/* it under the terms of the GNU General Public License as published by                           */
/* the Free Software Foundation, either version 2 of the License, or                              */
/* (at your option) any later version.                                                            */
/*                                                                                                */
/* This program is distributed in the hope that it will be useful,                                */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of                                 */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                  */
/* GNU General Public License for more details.                                                   */
/*                                                                                                */
/* You should have received a copy of the GNU General Public License                              */
/* along with this program.  If not, see <http://www.gnu.org/licenses/>.                          */
/*                                                                                                */
/* You may also obtain this software under a propriety license from Microchip.                    */
/* Please contact Microchip for further information.                                              */
/*------------------------------------------------------------------------------------------------*/

/*!
 * \file
 * \brief Public header file of class CInic.
 */

#ifndef UCS_INIC_PB_H
#define UCS_INIC_PB_H

/*------------------------------------------------------------------------------------------------*/
/* Includes                                                                                       */
/*------------------------------------------------------------------------------------------------*/
#include "ucs_rules.h"
#include "ucs_ret_pb.h"

#ifdef __cplusplus
extern "C"
{
#endif

/*------------------------------------------------------------------------------------------------*/
/* Definitions                                                                                    */
/*------------------------------------------------------------------------------------------------*/
/*! \brief   Bitmask used for network status event "Network Change Event".
 *  \ingroup G_UCS_NET_TYPES
 */
#define UCS_NETWORK_EVENT_NCE                   0x0001U

/*! \brief   Signature version limit of EXC commands. Denotes the maximum signature version
 *           number the INIC can handle.
 *  \ingroup G_UCS_NET_TYPES
 */
#define UCS_EXC_SIGNATURE_VERSION_LIMIT         1U


/*! \brief No evaluable segment information available for BackChannel Diagnosis. 
 *  \ingroup G_UCS_BC_DIAG_TYPES
 */
#define UCS_BCD_DUMMY_SEGMENT                    0xFFU


/*------------------------------------------------------------------------------------------------*/
/* Enumerators                                                                                    */
/*------------------------------------------------------------------------------------------------*/
/*! \brief Data Type which describes the last reset reason of the device.
 *  \ingroup G_UCS_INIC_TYPES
 */
typedef enum Ucs_Inic_LastResetReason_
{
    /*! \brief Reset due to Power on reset or reset pin (!RST) is held low. */
    UCS_INIC_RST_STARTUP        = 0x00U,
    /*! \brief Reset due to hardware watchdog that had snapped */
    UCS_INIC_RST_HW_WATCHDOG    = 0x01U,
    /*! \brief Reset due to stack overflow */
    UCS_INIC_RST_STACK_OVERFLOW = 0x02U

} Ucs_Inic_LastResetReason_t;

/*! \brief   The current power state of the INICs power management interface (PS0/PS1). 
 *  \ingroup G_UCS_INIC_TYPES
 */
typedef enum Ucs_Inic_PowerState_
{
    /*! \brief Power state "UNormal" */
    UCS_INIC_PWS_U_NORMAL       = 0x00U,
    /*! \brief Power state "ULow" */
    UCS_INIC_PWS_U_LOW          = 0x01U,
    /*! \brief Power State "STP" */
    UCS_INIC_PWS_STP            = 0x02U,
    /*! \brief Power State "UCritical" */
    UCS_INIC_PWS_U_CRITICAL     = 0x03U,
    /*! \brief No power state. Power management monitoring is disabled in INIC configuration string. */
    UCS_INIC_PWS_NO_MONITORING  = 0xFFU

} Ucs_Inic_PowerState_t;


/*! \brief Defines the flags set in \c change_mask used by NetworkStatus.Status 
 *  \ingroup G_UCS_NET_TYPES
 */

typedef enum Ucs_Network_StatusMask_
{
    UCS_NW_M_EVENTS           = 0x01U,    /*!< \brief Flag for notification of event changes */
    UCS_NW_M_AVAIL            = 0x02U,    /*!< \brief Flag for notification of availability changes */
    UCS_NW_M_AVAIL_INFO       = 0x04U,    /*!< \brief Flag for notification of availability info changes */
    UCS_NW_M_AVAIL_TR_CAUSE   = 0x08U,    /*!< \brief Flag for notification of availability transition cause changes */
    UCS_NW_M_NODE_ADDR        = 0x10U,    /*!< \brief Flag for notification of node address changes */
    UCS_NW_M_NODE_POS         = 0x20U,    /*!< \brief Flag for notification of node position changes */
    UCS_NW_M_MAX_POS          = 0x40U,    /*!< \brief Flag for notification of MPR changes */
    UCS_NW_M_PACKET_BW        = 0x80U     /*!< \brief Flag for notification of packet bandwidth changes */

} Ucs_Network_StatusMask_t;


/*! \brief   MOST Network Availability
 *  \ingroup G_UCS_NET_TYPES
 */
typedef enum Ucs_Network_Availability_
{
    UCS_NW_NOT_AVAILABLE = 0x00U,       /*!< \brief MOST network is not available */
    UCS_NW_AVAILABLE     = 0x01U        /*!< \brief MOST network is available  */

} Ucs_Network_Availability_t;

/*! \brief   MOST Network Availability Information.
 *  \details AvailabilityInfo is a sub state of Availability (\ref Ucs_Network_Availability_t)
 *           Possible pairs of Availability and Availability Information
 *  Availability            | Availability Information 
 *  ------------------------| ------------------------------------
 *  UCS_NW_NOT_AVAILABLE    | UCS_NW_AVAIL_INFO_REGULAR
 *  UCS_NW_NOT_AVAILABLE    | UCS_NW_AVAIL_INFO_DIAGNOSIS
 *  UCS_NW_NOT_AVAILABLE    | UCS_NW_AVAIL_INFO_FORCED_NA
 *  UCS_NW_AVAILABLE        | UCS_NW_AVAIL_INFO_UNSTABLE
 *  UCS_NW_AVAILABLE        | UCS_NW_AVAIL_INFO_STABLE
 *  \ingroup G_UCS_NET_TYPES
 */
typedef enum Ucs_Network_AvailInfo_
{
    /*! \brief The network is not available because it is in NetInterface Off or Init state. 
     *         It is pending to get available again. 
     */
    UCS_NW_AVAIL_INFO_REGULAR       = 0x00U,
    /*! \brief The network is not available because it performs a ring break diagnosis or
     *         physical layer test.
     */
    UCS_NW_AVAIL_INFO_DIAGNOSIS     = 0x02U,
    /*! \brief The INIC forces the network to stay in "not available" state. The  
     *         application may enter or leave this state by calling 
     *         Ucs_Network_ForceNotAvailable(). Also see Ucs_Network_Startup().
     */
    UCS_NW_AVAIL_INFO_FORCED_NA     = 0x06U,
    /*! \brief Network is available. Unlocks have been detected. */
    UCS_NW_AVAIL_INFO_UNSTABLE      = 0x10U,
    /*! \brief Network is available. Network is in Stable Lock. */
    UCS_NW_AVAIL_INFO_STABLE        = 0x11U

} Ucs_Network_AvailInfo_t;

/*! \brief MOST Network Availability Transition Cause
 *  \ingroup G_UCS_NET_TYPES
 */
typedef enum Ucs_Network_AvailTransCause_
{
    /*! \brief Start-up is initiated by chip e.g., INIC.MOSTNetworkStartup() */
    UCS_NW_AV_TR_CA_CMD             = 0x00U,
    /*! \brief Chip is woken up by network activity. */
    UCS_NW_AV_TR_CA_RX_ACTIVITY     = 0x01U,
    /*! \brief Network is typically shutdown by an INIC.MOSTNetworkShutdown() command initiated 
     *         locally or by a node positioned upstream (in the latter case, the shutdown flag 
     *         indicates a Normal Shutdown).
     */
    UCS_NW_AV_TR_CA_NORMAL          = 0x10U,
    /*! \brief Network is shutdown due to an error. In this case the shutdown reason was a sudden 
     *         signal off. No shutdown flag is present.
     */
    UCS_NW_AV_TR_CA_ERR_SSO         = 0x11U,
    /*! \brief Network is shutdown due to an error. In this case the shutdown reason was a critical 
     *         unlock. No shutdown flag is present.
     */
    UCS_NW_AV_TR_CA_ERR_CRIT_UNLOCK = 0x12U,
    /*! \brief Network is shutdown due to a chip or system error. Possible reasons are:
     *         - INIC enters ForcedNA state
     *         - The AutoShutdownDownDelay time expires after the EHC has detached.
     */
    UCS_NW_AV_TR_CA_ERR_SYSTEM      = 0x13U,
    /*! \brief No transition */
    UCS_NW_AV_TR_CA_NO_TRANSITION   = 0xFFU

} Ucs_Network_AvailTransCause_t;

/*! \brief Result values for the Ring Break Diagnosis
 *  \ingroup G_UCS_DIAG_TYPES
 */
typedef enum Ucs_Diag_RbdResult_
{
    UCS_DIAG_RBD_NO_ERROR       = 0x00U,     /*!< \brief No error */
    UCS_DIAG_RBD_POS_DETECTED   = 0x01U,     /*!< \brief Position detected */
    UCS_DIAG_RBD_DIAG_FAILED    = 0x02U,     /*!< \brief Diagnosis failed */
    UCS_DIAG_RBD_POS_0_WEAK_SIG = 0x03U      /*!< \brief PosDetected = 0 and un-lockable signal on
                                              *          Rx was detected
                                              */
} Ucs_Diag_RbdResult_t;

/*! \brief Data packet size of the isochronous channel 
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Avp_IsocPacketSize_
{
    UCS_ISOC_PCKT_SIZE_188 = 188U,  /*!< \brief Standard MPEG2 Transport Stream packet size, no
                                     *          encryption
                                     */ 
    UCS_ISOC_PCKT_SIZE_196 = 196U,  /*!< \brief DTCP Supplement B, DTCP over MOST */
    UCS_ISOC_PCKT_SIZE_206 = 206U   /*!< \brief DTCP Supplement E, DTCP over IP */

} Ucs_Avp_IsocPacketSize_t;

/*! \brief Mute Mode
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Sync_MuteMode_
{
    UCS_SYNC_MUTE_MODE_NO_MUTING   = 0x00U,  /*!< \brief No mute monitoring */
    UCS_SYNC_MUTE_MODE_MUTE_SIGNAL = 0x01U   /*!< \brief Mute signal. The MUTE pin will be asserted if any registered connection may stream 
                                              *          corrupted data.
                                              */

} Ucs_Sync_MuteMode_t;

/*! \brief Direction of the data stream from the perspective of the INIC 
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_SocketDirection_
{
    UCS_SOCKET_DIR_INPUT  = 0U,     /*!< \brief Socket transfers data into INIC */
    UCS_SOCKET_DIR_OUTPUT = 1U      /*!< \brief Socket transfers data out of INIC */

} Ucs_SocketDirection_t;

/*! \brief Data type of MOST Sockets 
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Most_SocketDataType_
{
    UCS_MOST_SCKT_SYNC_DATA        = 0U,    /*!< \brief Specifies the synchronous streaming data type */
    UCS_MOST_SCKT_AV_PACKETIZED    = 3U,    /*!< \brief Specifies the A/V Packetized Isochronous 
                                                        streaming data type*/
    UCS_MOST_SCKT_QOS_IP           = 4U,    /*!< \brief Specifies the Quality of Service IP 
                                                        streaming data type*/
    UCS_MOST_SCKT_DISC_FRAME_PHASE = 5U     /*!< \brief Specifies the DiscreteFrame Isochronous
                                                        streaming phase data type */
} Ucs_Most_SocketDataType_t;

/*! \brief Data type of MediaLB Sockets 
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Mlb_SocketDataType_
{
    UCS_MLB_SCKT_SYNC_DATA        = 0U,     /*!< \brief Specifies the synchronous streaming data type */
    UCS_MLB_SCKT_CONTROL_DATA     = 2U,     /*!< \brief Specifies the control data type */
    UCS_MLB_SCKT_AV_PACKETIZED    = 3U,     /*!< \brief Specifies the A/V Packetized Isochronous 
                                                        streaming data type */
    UCS_MLB_SCKT_QOS_IP           = 4U,     /*!< \brief Specifies the Quality of Service IP 
                                                        streaming data type*/
    UCS_MLB_SCKT_DISC_FRAME_PHASE = 5U,     /*!< \brief Specifies the DiscreteFrame Isochronous
                                                        streaming phase data type */
    UCS_MLB_SCKT_IPC_PACKET       = 7U      /*!< \brief Specifies the IPC packet data type */

} Ucs_Mlb_SocketDataType_t;

/*! \brief Data type of USB Sockets 
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Usb_SocketDataType_
{
    UCS_USB_SCKT_SYNC_DATA     = 0U,    /*!< \brief Specifies the synchronous streaming data type */
    UCS_USB_SCKT_CONTROL_DATA  = 2U,    /*!< \brief Specifies the control data type */
    UCS_USB_SCKT_AV_PACKETIZED = 3U,    /*!< \brief Specifies the A/V Packetized Isochronous 
                                                    streaming data type */
    UCS_USB_SCKT_IPC_PACKET    = 7U     /*!< \brief Specifies the IPC packet data type */

} Ucs_Usb_SocketDataType_t;

/*! \brief Physical interface of the USB Port
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Usb_PhysicalLayer_
{
    UCS_USB_PHY_LAYER_STANDARD = 0U,    /*!< \brief Standard - USB uses the standard physical 
                                         *          interface with analog transceivers for board
                                         *          communication
                                         */
    UCS_USB_PHY_LAYER_HSCI     = 1U     /*!< \brief HSIC - USB uses the High-Speed Inter-Chip 
                                         *          interface without analog transceivers for board 
                                         *          communication.
                                         */
} Ucs_Usb_PhysicalLayer_t;

/*! \brief MediaLB clock speed configuration 
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Mlb_ClockConfig_
{
    UCS_MLB_CLK_CFG_256_FS  = 0U,       /*!< \brief 256 Fs */
    UCS_MLB_CLK_CFG_512_FS  = 1U,       /*!< \brief 512 Fs */
    UCS_MLB_CLK_CFG_1024_FS = 2U,       /*!< \brief 1024 Fs */
    UCS_MLB_CLK_CFG_2048_FS = 3U,       /*!< \brief 2048 Fs */
    UCS_MLB_CLK_CFG_3072_FS = 4U,       /*!< \brief 3072 Fs */
    UCS_MLB_CLK_CFG_4096_FS = 5U,       /*!< \brief 4096 Fs */
    UCS_MLB_CLK_CFG_6144_FS = 6U,       /*!< \brief 6144 Fs */
    UCS_MLB_CLK_CFG_8192_FS = 7U,       /*!< \brief 8192 Fs */
    UCS_MLB_CLK_CFG_WILDCARD = 0xFFU    /*!< \brief Uses the corresponding parameter in the INIC
                                                    Configuration String */
} Ucs_Mlb_ClockConfig_t;

/*! \brief Source of the RMCK clock 
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Rmck_PortClockSource_
{
    UCS_RMCK_PORT_CLK_SRC_NW_SYSTEM = 0x01U /*!< \brief RMCK is locked to the system clock */

} Ucs_Rmck_PortClockSource_t;

/*! \brief Data type of PCIe Sockets 
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Pci_SocketDataType_
{
    UCS_PCI_SCKT_AV_PACKETIZED = 3U     /*!< \brief Specifies the A/V Packetized Isochronous 
                                                    streaming data type */

} Ucs_Pci_SocketDataType_t;

/*! \brief Operation mode of the Streaming Port 
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Stream_PortOpMode_
{
    UCS_STREAM_PORT_OP_MODE_GENERIC = 0x00U /*!< \brief If Index = PortB, data pins are linked 
                                                        to PortA clock configuration. */

} Ucs_Stream_PortOpMode_t;

/*! \brief Direction of the physical pins of the indexed Streaming Port 
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Stream_PortOption_
{
    UCS_STREAM_PORT_OPT_IN_OUT   = 0x00U,    /*!< \brief Two serial interface pins are available;
                                                         one for direction IN and one for direction
                                                         OUT. */
    UCS_STREAM_PORT_OPT_DUAL_IN  = 0x01U,    /*!< \brief Tow serial interface pins are available
                                                         for direction IN. */
    UCS_STREAM_PORT_OPT_DUAL_OUT = 0x02U     /*!< \brief Tow serial interface pins are available
                                                         for direction OUT. */

} Ucs_Stream_PortOption_t;

/*! \brief Indicates if FSY/SCK signals are configured as outputs or inputs. 
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Stream_PortClockMode_
{
    /*! \brief INIC drives the FSY/SCK signals as outputs, frequency locked to the network clock. */
    UCS_STREAM_PORT_CLK_MODE_OUTPUT = 0x00U,
    /*! \brief FSY/SCK signals are configured as inputs and are driven from outside the INIC. Use 
     *         RMCK, frequency locked to the network clock, as reference for clock generation.
     */
    UCS_STREAM_PORT_CLK_MODE_INPUT  = 0x01U,
    /*! \brief Wildcard */
    UCS_STREAM_PORT_CLK_MODE_WILD   = 0xFFU

} Ucs_Stream_PortClockMode_t;

/*! \brief This setting is only applicable to data pins used for Generic Streaming including any 
           linked pins to Streaming Port B. All data pins share the same  FSY / SCK  signals, hence 
           this setting applies to all data pins. 
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Stream_PortClockDataDelay_
{
    /*! \brief Data is not delayed by a single SCK clock delay. */
    UCS_STREAM_PORT_CLK_DLY_NONE    = 0x00U,
    /*! \brief There is a single SCK clock delay between the start of frame (falling edge of FSY)
     *         and the start of the frame data on the data pins.
     */
    UCS_STREAM_PORT_CLK_DLY_DELAYED = 0x01U,
    /*! \brief Wildcard */
    UCS_STREAM_PORT_CLK_DLY_WILD    = 0xFFU

} Ucs_Stream_PortClockDataDelay_t;

/*! \brief Clock speed configuration of the  SCK  signal. 
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Stream_PortClockConfig_
{
    /*! \brief 8 x Fs. All data pins must be configured for sequential routing. */
    UCS_STREAM_PORT_CLK_CFG_8FS   = 0x00U,
    /*! \brief 16 x Fs. All data pins must be configured for sequential routing. */
    UCS_STREAM_PORT_CLK_CFG_16FS  = 0x01U,
    /*! \brief 32 x Fs. All data pins must be configured for sequential routing. */
    UCS_STREAM_PORT_CLK_CFG_32FS  = 0x02U,
    /*! \brief 64 x Fs */
    UCS_STREAM_PORT_CLK_CFG_64FS  = 0x03U,
    /*! \brief 128 x Fs */
    UCS_STREAM_PORT_CLK_CFG_128FS = 0x04U,
    /*! \brief 256 x Fs */
    UCS_STREAM_PORT_CLK_CFG_256FS = 0x05U,
    /*! \brief 512 x Fs */
    UCS_STREAM_PORT_CLK_CFG_512FS = 0x06U,
    /*! \brief Wildcard */
    UCS_STREAM_PORT_CLK_CFG_WILD  = 0xFFU

} Ucs_Stream_PortClockConfig_t;

/*! \brief Data types of Streaming Sockets
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Stream_SocketDataType_
{
    /*! \brief Specifies the synchronous streaming data type. */
    UCS_STREAM_PORT_SCKT_SYNC_DATA = 0x00U

} Ucs_Stream_SocketDataType_t;

/*! \brief ID of the serial interface pin of the addressed Streaming Port instance to which the 
           socket should be attached to.
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Stream_PortPinId_
{
    UCS_STREAM_PORT_PIN_ID_SRXA0 = 0x00U,       /*!< \brief PortA, pin 5. */
    UCS_STREAM_PORT_PIN_ID_SRXA1 = 0x01U,       /*!< \brief PortA, pin 6. */
    UCS_STREAM_PORT_PIN_ID_SRXB0 = 0x10U,       /*!< \brief PortB, pin 7. */
    UCS_STREAM_PORT_PIN_ID_SRXB1 = 0x11U        /*!< \brief PortB, pin 8. */

} Ucs_Stream_PortPinId_t;

/*! \brief Defines the alignment of the data bytes within the streaming port frame.
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Stream_PortDataAlign_
{
    UCS_STREAM_PORT_ALGN_LEFT16BIT  = 0x00U,    /*!< \brief Left-justified, 16 bit, legacy */
    UCS_STREAM_PORT_ALGN_LEFT24BIT  = 0x01U,    /*!< \brief Left-justified, 24 bit, legacy */
    UCS_STREAM_PORT_ALGN_RIGHT16BIT = 0x02U,    /*!< \brief Right-justified, 16 bit, legacy */
    UCS_STREAM_PORT_ALGN_RIGHT24BIT = 0x03U,    /*!< \brief Right-justified, 16 bit, legacy */
    UCS_STREAM_PORT_ALGN_SEQ        = 0x04U     /*!< \brief Sequential */

} Ucs_Stream_PortDataAlign_t;

/*! \brief Indicates if the MOST Network Port is available and ready for streaming data connections.
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Most_PortAvail_
{
    /*! \brief MOST Network Port is available and it is possible to have streaming data 
     *         connections.
     */
    UCS_MOST_PORT_AVAIL     = 0x01U,
    /*! \brief MOST Network Port is not available for streaming data. FreeStreamingBW gets 0. 
     *         All created sockets on this port get invalid.
     */
    UCS_MOST_PORT_NOT_AVAIL = 0x00U

} Ucs_Most_PortAvail_t;

/*! \brief Indicates the sub state to parameter Available.
 *  \ingroup G_UCS_XRM_ENUM
 */
typedef enum Ucs_Most_PortAvailInfo_
{
    /*! \brief MOST Network Port is not available for streaming data. This is for instance the 
     *         case if the MOST network is shut down or Ring Break Diagnosis is running.
     */
    UCS_MOST_PRT_AVL_INF_REGULAR  = 0x00U,
    /*! \brief Unlocks have been detected at the port and streaming is temporarily not 
     *         available.
     */
    UCS_MOST_PRT_AVL_INF_UNSTABLE = 0x10U,
    /*! \brief Port is in Stable Lock. */
    UCS_MOST_PRT_AVL_INF_STABLE   = 0x11U

} Ucs_Most_PortAvailInfo_t;

/*! \brief Indicates the type of the Physical Layer Test.
 *  \ingroup G_UCS_DIAG_TYPES
 */
typedef enum Ucs_Diag_PhyTest_Type_
{
    UCS_DIAG_PHYTEST_MASTER = 1U,   /*!< \brief Force Retimed Bypass TimingMaster mode  */
    UCS_DIAG_PHYTEST_SLAVE  = 2U    /*!< \brief Force Retimed Bypass TimingSlave mode  */

} Ucs_Diag_PhyTest_Type_t;


/*! \brief Specifies whether the the INIC behaves as a TimingMaster or TimingSlave device
 *         during the Ring Break Diagnosis (RBD).
 *  \ingroup G_UCS_DIAG_TYPES
 */
typedef enum Ucs_Diag_RbdType_
{
    UCS_DIAG_RBDTYPE_SLAVE  = 0U,   /*!< \brief The INIC starts the RBD as a TimingSlave */
    UCS_DIAG_RBDTYPE_MASTER = 1U    /*!< \brief The INIC starts the RBD as a TimingMaster */

} Ucs_Diag_RbdType_t;

/*! \brief The speed grade of the I2C Port. 
 *  \ingroup G_UCS_I2C_TYPES
 */
typedef enum Ucs_I2c_Speed_
{
    UCS_I2C_SLOW_MODE      = 0x00U,      /*!< \brief Speed grade of the port is 100 kHz. */
    UCS_I2C_FAST_MODE      = 0x01U       /*!< \brief Speed grade of the port is 400 kHz. */

} Ucs_I2c_Speed_t;

/*! \brief The write transfer mode. 
 *  \ingroup G_UCS_I2C_TYPES
 */
typedef enum Ucs_I2c_TrMode_
{
    UCS_I2C_DEFAULT_MODE      = 0x00U,      /*!< \brief Default mode of the I2C write transfer */
    UCS_I2C_REPEATED_MODE     = 0x01U,      /*!< \brief Repeated Mode of the I2C write transfer */
    UCS_I2C_BURST_MODE        = 0x02U       /*!< \brief Burst mode of the I2C write transfer */

} Ucs_I2c_TrMode_t;

/*! \brief The mode of the GPIO pin. 
 *  \ingroup G_UCS_GPIO_TYPES
 */
typedef enum Ucs_Gpio_PinMode_
{
    UCS_GPIO_UNAVAILABLE        = 0x00U,   /*!< \brief Unavailable Mode */
    UCS_GPIO_UNUSED             = 0x01U,   /*!< \brief Unused Mode */   
    UCS_GPIO_INPUT              = 0x10U,   /*!< \brief Input Mode */
    UCS_GPIO_IN_STICKY_HL       = 0x11U,   /*!< \brief InputStickyHighLevel Mode */
    UCS_GPIO_IN_STICKY_LL       = 0x12U,   /*!< \brief InputStickyLowLevel Mode */
    UCS_GPIO_IN_TRIGGER_RE      = 0x13U,   /*!< \brief InputTriggerRisingEdge Mode */
    UCS_GPIO_IN_TRIGGER_FE      = 0x14U,   /*!< \brief InputTriggerFallingEdge Mode */
    UCS_GPIO_IN_TRIGGER_HL      = 0x16U,   /*!< \brief InputTriggerHighLevel Mode */
    UCS_GPIO_IN_TRIGGER_LL      = 0x17U,   /*!< \brief InputTriggerLowLevel Mode */
    UCS_GPIO_IN_DEBOUNCED       = 0x30U,   /*!< \brief InputDebounced Mode */
    UCS_GPIO_IN_DB_TRIGGER_RE   = 0x33U,   /*!< \brief InputDebouncedTriggerRisingEdge Mode */
    UCS_GPIO_IN_DB_TRIGGER_FE   = 0x34U,   /*!< \brief InputDebouncedTriggerFallingEdge Mode */
    UCS_GPIO_IN_DB_TRIGGER_HL   = 0x36U,   /*!< \brief InputDebouncedTriggerHighLevel Mode */
    UCS_GPIO_IN_DB_TRIGGER_LL   = 0x37U,   /*!< \brief InputDebouncedTriggerLowLevel Mode */
    UCS_GPIO_OUT_DEFAULT_LOW    = 0x40U,   /*!< \brief OutputDefaultLow Mode */
    UCS_GPIO_OUT_DEFAULT_HIGH   = 0x41U,   /*!< \brief OutputDefaultHigh Mode */
    UCS_GPIO_OUT_OPEN_DRAIN     = 0x50U,   /*!< \brief OutputOpenDrain Mode */
    UCS_GPIO_OUT_OD_TRIGGER_RE  = 0x53U,   /*!< \brief OutputOpenDrainTriggerRisingEdge Mode */
    UCS_GPIO_OUT_OD_TRIGGER_FE  = 0x54U,   /*!< \brief OutputOpenDrainTriggerFallingEdge Mode */
    UCS_GPIO_OUT_OD_TRIGGER_HL  = 0x56U,   /*!< \brief OutputOpenDrainTriggerHighLevel Mode */
    UCS_GPIO_OUT_OD_TRIGGER_LL  = 0x57U    /*!< \brief OutputOpenDrainTriggerLowLevel Mode */

} Ucs_Gpio_PinMode_t;

/*! \brief Type of System Diagnosis Report. 
 *  \ingroup G_UCS_INIC_TYPES
 */
typedef enum Ucs_Sd_ResCode_
{
    UCS_SD_TARGET_FOUND         = 0x01U,    /*!< \brief Segment description */
    UCS_SD_FINISHED             = 0x02U,    /*!< \brief System Diagnosis finished */
    UCS_SD_CABLE_LINK_RES       = 0x03U,    /*!< \brief Cable Link Diagnosis was executed. */
    UCS_SD_ABORTED              = 0x04U,    /*!< \brief System Diagnosis stopped by application command */
    UCS_SD_ERROR                = 0x05U     /*!< \brief System Diagnosis detected unexpected error */

} Ucs_Sd_ResCode_t;

/*! \brief Type of System Diagnosis Error Codes. 
 *  \ingroup G_UCS_INIC_TYPES
 */
typedef enum Ucs_Sd_ErrCode_
{
    /*! \brief An internal error occurred during System Diagnosis. */ 
    UCS_SD_ERR_UNSPECIFIED          = 0x01U,    
    /*! \brief INIC answered with "NoSuccess" to a Welcome.StartResult command. */
    UCS_SD_ERR_WELCOME_NO_SUCCESS   = 0x02U,    
    /*! \brief Stopping the System Diagnosis mode on INIC failed. The INIC may remain in System 
                Diagnosis mode. */
    UCS_SD_ERR_STOP_SYSDIAG_FAILED  = 0x03U,    
    /*! \brief System Diagnosis stopped due to a severe error. The INIC may remain in System 
                Diagnosis mode. */
    UCS_SD_ERR_TERMINATED           = 0x04U     

} Ucs_Sd_ErrCode_t;



/*------------------------------------------------------------------------------------------------*/
/* Structures                                                                                     */
/*------------------------------------------------------------------------------------------------*/
/*! \brief   This structure contains information on the hardware and firmware modules of the INIC.
 *  \ingroup G_UCS_INIC_TYPES
 */
typedef struct Ucs_Inic_Version_
{
    uint32_t product_identifier; /*!< \brief Unique identifier that represents the product name.\mns_name_inic{ProductIdentifier} */
    uint32_t build_version;      /*!< \brief Firmware build version number.\mns_name_inic{BuildVersion}  */
    uint8_t  major_version;      /*!< \brief Firmware major version number.\mns_name_inic{MajorVersion} */
    uint8_t  minor_version;      /*!< \brief Firmware build version number.\mns_name_inic{MinorVersion} */
    uint8_t  release_version;    /*!< \brief Firmware release version number.\mns_name_inic{ReleaseVersion} */
    uint8_t  hw_revision;        /*!< \brief Chip revision number.\mns_name_inic{HardwareRevision} */
    uint16_t diagnosis_id;       /*!< \brief Diagnosis identifier of the INIC.\mns_name_inic{DiagnosisID} */
    uint8_t  cs_major_version;   /*!< \brief Configuration String major version number.\mns_name_inic{ExtMajorVersion} */
    uint8_t  cs_minor_version;   /*!< \brief Configuration String minor version number.\mns_name_inic{ExtMinorVersion} */
    uint8_t  cs_release_version; /*!< \brief Configuration String release version number.\mns_name_inic{ExtReleaseVersion} */

} Ucs_Inic_Version_t;

/*! \brief   This structure contains information on the GPIO pin configuration.
 *  \ingroup G_UCS_INIC_TYPES
 */
typedef struct Ucs_Gpio_PinConfiguration_
{
    uint8_t pin;                /*!< \brief The GPIO pin that is to be configured  */
    Ucs_Gpio_PinMode_t mode;    /*!< \brief The mode of the GPIO pin  */

} Ucs_Gpio_PinConfiguration_t;






/*! \brief   This structure holds the signature of the Hello, Welcome and Signature messages. 
 *           It supports the signature v1 only.
 *  \ingroup G_INIC_TYPES
 */
typedef struct Ucs_Signature_t_
{
    uint16_t node_address;      /*!< \brief NodeAddress */
    uint16_t group_address;     /*!< \brief GroupAddress */
    uint16_t mac_47_32;         /*!< \brief MACAddress_47_32 */
    uint16_t mac_31_16;         /*!< \brief MACAddress_31_16 */    
    uint16_t mac_15_0;          /*!< \brief MACAddress_15_0 */
    uint16_t node_pos_addr;     /*!< \brief NodePositionAddress */
    uint16_t diagnosis_id;      /*!< \brief DiagnosisID */
    uint8_t  num_ports;         /*!< \brief NumberOfPorts */
    uint8_t  chip_id;           /*!< \brief ChipID */
    uint8_t  fw_major;          /*!< \brief FWVersion_Major */
    uint8_t  fw_minor;          /*!< \brief FWVersion_Minor */
    uint8_t  fw_release;        /*!< \brief FWVersion_Release */
    uint32_t fw_build;          /*!< \brief FWVersion_Build */
    uint8_t  cs_major;          /*!< \brief CSVersion_Major */
    uint8_t  cs_minor;          /*!< \brief CSVersion_Minor */
    uint8_t  cs_release;        /*!< \brief CSVersion_Release */
/*    uint8_t  uid_persistency;*/   /*!< \brief UIDPersistency */
/*    uint32_t uid;*/               /*!< \brief UID */

} Ucs_Signature_t;              

/*------------------------------------------------------------------------------------------------*/
/*  System Diagnosis                                                                              */
/*------------------------------------------------------------------------------------------------*/
/*! \brief   This structure holds the segment information of the system diagnosis 
 *  \ingroup G_INIC_TYPES
 */
typedef struct Ucs_Sd_Segment_t_
{
    uint8_t branch;             /*!< \brief Number of the currently tested branch. Numbering starts 
                                            with 0 and corresponds to the port number if the Timing 
                                            Master is a multi port INIC */
    uint8_t num;                /*!< \brief Segment number inside the tested branch. Numbering starts with 1 */
    Ucs_Signature_t source;     /*!< \brief Signature of the first node of the segment 
                                            \mns_param_inic{Signature,Hello,MNSH2-Hello200} */
    Ucs_Signature_t target;     /*!< \brief Signature of the second node of the segment  
                                            \mns_param_exc{Signature,Hello,MNSH2-Hello200} */
} Ucs_Sd_Segment_t;


/*! \brief   This structure holds the results of the system diagnosis 
 *  \ingroup G_INIC_TYPES
 */
typedef struct Ucs_Sd_Report_t_
{
    Ucs_Sd_ResCode_t code;      /*!< \brief Result code */
    Ucs_Sd_Segment_t segment;   /*!< \brief Information about tested segment */
    uint8_t cable_link_info;    /*!< \brief Result of a cable link diagnosis. 
                                            \mns_param_exc{Result,CableLinkDiagnosis,MNSH2-CableLinkDiagnosis211} */
    Ucs_Sd_ErrCode_t err_info;  /*!< \brief Error codes, values are defined in Ucs_Sd_ErrCode_t */

} Ucs_Sd_Report_t;


/*------------------------------------------------------------------------------------------------*/
/*  Node Discovery                                                                                */
/*------------------------------------------------------------------------------------------------*/


/*! \brief Result values of the Node Discovery service. 
 *  \ingroup G_UCS_NODE_DISCOVERY_TYPES
 */
typedef enum Ucs_Nd_ResCode_t_
{
    UCS_ND_RES_WELCOME_SUCCESS   = 0x01U,    /*!< \brief Node was successfully added to the network. */
    UCS_ND_RES_UNKNOWN           = 0x02U,    /*!< \brief Node signature is unknown to the application, node will be ignored. */
    UCS_ND_RES_MULTI             = 0x03U,    /*!< \brief A node with the same signature is already part of the system. The new node will be ignored. */
    UCS_ND_RES_STOPPED           = 0x04U,    /*!< \brief The Node Discovery service was stopped by API function Ucs_Nd_Stop(). Ucs_Nd_Start() has to be called to start again. */
    UCS_ND_RES_NETOFF            = 0x05U,    /*!< \brief The Node Discovery service detected a NetOff event and pauses . It resumes automatically as soon as NetOn occurs. */
    UCS_ND_RES_ERROR             = 0x06U     /*!< \brief An unexpected error occurred. Node Discovery service was stopped. Ucs_Nd_Start() has to be called to start again. */

} Ucs_Nd_ResCode_t;

/*! \brief   Result values of the application's evaluation function (type \ref Ucs_Nd_EvalCb_t).
 *  \ingroup G_UCS_NODE_DISCOVERY_TYPES
 */
typedef enum Ucs_Nd_CheckResult_t_
{
    UCS_ND_CHK_WELCOME              = 0x01U,    /*!< \brief Node is ok, try to add it to the network. */
    UCS_ND_CHK_UNIQUE               = 0x02U,    /*!< \brief Test if this node is unique. */
    UCS_ND_CHK_UNKNOWN              = 0x03U     /*!< \brief The node is unknown, no further action. */

} Ucs_Nd_CheckResult_t;


/*! \brief Function signature of node evaluation callback used by Node Discovery service.
 *
 *  The Node Discovery service announces the signature of each node it has found to the 
 *  application via the evaluation function. In this function the application 
 *  decides how the Node Discovery service shall proceed with the node.
 *  The application maintains two lists:  
 * 
 *  <dl> 
 *      <dt> *set_list* </dt>
 *      <dd> Contains the signatures of the nodes the system shall contain
 *  
 *      <dt> *device_list* </dt>
 *      <dd> Contains the signatures of the nodes detected in the system
 *  </dl>
 *
 *  The evaluation has to follow these rules: 
 *  - If the node is not part of the *set_list*, it is regarded as unknown (\ref UCS_ND_CHK_UNKNOWN)
 *    and will be ignored. 
 *  - If the node is part of the *set_list* and is not yet in the *device_list*, the Node Discovery 
 *    Service shall try to add the node to network (\ref UCS_ND_CHK_WELCOME). 
 *  - If the node is already part of the *device_list*, there are two possibilities: the node in the 
 *    *device_list* experienced a reset or there are two nodes with the same signature. Evaluation 
 *    result is \ref UCS_ND_CHK_UNIQUE. The Node Discovery service will perform further tests.
 *
 *  \param    signature   Signature of the respective node
 *  \param    user_ptr    User reference provided in \ref Ucs_InitData_t "Ucs_InitData_t::user_ptr"
 *  \returns  UCS_ND_CHK_WELCOME  Node is ok, try to add it to the network.
 *  \returns  UCS_ND_CHK_UNIQUE   Test if this node is unique.
 *  \returns  UCS_ND_CHK_UNKNOWN  Node is unknown, no further action.
 *  \ingroup G_UCS_NODE_DISCOVERY
 */
typedef Ucs_Nd_CheckResult_t (*Ucs_Nd_EvalCb_t)(Ucs_Signature_t *signature, void *user_ptr);

/*! \brief Function signature of result callback used by Node Discovery service.
 *
 *  The Node Discovery service reports the result of each node and some system events by
 *  this callback function.
 *  
 *  \note The parameter <b>signature</b> will be NULL, if parameter <b>code</b> is 
 *  \ref UCS_ND_RES_STOPPED, \ref UCS_ND_RES_NETOFF or \ref UCS_ND_RES_ERROR.
 *
 *  \param   code         Result code 
 *  \param   signature    Signature of the respective node
 *  \param   user_ptr     User reference provided in \ref Ucs_InitData_t "Ucs_InitData_t::user_ptr"
 *  \ingroup G_UCS_NODE_DISCOVERY
 */
typedef void (*Ucs_Nd_ReportCb_t)(Ucs_Nd_ResCode_t code, 
                                  Ucs_Signature_t *signature,
                                  void *user_ptr);


/*------------------------------------------------------------------------------------------------*/
/*  Programming service                                                                              */
/*------------------------------------------------------------------------------------------------*/

/*! \brief Defines the set of MemIDs and the memory access types. 
 *  \ingroup G_UCS_PROG_MODE_TYPES
 */
typedef enum Ucs_Prg_SessionType_ 
{
    UCS_PRG_ST_CS          = 0x01U,    /*!< \brief Writes to configuration string */
    UCS_PRG_ST_IS          = 0x02U,    /*!< \brief Writes to identification string */
    UCS_PRG_ST_CS_IS       = 0x04U,    /*!< \brief Writes to configuration and identification string  */
    UCS_PRG_ST_ERASE_EM    = 0x08U,    /*!< \brief Erases the error memory */
    UCS_PRG_ST_CFG_READ    = 0x10U     /*!< \brief Reads data from all configuration memories */
} Ucs_Prg_SessionType_t;


/*! \brief Represents the memory resource to be written. 
 *  \ingroup G_UCS_PROG_MODE_TYPES
 */
typedef enum Ucs_Prg_MemId_ 
{
    UCS_PRG_MID_CS        = 0x00U, /*!< \brief Writes the configuration string */
    UCS_PRG_MID_IS        = 0x01U, /*!< \brief Writes the identification string */
    UCS_PRG_MID_CSTEST    = 0x0CU, /*!< \brief Writes the test configuration string */
    UCS_PRG_MID_ISTEST    = 0x0DU  /*!< \brief Writes the test identification string */
} Ucs_Prg_MemId_t;

/*! \brief Represents a programming task. 
 *  \ingroup G_UCS_PROG_MODE_TYPES
 */
typedef struct Ucs_Prg_Command_
{ 
    Ucs_Prg_MemId_t mem_id;         /*!< \brief Represents the memory resource to be written. */
    uint32_t        address;        /*!< \brief Defines the memory location at which the writing 
                                                operation starts. */
    uint8_t         unit_length;    /*!< \brief Sets the number of memory units to be written. 
                                                Memory units can be unsigned bytes, unsigned words 
                                                or unsigned masked data depending on the memory type. */
    uint8_t         data_length;    /*!< \brief Lenght of data */
    uint8_t        *data;           /*!< \brief Contains the actual data written to the memory 
                                                resource and formatted as memory units. */
} Ucs_Prg_Command_t;

/*! \brief Result values of the Programming service. 
 *  \ingroup G_UCS_PROG_MODE_TYPES
 */
typedef enum Ucs_Prg_ResCode_t_
{
    UCS_PRG_RES_SUCCESS     = 0x01U,    /*!< \brief Node was successfully programmed. */
    UCS_PRG_RES_TIMEOUT     = 0x02U,    /*!< \brief Node did not answer timely. */
    UCS_PRG_RES_NET_OFF     = 0x03U,    /*!< \brief A NetOff event occurred during programming. */
    UCS_PRG_RES_FKT_SYNCH   = 0x04U,    /*!< \brief The call of the internal API function returned an error, 
                                                    so the command was not sent to the node.*/
    UCS_PRG_RES_FKT_ASYNCH  = 0x05U,    /*!< \brief Node returned an error message as result. */
    UCS_PRG_RES_ERROR       = 0x06U     /*!< \brief An unexcpected error occurred. Programming service was stopped. */

} Ucs_Prg_ResCode_t;

/*! \brief Denotes the function where an error occurred.
 *  \ingroup G_UCS_PROG_MODE_TYPES
 */
typedef enum Ucs_Prg_Func_t_
{
    UCS_PRG_FKT_DUMMY               = 0x00U,    /*!< \brief Dummy value, used in case of UCS_PRG_RES_SUCCESS */
    UCS_PRG_FKT_WELCOME             = 0x01U,    /*!< \brief Error occurred in the context of function Welcome */
    UCS_PRG_FKT_WELCOME_NOSUCCESS   = 0x02U,    /*!< \brief Welcome result was No Success */
    UCS_PRG_FKT_MEM_OPEN            = 0x03U,    /*!< \brief Error occurred in the context of function MemorySessionOpen */
    UCS_PRG_FKT_MEM_WRITE           = 0x04U,    /*!< \brief Error occurred in the context of function MemoryWrite */
    UCS_PRG_FKT_MEM_CLOSE           = 0x05U,    /*!< \brief Error occurred in the context of function MemorySessionClose */
    UCS_PRG_FKT_INIT                = 0x06U     /*!< \brief Error occurred in the context of function Init */
} Ucs_Prg_Func_t;

/*! \brief Function signature of result callback used by Programming service.
 *
 *  The Programming service reports the result of programming a certain device by
 *  this callback function.
 *  
 *
 *  \param   code         Result values of the Programming service 
 *  \param   function     Signature of the node to be programmed.
 *  \param   ret_len      Length of the error parameter field parm. It is 0 if no error occurred. 
 *  \param   parm         Pointer to the parameters of a potential error message.
 *  \param   user_ptr     User reference provided in \ref Ucs_InitData_t "Ucs_InitData_t::user_ptr"
 *  \ingroup G_UCS_PROG_MODE
 */
typedef void (*Ucs_Prg_ReportCb_t)(Ucs_Prg_ResCode_t code, 
                                   Ucs_Prg_Func_t function,
                                   uint8_t ret_len,
                                   uint8_t parm[],
                                   void *user_ptr);


/*------------------------------------------------------------------------------------------------*/
/*  BackChannel Diagnosis                                                                         */
/*------------------------------------------------------------------------------------------------*/

/*! \brief Result values of the BackChannel Diagnosis. 
 *  \ingroup G_UCS_BC_DIAG_TYPES
 */
typedef enum Ucs_Bcd_ResCode_t_
{
    UCS_BCD_RES_SUCCESS        = 0x01U,    /*!< \brief current segment is not broken */
    UCS_BCD_RES_NO_RING_BREAK  = 0x02U,    /*!< \brief TM answered: no ring break. */
    UCS_BCD_RES_RING_BREAK     = 0x03U,    /*!< \brief Ring break detected in current segment. */
    UCS_BCD_RES_TIMEOUT1       = 0x04U,    /*!< \brief No communication on back channel. */
    UCS_BCD_RES_TIMEOUT2       = 0x05U,    /*!< \brief No result from INIC received. */
    UCS_BCD_RES_ERROR          = 0x06U,    /*!< \brief An unexpected error occurred. BackChannel Diagnosis was stopped. */
    UCS_BCD_RES_END            = 0x07U     /*!< \brief BackChannel Diagnosis ended regularly. */  
} Ucs_Bcd_ResCode_t;


/*! \brief Function signature of result callback used by BackChannel Diagnosis.
 *
 *  The BackChannel Diagnosis reports the result of certain segment by
 *  this callback function.
 *  
 *  \param   code           Result code 
 *  \param   segment        Number of the segment which was inspected. Numbering starts with 0 denoting the segment following the TimingMaster. The number is increased for each following segment.
 *  \param   user_ptr       User reference provided in \ref Ucs_InitData_t "Ucs_InitData_t::user_ptr"
 *  \ingroup G_UCS_BC_DIAG
 */
typedef void (*Ucs_Bcd_ReportCb_t)(Ucs_Bcd_ResCode_t code, 
                                   uint8_t segment,
                                   void *user_ptr);



/*------------------------------------------------------------------------------------------------*/
/*  Network functions                                                                             */
/*------------------------------------------------------------------------------------------------*/
/*! \brief Function signature of result callback used by Ucs_Network_GetFrameCounter().
 *  \mns_res_inic{MOSTNetworkFrameCounter,MNSH3-MOSTNetworkFrameCounter523}
 *  \mns_ic_manual{ See also <i>User Manual</i>, section \ref P_UM_SYNC_AND_ASYNC_RESULTS. }
 *  \param frame_counter    The MOST network frame count.\mns_name_inic{FrameCounter}
 *  \param reference        Reference value that was passed to Mns_Network_GetFrameCounter().\mns_name_inic{Reference}
 *  \param lock             Indicates if the TimingSlave device is locked to the MOST network. For a 
                            TimingMaster device this value is always True.
 *  \param result           Returned result of the operation
 *  \param user_pter     User reference provided in \ref Ucs_InitData_t "Ucs_InitData_t::user_ptr"
 *  \ingroup G_UCS_NET
 */
typedef void (*Ucs_Network_FrameCounterCb_t)(uint32_t reference,
                                             uint32_t frame_counter,
                                             bool     frame_lock,
                                             Ucs_StdResult_t result,
                                             void * user_pointer);





#ifdef __cplusplus
}   /* extern "C" */
#endif

#endif  /* #ifndef UCS_INIC_PB_H */

/*------------------------------------------------------------------------------------------------*/
/* End of file                                                                                    */
/*------------------------------------------------------------------------------------------------*/