Changeset - bfa48fec6da4
[Not reviewed]
new-reader
0 1 0
Hasan Yavuz Ă–ZDERYA - 10 years ago 2016-05-29 17:19:04
hy@ozderya.net
added pseudo sender for framed reader
1 file changed with 31 insertions and 1 deletions:
0 comments (0 inline, 0 general)
misc/pseudo_device.py
Show inline comments
 
@@ -26,65 +26,95 @@
 

	
 
import os, pty, time, struct, math
 

	
 
def ascii_test(port):
 
    """Put ASCII test data through pseudo terminal."""
 
    print("\n")
 
    nc = 4 # number of channels
 
    for i in range(0, 1000):
 
        data = []
 
        for ci in range(0, nc):
 
            data.append(i*(ci+1))
 
        data = ",".join([str(num) for num in data])
 
        print("<< " + data, end="\r")
 
        os.write(port, bytes(data + "\r\n", 'ASCII'))
 
        time.sleep(0.1)
 

	
 
def float_test(port):
 
    """Put 32-bit float test data through pseudo terminal"""
 
    for i in range(0, 1000):
 
        f = float(i)/3.0
 
        data = struct.pack('f', f)
 
        os.write(port, data)
 
        import binascii
 
        time.sleep(0.1)
 

	
 
def float_sine(port):
 
    """Puts 2 channel sine and cosine wafeform through pseudo terminal
 
    continuously."""
 
    i = 0
 
    period = 200
 
    while True:
 
        sin = math.sin(2 * math.pi * i / period)
 
        # cos = math.sin(2 * math.pi * (i / period + 1 / 4))
 
        data = struct.pack('ff', sin, -sin)
 
        os.write(port, data)
 
        i = (i + 1) % period
 
        time.sleep(0.1)
 

	
 
def uint32_test(port, little):
 
    """Puts 32 bit unsigned integer data through pseudo terminal"""
 
    i = 0
 
    maxi = 200
 
    while True:
 
        data = struct.pack('>I', i)
 
        os.write(port, data)
 
        time.sleep(0.05)
 
        i = i+1 if i <= maxi else 0
 

	
 
def frame_test(port, fixed_size=False, hasChecksum=True):
 
    """Sends binary data in framed format."""
 
    SYNCWORD = [0xAA, 0xBB]
 
    NUMSAMPLES = 10
 
    SIZE = NUMSAMPLES * 4 # integer
 
    if fixed_size:
 
        HEADER = bytes(SYNCWORD)
 
    else:
 
        HEADER = bytes(SYNCWORD + [SIZE])
 
    i = 0
 
    checksum = 0
 
    bytesent = 0
 
    while True:
 
        if i > 100: i = 0
 
        if bytesent == 0: # beginning of a frame?
 
            os.write(port, HEADER)
 
        os.write(port, struct.pack('<I', i))
 
        bytesent += 4
 
        checksum += i
 
        i += 1
 
        if bytesent == SIZE: # end of a frame
 
            if hasChecksum:
 
                data = struct.pack('<I', checksum)[:1]
 
                os.write(port, data)
 
            checksum = 0
 
            bytesent = 0
 
        time.sleep(0.1)
 

	
 
def run():
 
    # create the pseudo terminal
 
    master, slave = pty.openpty()
 

	
 
    master_name = os.ttyname(master)
 
    slave_name = os.ttyname(slave)
 
    print("Master terminal: {}\nSlave terminal: {}".format(master_name, slave_name))
 

	
 
    try:
 
        float_sine(master)
 
        # float_sine(master)
 
        frame_test(master)
 
        # ascii_test(master)
 
    finally:
 
        # close the pseudo terminal files
 
        os.close(master)
 
        os.close(slave)
 

	
 
if __name__=="__main__":
 
    run()
0 comments (0 inline, 0 general)