Nvidia add cmet-info

Add decoding of more specific Error codes.

Unit tests pass.

Change-Id: Ia0ca0dfdf550381da435b0fb9041b664784f7476
Signed-off-by: Ed Tanous <etanous@nvidia.com>
diff --git a/examples/nvidia_cmet_info.cperhex b/examples/nvidia_cmet_info.cperhex
new file mode 100644
index 0000000..c643086
--- /dev/null
+++ b/examples/nvidia_cmet_info.cperhex
@@ -0,0 +1,27 @@
+435045520000ffffffff0100030000000200000028030000195023002103
+252000000000000000000000000000000000000000000000000000000000
+0000000078e401a97311ef1196a85fa6bef5eea4acd5a9090452144296e5
+94992e752bcd040000000000000000000000000000000000000000000000
+0000000000000000c8000000600200000000010000000000f244526d1227
+ec11bea7cb3fdb95c7864a334fcc63c5eb118f889f7ac76c6f0c03000000
+0000000000000000000000000000000000000000434d45542d494e464f00
+000000000000000000000300240000000000000000000000000001000080
+000000000400070001000000010000800000000001000000020000000100
+008000000000010004000300000001000080000000000100000004000000
+010000800000000001000400050000000100008000000000010000000600
+000001000080000000000100040007000000010000800000000001000000
+080000000100008000000000010004000900000001000080000000000100
+00000a0000000100008000000000010004000b0000000100008000000000
+010000000c0000000100008000000000010004000d000000010000800000
+0000010000000e0000000100008000000000010004000f00000001000080
+000000000100000010000000010000800000000001000c00110000000100
+0080000000000100080012000000010000800000000001000c0013000000
+01000080000000000100080014000000010000800000000001000c001500
+000001000080000000000100080016000000010000800000000001000c00
+170000000100008000000000010008001800000001000080000000000100
+0c00190000000100008000000000010008001a0000000100008000000000
+01000c001b0000000100008000000000010008001c000000010000800000
+000001000c001d0000000100008000000000010008001e00000001000080
+0000000001000c001f000000010000800000000001000800000000000200
+008047de1f0300000000010000000200008047de1f030000000002000000
+0200008047de1f0300000000030000000200008047de1f0300000000
\ No newline at end of file
diff --git a/examples/nvidia_cmet_info.json b/examples/nvidia_cmet_info.json
new file mode 100644
index 0000000..4c3c892
--- /dev/null
+++ b/examples/nvidia_cmet_info.json
@@ -0,0 +1,434 @@
+{
+    "header": {
+        "revision": {
+            "major": 0,
+            "minor": 0
+        },
+        "sectionCount": 1,
+        "severity": {
+            "code": 3,
+            "name": "Informational"
+        },
+        "recordLength": 808,
+        "timestamp": "2025-03-21T23:50:19+00:00",
+        "timestampIsPrecise": false,
+        "creatorID": "a901e478-1173-11ef-96a8-5fa6bef5eea4",
+        "notificationType": {
+            "guid": "09a9d5ac-5204-4214-96e5-94992e752bcd",
+            "type": "PEI"
+        },
+        "recordID": 4,
+        "flags": {
+            "value": 0,
+            "name": "Unknown"
+        },
+        "persistenceInfo": 0
+    },
+    "sectionDescriptors": [
+        {
+            "sectionOffset": 200,
+            "sectionLength": 608,
+            "revision": {
+                "major": 0,
+                "minor": 0
+            },
+            "flags": {
+                "primary": false,
+                "containmentWarning": false,
+                "reset": false,
+                "errorThresholdExceeded": false,
+                "resourceNotAccessible": false,
+                "latentError": false,
+                "propagated": false,
+                "overflow": false
+            },
+            "sectionType": {
+                "data": "6d5244f2-2712-11ec-bea7-cb3fdb95c786",
+                "type": "NVIDIA"
+            },
+            "fruID": "cc4f334a-c563-11eb-8f88-9f7ac76c6f0c",
+            "severity": {
+                "code": 3,
+                "name": "Informational"
+            }
+        }
+    ],
+    "sections": [
+        {
+            "Nvidia": {
+                "signature": "CMET-INFO",
+                "severity": {
+                    "code": 3,
+                    "name": "Informational"
+                },
+                "errorType": 0,
+                "errorInstance": 0,
+                "socket": 0,
+                "registerCount": 36,
+                "instanceBase": 0,
+                "CMETInfo": [
+                    {
+                        "ChannelAddress": "0x8000000100000000",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": false,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000001",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000002",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000003",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000004",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000005",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000006",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000007",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000008",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000009",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x800000010000000A",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x800000010000000B",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x800000010000000C",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x800000010000000D",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x800000010000000E",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x800000010000000F",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000010",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000011",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000012",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000013",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000014",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000015",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000016",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000017",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000018",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000100000019",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x800000010000001A",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x800000010000001B",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x800000010000001C",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x800000010000001D",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x800000010000001E",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x800000010000001F",
+                        "ErrorCount": 0,
+                        "ChannelEnabled": true,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000200000000",
+                        "ErrorCount": 52420167,
+                        "ChannelEnabled": false,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000200000001",
+                        "ErrorCount": 52420167,
+                        "ChannelEnabled": false,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000200000002",
+                        "ErrorCount": 52420167,
+                        "ChannelEnabled": false,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    },
+                    {
+                        "ChannelAddress": "0x8000000200000003",
+                        "ErrorCount": 52420167,
+                        "ChannelEnabled": false,
+                        "ChannelIsSpare": false,
+                        "DisabledReason": {
+                            "raw": 0,
+                            "value": "Alias Checker Failed"
+                        }
+                    }
+                ]
+            }
+        }
+    ]
+}