Serial communication. Sending DTR in the right way?
Question: I'm dealing with a
[gm29](http://www.icpdas.com/products/GSM_GPRS/wireless/gm29.htm) by Sony
Ericsson.

The
[datasheet](http://www.icpdas.com/download/wireless/gsm/gm29/gm29_tech%20description_r1b.pdf)
says that plugging the power is not sufficient to switch on the modem. It
says:

  * activate the RS232 control line DTR, high for > 0.2s.

I'm writing some tests in python, but:

    
    
    #!/usr/bin/env python                                                                                         
    
    import serial
    from time import sleep
    
    socket = serial.Serial('/dev/ttyS0',
                           baudrate=9600,
                           bytesize=serial.EIGHTBITS,
                           parity=serial.PARITY_NONE,
                           stopbits=serial.STOPBITS_ONE,
                           timeout=1,
                           xonxoff=0,
                           rtscts=0
                           )
    socket.setDTR(True)
    sleep(3)
    socket.setDTR(False)
    try:
        while True:
            socket.write('AT'+chr(13));
            sleep(1)
            print "Reading"
            print socket.readlines()
    except:
        socket.close()
    

does not works... I there a way to get DTR high in other ways? Let's say
minicom or some other stuff? Or, easily, am I missing something?

Thanks in advance.

* * *

Ok, that was driving me mad. The clue is that the power supplier was "broken",
or better, it works good testing with a tester, but plugging on the modem some
wires moves and does not carry voltage...

Thanks anyway for the answer, marked as correct 'couse it was :D


Answer: There are several things that occur to me here.

1) the spec says that DTR is active low, so you may need to swap the `true`
and `false` values to `setDTR()`, depending on who is confused here.

2) You are setting `DTR` to false after you wake the modem. This tells the
modem to go offline, and ignore all input till it goes `true` again. Try the
following:

    
    
    import serial
    from time import sleep
    
    conn = serial.Serial('/dev/ttyS0',
                         baudrate=9600,
                         bytesize=serial.EIGHTBITS,
                         parity=serial.PARITY_NONE,
                         stopbits=serial.STOPBITS_ONE,
                         timeout=1,
                         xonxoff=0,
                         rtscts=0
                         )
    # Wake Modem
    conn.setDTR(True)
    sleep(3)
    conn.setDTR(False)
    
    sleep(5)
    
    # Start talking
    conn.setDTR(True)
    try:
        while True:
            conn.write('AT'+chr(13));
            print conn.readline() # readlines() will probably never return.
    finally:
        conn.close()
    

3) `socket` is probably a bad name for your serial connection.

