summaryrefslogtreecommitdiffstats
path: root/ucs2-lib/inc/ucs_inic_pb.h
blob: cb8add97bfcf2ea869a393fdaa126e27e20ed51a (plain)
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
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                                                                                    */
/*------------------------------------------------------------------------------------------------*/