summaryrefslogtreecommitdiffstats
path: root/ucs2-lib/inc/ucs_inic.h
blob: 159dbf411ede24b6f015b557109d1214dbbff78b (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
/*------------------------------------------------------------------------------------------------*/
/* 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 Internal header file of class CInic.
 *
 * \cond UCS_INTERNAL_DOC
 * \defgroup   G_UCS_DIAG_TYPES Diagnosis Referred Types
 * \brief      Referred types used by Diagnosis functions.
 * \ingroup     G_INIC
 *
 * \addtogroup G_INIC
 * @{
 */

#ifndef UCS_INIC_H
#define UCS_INIC_H

/*------------------------------------------------------------------------------------------------*/
/* Includes                                                                                       */
/*------------------------------------------------------------------------------------------------*/
#include "ucs_inic_pb.h"
#include "ucs_ret_pb.h"
#include "ucs_dec.h"
#include "ucs_transceiver.h"
#include "ucs_misc.h"
#include "ucs_obs.h"

#ifdef __cplusplus
extern "C"
{
#endif

/*------------------------------------------------------------------------------------------------*/
/* Definitions and Enumerators                                                                    */
/*------------------------------------------------------------------------------------------------*/
#define FB_INIC         0x00U
#define FB_EXC          0x0AU

/*! \brief Defines the max number of invalid resources to be destroyed by the INIC in one command. */
#define MAX_INVALID_HANDLES_LIST  0x0AU 

/*! \brief Data Type which describes the operation mode of the INIC. */
typedef enum Inic_AttachState_
{
    INIC_ATS_PROTECTED  = 0x00U,    /*!< \brief Interface is detached */
    INIC_ATS_ATTACHED   = 0x01U,    /*!< \brief Interface is attached */
    INIC_ATS_REMOTE     = 0x02U     /*!< \brief Interface is remote controlled 
                                     *          (only possible for configuration interface) */
} Inic_AttachState_t;

/*! \brief Control commands used for the INIC resource monitor. */
typedef enum Ucs_Resource_MonitorCtrl_
{
    UCS_INIC_RES_MON_CTRL_RESET = 0x00U /*!< \brief Requests the INIC resource monitor to go back to
                                         *          the OK state and release the MUTE pin of the INIC.
                                         */
} Ucs_Resource_MonitorCtrl_t;

/*! \brief Control commands used for the INIC notification 
 */
typedef enum Ucs_Inic_NotificationCtrl_
{
    UCS_INIC_NTF_SET_ALL    = 0x00U,  /*!< \brief Requests the INIC to enter the DeviceID in all properties
                                         *          that support notification.
                                         */
    UCS_INIC_NTF_SET_FUNC   = 0x01U,  /*!< \brief Requests the INIC enter the DeviceID for the functions
                                         *          listed.
                                         */
    UCS_INIC_NTF_CLEAR_ALL  = 0x02U,  /*!< \brief Requests the INIC to delete DeviceID from all functions of
                                         *          the notification matrix.
                                         */
    UCS_INIC_NTF_CLEAR_FUNC = 0x03U   /*!< \brief Requests the INIC to delete DeviceID from the function listed.
                                         *
                                         */
} Ucs_Inic_NotificationCtrl_t;

/*! \brief State of the INIC resource monitor 
 */
typedef enum Ucs_Resource_MonitorState_
{
    UCS_INIC_RES_MON_STATE_OK      = 0x00U, /*!< \brief Default state. There are no action required 
                                             *          from the EHC.
                                             */
    UCS_INIC_RES_MON_STATE_ACT_REQ = 0x01U  /*!< \brief There are actions required from the EHC. */

} Ucs_Resource_MonitorState_t;

/*! \brief Data Type which describes the status/result of the Built-in Self-Test (BIST). */
typedef enum Inic_Bist_
{
    /*! \brief Processing */
    INIC_BIST_PROCESSING = 0x00U,
    /*! \brief Error detected */
    INIC_BIST_ERROR      = 0x01U,
    /*! \brief No errors detected */
    INIC_BIST_OK         = 0x02U

} Inic_Bist_t;

/*------------------------------------------------------------------------------------------------*/
/* INIC FunctionIDs                                                                               */
/*------------------------------------------------------------------------------------------------*/
#define INIC_FID_NOTIFICATION                   0x001U  /*!< \brief INIC FktID for Notification */
#define INIC_FID_DEVICE_STATUS                  0x220U  /*!< \brief INIC FktID for DeviceStatus */
#define INIC_FID_DEVICE_VERSION                 0x221U  /*!< \brief INIC FktID for DeviceVersion */
#define INIC_FID_DEVICE_POWER_OFF               0x222U  /*!< \brief INIC FktID for DevicePowerOff */
#define INIC_FID_DEVICE_ATTACH                  0x223U  /*!< \brief INIC FktID for DeviceAttach */
#define INIC_FID_DEVICE_SYNC                    0x224U  /*!< \brief INIC FktID for DeviceSync */
#define INIC_FID_MOST_NW_STATUS                 0x520U  /*!< \brief INIC FktID for MOSTNetworkStatus */
#define INIC_FID_MOST_NW_CFG                    0x521U  /*!< \brief INIC FktID for MOSTNetworkConfiguration */
#define INIC_FID_MOST_NW_FRAME_COUNTER          0x523U  /*!< \brief INIC FktID for MOSTNetworkFrameCounter */
#define INIC_FID_MOST_NW_STARTUP                0x524U  /*!< \brief INIC FktID for MOSTNetworkStartup */
#define INIC_FID_MOST_NW_SHUTDOWN               0x525U  /*!< \brief INIC FktID for MOSTNetworkShutdown */
#define INIC_FID_MOST_NW_TRIGGER_RBD            0x526U  /*!< \brief INIC FktID for MOSTNetworkTriggerRBD */
#define INIC_FID_MOST_NW_RBD_RESULT             0x527U  /*!< \brief INIC FktID for MOSTNetworkRBDResult */
#define INIC_FID_MOST_NW_ATTACH                 0x528U  /*!< \brief INIC FktID for MOSTNetworkAttach */
#define INIC_FID_MOST_NW_DETACH                 0x529U  /*!< \brief INIC FktID for MOSTNetworkDetach */
#define INIC_FID_MOST_NW_FORCE_NO_AVAIL         0x52BU  /*!< \brief INIC FktID for MOSTNetworkForceNotAvailable */
#define INIC_FID_MOST_NW_SYS_DIAGNOSIS          0x52CU  /*!< \brief INIC FktID for MOSTNetworkSystemDiagnosis */
#define INIC_FID_MOST_NW_SYS_DIAG_END           0x52DU  /*!< \brief INIC FktID for MOSTNetworkSystemDiagnosisEnd */
#define INIC_FID_BACK_CHANNEL_DIAGNOSIS         0x52EU  /*!< \brief INIC FktID for BackChannelDiagnosis */
#define INIC_FID_BACK_CHANNEL_DIAG_END          0x52FU  /*!< \brief INIC FktID for BackChannelDiagnosisEnd */
#define INIC_FID_MOST_PORT_STATUS               0x602U  /*!< \brief INIC FktID for MOSTPortStatus */
#define INIC_FID_MOST_SOCKET_CREATE             0x611U  /*!< \brief INIC FktID for MOSTSocketCreate */
#define INIC_FID_MOST_SOCKET_STATUS             0x612U  /*!< \brief INIC FktID for MOSTSocketStatus */
#define INIC_FID_MLB_PORT_CREATE                0x621U  /*!< \brief INIC FktID for MediaLBPortCreate */
/*#define INIC_FID_MLB_PORT_ALLOCATE_ONLY         0x623U */ /*!< \brief INIC FktID for MediaLBPortAllocateOnly */
/*#define INIC_FID_MLB_PORT_DEALLOC_ONLY          0x624U */ /*!< \brief INIC FktID for MediaLBDeallocateOnly */
#define INIC_FID_MLB_SOCKET_CREATE              0x631U  /*!< \brief INIC FktID for MediaLBSocketCreate */
#define INIC_FID_SPI_PORT_CREATE                0x641U  /*!< \brief INIC FktID for SPIPortCreate */
#define INIC_FID_SPI_SOCKET_CREATE              0x651U  /*!< \brief INIC FktID for SPISocketCreate */
#define INIC_FID_USB_PORT_CREATE                0x661U  /*!< \brief INIC FktID for USBPortCreate */
#define INIC_FID_USB_SOCKET_CREATE              0x671U  /*!< \brief INIC FktID for USBSocketCreate */
#define INIC_FID_STREAM_PORT_CONFIG             0x680U  /*!< \brief INIC FktID for StreamPortConfiguration */
#define INIC_FID_STREAM_PORT_CREATE             0x681U  /*!< \brief INIC FktID for StreamPortCreate */
#define INIC_FID_STREAM_PORT_LOOPBACK           0x683U  /*!< \brief INIC FktID for StreamPortLoopback */
#define INIC_FID_STREAM_SOCKET_CREATE           0x691U  /*!< \brief INIC FktID for StreamSocketCreate */
#define INIC_FID_RMCK_PORT_CREATE               0x6A1U  /*!< \brief INIC FktID for RMCKPortCreate */
#define INIC_FID_I2C_PORT_CREATE                0x6C1U  /*!< \brief INIC FktID for I2CPortCreate */
#define INIC_FID_I2C_PORT_READ                  0x6C3U  /*!< \brief INIC FktID for I2CPortRead */
#define INIC_FID_I2C_PORT_WRITE                 0x6C4U  /*!< \brief INIC FktID for I2CPortWrite */
#define INIC_FID_PCI_PORT_CREATE                0x6E1U  /*!< \brief INIC FktID for PCIPortCreate */
#define INIC_FID_PCI_SOCKET_CREATE              0x6F1U  /*!< \brief INIC FktID for PCISocketCreate */
#define INIC_FID_GPIO_PORT_CREATE               0x701U  /*!< \brief INIC FktID for GPIOPortCreate */
#define INIC_FID_MOST_PORT_ENABLE               0x702U  /*!< \brief INIC FktID for MOSTPortEnable */
#define INIC_FID_GPIO_PORT_PIN_MODE             0x703U  /*!< \brief INIC FktID for GPIOPortPinMode */
#define INIC_FID_GPIO_PORT_PIN_STATE            0x704U  /*!< \brief INIC FktID for GPIOPortPinState */
#define INIC_FID_GPIO_PORT_TRIGGER_EVENT        0x705U  /*!< \brief INIC FktID for GPIOPortTriggerEvent */
#define INIC_FID_RESOURCE_DESTROY               0x800U  /*!< \brief INIC FktID for ResourceDestroy */
#define INIC_FID_RESOURCE_INVALID_LIST          0x801U  /*!< \brief INIC FktID for ResourceInvalidList */
#define INIC_FID_RESOURCE_MONITOR               0x802U  /*!< \brief INIC FktID for ResourceMonitor */
/*#define INIC_FID_PACKET_ATTACH_SOCKETS          0x843U*/  /*!< \brief INIC FktID for PacketAttachSockets */
/*#define INIC_FID_PACKET_DETACH_SOCKETS          0x844U*/  /*!< \brief INIC FktID for PacketDetachSockets */
#define INIC_FID_QOS_CREATE                     0x851U  /*!< \brief INIC FktID for QoSPacketCreate */
#define INIC_FID_AVP_CREATE                     0x861U  /*!< \brief INIC FktID for AVPCreate */
#define INIC_FID_SYNC_CREATE                    0x871U  /*!< \brief INIC FktID for SyncCreate */
#define INIC_FID_SYNC_MUTE                      0x873U  /*!< \brief INIC FktID for SyncMute */
#define INIC_FID_SYNC_DEMUTE                    0x874U  /*!< \brief INIC FktID for SyncDemute */
#define INIC_FID_DFIPHASE_CREATE                0x881U  /*!< \brief INIC FktID for DFIPhaseCreate */
#define INIC_FID_IPC_CREATE                     0x891U  /*!< \brief INIC FktID for IPCPacketCreate */
#define INIC_FID_COMBINER_CREATE                0x901U  /*!< \brief INIC FktID for CombinerCreate */
#define INIC_FID_SPLITTER_CREATE                0x911U  /*!< \brief INIC FktID for SplitterCreate */

/*------------------------------------------------------------------------------------------------*/
/* Indexes of SingleSubjects                                                                      */
/*------------------------------------------------------------------------------------------------*/
#define INIC_SSUB_CREATE_CLASS                      0U
#define INIC_SSUB_DEVICE_VERSION                    1U
#define INIC_SSUB_DEVICE_ATTACH                     2U
#define INIC_SSUB_NW_STARTUP                        3U
#define INIC_SSUB_NW_SHUTDOWN                       4U
#define INIC_SSUB_NW_TRIGGER_RBD                    5U
#define INIC_SSUB_NW_ATTACH                         6U
#define INIC_SSUB_NW_DETACH                         7U
#define INIC_SSUB_NW_CHANGE_NODE_ADDR               8U
#define INIC_SSUB_SYNC_MUTE                         9U
#define INIC_SSUB_SYNC_DEMUTE                      10U
#define INIC_SSUB_NW_RBD_RESULT                    11U
#define INIC_SSUB_NW_FRAME_COUNTER                 12U 
#define INIC_SSUB_RESOURCE_DESTROY                 13U
#define INIC_SSUB_RESOURCE_INVAL_LIST              14U
#define INIC_SSUB_ATTACH_SOCKETS                   15U
#define INIC_SSUB_DETACH_SOCKETS                   16U
#define INIC_SSUB_STREAM_PORT_CONFIG               17U
#define INIC_SSUB_MOST_PORT_ENABLE                 18U
#define INIC_SSUB_MOST_PORT_EN_FULL_STR            19U
#define INIC_SSUB_DEVICE_SYNC                      20U
#define INIC_SSUB_NOTIFICATION                     21U
#define INIC_SSUB_NW_CONFIG                        22U
#define INIC_SSUB_GPIO_PIN_MODE                    23U
#define INIC_SSUB_GPIO_PIN_STATE                   24U
#define INIC_SSUB_I2C_PORT_WR                      25U
#define INIC_SSUB_NW_SYS_DIAGNOSIS                 26U 
#define INIC_SSUB_NW_SYS_DIAGEND                   27U
#define INIC_SSUB_NW_FORCE_NA                      28U
#define INIC_SSUB_BC_DIAGNOSIS                     29U
#define INIC_SSUB_BC_DIAG_END                      30U

#define INIC_NUM_SSUB                              31U  /* Total number of SingleSubjects */

/*------------------------------------------------------------------------------------------------*/
/* Indexes of Subjects                                                                            */
/*------------------------------------------------------------------------------------------------*/
#define INIC_SUB_TX_MSG_OBJ_AVAIL                   0U
#define INIC_SUB_NW_STATUS                          1U
#define INIC_SUB_NW_CONFIG                          2U
#define INIC_SUB_MOST_PORT_STATUS                   3U
#define INIC_SUB_RES_MONITOR                        4U
#define INIC_SUB_GPIO_TRIGGER_EVENT                 5U
#define INIC_SUB_DEVICE_STATUS                      6U

#define INIC_NUM_SUB                                7U  /* Total number of Subjects */

/*------------------------------------------------------------------------------------------------*/
/* Structures                                                                                     */
/*------------------------------------------------------------------------------------------------*/
/*! \brief  Initialization structure of the INIC module. */
typedef struct Inic_InitData_
{
    CTransceiver *xcvr_ptr;     /*!< \brief Reference to a Transceiver instance */
    CBase        *base_ptr;     /*!< \brief Reference to UCS base instance */
    uint16_t      tgt_addr;     /*!< \brief Address of the target device */ 

} Inic_InitData_t;

/*! \brief   Structure used for returning method results/errors
 *
 *  Either the data_info or the error part of the structure contain the information.
 *  In case an error happened, data_info will be NULL except for error transmission 
 *  where the type of transmission error (BF, CRC, ID, WT, etc.) is registered. 
 *  If no error happened, error.code is 0 and error.info is NULL.
*/
typedef struct Inic_StdResult_
{
    Ucs_StdResult_t  result;    /*!< \brief Result code and info byte stream */
    void            *data_info; /*!< \brief Reference to result values */

} Inic_StdResult_t;

/*! \brief   Structure used for ResourceHandleList */
typedef struct Inic_ResHandleList_
{
    uint16_t *res_handles;      /*!< \brief pointer to array containing resource handles */
    uint8_t   num_handles;      /*!< \brief number of resource handles */

} Inic_ResHandleList_t;

/*! \brief   Structure used for FktIDList */
typedef struct Inic_FktIdList_
{
    uint16_t *fktids_ptr;      /*!< \brief pointer to array containing resource handles */
    uint8_t   num_fktids;      /*!< \brief number of FktIDs in the list */

} Inic_FktIdList_t;

/*! \brief   Structure DeviceStatus */
typedef struct Inic_DeviceStatus_
{
    /*! \brief State of the application interface (ICM/RCM channel synced & DeviceAttach) */
    Inic_AttachState_t           config_iface_state;
    /*! \brief State of the configuration interface (MCM channel synced) */
    Inic_AttachState_t           app_iface_state;
    /*! \brief State of power management */
    Ucs_Inic_PowerState_t        power_state;
    /*! \brief Shows the last reset reason of the INIC. */
    Ucs_Inic_LastResetReason_t   last_reset_reason;
    /*! \brief Status/Result of the Built-in Self-Test (BIST) */
    Inic_Bist_t                  bist;

} Inic_DeviceStatus_t;

/*! \brief   Structure MOSTNetworkStatus */
typedef struct Inic_NetworkStatus_
{
    /*! \brief Indicates if the MOST network is available and ready for control/packet
     *         data transmission
     */
    Ucs_Network_Availability_t    availability;
    /*! \brief Indicates the sub state to parameter Availability */
    Ucs_Network_AvailInfo_t       avail_info;
    /*! \brief Indicates the transition cause of the MOST network going from Available to 
     *         NotAvailable or vice versa
     */
    Ucs_Network_AvailTransCause_t avail_trans_cause;
    /*! \brief Contains events relating to the functionality for the MOST Network Interface */
    uint16_t                      events;
    /*! \brief Current size of packet bandwidth */
    uint16_t                      packet_bw;
    /*! \brief Node address of the device */
    uint16_t                      node_address;
    /*! \brief Node position of the device */
    uint8_t                       node_position;
    /*! \brief Node position of last device in the ring */
    uint8_t                       max_position;

} Inic_NetworkStatus_t;

/*! \brief   Structure MOSTNetworkConfiguration */
typedef struct Inic_NetworkConfig_
{
    uint16_t          node_address;                 /*!< \brief NodeAddress */
    uint16_t          group_address;                /*!< \brief GroupAddress */
    uint8_t           llrbc;                        /*!< \brief Control low-level retry block count */

} Inic_NetworkConfig_t;

/*! \brief   This structure provides information on the Physical layer test result */
typedef struct Inic_PhyTestResult_
{
    uint16_t  most_port_handle; /*!< \brief MOST Port Handle */ 
    bool      lock_status;      /*!< \brief Lock status */
    uint16_t  err_count;        /*!< \brief Number of Coding Errors */

} Inic_PhyTestResult_t; 

/*! \brief   This structure provides information on the Ring Break Diagnosis */
typedef struct Inic_RbdResult_
{
    Ucs_Diag_RbdResult_t result;        /*!< \brief RBD result */
    uint8_t              position;      /*!< \brief RBD position */
    uint8_t              status;        /*!< \brief RBD Status  */
    uint16_t             diag_id;       /*!< \brief RBDDiagID */ 
} Inic_RbdResult_t;

/*! \brief   This structure provides Mode information of a GPIO pin */
typedef struct Inic_GpioPortPinModeStatus_
{
    uint16_t gpio_handle;                   /*!< \brief Port resource handle. */
    Ucs_Gpio_PinConfiguration_t *cfg_list;  /*!< \brief GPIO pin that is to be configured */
    uint8_t len;                            /*!< \brief The size of the list */

} Inic_GpioPortPinModeStatus_t;

/*! \brief   This structure provides State information of a GPIO pin */
typedef struct Inic_GpioPortPinStateStatus_
{
    uint16_t gpio_handle;             /*!< \brief Port resource handle. */
    uint16_t current_state;           /*!< \brief the current state of the GPIO pin */
    uint16_t sticky_state;            /*!< \brief sticky state of all GPIO pins configured as sticky inputs */

} Inic_GpioPortPinStateStatus_t;

/*! \brief   This structure provides the status of the GPIO TriggerEvent Reports */
typedef struct Inic_GpioReportTimeStatus_
{
    bool first_report;    /*!< \brief \c True if the GPIO trigger events are reported for the first time */

} Inic_GpioReportTimeStatus_t;

/*! \brief   This structure provides TriggerEvents information on GPIO port */
typedef struct Inic_GpioTriggerEventStatus_
{
    uint16_t gpio_handle;                       /*!< \brief Port resource handle. */
    uint16_t rising_edges;                      /*!< \brief GPIO pins on which a rising-edge trigger condition was detected by rising edge or dual edge detection logic */
    uint16_t falling_edges;                     /*!< \brief GPIO pins on which a falling-edge trigger condition was detected by falling edge or dual edge detection logic */
    uint16_t levels;                            /*!< \brief GPIO pins on which a logic level condition was detected by level detection logic. */
    bool  is_first_report;                      /*!< \brief State of the report. */

} Inic_GpioTriggerEventStatus_t;

/*! \brief   This structure provides result information of the I2cPortRead */
typedef struct Inic_I2cReadResStatus_
{
    uint16_t port_handle;   /*!< \brief Port resource handle. */
    uint8_t slave_address;  /*!< \brief The 7-bit I2C slave address of the peripheral read */
    uint8_t data_len;       /*!< \brief Size of the data_ptr */
    uint8_t * data_ptr;     /*!< \brief Reference to the data. */

} Inic_I2cReadResStatus_t;

/*! \brief   This structure provides status information on the I2cPortWrite */
typedef struct Inic_I2cWriteResStatus_
{
    uint16_t port_handle;    /*!< \brief Port resource handle. */
    uint8_t slave_address;   /*!< \brief The 7-bit I2C slave address of the target peripheral */
    uint8_t data_len;        /*!< \brief Number of bytes wrote */

} Inic_I2cWriteResStatus_t;

/*! \brief   This structure provides information on the notification results */
typedef struct Inic_NotificationResult_
{
    uint16_t func_id;        /*!< \brief function id */
    uint16_t device_id;      /*!< \brief address of the sending device */

} Inic_NotificationResult_t;

/*! \brief   This structure contains the results of the frame counter */
typedef struct Inic_FrameCounterStatus_
{
    uint32_t reference;             /*!< \brief reference value */
    uint32_t frame_counter;         /*!< \brief MOST Network frame counter */
    uint8_t  lock;                  /*!< \brief Indicates if the TimingSlave device is locked 
                                                to the MOST network. For a TimingMaster
                                                device this value is always True. */

}Inic_FrameCounterStatus_t;

/*! \brief Structure holds parameters for API locking */
typedef struct Inic_ApiLock_
{
    /*! \brief API locking instance for INIC functions */
    CApiLocking     api;
    /*! \brief Observer used for locking timeouts for INIC functions */
    CSingleObserver observer;
    /*! \brief API locking instance for resource methods */
    CApiLocking     res_api;
    /*! \brief Observer used for locking timeouts for resource methods */
    CSingleObserver res_observer;
    /*! \brief Used to realize a longer API timeout */
    uint8_t         rbd_trigger_timeout_counter;

} Inic_ApiLock_t;

/*! \brief Structure of MOSTPortStatus data */
typedef struct Inic_MostPortStatus_
{
    Ucs_Most_PortAvail_t     availability;
    Ucs_Most_PortAvailInfo_t avail_info;
    uint16_t                 most_port_handle;
    uint16_t                 freestreaming_bw;
    bool                     fullstreaming_enabled;

} Inic_MostPortStatus_t;

/*! \brief   Structure of class CInic. */
typedef struct CInic_
{
    Inic_DeviceStatus_t   device_status;        /*!< \brief Structure DeviceStatus */
    Inic_GpioReportTimeStatus_t gpio_rt_status; /*!< \brief Status of the GPIO TriggerEvent Report */
    Ucs_Inic_Version_t    device_version;       /*!< \brief Structure DeviceVersion*/
    Inic_NetworkStatus_t  network_status;       /*!< \brief Structure MOSTNetworkStatus */
    Inic_NetworkConfig_t  network_config;       /*!< \brief Structure MOSTNetworkConfiguration */
    Inic_MostPortStatus_t most_port_status;     /*!< \brief Structure MOSTPortStatus */
    CSubject              subs[INIC_NUM_SUB];   /*!< \brief contains all subjects */
    CSingleSubject        ssubs[INIC_NUM_SSUB]; /*!< \brief contains all single-subjects */
    Inic_ApiLock_t        lock;                 /*!< \brief Parameters for API locking */
    bool                  startup_locked;       /*!< \brief Locking of NetworkStartup without timeout */
    Dec_FktOpIcm_t const *fkt_op_list_ptr;      /*!< \brief pointer to the FktID/OPType list  */
    CBase                *base_ptr;             /*!< \brief Reference to UCS base instance */
    CTransceiver         *xcvr_ptr;             /*!< \brief Reference to a Transceiver instance */
    CMaskedObserver       internal_error_obs;   /*!< \brief Error observer to handle internal
                                                            errors and events */
    uint16_t              target_address;       /*!< \brief Address of the target device  */

} CInic;

/*! \brief Structure of MOSTSocketCreate result  */
typedef struct Inic_MostSocketCreate_Result_
{
    uint16_t most_socket_handle;                    /*!< \brief Socket resource handle of the created socket */
    uint16_t conn_label;                            /*!< \brief MOST network connection label */

} Inic_MostSocketCreate_Result_t;

/*! \brief Structure of StreamPortConfiguration status  */
typedef struct Inic_StreamPortConfigStatus_
{
    uint8_t                         index;              /*!< \brief Streaming Port instance */
    Ucs_Stream_PortOpMode_t         op_mode;            /*!< \brief Streaming Port Operation mode */
    Ucs_Stream_PortOption_t         port_option;        /*!< \brief Streaming Port Options */
    Ucs_Stream_PortClockMode_t      clock_mode;         /*!< \brief Stream Port Clock Mode */
    Ucs_Stream_PortClockDataDelay_t clock_data_delay;   /*!< \brief Stream Port Clock Data Delay */

} Inic_StreamPortConfigStatus_t;

/*------------------------------------------------------------------------------------------------*/
/* Prototypes                                                                                     */
/*------------------------------------------------------------------------------------------------*/
extern void Inic_Ctor(CInic *self, Inic_InitData_t *init_ptr);
extern void Inic_OnIcmRx(void *self, Msg_MostTel_t *tel_ptr);
extern void Inic_OnRcmRxFilter(void *self, Msg_MostTel_t *tel_ptr);
extern void Inic_InitResourceManagement(CInic *self);
extern void Inic_AddObsrvResMonitor(CInic *self, CObserver *obs_ptr);
extern void Inic_DelObsrvResMonitor(CInic *self, CObserver *obs_ptr);
extern void Inic_AddObsrvMostPortStatus(CInic *self, CObserver *obs_ptr);
extern void Inic_DelObsrvMostPortStatus(CInic *self, CObserver *obs_ptr);
extern void Inic_AddObsrvGpioTriggerEvent(CInic *self, CObserver *obs_ptr);
extern void Inic_DelObsrvGpioTriggerEvent(CInic *self, CObserver *obs_ptr);

/* internal API functions */
extern Ucs_Return_t Inic_DeviceVersion_Get(CInic *self, 
                                           CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_DeviceAttach(CInic *self, 
                                      CSingleObserver *obs_ptr);
Ucs_Return_t Inic_DeviceSync (CInic *self, 
                              CSingleObserver *obs_ptr);
Ucs_Return_t Inic_DeviceUnsync (CInic *self, 
                                CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_NwAttach(CInic *self, 
                                  uint16_t pmp_channel_handle, 
                                  CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_SyncMute(CInic *self,
                                  uint16_t sync_handle,
                                  CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_SyncDemute(CInic *self,
                                    uint16_t sync_handle,
                                    CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_DfiPhaseCreate(CInic *self,
                                        uint16_t resource_handle_in,
                                        uint16_t resource_handle_out,
                                        CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_CombinerCreate(CInic *self,
                                        uint16_t port_socket_handle,
                                        uint16_t most_port_handle,
                                        uint16_t bytes_per_frame,
                                        CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_SplitterCreate(CInic *self,
                                        uint16_t socket_handle_in,
                                        uint16_t most_port_handle,
                                        uint16_t bytes_per_frame,
                                        CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_NwRbdResult_Get(CInic *self, 
                                         CSingleObserver *obs_ptr);
extern Ucs_Return_t  Inic_NwPhyTestResult_Get(CInic *self, 
                                              CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_NwStartup(CInic *self, 
                                   uint16_t auto_forced_na,
                                   uint16_t packet_bandwidth, 
                                   CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_NwShutdown(CInic *self, 
                                    CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_NwTriggerRbd(CInic *self, 
                                      Ucs_Diag_RbdType_t type, 
                                      CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_NwForceNotAvailable(CInic *self, 
                                             bool force,
                                             CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_NwConfig_SetGet(CInic *self, 
                                         uint16_t mask, 
                                         Inic_NetworkConfig_t config, CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_NwConfig_Get(CInic *self, 
                                      CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_NwFrameCounter_Get(CInic *self, uint32_t reference, 
                                            CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_ResourceDestroy(CInic *self, 
                                         Inic_ResHandleList_t res_handle_list,
                                         CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_ResourceInvalidList_Get(CInic *self, 
                                                 CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_ResourceMonitor_Set(CInic *self, 
                                             Ucs_Resource_MonitorCtrl_t control);
extern Ucs_Return_t Inic_Notification_Set(CInic *self, 
                                          Ucs_Inic_NotificationCtrl_t control, 
                                          uint16_t device_id, 
                                          Inic_FktIdList_t fktid_list);
extern Ucs_Return_t Inic_Notification_Get(CInic *self, 
                                          uint16_t fktid, 
                                          CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_SyncCreate(CInic *self,            
                                    uint16_t resource_handle_in,
                                    uint16_t resource_handle_out,
                                    bool  default_mute,
                                    Ucs_Sync_MuteMode_t mute_mode,
                                    uint16_t offset,
                                    CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_QoSCreate(CInic *self,                                   
                                   uint16_t socket_in_handle,
                                   uint16_t socket_out_handle,
                                   CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_IpcCreate(CInic *self,                                  
                                   uint16_t socket_in_handle,
                                   uint16_t socket_out_handle,
                                   CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_AvpCreate(CInic *self,                                   
                                   uint16_t socket_in_handle,
                                   uint16_t socket_out_handle,
                                   Ucs_Avp_IsocPacketSize_t isoc_packet_size,
                                   CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_MostSocketCreate(CInic *self,                                           
                                          uint16_t most_port_handle, 
                                          Ucs_SocketDirection_t direction,
                                          Ucs_Most_SocketDataType_t data_type, 
                                          uint16_t bandwidth,
                                          uint16_t connection_label, 
                                          CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_MlbPortCreate(CInic *self,                                       
                                       uint8_t index,
                                       Ucs_Mlb_ClockConfig_t clock_config,
                                       CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_MlbSocketCreate(CInic *self,                                         
                                         uint16_t mlb_port_handle,
                                         Ucs_SocketDirection_t direction,
                                         Ucs_Mlb_SocketDataType_t data_type,
                                         uint16_t bandwidth, 
                                         uint16_t channel_address,
                                         CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_UsbPortCreate(CInic *self,                                      
                                       uint8_t index,
                                       Ucs_Usb_PhysicalLayer_t physical_layer,
                                       uint16_t devices_interfaces,
                                       uint8_t streaming_if_ep_out_count,
                                       uint8_t streaming_if_ep_in_count,
                                       CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_UsbSocketCreate(CInic *self,                                        
                                         uint16_t usb_port_handle,
                                         Ucs_SocketDirection_t direction,
                                         Ucs_Usb_SocketDataType_t data_type,
                                         uint8_t end_point_addr,
                                         uint16_t frames_per_transfer,
                                         CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_StreamPortConfig_SetGet(CInic *self,                                                 
                                                 uint8_t index,
                                                 Ucs_Stream_PortOpMode_t op_mode,
                                                 Ucs_Stream_PortOption_t port_option,
                                                 Ucs_Stream_PortClockMode_t clock_mode,
                                                 Ucs_Stream_PortClockDataDelay_t clock_data_delay,
                                                 CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_StreamPortConfig_Get(CInic *self,                                             
                                              uint8_t index,
                                              CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_StreamPortCreate(CInic *self,                                          
                                          uint8_t index,
                                          Ucs_Stream_PortClockConfig_t clock_config,
                                          Ucs_Stream_PortDataAlign_t data_alignment, 
                                          CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_StreamSocketCreate(CInic *self,                                           
                                            uint16_t stream_port_handle,
                                            Ucs_SocketDirection_t direction,
                                            Ucs_Stream_SocketDataType_t data_type,
                                            uint16_t bandwidth,
                                            Ucs_Stream_PortPinId_t stream_pin_id,
                                            CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_RmckPortCreate(CInic *self,                                           
                                        uint8_t index, 
                                        Ucs_Rmck_PortClockSource_t clock_source,
                                        uint16_t divisor,
                                        CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_I2cPortCreate(CInic *self,
                                       uint8_t index,
                                       uint8_t address,
                                       uint8_t mode,
                                       Ucs_I2c_Speed_t speed,
                                       CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_I2cPortRead(CInic *self,
                                     uint16_t port_handle,
                                     uint8_t slave_address,
                                     uint8_t data_len,
                                     uint16_t timeout,
                                     CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_I2cPortWrite(CInic *self,
                                      uint16_t port_handle,
                                      Ucs_I2c_TrMode_t mode,
                                      uint8_t block_count,
                                      uint8_t slave_address,
                                      uint16_t timeout,
                                      uint8_t data_len,
                                      uint8_t data_list[],
                                      CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_PciPortCreate(CInic *self,                                    
                                       uint8_t index, 
                                       CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_PciSocketCreate(CInic *self,                                        
                                         uint16_t pci_port_handle,
                                         Ucs_SocketDirection_t direction,
                                         Ucs_Pci_SocketDataType_t data_type,
                                         uint8_t dma_channel,
                                         CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_GpioPortCreate(CInic *self,
                                        uint8_t gpio_port_index,
                                        uint16_t debounce_time,
                                        CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_MostPortEnable(CInic *self,
                                        uint16_t most_port_handle,
                                        bool enabled,
                                        CSingleObserver *obs_ptr);
extern Ucs_Return_t  Inic_GpioPortPinMode_Get(CInic *self, uint16_t gpio_handle, 
                                              CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_GpioPortPinMode_SetGet(CInic *self, 
                                                uint16_t gpio_handle, 
                                                uint8_t pin, 
                                                Ucs_Gpio_PinMode_t mode, 
                                                CSingleObserver *obs_ptr);
extern Ucs_Return_t  Inic_GpioPortPinState_Get(CInic *self, uint16_t gpio_handle, 
                                               CSingleObserver *obs_ptr);
extern Ucs_Return_t  Inic_GpioPortPinState_SetGet(CInic *self, 
                                                  uint16_t gpio_handle, 
                                                  uint16_t mask, 
                                                  uint16_t data, 
                                                  CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_MostPortEnFullStr(CInic *self,
                                           uint16_t most_port_handle,
                                           bool enabled,
                                           CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_BCDiagnosis(CInic *self, CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_BCDiagEnd(CInic *self, CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_NwSysDiagnosis(CInic *self, CSingleObserver *obs_ptr);
extern Ucs_Return_t Inic_NwSysDiagEnd(CInic *self, CSingleObserver *obs_ptr);

extern void Inic_AddObsrvOnTxMsgObjAvail(CInic *self, CObserver *obs_ptr);
extern void Inic_DelObsrvOnTxMsgObjAvail(CInic *self, CObserver *obs_ptr);
extern void Inic_AddObsrvNwStatus(CInic *self, CObserver *obs_ptr);
extern void Inic_DelObsrvNwStatus(CInic *self, CObserver *obs_ptr);
extern void Inic_AddObsvrNwConfig(CInic *self, CObserver *obs_ptr);
extern void Inic_DelObsvrNwConfig(CInic *self, CObserver *obs_ptr);
extern void Inic_AddObsvrDeviceStatus(CInic *self, CObserver *obs_ptr);
extern void Inic_DelObsvrDeviceStatus(CInic *self, CObserver *obs_ptr);

/* handler functions */
extern void Inic_DummyHandler(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_Notification_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_Notification_Status(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_DeviceStatus_Status(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_DeviceVersion_Status(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_DeviceVersion_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwStatus_Status(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwConfig_Status(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwConfig_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwFrameCounter_Status(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwFrameCounter_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwStartup_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwStartup_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwShutdown_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwShutdown_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwTriggerRbd_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwTriggerRbd_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwForceNotAvailable_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwForceNotAvailable_Status(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_DeviceAttach_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_DeviceAttach_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_DeviceSync_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_DeviceSync_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwAttach_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwAttach_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwSysDiagnosis_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwSysDiagnosis_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwSysDiagEnd_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwSysDiagEnd_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_BCDiagnosis_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_BCDiagnosis_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_BCDiagEnd_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_BCDiagEnd_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwChangeNodeAddress_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwChangeNodeAddress_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_SyncMute_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_SyncMute_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_SyncDemute_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_SyncDemute_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_DfiPhaseCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_DfiPhaseCreate_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwRbdResult_Status(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_NwRbdResult_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_ResourceDestroy_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_ResourceDestroy_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_ResourceInvalidList_Status(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_ResourceInvalidList_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_ResourceMonitor_Status(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_ResourceMonitor_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_AttachSockets_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_AttachSockets_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_DetachSockets_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_DetachSockets_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_SyncCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_SyncCreate_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_QoSCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_QoSCreate_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_IpcCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_IpcCreate_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_AvpCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_AvpCreate_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_MostPortStatus_Status(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_MostPortStatus_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_MostSocketCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_MostSocketCreate_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_MlbPortCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_MlbPortCreate_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_MlbSocketCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_MlbSocketCreate_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_UsbPortCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_UsbPortCreate_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_UsbSocketCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_UsbSocketCreate_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_StreamPortConfig_Status(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_StreamPortConfig_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_StreamPortCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_StreamPortCreate_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_StreamSocketCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_StreamSocketCreate_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_RmckPortCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_RmckPortCreate_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_I2cPortCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_I2cPortCreate_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_I2cPortRead_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_I2cPortRead_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_I2cPortWrite_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_I2cPortWrite_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_PciPortCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_PciPortCreate_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_PciSocketCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_PciSocketCreate_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_GpioPortCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_GpioPortCreate_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_MostPortEnable_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_MostPortEnable_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_GpioPortPinMode_Status(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_GpioPortPinMode_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_GpioPortPinState_Status(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_GpioPortPinState_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_GpioPortTrigger_Status(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_GpioPortTrigger_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_MostPortEnFullStr_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_MostPortEnFullStr_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_CombinerCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_CombinerCreate_Result(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_SplitterCreate_Error(void *self, Msg_MostTel_t *msg_ptr);
extern void Inic_SplitterCreate_Result(void *self, Msg_MostTel_t *msg_ptr);

/* Helper functions */
extern Ucs_StdResult_t Inic_TranslateError(CInic *self, uint8_t error_data[], uint8_t error_size);

/* Synchronous Getters */
extern uint16_t Inic_GetGroupAddress(CInic *self);
extern uint16_t Inic_GetPacketDataBandwidth(CInic *self);
extern uint16_t Inic_GetNodeAddress(CInic *self);
extern uint8_t Inic_GetNodePosition(CInic *self);
extern uint8_t Inic_GetNumberOfNodes(CInic *self);
extern uint8_t Inic_GetInicLlrbc(CInic *self);
extern Ucs_Inic_Version_t Inic_GetDeviceVersion(CInic *self);
extern Ucs_Inic_LastResetReason_t Inic_GetLastResetReason(CInic *self);
extern Ucs_Inic_PowerState_t Inic_GetDevicePowerState(CInic *self);
extern Ucs_Network_Availability_t Inic_GetAvailability(CInic *self);
extern uint16_t Inic_GetTargetAddress (CInic *self);

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

#endif  /* #ifndef UCS_INIC_H */

/*!
 * @}
 * \endcond
 */

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