Kazuki Yamamoto / Mbed 2 deprecated uart_i2c_conv

Dependencies:   mbed

serial2i2c.py.txt

Committer:
k4zuki
Date:
2014-10-17
Revision:
38:9d12c615c8ea
Child:
76:fcbc456010e0

File content as of revision 38:9d12c615c8ea:

import serial
import argparse
import struct
import os.path
import binascii

# Table 3. ASCII commands supported by SC18IM700
# ASCII command Hex value Command function
# S 0x53 I2C-bus START
# P 0x50 I2C-bus STOP
# R 0x52 read SC18IM700 internal register
# W 0x57 write to SC18IM700 internal register
# I 0x49 read GPIO port
# O 0x4F write to GPIO port
# Z 0x5A power down

class serial2i2c(object):
    ser=0
    channel='0'
    address=0x80
    
    def __init__(self,port='com1',baud='115200'):
        self.ser=serial.Serial(port,baudrate=baud,timeout=1)
        
    def setChannel(self,channel=0):
        self.channel=channel
        self.ser.write("C"+str(self.channel)+"P")
        return (self.ser.readline().strip())
        pass
        
    def read(self,address,length=1):
        self.ser.write("S"+chr(address|0x01)+chr(length)+"P")
        return(self.ser.readline().strip())
        pass
        
    def write(self,address,data=0):
        data=self.convert_hex_to_ascii(data)
        length=len(data)
        format=">"+str(length)+"s"
        self.ser.write("S"+chr(address|0x00)+chr(length)\
                        +struct.pack(format,data)+"P")
#                        +">"+str(length)+"B"+chr(data)+"P")
        return(self.ser.readline().strip())
        pass
        
    def write_and_read(self,address,wdata=0,rlength=1):
        wdata=self.convert_hex_to_ascii(wdata)
        length=len(wdata)
        format=">"+str(length)+"s"
        self.ser.write("S"+chr(address|0x00)+chr(length)+struct.pack(format,wdata)\
                        +"S"+chr(address|0x01)+chr(rlength)\
                        +"P")
#                        +">"+str(length)+"B"+chr(wdata)+"P")
        return(self.ser.readline().strip())

    def start(self):
        self.ser.write("S")
        pass
        
    def stop(self):
        self.ser.write("P")
        pass
    
    def convert_hex_to_ascii(self,h):
        chars_in_reverse = []
        while h != 0x0:
            chars_in_reverse.append(chr(h & 0xFF))
            h = h >> 8
    
        chars_in_reverse.reverse()
        return ''.join(chars_in_reverse)

        
#    def send(self,data="Sx4hogeP"):
#        self.ser.write(data)
#        pass
        
        

class MyParser(object):
    def __init__(self):
        self.parser = argparse.ArgumentParser(description="hogeeee")
        self.parser.add_argument('--port','-p', help='number or name of serial port', default='com1')
#        self.parser.add_argument('--port','-p', help='number or name of serial port', default='/dev/ttyACM0')
#        self.parser.add_argument('--mon','-m', help='number or name of serial port', default='/dev/ttyACM0')
        self.parser.add_argument('--baud','-b', help='baudrate of serial port', default='115200')#460800
        self.args=self.parser.parse_args(namespace=self)        
      
if __name__=="__main__":
#    parser.print_help()
    parser=MyParser()
#    args=parser.parse_args()
#    print args
#    print args.port, args.baud
    
    port=parser.args.port # port number, different in OSes
    baud=parser.args.baud
    dev=serial2i2c(port,baud)
##    channel="C0P"
##    i2cw="S"+chr(0x80)+chr(0x04)+struct.pack(">4B",0xde,0xad,0xbe,0xaf)+"P"
##    i2crw="S"+chr(0x80)+chr(0x04)+struct.pack(">4B",0xde,0xad,0xbe,0xaf)+"S"+chr(0x81)+chr(0x04)+"P"
#    print channel,i2cw

#    raw_input("wait, press enter to set channel 0")
    raw_input("wait, press enter to transferring data")
    print dev.setChannel(0)
#    print dev.ser.write(channel)
#    print dev.ser.readline().strip()
#    raw_input("wait, press enter to set channel 1")
#    print dev.ser.write("C1P")
#    print dev.ser.readline().strip()

#    raw_input("wait, press enter to send write command")
    print dev.write(0x90,0xdeadbeaf)
##    ser.write(i2cw)
    print "%02X"%(int(dev.write_and_read(0x90,0xdeadbeaf,50).split(',')[0],16))
#    print dev.ser.readline().strip()

##    raw_input("wait, press enter to send repeated start command")
##    dev.ser.write(i2crw)
##    print dev.ser.readline()

##    raw_input("wait, press enter to send 'R' command")
##    ser.write('RP')
##    print dev.ser.readline()

##    raw_input("wait, press enter to send 'W' command")
##    ser.write('WP')
##    print dev.ser.readline()

##    raw_input("wait, press enter to send 'I' command")
##    ser.write('IP')
##    print dev.ser.readline()

##    raw_input("wait, press enter to send 'O' command")
##    ser.write('OP')
##    print dev.ser.readline()

##    raw_input("wait, press enter to send 'Z' command")
##    ser.write('ZP')
##    print dev.ser.readline()

##    raw_input("wait, press enter to send unknown command")
##    ser.write('XP')
##    print dev.ser.readline()

#    while(ser.inWaiting()>0):
#        print ser.readline()
#    dev.ser.close()