Ejemplo n.º 1
0
def sendSMS(NUMBER, SMSText):
	TIMEOUT_CMD = 50
	Helper.writeLog('Starting sendSMS\r\n')
	
	res = Helper.sendCmd('AT+CMGF', '1', TIMEOUT_CMD) # select text format type
	Helper.writeLog('Finished AT+CMGF\r\n')
	
	res = Helper.sendCmd('AT+CNMI', '2,1', TIMEOUT_CMD) # alarm indicators
	Helper.writeLog('Finished AT+CNMI\r\n')
	
	res = Helper.sendCmd('AT+CMGS', NUMBER, TIMEOUT_CMD) # send the message without storing it
	Helper.writeLog('Finished AT+CMGS\r\n')
	
	if (res.find('>') == -1):
		return -1
	else:
		res = MDM.send(SMSText, 0)
		Helper.writeLog('Finished sending SMSText\r\n')
		
		res = MDM.sendbyte(0x1a, 0)
		Helper.writeLog('Finished CTRL+Z\r\n')
		
		for i in range(6):
			res=MDM.read()
			if(res.find("OK")!=-1):
				Helper.writeLog('Found and returning\r\n')
				return 1
			else:
				MOD.sleep(300)
		
		Helper.writeLog('REturning -1\r\n')
		return -1
Ejemplo n.º 2
0
def send_CM(inSTR,connId,timeOut):
    # This function sends a string while in Command Mode
    #   Arguments:
    #   inSTR: String to send
    #   connId: Connection #
    #   timeOut: Amount of time alotted to send
    #
    #   Returns:
    #    0: Pass
    #    1: String argument empty
    #   -1: Exception
    #   -2: Timeout
    
    if (len(inSTR)==0):
        return 1

    try:

        res = MDM.send('AT#SSEND=' + str(connId) + '\r\n', 0)   

        #Start timeout counter        
        timerA = timers.timer(0)
        timerA.start(timeOut)

        prompt = '\r\n> '

        #Start looking for '\r\n>'
        while(1):

            properties.CMD_BUFFER = properties.CMD_BUFFER + MDM.receive(1)      
            pos1 = properties.CMD_BUFFER.find(prompt)   #look for prompt characters
            if (pos1>=0):
                properties.CMD_BUFFER = properties.CMD_BUFFER[0:pos1] + properties.CMD_BUFFER[pos1+len(prompt):len(properties.CMD_BUFFER)]
                res = MDM.send(inSTR, 0)
                res = MDM.sendbyte(0x1a, 0)       
                
                tempread = ''
                res = ''
                while(1):
                    tempread = MDM.read()
                    if (tempread != ''):
                        res = res + tempread

                    if (res.find('OK')>=0):
                        return (0)    #Pass
                    
                    if timerA.isexpired():
                        return (-2)    #Expired, can't find OK response

            if timerA.isexpired():
                return (-2)    #Expired, no prompt found

    except:
        printException("send_CM(" + inSTR + "," + connId + "," + timeOut + ")")
        JANUS_SER.sendUART("Send CM Exception. \r\n")  

    #Would return with something else before this if it passes without exception
    return (-1) 
Ejemplo n.º 3
0
def sendAtCmd(theCommand, theTerminator, timeOut):
# This function sends an AT command to the MDM interface

    # Input Parameter Definitions
    #   theCommand: The AT command to send to MDM interface
    #   theTerminator: string or character at the end of AT Command 
    #   timeOut: number of seconds command could take to respond

    try:

        rtnList = [-1,-1]    #[return status,return data]
        # return status:
        #   -2:    Timeout
        #   -1:    Exception occurred
        #    0:    No errors occurred, no return data
        #    1:    No errors occurred, return data


        #Clear input buffer
        rtnList[1] = 'junk'
        while(rtnList[1] != ''):
            rtnList[1] = mySER.read()

        print 'Sending AT Command: ' + theCommand + "\r\n"
        rtnList[1] = mySER.send(theCommand,2)
        rtnList[1] = mySER.sendbyte(0x0d,2)

        while True:
            #Wait for AT command response
            rtnList = mdmResponse(theTerminator, timeOut)
            if (rtnList[0] == -1) or (rtnList[0] == -2) : return rtnList
            elif rtnList[0] == 1:
                #what happens if res doesn't return data?
                #Did AT command respond without error?
                pos1 = rtnList[1].rfind('ERROR',0,len(rtnList[1]))    
                pos2 = rtnList[1].rfind(theTerminator,0,len(rtnList[1]))
                if ((pos1 != -1) or (pos2 != -1)) :
                    rtnList = parseResponse(rtnList[1])
                    if rtnList[0] == -1: return rtnList
                    elif rtnList[0] == 1:
                        #what happens if res doesn't return data?
                        rtnList[0] = 1
                        break

    except:
        print sys.exc_info()
        rtnList[0] = -1

    print rtnList[1]

    return rtnList
Ejemplo n.º 4
0
def exitDataMode():

    rtnList = [-1,-1]    #[return status,return data]
    # return status:
    #   -1:    Exception occurred
    #    0:    No errors occurred, no return data
    #    1:    No errors occurred, return data

    try:
        #Exit data mode

        ##Lookup the Escape Sequence Guard Time
        ## Future Use
        
        # Delay to meet Escape Sequence Guard Time
        ## Remove Hard Coded Escape Sequence Guard Time
        time.sleep(1)
        
        #Start timeout counter 
        start = time.time() 

        ##Lookup the Escape Sequence
        ## Future Use
        
        #Sending +++
        ## Remove Hard Coded Escape Sequence
        rtnList[1] = mySER.send('+', 10)
        rtnList[1] = mySER.send('+', 10)
        rtnList[1] = mySER.send('+', 10)        

        #Wait for response
        rtnList[1] = ''
        while rtnList[1].find("OK") <= -1:
            rtnList += mySER.read()
            if (time.time() - start) > 20:
                rtnList[0] = -2
                break

        if ((rtnList[0] != -2) and len(rtnList[1] > 0)):
            rtnList[0] = 0

    except:
        print sys.exc_info()
        rtnList[0] = -1

    print rtnList[1]

    return rtnList
Ejemplo n.º 5
0
def sendAT(request, response, timeout = 2):
    MDM.send(request + '\r', 2)
    result = -2
    data = ''
    timer = MOD.secCounter() + timeout
    while(MOD.secCounter() < timer):
        rcv = MDM.read()
        if(len(rcv) > 0):
            data = data + rcv
            if(data.find(response) != -1):
                result = 0
                break
            if(data.find('ERROR') != -1):
                result = -1
                break
    return (result, data)
Ejemplo n.º 6
0
def sendAT(request, response="OK", timeout=3):
    MDM.send(request + "\r", 2)
    result = -2
    data = ""
    timer = MOD.secCounter() + timeout
    while MOD.secCounter() < timer:
        rcv = MDM.read()
        if len(rcv) > 0:
            data = data + rcv
            if data.find(response) != -1:
                result = 0
                break
            if data.find("ERROR") != -1:
                result = -1
                break
    return (result, data)
Ejemplo n.º 7
0
 def receiveMDM(self):
     data = ''
     size = int(self.config.get('TCP_MAX_LENGTH'))
     while(1):
         rcv = MDM.read()
         if(len(rcv) > 0):
             self.buffer = self.buffer + rcv
             if(len(self.buffer) > size):
                 break
         else:
             break
     if(len(self.buffer) > 0):
         data = self.getBuffer(size)
         if(data.find('NO CARRIER') != -1):
             raise Exception, '"NO CARRIER" on socket #1'
         self.debug.send('Data received from socket #1 (data): ' + str(len(data)) + ' bytes')
     return data
Ejemplo n.º 8
0
 def receiveMDM(self):
     data = ''
     size = int(self.config.get('TCP_MAX_LENGTH'))
     while(1):
         rcv = MDM.read()
         if(len(rcv) > 0):
             self.buffer = self.buffer + rcv
             if(len(self.buffer) > size):
                 break
         else:
             break
     if(len(self.buffer) > 0):
         data = self.getBuffer(size)
         if(data.find('NO CARRIER') != -1):
             raise Exception, '"NO CARRIER" on socket #1'
         self.debug.send('Data received from socket #1 (data): ' + str(len(data)) + ' bytes')
     return data
Ejemplo n.º 9
0
def sendSMS(NUMBER, SMSText):
	TIMEOUT_CMD = 50
	res = scmd.sendCmd('AT+CMGF', '1', TIMEOUT_CMD) # select text format type
	res = scmd.sendCmd('AT+CNMI', '2,1', TIMEOUT_CMD) # alarm indicators
	res = scmd.sendCmd('AT+CSMP', '17,167,0,0', TIMEOUT_CMD) # select message parameter
	res = scmd.sendCmd('AT+CMGS', NUMBER, TIMEOUT_CMD) # send the message without storing it
	if (res.find('>') == -1):
		return -1
	else:
		res = MDM.send(SMSText, 0)
		res = MDM.sendbyte(0x1a, 0)
		for i in range(6):
			res=MDM.read()
			if(res.find("OK")!=-1):
				return 1
			else:
				MOD.sleep(300)
		return -1
Ejemplo n.º 10
0
def mdmResponse(theTerminator, timeOut):
# This function waits for AT Command response and handles errors and ignores unsolicited responses

# Input Parameter Definitions
#   theTerminator: string or character at the end of a received string which indicates end of a response
#   timeOut: number of seconds command could take to respond

    try:

        rtnList = [-1,-1]    #[return status,return data]
        # return status:
        #   -2:    Timeout
        #   -1:    Exception occurred
        #    0:    No errors occurred, no return data
        #    1:    No errors occurred, return data

        print 'Waiting for AT Command Response' + "\r\n"

        #Start timeout counter 
        start = time.time()       

        #Wait for response
        rtnList[1] = ''
        while ((rtnList[1].find(theTerminator)<=-1) and (rtnList[1].find("ERROR")<=-1)):
            #MOD.watchdogReset()
            rtnList[1] += mySER.read()

            pass            
            if (time.time() - start) > timeOut:
                rtnList[0] = -2
                print "AT command timed out" + "\r\n"
                return rtnList
                        
        rtnList[0] = 1

    except:
        print sys.exc_info()
        rtnList[0] = -1

    return rtnList
Ejemplo n.º 11
0
def sendAT(request, response, timeout=2, interface=1):
    if (interface == 1):
        MDM.send(request + '\r', 2)
    else:
        MDM2.send(request + '\r', 2)
    result = -2
    data = ''
    timer = MOD.secCounter() + timeout
    while (MOD.secCounter() < timer):
        if (interface == 1):
            rcv = MDM.read()
        else:
            rcv = MDM2.read()
        if (len(rcv) > 0):
            data = data + rcv
            if (data.find(response) != -1):
                result = 0
                break
            if (data.find('ERROR') != -1):
                result = -1
                break
    return (result, data)
Ejemplo n.º 12
0
def enableAndReb(fileToExec, Number, MessageIndex):
    #deleteSMS(MessageIndex)
    SER.send('In Save file'+fileToExec+'\r\n')
    SER.send('After renaming file'+fileToExec+'\r\n')
    NUMBER = Number
    SMSText = "I'm going to reboot, enabling the following file: "+fileToExec
    SER.send("enableAndReb: trying to enable and reboot the module\r\n")
    fileName = '"' + fileToExec + '"'
    res=MDM.read()
    res = Helper.sendCmd('AT#ESCRIPT',fileName,0)
    res=MDM.receive(30)
    
    if res.find('OK') != -1:
        MOD.sleep(200)
        text = "script qualified :" + fileName + '\r\n'
        SER.send(text+"\r\n")
        res= sendSMS(NUMBER,SMSText)
        MOD.sleep(200)
        res= MDM.send('AT#REBOOT\r',0)
        MOD.sleep(200)
        SER.send('rebooting\r\n')
        return 1
    else:
        return -1
Ejemplo n.º 13
0
def enableAndReb(fileToExec, Number, MessageIndex):
    #deleteSMS(MessageIndex)
    SER.send('In Save file' + fileToExec + '\r\n')
    SER.send('After renaming file' + fileToExec + '\r\n')
    NUMBER = Number
    SMSText = "I'm going to reboot, enabling the following file: " + fileToExec
    SER.send("enableAndReb: trying to enable and reboot the module\r\n")
    fileName = '"' + fileToExec + '"'
    res = MDM.read()
    res = Helper.sendCmd('AT#ESCRIPT', fileName, 0)
    res = MDM.receive(30)

    if res.find('OK') != -1:
        MOD.sleep(200)
        text = "script qualified :" + fileName + '\r\n'
        SER.send(text + "\r\n")
        res = sendSMS(NUMBER, SMSText)
        MOD.sleep(200)
        res = MDM.send('AT#REBOOT\r', 0)
        MOD.sleep(200)
        SER.send('rebooting\r\n')
        return 1
    else:
        return -1
Ejemplo n.º 14
0
def GetData(FILE_NAME):

	data = ' '
	timer = MOD.secCounter()
	timeout = MOD.secCounter() + TIMEOUT_DWNLD
	datatmp = ''
	
	while ((datatmp.find(HTML_UC_END) == -1) and (datatmp.find(HTML_LC_END) == -1) and (timer > 0) ):
		data = data + datatmp
		datatmp = MDM.receive(50)
		timer = timeout - MOD.secCounter()
	if ((datatmp.find(HTML_UC_END) != -1) or (datatmp.find(HTML_LC_END) != -1)):
		data = data + datatmp
		SER.send(data)
		SER.send('\r')
	else:
		SER.send('No File found in data')
		SER.send('\r')
		data = -1
		return data

	uindx = data.find('\r\n')
	SER.send(data[:uindx])
	SER.send('\r')
	lindx = data.find('<ftpuser>')
	uindx = data.find('</ftpuser>')
	ftpuser = data[lindx+9:uindx]
	lindx = data.find('<ftppass>')
	uindx = data.find('</ftppass>')
	ftppass = data[lindx+9:uindx]
	lindx = data.find('<md5>')
	uindx = data.find('</md5>')
	md5sent = data[lindx+5:uindx]
	res = MDM.send('+++\r',0)
	MOD.sleep(20)
	res = MDM.receive(TIMEOUT_CONNECT)
	SER.send('Connection Closed Response:')
	SER.send(res)
	SER.send('\r')
	res = MDM.send('AT#SH\r',0)
	res = MDM.receive(TIMEOUT_CONNECT)
	
	res = ' '
	
	while (res.find('OK')== -1):
		res = MDM.send('AT#FTPOPEN="',0)
		res = MDM.send(FTP_ADDR,0)
		res = MDM.send('","',0)
		res = MDM.send(ftpuser,0)
		res = MDM.send('","',0)
		res = MDM.send(ftppass,0)
		res = MDM.send('",0\r',0)
		SER.send('Opening FTP connection\r')
		SER.send('User: '******' Password: '******'\r')
		res = MDM.receive(10*TIMEOUT_CONNECT)
		SER.send('FTP open result: ')
		SER.send(res)
		SER.send('\r')
		if (res.find('Already connected') >= 0):
			res = 'OK'
	MDM.send('AT#FTPTYPE=0\r',0)
	MDM.receive(TIMEOUT_MINIMUM)
	MDM.send('AT#FTPGET="',0)
	MDM.send(FILE_NAME,0)
	MDM.send('"\r',0)
	SER.send('Requesting File: ')
	SER.send(FILE_NAME)
	SER.send('\r')
	timer = MOD.secCounter()
	timeout = timer + 90 #secondi
	#Retrieve and save data function?
	ftpdata = ''
	while((ftpdata.find('NO CARRIER') == -1)  and (timer < timeout)):
		ftpdata = ftpdata + MDM.read()
		timer = MOD.secCounter()
		
	if(len(ftpdata) == 0):
		print "ERROR: data to save is empty \r"
		SER.send('"ERROR: data to save is empty\r"')
		return -1

	startIndex = 0
	endIndex = len(ftpdata)
	if(ftpdata.find('CONNECT\r\n') != -1):
		startIndex = ftpdata.find('CONNECT\r\n') + len ('CONNECT\r\n')
	if(ftpdata.find('NO CARRIER') != -1):
		endIndex = ftpdata.find('\r\nNO CARRIER')
	ftpdata= ftpdata[startIndex: endIndex]	
	SER.send('Checking for MD5\r')
	SER.send('MD5 sent:')
	SER.send(md5sent)
	SER.send('\r')
	md5calc = md5.new(ftpdata).digest()
	hexmd5 = md5ToHex(md5calc)
	SER.send('MD5 calc:')
	SER.send(hexmd5)
	SER.send('\r')
	if(hexmd5 != md5sent):
		SER.send('MD5 does not match')
		SER.send('\r')
		data = -1
		return data
	
	return ftpdata
Ejemplo n.º 15
0
def transferFTP(transferType, fileName, mode, expectedFileSize):
    SER.send('transferFTP\r\n')
    TIMEOUT_CMD = 50
    TIMEOUT_CMD_FTP = 100
    FTP_PARAMETER = '"ftp.alwaysdata.com", "USERNAME", "PASSWORD",1'
    fileName = '"' + fileName + '"'
    numCheck = 3
    res = Helper.iterateCmd('AT#FTPCLOSE', '', TIMEOUT_CMD, numCheck)
    if (res == -1):
        SER.send("ERROR: setting AT#FTPCLOSE \r\n")
        return -1

    res = Helper.iterateCmd('AT#FTPOPEN', FTP_PARAMETER, TIMEOUT_CMD_FTP,
                            numCheck)
    if (res == -1):
        textLog = "ERROR: setting AT#FTPOPEN = " + FTP_PARAMETER + "\r"
        SER.send(textLog)
        return -1

    res = Helper.sendCmd('AT#FTPTYPE', '0', TIMEOUT_CMD)

    if (transferType.find('GET') != -1):
        SER.send('ftp get\r\n')
        data = ''
        res = Helper.sendCmd('AT#FTPGET', fileName, 0)
        SER.send('data  found\r\n')
        SER.send(data)

        dataList = []

        timer = MOD.secCounter()
        timeout = timer + 100  #secondi
        temp = ''

        if mode == 1:
            SER.send('In Save file' + fileName + '\r\n')

        fileSize = 0
        while (((temp.find('NO CARRIER') == -1) or (MDM.getDCD() != 0))):
            SER.send('temp is ' + temp + '\r\n')
            temp = MDM.read()

            if len(temp) != 0:
                dataList.append(temp)

                if mode == 1:
                    fileSize = fileSize + len(temp)

                    timer = MOD.secCounter()

        if mode != 1:
            SER.send('Length of data list: ' + str(len(dataList)) + '\r\n')
            data = ''.join(dataList)
            SER.send('Length of data: ' + str(len(data)) + '\r\n')
            SER.send('fuori while\r\n')
            if (len(data) == 0):
                SER.send("ERROR: data to save is empty \r\n")
                return -1

            startIndex = 0
            endIndex = len(data)
            if (data.find('CONNECT\r\n') != -1):
                startIndex = data.find('CONNECT\r\n') + len('CONNECT\r\n')
                endIndex = len(data) - 12

                data = data[startIndex:endIndex]

                SER.send('Start Index: ' + str(startIndex) + '\r\n')
                SER.send('End Index: ' + str(endIndex) + '\r\n')
                SER.send('Length of data: ' + str(len(data)) + '\r\n')
                SER.send('data fron ftp server:\r\n')
                return data

        else:
            SER.send('Sending command AT#WSCRIPT\r\n')
            SER.send('File size calculated = ' + str(fileSize) + '\r\n')

            fileSize = fileSize - 25

            if fileSize == int(expectedFileSize):
                writeScript(fileName, dataList, 123, int(expectedFileSize))
                return 1

    return -1  #inutile
Ejemplo n.º 16
0
def transferFTP(transferType, fileName, mode, expectedFileSize):  
	SER.send('transferFTP\r\n')
	TIMEOUT_CMD = 50
	TIMEOUT_CMD_FTP =100
	FTP_PARAMETER = '"ftp.alwaysdata.com", "USERNAME", "PASSWORD",1'
	fileName = '"' + fileName + '"'
	numCheck = 3
	res = Helper.iterateCmd('AT#FTPCLOSE', '', TIMEOUT_CMD, numCheck)
	if(res == -1):
		SER.send("ERROR: setting AT#FTPCLOSE \r\n")
		return -1
	
	res = Helper.iterateCmd('AT#FTPOPEN', FTP_PARAMETER, TIMEOUT_CMD_FTP, numCheck)
	if(res == -1):
		textLog = "ERROR: setting AT#FTPOPEN = " + FTP_PARAMETER + "\r"
		SER.send(textLog)
		return -1
	
	res = Helper.sendCmd('AT#FTPTYPE', '0', TIMEOUT_CMD)
	
	if(transferType.find('GET') != -1):
		SER.send('ftp get\r\n')
		data = ''
		res = Helper.sendCmd('AT#FTPGET',fileName,0)
		SER.send('data  found\r\n')
		SER.send(data)
        
		dataList = []
		
		timer = MOD.secCounter()
		timeout = timer + 100 #secondi
		temp = ''
        
		if mode == 1:
			SER.send('In Save file'+fileName+'\r\n')

		fileSize = 0
		while(((temp.find('NO CARRIER') == -1) or (MDM.getDCD() != 0))):
			SER.send('temp is '+temp+'\r\n')
			temp = MDM.read()

			if len(temp) != 0 :
				dataList.append(temp)

				if mode == 1:
					fileSize = fileSize + len(temp)

					timer = MOD.secCounter()
        
		if mode != 1:
			SER.send('Length of data list: '+str(len(dataList))+'\r\n')                
			data = ''.join(dataList)
			SER.send('Length of data: '+str(len(data))+'\r\n')        
			SER.send('fuori while\r\n')
			if(len(data) == 0):
				SER.send("ERROR: data to save is empty \r\n")
				return -1
	
			startIndex = 0
			endIndex = len(data)
			if(data.find('CONNECT\r\n') != -1):
				startIndex = data.find('CONNECT\r\n') + len ('CONNECT\r\n')
				endIndex = len(data) - 12

				data= data[startIndex: endIndex]

				SER.send('Start Index: '+str(startIndex)+'\r\n')      
				SER.send('End Index: '+str(endIndex)+'\r\n')      
				SER.send('Length of data: '+str(len(data))+'\r\n')                
				SER.send('data fron ftp server:\r\n')
				return data
        
		else:
			SER.send('Sending command AT#WSCRIPT\r\n')
			SER.send('File size calculated = '+str(fileSize)+'\r\n')
			
			fileSize = fileSize - 25
			
			if fileSize == int(expectedFileSize) :
				writeScript(fileName,dataList,123,int(expectedFileSize))
				return 1
	
	return -1 #inutile
Ejemplo n.º 17
0
def main():

    try:

        # Set Global Watchdog timeout in Seconds
        MOD.watchdogEnable(300)    

        #######################################
        ## Initialization
        #######################################
        
        rtnList = [-1,-1]    #[return status,return data]
        # return status:
        #   -1:    Exception occurred
        #    0:    No errors occurred, no return data
        #    1:    No errors occurred, return data
        #    2:    Error occurred        

        #Initialize the serial interface @ 115200, we must do this or nothing comes out the serial port
        rtnList = mySER.init("115200",'8N1')
        if (rtnList[0] == -1):
            return


        mySER.sendUART("Beginning the serial bridge program. \r\n\r\n")        
        # Set Global Watchdog timeout in Seconds
        #MOD.watchdogEnable(300)


        #Get configuration from demo.conf file, transpose into new local myApp class
        myApp = conf.conf('/sys','demo.conf') 
        if myApp.CONF_STATUS != 0:
            mySER.sendUART("Demo configuration error: " + str(myApp.CONF_STATUS)) 
            return rtnList        

        
        mySER.sendUART("Configuration Loaded.\r\n")

        rtnList = myIO.init()
        if (rtnList[0] == -1) or (rtnList[0] == -2) or rtnList[1] == "ERROR": raise UserWarning        
                
        mySER.sendUART("\r\nInitializing Network Setup. \r\n")
        #Set Network specific settings, wait for SIM card to be ready
        rtnList = NETWORK.initNetwork(myApp.ENS)
        if (rtnList[0] == -1) or (rtnList[0] == -2): raise UserWarning

        #Initialize SOCKET communications
        rtnList = SOCKET.init('1',myApp.APN)
        if (rtnList[0] == -1) or (rtnList[0] == -2): raise UserWarning

        mySER.sendUART("Network Setup Initialized. \r\n\r\n")
        
        #Update Unit information
        rtnList = ATC.getUnitInfo()
        if (rtnList[0] == -1): raise UserWarning     

        # Loop forever, without this loop the script would run once and exit script mode.  On reboot or power-on the script would run once more
        while (1):

            MOD.watchdogReset()

            #######################################
            ## Registration
            #######################################            

            RegCheck = 0 #Initialize check
            DataCheck = 0 #Initialize Check

            #What is the signal strength?
            rtnList = ATC.sendAtCmd('AT+CSQ',ATC.properties.CMD_TERMINATOR,5)
            if (rtnList[0] == -1) or (rtnList[0] == -2): raise UserWarning
            mySER.sendUART("Signal Strength (AT+CSQ): " + rtnList[1]  + "\r\n")
            

            #Wait until module is registered to GSM Network            
            mySER.sendUART("Checking Modem Registration. \r\n")
            rtnList = NETWORK.isRegistered(180)  #Wait 180 seconds for module to obtain GSM registration
            if (rtnList[0] == -1) or (rtnList[0] == -2): raise UserWarning

            if (rtnList[0] == 0): #Registered successfully
                RegCheck = 1
                mySER.sendUART("Modem Registered. \r\n\r\n")            

            #Wait until module is ready for data          
            mySER.sendUART("Checking Data Availability. \r\n")
            rtnList = NETWORK.isDataAttached(myApp.CGMM, 180)   #Wait 180 seconds for module to obtain GSM registration
            if (rtnList[0] == -1) or (rtnList[0] == -2): raise UserWarning

            if (rtnList[0] == 0): #Registered successfully
                DataCheck = 1
                mySER.sendUART("Modem ready for data. \r\n\r\n")

            #check for exit prompt, let's use command EXITSCR
            rtnList = mySER.readUART()
            if (rtnList[1].find('EXITSCR') != -1):
                print '\r\nExit Command Found\r\n'
                return                

            #######################################
            ## Socket Connection
            #######################################
                         
            # Loop while we're registered/ready
            while (RegCheck == 1 and DataCheck == 1):

                #check for exit prompt, let's use command EXITSCR
                rtnList = mySER.readUART()
                if (rtnList[1].find('EXITSCR') != -1):
                    print '\r\nExit Command Found\r\n'
                    return            

                rtnList = NETWORK.isRegistered(10)  #Fast reg check
                if (rtnList[0] == -1) or (rtnList[0] == -2): #unavailable, drill down discretely and show the status
                    RegCheck = 0
                    rtnList = ATC.sendAtCmd('AT+CREG?',ATC.properties.CMD_TERMINATOR,5)
                    mySER.sendUART("Registration Unavailable, Status: " + rtnList[1]  + "\r\n")
                    break #exit loop
                rtnList = NETWORK.isDataAttached(myApp.CGMM, 10) #Fast data check
                if (rtnList[0] == -1) or (rtnList[0] == -2): #unavailable, drill down discretely and show the status
                    DataCheck = 0
                    rtnList = ATC.sendAtCmd('AT+CGREG?',ATC.properties.CMD_TERMINATOR,5)
                    mySER.sendUART("Data Unavailable, Status: " + rtnList[1]  + "\r\n")
                    break #exit loop                


                #Open socket in online mode
                mySER.sendUART("Opening socket to server: " + myApp.IP + ":" + myApp.PORT + "\r\n")
                rtnList = SOCKET.openSocket(myApp.IP,myApp.PORT,1,myApp.USERNAME,myApp.PASSWORD,myApp.PROTOCOL,0)
                if (rtnList[0] == -1) or (rtnList[0] == -2): raise UserWarning

                #Check for open connection, this catches both online and command mode operations             
                if (rtnList[1] == "OK" or rtnList[1] == "CONNECT"): 
                     mySER.sendUART("Socket opened successfully.\r\n")   
                else:
                    mySER.sendUART("Connection failed to open, trying again. \r\n")
                                

                #Check for open socket
                DCD = MDM.getDCD()
                if (DCD == 1):
                    #Set DCD on USIF0
                    SER.setDCD(1)
                    #Forward CONNECT Message to Serial Port
                    mySER.sendUART('\r\nConnected to Server\r\n')
                    myIO.USER_LED('ON')

                    #######################################
                    ## Data exchange loop
                    #######################################

                    ##Loop while Socket connected. This loop operates on the notion that we are in online mode, so we are not using send_CM
                    while(1):

                        #Pet the watchdog
                        MOD.watchdogReset()

                        #Check for DCD active on MDM                        
                        DCD = MDM.getDCD()
                        if (DCD == 1):
                            #Outbound
                            #Get data from serial port, use function return
                            rtnList = mySER.readUART()
                            if (len(rtnList[1])!=0):
                                #Forward data to open socket if it's not empty and not the exit script command
                                
                                #check for exit prompt, let's use command EXITSCR
                                if (rtnList[1].find('EXITSCR') != -1): #exit found
                                    print '\r\nExit Command Found\r\n'
                                    print 'Exiting data mode\r\n'
                                    rtnList = SOCKET.exitDataMode()
                                    print 'Closing the socket\r\n'
                                    rtnList = SOCKET.closeSocket(1)
                                    return
                            
                                print rtnList[1] #Debug
                                res = MDM.send(rtnList[1],1)
                                
                            #Inbound
                            #Get data from open socket connection, straight MDM read
                            res = MDM.read()
                            if (len(res)!=0):
                                #Forward socket data to serial port
                                print res #Debug
                                mySER.sendUART(res)    

                        #When socket is closed exit loop via this path
                        #Will guarantee that '\r\nNO CARRIER\r\n' is sent every time
                        if (DCD == 0):
                            #Clear DCD on USIF0
                            SER.setDCD(0)
                            myIO.USER_LED('OFF')
                            #Get any remaining data from closed socket connection, straight MDM read
                            res = MDM.read()
                            if (len(res)!=0):
                                #Forward socket data to serial port
                                mySER.sendUART(res)   
                            break #exit loop to registration checks
                
                
    except UserWarning:
        print 'Controlled Script exit'

    except:
        print sys.exc_info()
        rtnList[0] = -1
        
    return