From 023c9852b59df2fd337a648b756011bfb8f97cf5 Mon Sep 17 00:00:00 2001
From: Lionel Gauthier <lionel.gauthier@eurecom.fr>
Date: Fri, 8 Aug 2014 11:51:32 +0000
Subject: [PATCH] For handset UE (not needed for dongles up to now)

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5694 818b1a75-f10b-46b9-bf7c-635c3b92a50f
---
 .../VoiceDomainPreferenceAndUeUsageSetting.c  | 96 +++++++++++++++++++
 .../VoiceDomainPreferenceAndUeUsageSetting.h  | 60 ++++++++++++
 2 files changed, 156 insertions(+)
 create mode 100644 openair-cn/NAS/EURECOM-NAS/src/ies/VoiceDomainPreferenceAndUeUsageSetting.c
 create mode 100644 openair-cn/NAS/EURECOM-NAS/src/ies/VoiceDomainPreferenceAndUeUsageSetting.h

diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/VoiceDomainPreferenceAndUeUsageSetting.c b/openair-cn/NAS/EURECOM-NAS/src/ies/VoiceDomainPreferenceAndUeUsageSetting.c
new file mode 100644
index 00000000000..47565d0e873
--- /dev/null
+++ b/openair-cn/NAS/EURECOM-NAS/src/ies/VoiceDomainPreferenceAndUeUsageSetting.c
@@ -0,0 +1,96 @@
+/*******************************************************************************
+    OpenAirInterface
+    Copyright(c) 1999 - 2014 Eurecom
+
+    OpenAirInterface 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 3 of the License, or
+    (at your option) any later version.
+
+
+    OpenAirInterface 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 OpenAirInterface.The full GNU General Public License is
+   included in this distribution in the file called "COPYING". If not,
+   see <http://www.gnu.org/licenses/>.
+
+  Contact Information
+  OpenAirInterface Admin: openair_admin@eurecom.fr
+  OpenAirInterface Tech : openair_tech@eurecom.fr
+  OpenAirInterface Dev  : openair4g-devel@eurecom.fr
+
+  Address      : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France.
+
+ *******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+
+
+#include "TLVEncoder.h"
+#include "TLVDecoder.h"
+#include "VoiceDomainPreferenceAndUeUsageSetting.h"
+
+int decode_voice_domain_preference_and_ue_usage_setting(VoiceDomainPreferenceAndUeUsageSetting *voicedomainpreferenceandueusagesetting, uint8_t iei, uint8_t *buffer, uint32_t len)
+{
+    int decoded = 0;
+    uint8_t ielen = 0;
+    if (iei > 0)
+    {
+        CHECK_IEI_DECODER(iei, *buffer);
+        decoded++;
+    }
+    memset(voicedomainpreferenceandueusagesetting, 0, sizeof(VoiceDomainPreferenceAndUeUsageSetting));
+    ielen = *(buffer + decoded);
+    decoded++;
+    CHECK_LENGTH_DECODER(len - decoded, ielen);
+
+    voicedomainpreferenceandueusagesetting->ue_usage_setting        = (*(buffer + decoded) >> 2) & 0x1;
+    voicedomainpreferenceandueusagesetting->voice_domain_for_eutran = *(buffer + decoded) & 0x3;
+
+#if defined (NAS_DEBUG)
+    dump_voice_domain_preference_and_ue_usage_setting_xml(voicedomainpreferenceandueusagesetting, iei);
+#endif
+    return decoded;
+}
+int encode_voice_domain_preference_and_ue_usage_setting(VoiceDomainPreferenceAndUeUsageSetting *voicedomainpreferenceandueusagesetting, uint8_t iei, uint8_t *buffer, uint32_t len)
+{
+    uint8_t *lenPtr;
+    uint32_t encoded = 0;
+    /* Checking IEI and pointer */
+    CHECK_PDU_POINTER_AND_LENGTH_ENCODER(buffer, VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_MINIMUM_LENGTH, len);
+#if defined (NAS_DEBUG)
+    dump_voice_domain_preference_and_ue_usage_setting_xml(voicedomainpreferenceandueusagesetting, iei);
+#endif
+    if (iei > 0)
+    {
+        *buffer = iei;
+        encoded++;
+    }
+    lenPtr  = (buffer + encoded);
+    encoded ++;
+    *(buffer + encoded) = 0x00 |
+            (voicedomainpreferenceandueusagesetting->ue_usage_setting << 2) |
+            voicedomainpreferenceandueusagesetting->voice_domain_for_eutran;
+    encoded++;
+
+    *lenPtr = encoded - 1 - ((iei > 0) ? 1 : 0);
+    return encoded;
+}
+
+void dump_voice_domain_preference_and_ue_usage_setting_xml(VoiceDomainPreferenceAndUeUsageSetting *voicedomainpreferenceandueusagesetting, uint8_t iei)
+{
+    printf("<Voice domain preference and UE usage setting>\n");
+    if (iei > 0)
+        /* Don't display IEI if = 0 */
+        printf("    <IEI>0x%X</IEI>\n", iei);
+    printf("    <UE_USAGE_SETTING>%u</UE_USAGE_SETTING>\n", voicedomainpreferenceandueusagesetting->ue_usage_setting);
+    printf("    <VOICE_DOMAIN_FOR_EUTRAN>%u</VOICE_DOMAIN_FOR_EUTRAN>\n", voicedomainpreferenceandueusagesetting->voice_domain_for_eutran);
+    printf("</Voice domain preference and UE usage setting>\n");
+}
+
diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/VoiceDomainPreferenceAndUeUsageSetting.h b/openair-cn/NAS/EURECOM-NAS/src/ies/VoiceDomainPreferenceAndUeUsageSetting.h
new file mode 100644
index 00000000000..372ba527195
--- /dev/null
+++ b/openair-cn/NAS/EURECOM-NAS/src/ies/VoiceDomainPreferenceAndUeUsageSetting.h
@@ -0,0 +1,60 @@
+/*******************************************************************************
+    OpenAirInterface
+    Copyright(c) 1999 - 2014 Eurecom
+
+    OpenAirInterface 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 3 of the License, or
+    (at your option) any later version.
+
+
+    OpenAirInterface 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 OpenAirInterface.The full GNU General Public License is
+   included in this distribution in the file called "COPYING". If not,
+   see <http://www.gnu.org/licenses/>.
+
+  Contact Information
+  OpenAirInterface Admin: openair_admin@eurecom.fr
+  OpenAirInterface Tech : openair_tech@eurecom.fr
+  OpenAirInterface Dev  : openair4g-devel@eurecom.fr
+
+  Address      : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France.
+
+ *******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#include "OctetString.h"
+
+#ifndef VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_H_
+#define VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_H_
+
+#define VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_MINIMUM_LENGTH 1
+#define VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_MAXIMUM_LENGTH 1
+
+typedef struct VoiceDomainPreferenceAndUeUsageSetting_tag {
+    uint8_t  spare:5;
+#define UE_USAGE_SETTING_VOICE_CENTRIC 0b0
+#define UE_USAGE_SETTING_DATA_CENTRIC  0b1
+    uint8_t  ue_usage_setting:1;
+#define VOICE_DOMAIN_PREFERENCE_CS_VOICE_ONLY                                    0b00
+#define VOICE_DOMAIN_PREFERENCE_IMS_PS_VOICE_ONLY                                0b01
+#define VOICE_DOMAIN_PREFERENCE_CS_VOICE_PREFERRED_IMS_PS_VOICE_AS_SECONDARY     0b10
+#define VOICE_DOMAIN_PREFERENCE_IMS_PS_VOICE_PREFERRED_CS_VOICE_AS_SECONDARY     0b11
+    uint8_t  voice_domain_for_eutran:2;
+} VoiceDomainPreferenceAndUeUsageSetting;
+
+int encode_voice_domain_preference_and_ue_usage_setting(VoiceDomainPreferenceAndUeUsageSetting *voicedomainpreferenceandueusagesetting, uint8_t iei, uint8_t *buffer, uint32_t len);
+
+int decode_voice_domain_preference_and_ue_usage_setting(VoiceDomainPreferenceAndUeUsageSetting *voicedomainpreferenceandueusagesetting, uint8_t iei, uint8_t *buffer, uint32_t len);
+
+void dump_voice_domain_preference_and_ue_usage_setting_xml(VoiceDomainPreferenceAndUeUsageSetting *voicedomainpreferenceandueusagesetting, uint8_t iei);
+
+#endif /* VOICE DOMAIN PREFERENCE AND UE USAGE SETTING_H_ */
+
-- 
GitLab