# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more # * contributor license agreements. See the NOTICE file distributed with # * this work for additional information regarding copyright ownership. # * The OpenAirInterface Software Alliance licenses this file to You under # * the OAI Public License, Version 1.1 (the "License"); you may not use this file # * except in compliance with the License. # * You may obtain a copy of the License at # * # * http://www.openairinterface.org/?page_id=698 # * # * Unless required by applicable law or agreed to in writing, software # * distributed under the License is distributed on an "AS IS" BASIS, # * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # * See the License for the specific language governing permissions and # * limitations under the License. # *------------------------------------------------------------------------------- # * For more information about the OpenAirInterface (OAI) Software Alliance: # * contact@openairinterface.org # */ #--------------------------------------------------------------------- # Python for CI of OAI-eNB + COTS-UE # # Required Python Version # Python 3.x # # Required Python Package # pexpect #--------------------------------------------------------------------- #to use isfile import os import sys #to use logging.info() import logging #to create a SSH object locally in the methods import sshconnection #time.sleep import time #to load cots_ue dictionary import yaml class CotsUe: def __init__(self,ADBIPAddr,ADBUserName,ADBPassWord): self.cots_id = '' #cots id from yaml oppo, s10 etc... self.ADBIPAddr = ADBIPAddr self.ADBUserName = ADBUserName self.ADBPassWord = ADBPassWord self.cots_run_mode = '' #on of off to toggle airplane mode on/off self.__cots_cde_dict_file = 'cots_ue_ctl.yaml' self.__SetAirplaneRetry = 3 #-----------------$ #PUBLIC Methods$ #-----------------$ def Check_Airplane(self): mySSH = sshconnection.SSHConnection() mySSH.open(self.ADBIPAddr, self.ADBUserName, self.ADBPassWord) status=mySSH.cde_check_value('adb shell settings get global airplane_mode_on ', ['0','1'],5) mySSH.close() return status #simply check if the device id exists in the dictionary #returns true if it exists, false otherwise def Check_Exists(self,target_id): #load cots commands dictionary if (os.path.isfile(self.__cots_cde_dict_file)): yaml_file=self.__cots_cde_dict_file elif (os.path.isfile('ci-scripts/'+self.__cots_cde_dict_file)): yaml_file='ci-scripts/'+self.__cots_cde_dict_file else: logging.error("COTS UE dictionary yaml file cannot be found") sys.exit("COTS UE dictionary yaml file cannot be found") #load cots commands dictionary with open(yaml_file,'r') as file: cots_ue_ctl = yaml.load(file,Loader=yaml.FullLoader) #check if ue id is in the dictionary if target_id in cots_ue_ctl: return True else: return False def Set_Airplane(self, target_id, target_state_str): #loading cots commands dictionary if (os.path.isfile(self.__cots_cde_dict_file)): yaml_file=self.__cots_cde_dict_file elif (os.path.isfile('ci-scripts/'+self.__cots_cde_dict_file)): yaml_file='ci-scripts/'+self.__cots_cde_dict_file else: logging.error("COTS UE dictionary yaml file cannot be found") sys.exit("COTS UE dictionary yaml file cannot be found") #load cots commands dictionary with open(yaml_file,'r') as file: cots_ue_ctl = yaml.load(file,Loader=yaml.FullLoader) #check if ue id is in the dictionary if target_id in cots_ue_ctl: mySSH = sshconnection.SSHConnection() mySSH.open(self.ADBIPAddr, self.ADBUserName, self.ADBPassWord) logging.info(str(self.ADBIPAddr)+' '+str(self.ADBUserName)+' '+str(self.ADBPassWord)) mySSH.command('adb start-server','\$',5) mySSH.command('adb devices','\$',5) logging.info("Toggling COTS UE Airplane mode to : "+target_state_str) #get current state current_state = self.Check_Airplane() if target_state_str.lower()=="on": target_state=1 else: target_state=0 if current_state != target_state: #toggle state retry = 0 while (current_state!=target_state) and (retry < self.__SetAirplaneRetry): #loop over the command list from dictionary for the selected ue, to switch to required state for i in range (0,len(cots_ue_ctl[target_id])): mySSH.command(cots_ue_ctl[target_id][i], '\$', 5) time.sleep(1) current_state = self.Check_Airplane() retry+=1 #could not toggle despite the retry if current_state != target_state: logging.error("ATTENTION : Could not toggle to : "+target_state_str) logging.error("Current state is : "+ str(current_state)) else: logging.info("Airplane mode is already "+ target_state_str) mySSH.command('adb kill-server','\$',5) mySSH.close() #ue id is NOT in the dictionary else: logging.error("COTS UE Id from XML could not be found in UE YAML dictionary " + self.__cots_cde_dict_file) sys.exit("COTS UE Id from XML could not be found in UE YAML dictionary " + self.__cots_cde_dict_file)