From 2f40e8fcba1be0dc91f60a6cbb7254858991ff3b Mon Sep 17 00:00:00 2001 From: winckel <winckel@eurecom.fr> Date: Wed, 11 Dec 2013 14:32:25 +0000 Subject: [PATCH] Added user interface (AT command interface) initialization and processing in NAS UE task. git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4666 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- openair-cn/NAS/nas_ue_task.c | 122 ++++++++++++++++++++++++++--------- 1 file changed, 90 insertions(+), 32 deletions(-) diff --git a/openair-cn/NAS/nas_ue_task.c b/openair-cn/NAS/nas_ue_task.c index 31c89d3b4d..7444fb45ad 100644 --- a/openair-cn/NAS/nas_ue_task.c +++ b/openair-cn/NAS/nas_ue_task.c @@ -31,53 +31,111 @@ #if defined(ENABLE_ITTI) # include "intertask_interface.h" # include "nas_ue_task.h" +# include "UTIL/LOG/log.h" -# include "nas_log.h" # include "nas_user.h" # include "user_api.h" +# include "nas_parser.h" + +# define NAS_UE_AUTOSTART 1 extern unsigned char NB_eNB_INST; -void *nas_ue_task(void *args_p) { - MessageDef *msg_p; - const char *msg_name; - instance_t instance; - unsigned int Mod_id; +static int user_fd; - itti_mark_task_ready (TASK_NAS_UE); +static int nas_ue_process_events(struct epoll_event *events, int nb_events, unsigned int Mod_id) +{ + int event; + int exit_loop = FALSE; - /* Initialize NAS */ -// nas_log_init(0x2F); - nas_user_initialize (&user_api_emm_callback, &user_api_esm_callback, FIRMWARE_VERSION); + LOG_I(NAS, "[UE %d] Received %d events\n", Mod_id, nb_events); - while(1) { - // Wait for a message - itti_receive_msg (TASK_NAS_UE, &msg_p); - - msg_name = ITTI_MSG_NAME (msg_p); - instance = ITTI_MSG_INSTANCE (msg_p); - Mod_id = instance - NB_eNB_INST; + for (event = 0; event < nb_events; event++) { + if (events[event].events != 0) + { + /* If the event has not been yet been processed (not an itti message) */ + if (events[event].data.fd == user_fd) { + exit_loop = user_api_receive_and_process(&user_fd); + } else { + LOG_E(NAS, "[UE %d] Received an event from an unknown fd %d!\n", Mod_id, events[event].data.fd); + } + } + } - switch (ITTI_MSG_ID(msg_p)) { - case TERMINATE_MESSAGE: - itti_exit_task (); - break; + return (exit_loop); +} - case MESSAGE_TEST: - LOG_I(NAS, "[UE %d] Received %s\n", Mod_id, msg_name); - break; +void *nas_ue_task(void *args_p) { + int nb_events; + struct epoll_event *events; + MessageDef *msg_p; + const char *msg_name; + instance_t instance; + unsigned int Mod_id; - case NAS_DOWNLINK_DATA_IND: - LOG_I(NAS, "[UE %d] Received %s: UEid %u, lenght %u\n", Mod_id, msg_name, NAS_DOWNLINK_DATA_IND (msg_p).UEid, NAS_DOWNLINK_DATA_IND (msg_p).nasMsg.length); - break; + itti_mark_task_ready (TASK_NAS_UE); - default: - LOG_E(NAS, "[UE %d] Received unexpected message %s\n", Mod_id, msg_name); - break; + /* Initialize UE NAS (EURECOM-NAS) */ + { + /* Initialize user interface (to exchange AT commands with user process) */ + { + if (user_api_initialize (NAS_PARSER_DEFAULT_USER_HOSTNAME, NAS_PARSER_DEFAULT_USER_PORT_NUMBER, NULL, + NULL) != RETURNok) { + LOG_E(NAS, "[UE] user interface initialization failed!"); + exit (EXIT_FAILURE); + } + user_fd = user_api_get_fd (); + itti_subscribe_event_fd (TASK_NAS_UE, user_fd); } - itti_free (ITTI_MSG_ORIGIN_ID(msg_p), msg_p); - msg_p = NULL; + /* Initialize NAS user */ + nas_user_initialize (&user_api_emm_callback, &user_api_esm_callback, FIRMWARE_VERSION); + } + + while(1) { + // Wait for a message or an event + itti_receive_msg (TASK_NAS_UE, &msg_p); + + if (msg_p != NULL) { + msg_name = ITTI_MSG_NAME (msg_p); + instance = ITTI_MSG_INSTANCE (msg_p); + Mod_id = instance - NB_eNB_INST; + + switch (ITTI_MSG_ID(msg_p)) { + case INITIALIZE_MESSAGE: + LOG_I(NAS, "[UE %d] Received %s\n", Mod_id, msg_name); + #if defined(NAS_UE_AUTOSTART) + #endif + break; + + case TERMINATE_MESSAGE: + itti_exit_task (); + break; + + case MESSAGE_TEST: + LOG_I(NAS, "[UE %d] Received %s\n", Mod_id, msg_name); + break; + + case NAS_DOWNLINK_DATA_IND: + LOG_I(NAS, "[UE %d] Received %s: UEid %u, length %u\n", Mod_id, msg_name, + NAS_DOWNLINK_DATA_IND (msg_p).UEid, NAS_DOWNLINK_DATA_IND (msg_p).nasMsg.length); + break; + + default: + LOG_E(NAS, "[UE %d] Received unexpected message %s\n", Mod_id, msg_name); + break; + } + + itti_free (ITTI_MSG_ORIGIN_ID(msg_p), msg_p); + msg_p = NULL; + } + + nb_events = itti_get_events(TASK_NAS_UE, &events); + if ((nb_events > 0) && (events != NULL)) { + if (nas_ue_process_events(events, nb_events, Mod_id) == TRUE) { + LOG_E(NAS, "[UE %d] Received exit loop\n", Mod_id); + } + } } } #endif -- GitLab