コード例 #1
0
def use_dummy_serial_port(printer:SerialDevice):
    # FIXME
    # not great, should be async!!!

    def delayed_string(result:Union[str,bytes]):
        # print ("delayed string {}".format(time.time()))
        time.sleep(random.uniform(0.05,0.5))
        # print ("delayed string {}".format(time.time()))
        return result

    printer._serial_port = "/dev/null"
    printer._serial = dummyserial.Serial(port=printer._serial_port,
        baudrate=printer._baud_rate,
        ds_responses={
            'N?[0-9]*(M105).*': lambda : b'ok T:%.2f /190.0 B:%.2f /24.0 @:0 B@:0\nok\n' % (random.uniform(170,195),random.uniform(20,35)),
            'N?[0-9]*M115.*': b'FIRMWARE_NAME:DUMMY\nok\n',
            'N?[0-9]*M114.*': lambda : b'X:%.2fY:%.2fZ:%.2fE:%.2f Count X: 2.00Y:3.00Z:4.00\nok\n' % (random.uniform(0,200), random.uniform(0,200), random.uniform(0,200), random.uniform(0,200)),   # position request
            'N?[0-9]*G.*': lambda : delayed_string(b'ok\n'),
            'N?[0-9]*M400.*': lambda : delayed_string(b'ok\nok\n'),
            'N?[0-9]*M207.*': lambda : delayed_string(b'ok\nok\n'),
            'N?[0-9]*M208.*': lambda : delayed_string(b'ok\nok\n'),
            'N?[0-9]*M10[0-46-9].*': lambda : delayed_string(b'ok\nok\n'),
            "N?[0-9]*(M[0-9]+).*" : lambda : delayed_string(b'ok\nok\n'), # catch all M codes
            '^XXX': b'!!\n',
            })
    if not printer._serial.is_open:
        printer._serial.open()
    printer.connection_state = ConnectionState.connected
コード例 #2
0
ファイル: mpc200.py プロジェクト: outofculture/acq4
 def __init__(self, port):
     port = SerialDevice.normalizePortName(port)
     if port in SutterMPC200.DEVICES:
         raise Exception("The port %s is already accessed by another instance of this class. Use getDevice(port) instead.")
     SutterMPC200.DEVICES[port] = self
     self.lock = RLock()
     self.port = port
     SerialDevice.__init__(self, port=self.port, baudrate=128000)
     self.scale = [0.0625e-6]*3  # default is 16 usteps per micron
     self._moving = False
コード例 #3
0
ファイル: mpc200.py プロジェクト: ablot/acq4
 def __init__(self, port):
     """
     port: serial COM port (eg. COM3 or /dev/ttyACM0)
     """
     self.lock = RLock()
     self.port = port
     self.pos = [(None,None)]*4  # used to remember position of each drive
     self.currentDrive = None
     SerialDevice.__init__(self, port=self.port, baudrate=128000)
     self.scale = [0.0625e-6]*3  # default is 16 usteps per micron
コード例 #4
0
 def __init__(self, p, baud=115200):
     #self.fws = {}
     #self.paramTable = OrderedDict()
     SerialDevice.__init__(self, port=p, baudrate=baud)
     # first function call after power off of the filterwheel returns error, subsequent calls succeed
     try:
         pC = self.getPosCount()
     except:
         pass
     else:
         pass
コード例 #5
0
 def __init__(self, port, baudrate=9600, module_addr=1):
     """
     port: serial COM port (eg. COM3 or /dev/ttyACM0)
     baudrate: 9600 by default
     module_addr: 1 by default
     """
     self.lock = RLock(debug=True)
     self.port = port
     assert isinstance(module_addr, int)
     assert module_addr > 0
     self.module_addr = module_addr
     self.module_str = chr(module_addr + 64)
     self._waiting_for_reply = False
     SerialDevice.__init__(self, port=self.port, baudrate=baudrate)
コード例 #6
0
ファイル: mpc200.py プロジェクト: ablot/acq4
 def getDevice(cls, port):
     """
     Return a SutterMPC200 instance for the specified serial port. Only one instance will 
     be created for each port.
     """
     port = SerialDevice.normalizePortName(port)
     if port not in cls.DEVICES:
         cls.DEVICES[port] = SutterMPC200(port=port)
     return cls.DEVICES[port]
コード例 #7
0
async def json_handle_set_serial_port(printer:SerialDevice, *args):  
    response = ""
    received = ""  
    logger.debug("json_handle_set_serial_port args:")
    for i in args:
        logger.debug("{}".format(i))
    port = args[0].lower()
    baud_rate = int(args[1])
    if baud_rate < 1: 
        baud_rate = options.baud_rate

    logger.debug("setting serial port: {}".format(port))

    printer._baud_rate = baud_rate

    if (printer.connection_state is ConnectionState.connected):
        await printer.disconnect()

    if port.startswith("dummy"):
        logger.debug("[SERVER] setting dummy serial port: {}".format(port))
        use_dummy_serial_port(printer)
    else:
        # TODO: check if printer serial ports are different!!
       
        printer._serial_port = port
        printer._baud_rate = baud_rate

        try:
            received = await printer.async_connect()

        except SerialException as se:
            logger.error(str(se))
            response = ["ERROR: could not connect to serial port {}".format(port)]
            logger.error(response[0])
            return response

            # raise Exception(response)
        # else:
    response = [{
            'time': time.time() * 1000,
            'port': [port, baud_rate],
            'messages': received
            }]
    return response
コード例 #8
0
def main():
    tornado.options.parse_command_line()

    loop = tornado.ioloop.IOLoop.current()
    printer = SerialDevice()

    serial_port_func = functools.partial(json_handle_set_serial_port, printer)

    # dispatcher.add_dict({"set-serial-port": serial_port_func })

    #----------------------------------------
    # THIS DEFINES THE JSON-RPC API:
    #----------------------------------------
    async def r_creator(request):
        params = request.params

        if request.method == "set-serial-port":
            result = await serial_port_func(*params)
            return result
        elif request.method == "get-serial-ports":
            result = await json_handle_portslist()
            return result
        elif request.method == "send-gcode":
            result = await json_handle_gcode(printer, *params)
            return result
        elif request.method == "get-printer-state":
            result = await json_handle_printer_state(printer)
            return result
        elif request.method == "close-serial-port":
            result = await json_handle_close_serial(printer)
            return result

        else:
            raise MethodNotFound("{}".format(request.method))

    settings = dict(
        cookie_secret="__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__",
        template_path=os.path.join(os.path.dirname(__file__), "templates"),
        static_path=os.path.join(os.path.dirname(__file__), "static"),
        xsrf_cookies=False,
    )
    handlers = [
        (r"/", MainHandler),
        (r"/test", TestHandler, dict(printer=printer)),
        (r"/jsontest", JsonTestHandler),
        (r"/jsonqtest", JsonQueueTestHandler),
        # (r"/jsonrpc", JSONHandler),
        (r"/jsonrpc", JSONRPCHandler, dict(response_creator=r_creator)),
    ]
    application = tornado.web.Application(handlers=handlers,
                                          debug=True,
                                          **settings)
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(options.port)

    tornado.ioloop.IOLoop.current().start()
コード例 #9
0
ファイル: mpc200.py プロジェクト: outofculture/acq4
    def getDevice(cls, port):
        """
        Return a SutterMPC200 instance for the specified serial port. Only one instance will 
        be created for each port.

        *port* must be a serial COM port (eg. COM3 or /dev/ttyACM0)        
        """
        port = SerialDevice.normalizePortName(port)
        if port in cls.DEVICES:
            return cls.DEVICES[port]
        else:
            return SutterMPC200(port=port)
コード例 #10
0
def use_dummy_serial_port(printer: SerialDevice):
    if printer._serial_port is not "/dev/null" and printer._serial is None:

        def delayed_string(result: Union[str, bytes]):
            # print ("delayed string {}".format(time.time()))
            time.sleep(random.uniform(0.05, 0.5))
            # print ("delayed string {}".format(time.time()))
            return result

        printer._serial_port = "/dev/null"
        printer._serial = dummyserial.Serial(
            port=printer._serial_port,
            baudrate=printer._baud_rate,
            ds_responses={
                '.*M105.*':
                lambda: b'ok T:%.2f /190.0 B:%.2f /24.0 @:0 B@:0\n' %
                (random.uniform(170, 195), random.uniform(20, 35)),
                '.*M115.*':
                b'FIRMWARE_NAME:DUMMY\n',
                '.*M114.*':
                lambda: b'X:%.2fY:%.2fZ:%.2fE:%.2f Count X: 2.00Y:3.00Z:4.00\n'
                % (random.uniform(0, 200), random.uniform(0, 200),
                   random.uniform(0, 200), random.uniform(0, 200)
                   ),  # position request
                '.*G.*':
                lambda: delayed_string(b'ok\n'),
                '.*M400.*':
                lambda: delayed_string(b'ok\n'),
                '.*M207.*':
                lambda: delayed_string(b'ok\n'),
                '.*M208.*':
                lambda: delayed_string(b'ok\n'),
                '.*M10[0-46-9].*':
                lambda: delayed_string(b'ok\n'),
                '^XXX':
                b'!!\n',
            })
    printer.connection_state = ConnectionState.connected
コード例 #11
0
ファイル: IMU.py プロジェクト: dexterpengji/bobot
import time
from SerialDevice import SerialDevice

imu = SerialDevice("COM3",
                   19200,
                   buffer_read_len=10,
                   buffer_write_len=10,
                   debug=True)
imu.start()
time.sleep(1)
print(imu.get())
time.sleep(1)
print(imu.get())
time.sleep(1)
print(imu.get())
time.sleep(1)
imu.pause()
time.sleep(1)
print(imu.get())
time.sleep(1)
imu.resume()
time.sleep(1)
imu.pause()
time.sleep(1)
imu.stop()
コード例 #12
0
serialdevice = None

zstart = 100
zend = 120
zstep = 1

xstart = 500
xend = 2500
xstep = 50
# Very hacky to have always the same Serial device..
serialdevice = serial.Serial(serialadress, 115200, timeout=.1)

time.sleep(2)

try:
    ledarr = SerialDevice(serialdevice)  # normally 0x07
except Exception as e:
    print(e)
    ledarr = False
    logger.debug("LEDARray is not connected!")

# connect to Motors
try:
    motors = SerialDevice(serialdevice)  # normally 0x08
except:
    motors = False
    logger.debug("Motors are not connected!")

# connect to Fluo
try:
    fluo = SerialDevice(serialdevice)
コード例 #13
0
            "powershell.exe",
            "Function Set-Speaker($Volume){$wshShell = new-object -com wscript.shell;1..50 | % {$wshShell.SendKeys([char]174)};1..$Volume | % {$wshShell.SendKeys([char]175)}} ; Set-Speaker("
            + winVolume + ")"
        ],
                        shell=True)
    elif os == "darwin":
        subprocess.call("osascript -e 'set volume output volume " +
                        str(percent) + "'",
                        shell=True)
    elif os == "linux":
        val = float(int(percent))
        proc = subprocess.Popen('/usr/bin/amixer sset Master ' + str(val) +
                                '%',
                                shell=True,
                                stdout=subprocess.PIPE)
        proc.wait()


def cb(event):
    try:
        print(event)
        if (event.startswith("set_volume_")):
            percent = event.split("_")[-1]
            setVolume(percent)
    except:
        traceback.print_exc()


pidVid = (32799, 9114)
mediaDevice = SerialDevice(cb, pidVid)
コード例 #14
0
is_serial = True
serialadress = '/dev/ttyUSB0'
serialdevice = None

zstart = 100
zend = 120
zstep = 1

xstart = 1200
xend = 1900
xstep = 50
# Very hacky to have always the same Serial device..
serialdevice = serial.Serial(serialadress, 115200, timeout=.1)

time.sleep(2)

try:
    ledarr = SerialDevice(serialdevice)  # normally 0x07
except Exception as e:
    print(e)
    ledarr = False
    logger.debug("LEDARray is not connected!")

for iz in range(zstart, zend, zstep):
    fluo.send("LENS1Z", int(iz))
    time.sleep(0.1)
    for ix in range(xstart, xend, xstep):
        fluo.send("LENS1X", int(ix))
        time.sleep(0.1)
コード例 #15
0
 def __init__(self,  serialNumber,  baudrate,  device):
     threading.Thread.__init__(self)
     SerialDevice.__init__(self, serialNumber,  baudrate,  device)
     OscDevice.__init__(self)
     self.__active = False
コード例 #16
0
serialdevice = None

global lensX1
lensX1 = 0
global lensZ1
lensZ1 = 0

# Very hacky to have always the same Serial device..
try:
    serialdevice = serial.Serial(serialadress, 115200, timeout=.1)
    time.sleep(2)
except:
    serialdevice = 1

try:
    esp_lens = SerialDevice(serialdevice)  # normally 0x07
except Exception as e:
    print(e)
    esp_lens = False
    logger.debug("esp_lens is not connected!")
'''
for iz in range(zstart,zend,zstep):
    fluo.send("LENS1Z", int(iz))
    time.sleep(0.1)
    for ix in range(xstart,xend,xstep):
        fluo.send("LENS1X", int(ix))
        time.sleep(0.1)
'''


# This callback will be bound to the LED toggle and Beep button: