Skip to content
Snippets Groups Projects
ori.h 108 KiB
Newer Older
1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000

/* Forward declaration of the ORI_Object_s structure. */
typedef struct ORI_Object_s ORI_Object_s;

/**
 * @struct ORI_ObjectTypeRef_s
 * @brief Object type reference structure.
 *
 * This structure represents an ORI ObjectTypeRef, which does not fully describe an ORI object
 * because it is not associated to an instance number.
 */
 typedef struct
{
	ORI_Object_s *		parent;							/**< Parent object reference, may be NULL if no parent. */
	ORI_ObjectType_e	type;							/**< Object type. */
} ORI_ObjectTypeRef_s;





/*-----------------------------------------------------------------------------------------
 * OBJECT PARAMETERS
 *-----------------------------------------------------------------------------------------*/

/**
 * @struct ORI_ObjectParams_RE_s
 * @brief Structure containing the parameters of a RE object.
 */
typedef struct
{
	char 					vendorID[4];				/**< RO. Vendor ID as signaled in DHCP code 201, normally 3 characters */
	char 					productID[81];				/**< RO. RE product ID.*/
	char 					productRev[81];				/**< RO. RE product revision. */
	char 					serialNumber[41];			/**< RO. RE serial number. */
	char 					protocolVer[11];			/**< RO. OCP protocol supported. */
	ORI_agcGranularity_e	agcTargetLevCfgGran;		/**< RO. UL AGC target RMS level config granularity. */
	ORI_agcGranularity_e 	agcSettlTimeCfgGran;		/**< RO. UL AGC settling time config granularity. */
	uint16_t				agcSettlTimeCap;			/**< RO. UL AGC settling time capability. */
	uint32_t				AWS_uptime;					/**< RO. AW2S Vendor specific: Uptime since boot in seconds. */
	int32_t					AWS_inputVoltage;			/**< RO. AW2S Vendor specific: RE input voltage in mV. */
	int32_t					AWS_inputCurrent;			/**< RO. AW2S Vendor specific: RE input current in mA. */
	int16_t					AWS_productTemp;			/**< RO. AW2S Vendor specific: RE temperature in degC. */
	int16_t					AWS_cpuTemp;				/**< RO. AW2S Vendor specific: CPU temperature in degC. */
	int16_t					AWS_paTemp;					/**< RO. AW2S Vendor specific: Power amplifier temperature in degC. */
	int16_t					AWS_rxPwrOffset;			/**< RO. AW2S Vendor specific: Receiver dBFS to dBm power conversion offset, unit is dB/10 (e.g. -340 for -34 dB). */
} ORI_ObjectParams_RE_s;

/**
 * @struct ORI_ObjectParams_AntennaPort_s
 * @brief Structure containing the parameters of an Antenna Port object.
 */
typedef struct
{
	char 		portLabel[81];							/**< RO. Physical antenna port label.*/
	int16_t 	AWS_outputPwr;							/**< RO. AW2S Vendor specific: Measured output power for this antenna, unit is dBm/10 (e.g. 400 for 40 dBm). */
	int16_t 	AWS_inputPwr;							/**< RO. AW2S Vendor specific: Measured input power for this antenna, unit is dBm/10 (e.g. -650 for -65 dBm). */
	int16_t 	AWS_returnLoss;							/**< RO. AW2S Vendor specific: Measured return loss for this antenna, unit is dB/10 (e.g. 50 for 5 dB). */
} ORI_ObjectParams_AntennaPort_s;

/**
 * @struct ORI_ObjectParams_TxSigPathUtra_s
 * @brief Structure containing the parameters of a TxSigPath UTRAFDD object.
 */
typedef struct
{
	uint16_t			dlCalREMax;						/**< RO. Max possible buffer in RE for DL timing calibration in Tc/16.*/
	uint32_t			t2a;							/**< RO. RE time delay. */
	uint16_t			dlCalRE;						/**< RW-Locked. Time delay to enable DL timing calibration in Tc/16. */
	int16_t 			maxTxPwr;						/**< RW. Max tx power for this path, unit is dBm/10 (e.g. 400 for 40 dBm). */
	uint8_t 			axcW;							/**< RW-Locked. AxC W parameter. */
	uint8_t				axcB;							/**< RW-Locked. AxC B parameter. */
	ORI_Object_s *		oriLink;						/**< RW-Locked. ORI Link on which the AxC is mapped. */
	uint32_t			uarfcn;							/**< RW-Locked. Downlink UARFCN. */
	ORI_Object_s *		antPort;						/**< RW-Locked. Reference Antenna port for this signal. */
	int16_t 			AWS_measuredPwr;				/**< RO. AW2S Vendor specific: Measured Tx power for this path, unit is dBm/10 (e.g. 400 for 40 dBm). */
	uint16_t 			AWS_axcIncr;					/**< RW-Locked. AW2S Vendor specific: AxC increment for each sample, 0 means auto (= packed, no interleaving). */
	ORI_Boolean_e 		AWS_enPeakCancel;				/**< RW-Locked. AW2S Vendor specific: Peak-Cancellation CFR enablement. */
} ORI_ObjectParams_TxSigPathUtra_s;

/**
 * @struct ORI_ObjectParams_TxSigPathEUtraFDD_s
 * @brief Structure containing the parameters of a TxSigPath EUTRAFDD object.
 */
typedef struct
{
	uint16_t 			chanBW;							/**< RW-Locked. Channel bandwith in MHz/10 (14 / 30 / 50 / 100 / 150 / 200). */
	uint16_t			dlCalREMax;						/**< RO. Max possible buffer in RE for DL timing calibration in Tc/16.*/
	uint32_t			t2a;							/**< RO. RE time delay. */
	uint16_t 			dlCalRE;						/**< RW-Locked. Time delay to enable DL timing calibration in Tc/16. */
	int16_t 			maxTxPwr;						/**< RW. Max tx power for this path, unit is dBm/10 (e.g. 400 for 40 dBm). */
	uint8_t 			axcW;							/**< RW-Locked. AxC W parameter. */
	uint8_t 			axcB;							/**< RW-Locked. AxC B parameter. */
	ORI_Object_s * 		oriLink;						/**< RW-Locked. ORI Link on which the AxC is mapped. */
	uint32_t 			earfcn;							/**< RW-Locked. Downlink EARFCN. */
	ORI_Object_s *		antPort;						/**< RW-Locked. Reference Antenna port for this signal. */
	ORI_Boolean_e		enableIQDLComp;					/**< RW-Locked. IQ data compression enablement. */
	uint32_t			sigmaIQ;						/**< RW-Locked. Sigma IQ value for IQ data compression. */
	ORI_Boolean_e		AWS_enableCompRateChange;		/**< RW-Locked. AW2S Vendor specific: Enable IQ data compression sample rate change. */
	ORI_Boolean_e		AWS_enableCompBitChange;		/**< RW-Locked. AW2S Vendor specific: Enable IQ data compression bit width change. */
	int16_t 			AWS_measuredPwr;				/**< RO. AW2S Vendor specific: Measured Tx power for this path, unit is dBm/10 (e.g. 400 for 40 dBm). */
	uint16_t 			AWS_axcIncr;					/**< RW-Locked. AW2S Vendor specific: AxC increment for each sample, 0 means auto (= packed, no interleaving). */
	ORI_Boolean_e 		AWS_enPeakCancel;				/**< RW-Locked. AW2S Vendor specific: Peak-Cancellation CFR enablement. */
} ORI_ObjectParams_TxSigPathEUtraFDD_s;

/**
 * @struct ORI_ObjectParams_TxSigPathEUtraTDD_s
 * @brief Structure containing the parameters of a TxSigPath EUTRATDD object.
 */
typedef struct
{
	uint16_t 			chanBW;							/**< RW-Locked. Channel bandwith in MHz/10 (14 / 30 / 50 / 100 / 150 / 200). */
	uint8_t				tddULDLConfig;					/**< RW-Locked. TDD UL/DL config. */
	uint8_t				tddSpecialSFConfig;				/**< RW-Locked. TDD SSF config. */
	ORI_tddCPLength_e	tddCPLengthDL;					/**< RW-Locked. TDD Cyclic prefix length. */
	uint16_t 			dlCalREMax;						/**< RO. Max possible buffer in RE for DL timing calibration in Tc/16.*/
	uint32_t 			t2a;							/**< RO. RE time delay. */
	uint16_t 			dlCalRE;						/**< RW-Locked. Time delay to enable DL timing calibration in Tc/16. */
	int16_t 			maxTxPwr;						/**< RW. Max tx power for this path, unit is dBm/10 (e.g. 400 for 40 dBm). */
	uint8_t 			axcW;							/**< RW-Locked. AxC W parameter. */
	uint8_t 			axcB;							/**< RW-Locked. AxC B parameter. */
	ORI_Object_s * 		oriLink;						/**< RW-Locked. ORI Link on which the AxC is mapped. */
	uint32_t 			earfcn;							/**< RW-Locked. Downlink EARFCN. */
	ORI_Object_s *		antPort;						/**< RW-Locked. Reference Antenna port for this signal. */
	ORI_Boolean_e		enableIQDLComp;					/**< RW-Locked. IQ data compression enablement. */
	uint32_t			sigmaIQ;						/**< RW-Locked. Sigma IQ value for IQ data compression. */
	ORI_Boolean_e		AWS_enableCompRateChange;		/**< RW-Locked. AW2S Vendor specific: Enable IQ data compression sample rate change. */
	ORI_Boolean_e		AWS_enableCompBitChange;		/**< RW-Locked. AW2S Vendor specific: Enable IQ data compression bit width change. */
	int16_t 			AWS_measuredPwr;				/**< RO. AW2S Vendor specific: Measured Tx power for this path, unit is dBm/10 (e.g. 400 for 40 dBm). */
	uint16_t 			AWS_axcIncr;					/**< RW-Locked. AW2S Vendor specific: AxC increment for each sample, 0 means auto (= packed, no interleaving). */
	ORI_Boolean_e 		AWS_enPeakCancel;				/**< RW-Locked. AW2S Vendor specific: Peak-Cancellation CFR enablement. */
} ORI_ObjectParams_TxSigPathEUtraTDD_s;

/**
 * @struct ORI_ObjectParams_TxSigPathGSM_s
 * @brief Structure containing the parameters of a TxSigPath GSM object.
 */
typedef struct
{
	uint16_t 			dlCalREMax;						/**< RO. Max possible buffer in RE for DL timing calibration in Tc/16.*/
	ORI_freqBand_e 		freqBandInd;					/**< GSM frequency band indicator. */
	uint32_t 			t2a;							/**< RO. RE time delay. */
	uint16_t 			dlCalRE;						/**< RW-Locked. Time delay to enable DL timing calibration in Tc/16. */
	int16_t 			maxTxPwr;						/**< RW. Max tx power for this path, unit is dBm/10 (e.g. 400 for 40 dBm). */
	uint8_t 			axcW;							/**< RW-Locked. AxC W parameter. */
	uint8_t 			axcB;							/**< RW-Locked. AxC B parameter. */
	ORI_Object_s * 		oriLink;						/**< RW-Locked. ORI Link on which the AxC is mapped. */
	ORI_Object_s *		antPort;						/**< RW-Locked. Reference Antenna port for this signal. */
	int16_t 			AWS_measuredPwr;				/**< RO. AW2S Vendor specific: Measured Tx power for this path, unit is dBm/10 (e.g. 400 for 40 dBm). */
	uint16_t 			AWS_axcIncr;					/**< RW-Locked. AW2S Vendor specific: AxC increment for each sample, 0 means auto (= packed, no interleaving). */
	ORI_Boolean_e 		AWS_enPeakCancel;				/**< RW-Locked. AW2S Vendor specific: Peak-Cancellation CFR enablement. */
} ORI_ObjectParams_TxSigPathGSM_s;

/**
 * @struct ORI_ObjectParams_TxSigPathNRFDD_s
 * @brief Structure containing the parameters of a TxSigPath NRFDD object.
 */
typedef struct
{
	uint16_t 			chanBW;							/**< RW-Locked. Channel bandwith in MHz/10. */
	uint16_t			dlCalREMax;						/**< RO. Max possible buffer in RE for DL timing calibration in Tc/16.*/
	uint32_t			t2a;							/**< RO. RE time delay. */
	uint16_t 			dlCalRE;						/**< RW-Locked. Time delay to enable DL timing calibration in Tc/16. */
	int16_t 			maxTxPwr;						/**< RW. Max tx power for this path, unit is dBm/10 (e.g. 400 for 40 dBm). */
	uint8_t 			axcW;							/**< RW-Locked. AxC W parameter. */
	uint8_t 			axcB;							/**< RW-Locked. AxC B parameter. */
	ORI_Object_s * 		oriLink;						/**< RW-Locked. ORI Link on which the AxC is mapped. */
	ORI_Object_s *		antPort;						/**< RW-Locked. Reference Antenna port for this signal. */
	ORI_Boolean_e		AWS_enableCompRateChange;		/**< RW-Locked. AW2S Vendor specific: Enable IQ data compression sample rate change. */
	int16_t 			AWS_measuredPwr;				/**< RO. AW2S Vendor specific: Measured Tx power for this path, unit is dBm/10 (e.g. 400 for 40 dBm). */
	uint16_t 			AWS_axcIncr;					/**< RW-Locked. AW2S Vendor specific: AxC increment for each sample, 0 means auto (= packed, no interleaving). */
	ORI_Boolean_e 		AWS_enPeakCancel;				/**< RW-Locked. AW2S Vendor specific: Peak-Cancellation CFR enablement. */
	uint32_t 			AWS_arfcn;						/**< RW-Locked. ARFCN of the NR carrier. */
} ORI_ObjectParams_TxSigPathNRFDD_s;

/**
 * @struct ORI_ObjectParams_TxSigPathNRTDD_s
 * @brief Structure containing the parameters of a TxSigPath NRTDD object.
 */
typedef struct
{
	uint16_t 			chanBW;							/**< RW-Locked. Channel bandwith in MHz/10. */
	uint16_t			dlCalREMax;						/**< RO. Max possible buffer in RE for DL timing calibration in Tc/16.*/
	uint32_t			t2a;							/**< RO. RE time delay. */
	uint16_t 			dlCalRE;						/**< RW-Locked. Time delay to enable DL timing calibration in Tc/16. */
	int16_t 			maxTxPwr;						/**< RW. Max tx power for this path, unit is dBm/10 (e.g. 400 for 40 dBm). */
	uint8_t 			axcW;							/**< RW-Locked. AxC W parameter. */
	uint8_t 			axcB;							/**< RW-Locked. AxC B parameter. */
	ORI_Object_s * 		oriLink;						/**< RW-Locked. ORI Link on which the AxC is mapped. */
	ORI_Object_s *		antPort;						/**< RW-Locked. Reference Antenna port for this signal. */
	ORI_Boolean_e		AWS_enableCompRateChange;		/**< RW-Locked. AW2S Vendor specific: Enable IQ data compression sample rate change. */
	int16_t 			AWS_measuredPwr;				/**< RO. AW2S Vendor specific: Measured Tx power for this path, unit is dBm/10 (e.g. 400 for 40 dBm). */
	uint16_t 			AWS_axcIncr;					/**< RW-Locked. AW2S Vendor specific: AxC increment for each sample, 0 means auto (= packed, no interleaving). */
	ORI_Boolean_e 		AWS_enPeakCancel;				/**< RW-Locked. AW2S Vendor specific: Peak-Cancellation CFR enablement. */
	uint32_t 			AWS_arfcn;						/**< RW-Locked. ARFCN of the NR carrier. */
} ORI_ObjectParams_TxSigPathNRTDD_s;

/**
 * @struct ORI_ObjectParams_RxSigPathUtra_s
 * @brief Structure containing the parameters of a RxSigPath UTRAFDD object.
 */
typedef struct
{
	uint16_t			ulCalREMax;						/**< RO. Max possible buffer in RE for UL timing calibration in Tc/2.*/
	uint32_t 			ta3;							/**< RO. RE time delay. */
	uint16_t 			ulCalRE;						/**< RW-Locked. Time delay to enable UL timing calibration in Tc/2. */
	uint8_t 			axcW;							/**< RW-Locked. AxC W parameter. */
	uint8_t 			axcB;							/**< RW-Locked. AxC B parameter. */
	uint8_t 			rtwpGroup;						/**< RW-Locked. Location of the RTWP measurements for this AxC. */
	ORI_Object_s * 		oriLink;						/**< RW-Locked. ORI Link on which the AxC is mapped. */
	ORI_Object_s *		antPort;						/**< RW-Locked. Reference Antenna port for this signal. */
	uint32_t			uarfcn;							/**< RW-Locked. Uplink UARFCN. */
	int16_t 			ulFeedAdj;						/**< RW. Uplink feeder adjustment in dB/10 (e.g. 200 for 20 dB). */
	uint8_t				ulTgtRMSLvl;					/**< RW-Locked. Uplink target RMS level. */
	uint8_t				ulAGCSetlgTime;					/**< RW-Locked. Uplink AGC settling time. */
	int16_t 			AWS_measuredPwr;				/**< RO. AW2S Vendor specific: Measured Rx power for this path, unit is dBm/10 (e.g. -650 for -65 dBm). */
	uint16_t 			AWS_axcIncr;					/**< RW-Locked. AW2S Vendor specific: AxC increment for each sample, 0 means auto (= packed, no interleaving). */
} ORI_ObjectParams_RxSigPathUtra_s;

/**
 * @struct ORI_ObjectParams_RxSigPathEUtraFDD_s
 * @brief Structure containing the parameters of a RxSigPath EUTRAFDD object.
 *
 */
typedef struct
{
	uint16_t 			chanBW;							/**< RW-Locked. Channel bandwith in MHz/10 (14 / 30 / 50 / 100 / 150 / 200). */
	uint16_t			ulCalREMax;						/**< RO. Max possible buffer in RE for UL timing calibration in Tc/2.*/
	uint32_t  			ta3;							/**< RO. RE time delay. */
	uint16_t 			ulCalRE;						/**< RW-Locked. Time delay to enable UL timing calibration in Tc/2. */
	uint8_t 			axcW;							/**< RW-Locked. AxC W parameter. */
	uint8_t 			axcB;							/**< RW-Locked. AxC B parameter. */
	ORI_Object_s * 		oriLink;						/**< RW-Locked. ORI Link on which the AxC is mapped. */
	ORI_Object_s *		antPort;						/**< RW-Locked. Reference Antenna port for this signal. */
	uint32_t 			earfcn;							/**< RW-Locked. Uplink EARFCN. */
	ORI_Boolean_e		enableIQULComp;					/**< RW-Locked. IQ data compression enablement. */
	uint32_t			sigmaIQ;						/**< RW-Locked. Sigma IQ value for IQ data compression. */
	ORI_Boolean_e		AWS_enableCompRateChange;		/**< RW-Locked. AW2S Vendor specific: Enable IQ data compression sample rate change. */
	ORI_Boolean_e		AWS_enableCompBitChange;		/**< RW-Locked. AW2S Vendor specific: Enable IQ data compression bit width change. */
	int16_t 			AWS_measuredPwr;				/**< RO. AW2S Vendor specific: Measured Rx power for this path, unit is dBm/10 (e.g. -650 for -65 dBm). */
	uint16_t 			AWS_axcIncr;					/**< RW-Locked. AW2S Vendor specific: AxC increment for each sample, 0 means auto (= packed, no interleaving). */
} ORI_ObjectParams_RxSigPathEUtraFDD_s;

/**
 * @struct ORI_ObjectParams_RxSigPathEUtraTDD_s
 * @brief Structure containing the parameters of a RxSigPath EUTRATDD object.
 *
 */
typedef struct
{
	uint16_t 			chanBW;							/**< RW-Locked. Channel bandwith in MHz/10 (14 / 30 / 50 / 100 / 150 / 200). */
	uint8_t				tddULDLConfig;					/**< RW-Locked. TDD UL/DL config. */
	uint8_t				tddSpecialSFConfig;				/**< RW-Locked. TDD SSF config. */
	ORI_tddCPLength_e	tddCPLengthUL;					/**< RW-Locked. TDD Cyclic prefix length. */
	uint16_t			ulCalREMax;						/**< RO. Max possible buffer in RE for UL timing calibration in Tc/2.*/
	uint32_t  			ta3;							/**< RO. RE time delay. */
	uint16_t 			ulCalRE;						/**< RW-Locked. Time delay to enable UL timing calibration in Tc/2. */
	uint8_t 			axcW;							/**< RW-Locked. AxC W parameter. */
	uint8_t 			axcB;							/**< RW-Locked. AxC B parameter. */
	ORI_Object_s * 		oriLink;						/**< RW-Locked. ORI Link on which the AxC is mapped. */
	ORI_Object_s *		antPort;						/**< RW-Locked. Reference Antenna port for this signal. */
	uint32_t 			earfcn;							/**< RW-Locked. Uplink EARFCN. */
	ORI_Boolean_e		enableIQULComp;					/**< RW-Locked. IQ data compression enablement. */
	uint32_t			sigmaIQ;						/**< RW-Locked. Sigma IQ value for IQ data compression. */
	ORI_Boolean_e		AWS_enableCompRateChange;		/**< RW-Locked. AW2S Vendor specific: Enable IQ data compression sample rate change. */
	ORI_Boolean_e		AWS_enableCompBitChange;		/**< RW-Locked. AW2S Vendor specific: Enable IQ data compression bit width change. */
	int16_t 			AWS_measuredPwr;				/**< RO. AW2S Vendor specific: Measured Rx power for this path, unit is dBm/10 (e.g. -650 for -65 dBm). */
	uint16_t 			AWS_axcIncr;					/**< RW-Locked. AW2S Vendor specific: AxC increment for each sample, 0 means auto (= packed, no interleaving). */
} ORI_ObjectParams_RxSigPathEUtraTDD_s;

/**
 * @struct ORI_ObjectParams_RxSigPathGSM_s
 * @brief Structure containing the parameters of a RxSigPath GSM object.
 */
typedef struct
{
	uint16_t			ulCalREMax;						/**< RO. Max possible buffer in RE for UL timing calibration in Tc/2.*/
	ORI_freqBand_e 		freqBandInd;					/**< GSM frequency band indicator. */
	uint32_t  			ta3;							/**< RO. RE time delay. */
	uint16_t 			ulCalRE;						/**< RW-Locked. Time delay to enable UL timing calibration in Tc/2. */
	uint8_t 			axcW;							/**< RW-Locked. AxC W parameter. */
	uint8_t 			axcB;							/**< RW-Locked. AxC B parameter. */
	ORI_Object_s * 		oriLink;						/**< RW-Locked. ORI Link on which the AxC is mapped. */
	ORI_Object_s *		antPort;						/**< RW-Locked. Reference Antenna port for this signal. */
	int16_t 			ulFeedAdj;						/**< RW. Uplink feeder adjustment in dB/10 (e.g. 200 for 20 dB). */
	ORI_Object_s *		TxSigPath;						/**< RW-Locked. Associated TxSigPath for frequency hopping information. */
	int16_t 			AWS_measuredPwr;				/**< RO. AW2S Vendor specific: Measured Rx power for this path, unit is dBm/10 (e.g. -650 for -65 dBm). */
	uint16_t 			AWS_axcIncr;					/**< RW-Locked. AW2S Vendor specific: AxC increment for each sample, 0 means auto (= packed, no interleaving). */
} ORI_ObjectParams_RxSigPathGSM_s;

/**
 * @struct ORI_ObjectParams_RxSigPathNRFDD_s
 * @brief Structure containing the parameters of a RxSigPath NRFDD object.
 *
 */
typedef struct
{
	uint16_t 			chanBW;							/**< RW-Locked. Channel bandwith in MHz/10. */
	uint16_t			ulCalREMax;						/**< RO. Max possible buffer in RE for UL timing calibration in Tc/2.*/
	uint32_t  			ta3;							/**< RO. RE time delay. */
	uint16_t 			ulCalRE;						/**< RW-Locked. Time delay to enable UL timing calibration in Tc/2. */
	uint8_t 			axcW;							/**< RW-Locked. AxC W parameter. */
	uint8_t 			axcB;							/**< RW-Locked. AxC B parameter. */
	ORI_Object_s * 		oriLink;						/**< RW-Locked. ORI Link on which the AxC is mapped. */
	ORI_Object_s *		antPort;						/**< RW-Locked. Reference Antenna port for this signal. */
	ORI_Boolean_e		AWS_enableCompRateChange;		/**< RW-Locked. AW2S Vendor specific: Enable IQ data compression sample rate change. */
	int16_t 			AWS_measuredPwr;				/**< RO. AW2S Vendor specific: Measured Rx power for this path, unit is dBm/10 (e.g. -650 for -65 dBm). */
	uint16_t 			AWS_axcIncr;					/**< RW-Locked. AW2S Vendor specific: AxC increment for each sample, 0 means auto (= packed, no interleaving). */
	uint32_t 			AWS_arfcn;						/**< RW-Locked. ARFCN of the NR carrier. */
} ORI_ObjectParams_RxSigPathNRFDD_s;

/**
 * @struct ORI_ObjectParams_RxSigPathNRTDD_s
 * @brief Structure containing the parameters of a RxSigPath NRTDD object.
 *
 */
typedef struct
{
	uint16_t 			chanBW;							/**< RW-Locked. Channel bandwith in MHz/10. */
	uint16_t			ulCalREMax;						/**< RO. Max possible buffer in RE for UL timing calibration in Tc/2.*/
	uint32_t  			ta3;							/**< RO. RE time delay. */
	uint16_t 			ulCalRE;						/**< RW-Locked. Time delay to enable UL timing calibration in Tc/2. */
	uint8_t 			axcW;							/**< RW-Locked. AxC W parameter. */
	uint8_t 			axcB;							/**< RW-Locked. AxC B parameter. */
	ORI_Object_s * 		oriLink;						/**< RW-Locked. ORI Link on which the AxC is mapped. */
	ORI_Object_s *		antPort;						/**< RW-Locked. Reference Antenna port for this signal. */
	ORI_Boolean_e		AWS_enableCompRateChange;		/**< RW-Locked. AW2S Vendor specific: Enable IQ data compression sample rate change. */
	int16_t 			AWS_measuredPwr;				/**< RO. AW2S Vendor specific: Measured Rx power for this path, unit is dBm/10 (e.g. -650 for -65 dBm). */
	uint16_t 			AWS_axcIncr;					/**< RW-Locked. AW2S Vendor specific: AxC increment for each sample, 0 means auto (= packed, no interleaving). */
	uint32_t 			AWS_arfcn;						/**< RW-Locked. ARFCN of the NR carrier. */
} ORI_ObjectParams_RxSigPathNRTDD_s;

/**
 * @struct ORI_ObjectParams_ORILink_s
 * @brief Structure containing the parameters of an ORI Link object.
 */
typedef struct
{
	char 						portLabel[81];			/**< RO. Physical ORI link port label. */
	ORI_portRoleCapability_e	portRoleCapability;		/**< RO. Port role capability. */
	ORI_portRole_e 				portRole;				/**< RW-Locked. Port role. */
	int16_t						bitRateSupport;			/**< RO. Supported line bit rate. */
	uint8_t 					bitRateRequested;		/**< RW-Locked. Requested line bit rate. 0 for auto-negotitation. */
	uint8_t 					bitRateOperational;		/**< RO. Current line bit rate. 0 for link down. */
	uint64_t 					localPortID;			/**< RO. Local end port ID. */
	uint64_t 					remotePortID;			/**< RO. Remote end port ID. */
	uint32_t 					toffset;				/**< RO. CPRI time delay component. */
	ORI_linkType_e				oriLinkType;			/**< RW-Locked. ORI Link type. */
	uint8_t						AWS_localMAC[6];		/**< R0. AW2S Vendor specific: Local MAC address of the ORI link. */
	uint8_t						AWS_remoteMAC[6];		/**< RW. AW2S Vendor specific: Remote MAC address of the ORI link. */
	uint32_t 					AWS_t14;				/**< RO. AW2S Vendor specific: CPRI time delay component. */
	uint32_t 					AWS_sfpTxPow;			/**< RO. AW2S Vendor specific: SFP Tx power. */
	uint32_t 					AWS_sfpRxPow;			/**< RO. AW2S Vendor specific: SFP Rx power. */
	uint8_t						AWS_remoteIP[4];		/**< RW. AW2S Vendor specific: IP of REC for ECPRI Ethernet frame */
	uint8_t						AWS_localIP[4];			/**< RW. AW2S Vendor specific: IP of RE for ECPRI Ethernet frame */
	uint16_t					AWS_remoteUdpPort;		/**< RW. AW2S Vendor specific: UDP port of REC for ECPRI Ethernet frame */
	uint16_t					AWS_localUdpPort;		/**< RO. AW2S Vendor specific: UDP port of RE for ECPRI Ethernet frame */
} ORI_ObjectParams_ORILink_s;

/**
 * @struct ORI_ObjectParams_ExternalEventPort_s
 * @brief Structure containing the parameters of an External Event Port object.
 */
typedef struct
{
	char 				portLabel[81];					/**< RO. External event port label. */
} ORI_ObjectParams_ExternalEventPort_s;

/**
 * @struct ORI_ObjectParams_AISGPort_s
 * @brief Structure containing the parameters of an AISG Port object.
 */
typedef struct
{
	char 						portLabel[81];			/**< RO. AISG port label. */
	ORI_Boolean_e 				busPowerEnable;			/**< RW-Locked. Bus power enablement. */
} ORI_ObjectParams_AISGPort_s;

/**
 * @struct ORI_ObjectParams_AISGALD_s
 * @brief Structure containing the parameters of an AISG ALD object.
 */
typedef struct
{
	uint8_t 				deviceType;					/**< RW-Locked. Device type of the ALD. */
	uint8_t 				UID[20];					/**< RW-Locked. Unique ID array. */
	uint8_t					releaseID;					/**< RO. 3GPP protocol release. */
	uint8_t					aisgVersion;				/**< RO. AISG protocol version. */
	uint8_t					deviceTypeVersion[3];		/**< RO. Device type substance version. */
	uint16_t				frameLength;				/**< RO. Maximum frame length for AISG Layer 7 message payload. */
	uint8_t					hdlcAdress;					/**< RO. Actual HLDC address. */
} ORI_ObjectParams_AISGALD_s;

/**
 * @struct ORI_ObjectParams_Log_s
 * @brief Structure containing the parameters of a Log object.
 */
typedef struct
{
	char 						logTypeID[41];			/**< RO. Log type identifier. */
	char 						description[81];		/**< RO. Log description. */
	ORI_logCategory_e			logCategory;			/**< RO. Log category. */
	uint32_t 					maxREfileSize;			/**< RO. Max RE file size in kB. */
	uint32_t 					maxRECfileSize;			/**< RW. Max REC file size in kB. */
	ORI_Boolean_e 				enableNotification;		/**< RW. Enable REC notification on file transfer availability. */
	ORI_Boolean_e 				fileAvailable;			/**< RO. File is available. */
	ORI_overflowBehaviour_e		overflowBehaviour;		/**< RW. Behaviour on overflow. */
	ORI_Boolean_e				recordingEnabled;		/**< RW. Recording enablement. */
	uint64_t					logPeriod;				/**< RW. Log expiration period in seconds. */
	ORI_timerType_e				timerType;				/**< RW. Log expiration behaviour. */
} ORI_ObjectParams_Log_s;

/**
 * @struct ORI_ObjectParams_DLRoutedIQData_s
 * @brief Structure containing the parameters of a DL Routed IQ Data object.
 */
typedef struct
{
	uint16_t 			IQsubBlockSize;					/**< RW-Locked. Number of bits contained in the IQ data sub-block. */
	ORI_Object_s *		MasterPortOriLink;				/**< RW-Locked. Reference to the master port ORI Link. */
	uint8_t 			MasterPortIQblkW;				/**< RW-Locked. Sub-block start W parameter for master port. */
	uint16_t 			MasterPortIQblkB;				/**< RW-Locked. Sub-block start B parameter for master port. */
	ORI_Object_s *		SlavePortOriLink;				/**< RW-Locked. Reference to the slave port ORI Link. */
	uint8_t				SlavePortIQW;					/**< RW-Locked. Sub-block start W parameter for slave port. */
	uint16_t			SlavePortIQB;					/**< RW-Locked. Sub-block start B parameter for slave port. */
	uint16_t			TBDelayDL;						/**< RO. Internal RE delay from slave port to master port. */
} ORI_ObjectParams_DLRoutedIQData_s;

/**
 * @struct ORI_ObjectParams_ULRoutedIQData_s
 * @brief Structure containing the parameters of a UL Routed IQ Data object.
 */
typedef struct
{
	uint16_t 			IQsubBlockSize;					/**< RW-Locked. Number of bits contained in the IQ data sub-block. */
	ORI_Object_s *		MasterPortOriLink;				/**< RW-Locked. Reference to the master port ORI Link. */
	uint8_t				MasterPortIQblkW;				/**< RW-Locked. Sub-block start W parameter for master port. */
	uint16_t 			MasterPortIQblkB;				/**< RW-Locked. Sub-block start B parameter for master port. */
	ORI_Object_s *		SlavePortOriLink;				/**< RW-Locked. Reference to the slave port ORI Link. */
	uint8_t				SlavePortIQW;					/**< RW-Locked. Sub-block start W parameter for slave port. */
	uint16_t			SlavePortIQB;					/**< RW-Locked. Sub-block start B parameter for slave port. */
	uint16_t			TBDelayUL;						/**< RO. Internal RE delay from master port to slave port. */
} ORI_ObjectParams_ULRoutedIQData_s;

/**
 * @struct ORI_ObjectParams_DLRoutedCWBlock_s
 * @brief Structure containing the parameters of a DL Routed CW Block object.
 */
typedef struct
{
	uint8_t				CtrlBlockSize;					/**< RW-Locked. Number of consecutive sub-channels in the CW block. */
	uint8_t				SubChannelStart;				/**< RW-Locked. Lowest sub-channel of the CW block. */
	uint8_t				Ydepth;							/**< RW-Locked. Number of consecutive Y locations of the sub-channels in the CW block. */
	uint8_t				SlavePortYoffset;				/**< RW-Locked. Lowest Y location of the sub-channel(s) at the slave port. */
	uint8_t				MasterPortYoffset;				/**< RW-Locked. Lowest Y location of the sub-channel(s) at the master port. */
	ORI_Object_s *		SlavePortOriLink;				/**< RW-Locked. Reference to the slave port ORI Link. */
	ORI_Object_s *		MasterPortOriLink;				/**< RW-Locked. Reference to the master port ORI Link. */
} ORI_ObjectParams_DLRoutedCWBlock_s;

/**
 * @struct ORI_ObjectParams_ULRoutedCWBlock_s
 * @brief Structure containing the parameters of a UL Routed CW Block object.
 */
typedef struct
{
	uint8_t				CtrlBlockSize;					/**< RW-Locked. Number of consecutive sub-channels in the CW block. */
	uint8_t				SubChannelStart;				/**< RW-Locked. Lowest sub-channel of the CW block. */
	uint8_t				Ydepth;							/**< RW-Locked. Number of consecutive Y locations of the sub-channels in the CW block. */
	uint8_t				SlavePortYoffset;				/**< RW-Locked. Lowest Y location of the sub-channel(s) at the slave port. */
	uint8_t				MasterPortYoffset;				/**< RW-Locked. Lowest Y location of the sub-channel(s) at the master port. */
	ORI_Object_s *		SlavePortOriLink;				/**< RW-Locked. Reference to the slave port ORI Link. */
	ORI_Object_s *		MasterPortOriLink;				/**< RW-Locked. Reference to the master port ORI Link. */
} ORI_ObjectParams_ULRoutedCWBlock_s;

/**
 * @union ORI_ObjectParams_u
 * @brief Union of all the parameters of the ORI objects. Access each field based on the object type.
 */
typedef union
{
	ORI_ObjectParams_RE_s						RE;						/**< Parameters for ::ORI_ObjectType_RE. */
	ORI_ObjectParams_AntennaPort_s				AntPort;				/**< Parameters for ::ORI_ObjectType_AntennaPort. */
	ORI_ObjectParams_TxSigPathUtra_s	  		TxUtra;					/**< Parameters for ::ORI_ObjectType_TxUtra. */
	ORI_ObjectParams_TxSigPathEUtraFDD_s		TxEUtraFDD;				/**< Parameters for ::ORI_ObjectType_TxEUtraFDD. */
	ORI_ObjectParams_TxSigPathEUtraTDD_s		TxEUtraTDD;				/**< Parameters for ::ORI_ObjectType_TxEUtraTDD. */
	ORI_ObjectParams_TxSigPathGSM_s				TxGSM;					/**< Parameters for ::ORI_ObjectType_TxGSM. */
	ORI_ObjectParams_TxSigPathNRFDD_s			TxNRFDD;				/**< Parameters for ::ORI_ObjectType_TxNRFDD. */
	ORI_ObjectParams_TxSigPathNRTDD_s			TxNRTDD;				/**< Parameters for ::ORI_ObjectType_TxNRTDD. */
	ORI_ObjectParams_RxSigPathUtra_s	  		RxUtra;					/**< Parameters for ::ORI_ObjectType_RxUtra. */
	ORI_ObjectParams_RxSigPathEUtraFDD_s		RxEUtraFDD;				/**< Parameters for ::ORI_ObjectType_RxEUtraFDD. */
	ORI_ObjectParams_RxSigPathEUtraTDD_s		RxEUtraTDD;				/**< Parameters for ::ORI_ObjectType_RxEUtraTDD. */
	ORI_ObjectParams_RxSigPathGSM_s				RxGSM;					/**< Parameters for ::ORI_ObjectType_RxGSM. */
	ORI_ObjectParams_RxSigPathNRFDD_s			RxNRFDD;				/**< Parameters for ::ORI_ObjectType_RxNRFDD. */
	ORI_ObjectParams_RxSigPathNRTDD_s			RxNRTDD;				/**< Parameters for ::ORI_ObjectType_RxNRTDD. */
	ORI_ObjectParams_ORILink_s					ORILink;				/**< Parameters for ::ORI_ObjectType_ORILink. */
	ORI_ObjectParams_ExternalEventPort_s		ExternalEventPort;		/**< Parameters for ::ORI_ObjectType_ExternalEventPort. */
	ORI_ObjectParams_AISGPort_s					AISGPort;				/**< Parameters for ::ORI_ObjectType_AISGPort. */
	ORI_ObjectParams_AISGALD_s					AISGALD;				/**< Parameters for ::ORI_ObjectType_AISGALD. */
	ORI_ObjectParams_Log_s						Log;					/**< Parameters for ::ORI_ObjectType_Log. */
	ORI_ObjectParams_DLRoutedIQData_s			DLRoutedIQData;			/**< Parameters for ::ORI_ObjectType_DLRoutedIQData. */
	ORI_ObjectParams_ULRoutedIQData_s			ULRoutedIQData;			/**< Parameters for ::ORI_ObjectType_ULRoutedIQData. */
	ORI_ObjectParams_DLRoutedCWBlock_s			DLRoutedCWBlock;		/**< Parameters for ::ORI_ObjectType_DLRoutedCWBlock. */
	ORI_ObjectParams_ULRoutedCWBlock_s			ULRoutedCWBlock;		/**< Parameters for ::ORI_ObjectType_ULRoutedCWBlock. */
} ORI_ObjectParams_u;



/*-----------------------------------------------------------------------------------------
 * OBJECT FAULTS
 *-----------------------------------------------------------------------------------------*/

#define FAULT_MAX_AFFECTED_OBJ		20

/**
 * @struct ORI_Fault_s
 * @brief Structure detailing a fault, its state, severity, description and affected objects.
 */
typedef struct
{
	ORI_FaultState_e		state;										/**< Current state of the fault. */
	ORI_FaultSeverity_e		severity;									/**< Severity of the fault. */
	char 					timestamp[256];								/**< Time stamp string of the fault (RE time reference). */
	char					desc[256];									/**< Short text description associated to the fault. */
	uint32_t				numAffectedObjects;							/**< Number of additional objects affected by the fault. */
	ORI_Object_s *			affectedObjects[FAULT_MAX_AFFECTED_OBJ];	/**< List of additional objects affected by the fault. */
} ORI_Fault_s;

/**
 * @struct ORI_ObjectFaults_RE_s
 * @brief Structure containing the faults of a RE object.
 */
typedef struct
{
	ORI_Fault_s			extSuplyUndervolt;				/**< Power supply under voltage. FaultType is ::ORI_FaultType_RE_ExtSupplyUnderVolt */
	ORI_Fault_s			overTemp;						/**< Over temperature. FaultType is ::ORI_FaultType_RE_OverTemp */
	ORI_Fault_s			digInOverdrive;					/**< Input digital signal level overdrive. FaultType is ::ORI_FaultType_RE_DigInOverdrive */
	ORI_Fault_s			rfOutOverdrive;					/**< RF output power overdrive. FaultType is ::ORI_FaultType_RE_RFOutOverdrive */
	ORI_Fault_s			txGainFail;						/**< Tx gain control failure. FaultType is ::ORI_FaultType_RE_TXGainFail */
	ORI_Fault_s			rxGainFail;						/**< Rx gain control failure. FaultType is ::ORI_FaultType_RE_RXGainFail */
} ORI_ObjectFaults_RE_s;

/**
 * @struct ORI_ObjectFaults_AntennaPort_s
 * @brief Structure containing the faults of an Antenna Port object.
 */
typedef struct
{
	ORI_Fault_s			vswrOutOfRange;					/**< VSWR at the antenna port exceeded limit. FaultType is ::ORI_FaultType_AntennaPort_VSWROutOfRange */
	ORI_Fault_s			nonAisgTmaMalfct;				/**< Non AISG TMA malfunction. FaultType is ::ORI_FaultType_AntennaPort_NonAisgTmaMalfct */
} ORI_ObjectFaults_AntennaPort_s;

/**
 * @struct ORI_ObjectFaults_ORILink_s
 * @brief Structure containing the faults of an ORI Link object.
 */
typedef struct
{
	ORI_Fault_s			linkFailure;					/**< LOS, LOF, SDI or RAI received on the ORI Link. FaultType is ::ORI_FaultType_ORILink_LinkFail */
	ORI_Fault_s			portFailure;					/**< Local ORI slave port failure. FaultType is ::ORI_FaultType_ORILink_PortFail */
	ORI_Fault_s			syncFailure;					/**< Synchronization lost on slave port. FaultType is ::ORI_FaultType_ORILink_SyncFail */
} ORI_ObjectFaults_ORILink_s;

/**
 * @struct ORI_ObjectFaults_AISGPort_s
 * @brief Structure containing the faults of an AISG Port object.
 */
typedef struct
{
	ORI_Fault_s			aisgMalfct;						/**< Hardware malfunction on AISG port. FaultType is ::ORI_FaultType_AISGPort_AisgMalfct */
} ORI_ObjectFaults_AISGPort_s;

/**
 * @union ORI_ObjectFaults_u
 * @brief Union of all the faults of the ORI objects. Access each field based on the object type.
 */
typedef union
{
	ORI_ObjectFaults_RE_s						RE;						/**< Faults for ::ORI_ObjectType_RE. */
	ORI_ObjectFaults_AntennaPort_s				AntPort;				/**< Faults for ::ORI_ObjectType_AntennaPort. */
	ORI_ObjectFaults_ORILink_s					ORILink;				/**< Faults for ::ORI_ObjectType_ORILink. */
	ORI_ObjectFaults_AISGPort_s					AISGPort;				/**< Faults for ::ORI_ObjectType_AISGPort. */
} ORI_ObjectFaults_u;



/*-----------------------------------------------------------------------------------------
 * INDICATION DATA STRUCTURES
 *-----------------------------------------------------------------------------------------*/

/**
 * @struct ORI_Ind_TransferFileCmplt_s
 * @brief ORI file transfer complete indication structure.
 *
 * This structure is passed on a file transfer complete indication and gives the result
 * of a file transfer completion.
 */
typedef struct
{
	ORI_Result_e 			result;						/**< Result of the file transfer. */
	char 					failInfo[256];				/**< String indicating the file transfer failure reason, if applicable. */
} ORI_Ind_TransferFileCmplt_s;

/**
 * @struct ORI_Ind_ObjectStateChange_s
 * @brief ORI object state change indication structure.
 *
 * This structure is passed on an object state change indication and gives the affected object and the type of the
 * state that changed. <br>
 * The new state value is updated in the model and can be accessed directly in the object.
 */
typedef struct
{
	ORI_Object_s *			object;						/**< Object for which the state changed. */
	ORI_StateType_e			stateType;					/**< Type of the state that changed. */
} ORI_Ind_ObjectStateChange_s;

/**
 * @struct ORI_Ind_FaultChange_s
 * @brief ORI fault change indication structure.
 *
 * This structure is passed on a fault change indication (activated or cleared) and gives the primary affected object, the fault type and the actual fault structure. <br>
 * The new fault structure is updated in the model and can be accessed directly in the object based on the fault type.
 */
typedef struct
{
	ORI_Object_s *			object;						/**< Primary object affected by the fault. */
	ORI_FaultType_e			faultType;					/**< Type of the fault that changed. */
	ORI_Fault_s *			fault;						/**< Reference to the object's fault structure for the given fault type. */
} ORI_Ind_FaultChange_s;

/**
 * @struct ORI_Ind_FileAvailable_s
 * @brief ORI File Available indication structure.
 *
 * This structure is passed on a file available indication and gives the object concerned by the file available.
 */
typedef struct
{
	ORI_Object_s *			object;						/**< Object concerned by file availability. Valid objects : Log:X. */
} ORI_Ind_FileAvailable_s;

/**
 * @struct ORI_Ind_UploadFileCmpl_s
 * @brief ORI Upload File Complete indication structure.
 *
 * This structure is passed on an upload file complete indication and gives the result and the object concerned by the file upload.
 */
typedef struct
{
	ORI_Result_e			result;						/**< Result of the file transfer. */
	ORI_Object_s *			object;						/**< Object concerned by the file upload. Valid objects : RE:0 or Log:X. */
	char 					failInfo[256];				/**< String indicating the file transfer failure reason, if applicable. */
} ORI_Ind_UploadFileCmpl_s;

/**
 * @struct ORI_Ind_DeviceScanCmpl_s
 * @brief ORI AISG Device Scan Complete indication structure.
 *
 * This structure is passed on an aisg device scan complete indication and gives the result and the object concerned by the device scan.
 */
typedef struct
{
	ORI_Object_s *			object;						/**< Object concerned by the device scan. Valid objects : aisgPort:X. */
	int 					numAlds;					/**< integer indicating the number of ALDs found by the device scan. */
} ORI_Ind_DeviceScanCmpl_s;

/**
 * @struct ORI_Ind_L7respGetAlarm_s
 * @brief ORI AISG Transmit L7 message indication with command Get Alarm Status.
 *
 * This structure is passed on an aisg ALD receive indication and gives layer 7 message Get Alarm Status fields.
 */
typedef struct
{
	unsigned char			returnCode[16];	// returnCode, until 16 values supported
}ORI_Ind_L7respGetAlarm_s;

/**
 * @struct ORI_Ind_L7respGetInfo_s
 * @brief ORI AISG Transmit L7 message indication with command Get Info.
 *
 * This structure is passed on an aisg ALD receive indication and gives layer 7 message Get Info fields.
 */
typedef struct
{
	int 					PNlen;		// Product Number's length
	char 					PN[64];		// Product Number
	int 					SNlen;		// Serial Number's length
	char					SN[64];		// Serial Number
	int						HWverLen;	// Hardware Version's length
	char					HWver[64];	// Hardware Version
	int						SWverLen;	// Software Version's length
	char					SWver[64];	// Software Version
}ORI_Ind_L7respGetInfo_s;

typedef struct
{
	unsigned char			data[80];
}ORI_Ind_L7respReadUserData_s;

/**
* @struct ORI_Ind_L7respGetAlarm_s
* @brief ORI AISG Transmit L7 message indication with command Get Alarm Status.
*
* This structure is passed on an aisg ALD receive indication and gives layer 7 message Get Alarm Status fields.
*/
typedef struct
{
	unsigned char			alarmCode[16];	// alarmCode, until 16 values supported
}ORI_Ind_L7respSelfTest_s;


/**
 * @struct ORI_Ind_L7respGetTilt_s
 * @brief ORI AISG Transmit L7 message indication with command Get Tilt.
 *
 * This structure is passed on an aisg ALD receive indication and gives layer 7 message Get Tilt fields.
 */
typedef struct
{
	int 					Tilt;		// tilt value
}ORI_Ind_L7respGetTilt_s;

/**
 * @struct ORI_Ind_L7respGetDeviceData_s
 * @brief ORI AISG Transmit L7 message indication with command Get Device Data.
 *
 * This structure is passed on an aisg ALD receive indication and gives layer 7 message Get Device Data fields.
 */
typedef struct
{
	unsigned char			fieldNbr;
	char 					antModelNbr[32];		// Antenna Model Number
	char 					antSerialNbr[32];		// Antenna Serial Number
	unsigned short			antFreqBand;			// Antenna Frequency Band
	unsigned short			beamwidthBand[4];		// Beamwidth for each Band
	unsigned char			gainBand[4];			// Gain for each Band
	short					maxTilt;				// Maximum Supported Tilt
	short					minTilt;				// Minimum Supported Tilt
	char 					installationDate[32];	// Installation Date
	char 					installerID[32];		// Installer ID
	char 					basestationID[32];		// BaseStation ID
	char 					sectorID[32];			// sector ID
	unsigned short			antBearing;				// Antenna Bearing
	short					mechanicalTilt;			// Mechanical Tilt
}ORI_Ind_L7respGetDeviceData_s;

/**
 * @struct ORI_Ind_L7indAlarmIndication_s
 * @brief ORI AISG Transmit L7 message indication with alarm indication.
 *
 * This structure is passed on an aisg ALD receive indication and gives layer 7 message Alarm Indication Data fields.
 */
typedef struct
{
	unsigned char			returnCode;
	unsigned char			stateFlag;
}ret_alarm_s;
typedef struct
{
	ret_alarm_s				alarm[32];
}ORI_Ind_L7indAlarmIndication_s;

/**
 * @struct ORI_Ind_L7respAntGetNbr_s
 * @brief ORI AISG Transmit L7 message indication with command Antenna Get Number Of Antennas.
 *
 * This structure is passed on an aisg ALD receive indication and gives layer 7 message Antenna Get Number Of Antennas Data fields.
 */
typedef struct
{
	unsigned char			nbr;
}ORI_Ind_L7respAntGetNbr_s;

/**
 * @struct ORI_Ind_respGetParam_s
 * @brief ORI AISG getParam message indication .
 *
 * This structure is passed on a getParam command to obtain the ALD's deviceType.
 */
typedef struct
{
	unsigned char 			deviceType;
}ORI_Ind_respGetParam_s;

/**
 * @struct ORI_Ind_respCheckPortExist_s
 * @brief ORI AISG check AISG Port existence .
 *
 * This structure is passed on a check aisg port exist command to know if there is an aisg port in this product or not.
 */
typedef struct
{
	ORI_Boolean_e			exist;
}ORI_Ind_respCheckPortExist_s;

/**
 * @struct ORI_Ind_L7msg_s
 * @brief ORI AISG Transmit L7 message indication struct.
 *
 * This struct is passed on an aisg ALD receive indication and gives a layer 7 message.
 */
typedef struct
{
	char							raw[256];
	ORI_AisgLayer7Command_e			command;
	ORI_AisgReturnCode_e			returnCode;
	unsigned char					multiAntennaNbr;
	ORI_Ind_L7respGetAlarm_s		getAlarm;
	ORI_Ind_L7respGetInfo_s			getInfo;
	ORI_Ind_L7respReadUserData_s	readUserData;
	ORI_Ind_L7respSelfTest_s		selfTest;
	ORI_Ind_L7respGetTilt_s			getTilt;
	ORI_Ind_L7respGetDeviceData_s	getDeviceData;
	ORI_Ind_L7indAlarmIndication_s	alarmIndication;
	ORI_Ind_L7respAntGetNbr_s		getNbrAntennas;
	ORI_Ind_respGetParam_s			getParam;
	ORI_Ind_respCheckPortExist_s	checkAisgPortExist;
}ORI_Ind_L7msg_s;

/**
 * @struct ORI_Ind_AisgALDRx_s
 * @brief ORI AISG ALD receive indication structure.
 *
 * This structure is passed on an aisg ALD receive indication and gives a layer 7 message and the object concerned.
 */
typedef struct
{
	ORI_Object_s *			object;						/**< Object concerned by the device scan. Valid objects : aisgPort:X/aisgALD:Y. */
	ORI_Ind_L7msg_s			L7message;					/**< string of a layer7 message sent by the ALD. */
} ORI_Ind_AisgALDRx_s;

/**
 * @union ORI_IndicationValue_u
 * @brief ORI indication value union.
 *
 * This union can be accessed based on the indication type. Its members give details on the received indication.
 */
typedef union
{
	ORI_Ind_TransferFileCmplt_s transferFileCmplt;		/**< File transfer complete structure, access it on an ::ORI_IndicationType_FileTransferComplete. */
	ORI_Ind_ObjectStateChange_s	objectStateChange;		/**< Object state change structure, access it on an ::ORI_IndicationType_ObjectStateChange. */
	ORI_Ind_FaultChange_s		faultChange;			/**< Fault change structure, access it on an ::ORI_IndicationType_FaultChange. */
	ORI_Ind_FileAvailable_s		fileAvailable;			/**< File available structure, access it on an ::ORI_IndicationType_FileAvailable. */
	ORI_Ind_UploadFileCmpl_s	uploadFileCmpl;			/**< Upload file complete structure, access it on an ::ORI_IndicationType_UploadFileCmpl. */
	ORI_Ind_DeviceScanCmpl_s	deviceScanCmpl;			/**< AISG device scan complete structure, access it on an ::ORI_IndicationType_AisgScanDeviceCompl. */
	ORI_Ind_AisgALDRx_s			aisgALDRx;				/**< AISG ALD receive structure, access it on an ::ORI_IndicationType_AisgAldRx. */
} ORI_IndicationValue_u;

/**
 * @typedef ORI_IndCallback_f
 * @brief ORI indication callback function prototype.
 *
 * This is the prototype of the user callback function that is called when an indication has been received on the ORI Link. <br>
 * The indication callback passes in its arguments the @p type describing the type of the indication, such as file transfer completion, RE fault, etc. <br>
 * The @p value parameter shall be used to obtain more details on the indication.
 *
 * @param userData The user data that is from the ORI context structure.
 * @param type An ::ORI_IndicationType_e.
 * @param value An ::ORI_IndicationValue_u.
 * @return Void.
 *
 * @warning The indication callback is called in a separate thread.
 * @warning The state of the model is guaranteed to stay constant during the indication callback.
 * @warning ORI functions (except for ORI MODEL functions) must not be called during the indication callback.
 */
typedef void (ORI_IndCallback_f) (void * userData, ORI_IndicationType_e type, ORI_IndicationValue_u value);





/*-----------------------------------------------------------------------------------------
 * RE VERSION STRUCTURE
 *-----------------------------------------------------------------------------------------*/

/**
 * @struct ORI_REVersion_s
 * @brief ORI RE version query information structure.
 *
 * This structure contains the RE vendor specific version information obtained during a ORI_VersionQuery() procedure.
 */
typedef struct
{
	char 		vendorID[64];							/**< Vendor ID as signaled in DHCP code 201, normally 3 characters */
	char 		productID[64];							/**< */
	char 		productRev[64];							/**< */
	char 		serialNumber[64];						/**< */
	char 		hardwareVer[64];						/**< */
	char 		activeSwUpgradePkgVer[64];				/**< */
	char 		activeSwImgVer[64];						/**< */
	char 		passiveSwUpgradePkgVer[64];				/**< */
	char 		passiveSwImgVer[64];					/**< */
} ORI_REVersion_s;




/*-----------------------------------------------------------------------------------------
 * ORI OBJECT STRUCTURE
 *-----------------------------------------------------------------------------------------*/

/**
 * @struct ORI_Object_s
 * @brief Structure of an ORI Object.
 *
 * ORI Objects are internally created by the ORI library and represent an object present in the RE. <br>
 * Those objects represent and define the resource model of the RE, of which an image is present in the REC (via this library). <br>
 * Such objects can be accessed (for reading and navigating) by the user but must not be modified, created or deleted directly
 * as they are an 'image' of the RE objects. <br>
 * To update the parameters of the object, see ORI_ObjectParamReport(). <br>
 * To modify the parameters of the object, see ORI_ObjectParamModify(). <br>
 * To create an object, see ORI_ObjectCreation(). <br>
 * To delete an object, see ORI_ObjectDeletion(). <br>
 * To update the state of the object, see ORI_ObjectStateReport(). <br>
 * To modify the state of the object, see ORI_ObjectStateModify(). <br>
 * To update the faults of the object, see ORI_ObjectFaultReport(). <br>
 * To find an object in the model, see ORI_FindObject(). <br>
 * To retrieve a specific fault of an object, see ORI_ObjectFault().
 */
struct ORI_Object_s
{
	ORI_ObjectTypeRef_s	typeRef;					/**< Type reference of the object. */
	uint8_t				instanceNumber;				/**< Instance number of the object. */
	ORI_Object_s *		prev;						/**< Previous sibling. */
	ORI_Object_s *		next;						/**< Next sibling. */
	ORI_Object_s *		children;					/**< First child reference. */
	ORI_ObjectParams_u	params;						/**< Parameters union of this object. */
	ORI_AST_e			ast;						/**< Administrative state. */
	ORI_FST_e			fst;						/**< Functional state. */
	ORI_ObjectFaults_u	faults;						/**< Faults union of this object. */
};





/*-----------------------------------------------------------------------------------------
 * CONTEXT
 *-----------------------------------------------------------------------------------------*/

/**
 * @struct ORI_Version_s
 * @brief ORI version structure.
 *
 * This structure contains ORI library version information.
 */
typedef struct
{
	uint8_t					major;					/**< Version major number. */
	uint8_t					minor;					/**< Version minor number. */
} ORI_Version_s;

/**
 * @struct ORI_s
 * @brief ORI context data structure.
 *
 * This structure represents the context data for the ORI C library and shall be passed in ORI function calls. <br>
 * The @p opaque field is a library specific field and must not be modified by the user application. <br>
 * Other fields may be set (and changed) at run-time by the user application.
 *
 * @warning The indication callback is called in a separate thread.
 * @warning The state of the model is guaranteed to stay constant during the indication callback.
 * @warning ORI functions (except for ORI MODEL functions) must not be called during the indication callback.
 */
typedef struct
{
	void * 					opaque; 				/**< Set by the library, DO NOT MODIFY. */
	ORI_IndCallback_f *		indicationCallback;		/**< Pointer to user set ORI indication callback, this function is called when an indication is received on the ORI Link. If @c NULL (default), indications are discarded. */
	void *					userData;				/**< User data for passing into the ORI indication callback */
} ORI_s;



/*-----------------------------------------------------------------------------------------
 * ORI CREATION / DELETION / (DIS)CONNECTION
 *-----------------------------------------------------------------------------------------*/

/**
 * @brief Retrieve ORI library version structure.
 *
 * This functions returns the ORI library version structure (constant).
 *
 * @return Version structure.
 */
ORI_Version_s ORI_LibVersion(void);

/**
 * @brief Create an ORI context.
 *
 * This function creates and initializes an ORI context structure that is to be used when calling
 * other ORI library functions. This function also starts threads for data receiving and callbacks handling.
 *
 * @return The ORI context if creation successful, else @c NULL.
 *
 * @warning The returned ORI context must be free'd with a call to ORI_Free() when the user application is done with ORI.
 */
ORI_s *	ORI_Create(void);

/**