From owner-freebsd-multimedia@FreeBSD.ORG Tue Feb 1 12:31:50 2011 Return-Path: Delivered-To: freebsd-multimedia@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BA8B6106564A; Tue, 1 Feb 2011 12:31:50 +0000 (UTC) (envelope-from nox@jelal.kn-bremen.de) Received: from smtp.kn-bremen.de (gelbbaer.kn-bremen.de [78.46.108.116]) by mx1.freebsd.org (Postfix) with ESMTP id 657E88FC1A; Tue, 1 Feb 2011 12:31:50 +0000 (UTC) Received: by smtp.kn-bremen.de (Postfix, from userid 10) id 8152C1E00241; Tue, 1 Feb 2011 13:31:49 +0100 (CET) Received: from triton8.kn-bremen.de (noident@localhost [127.0.0.1]) by triton8.kn-bremen.de (8.14.4/8.14.3) with ESMTP id p11CUsbi011156; Tue, 1 Feb 2011 13:30:54 +0100 (CET) (envelope-from nox@triton8.kn-bremen.de) Received: (from nox@localhost) by triton8.kn-bremen.de (8.14.4/8.14.3/Submit) id p11CUsuc011155; Tue, 1 Feb 2011 13:30:54 +0100 (CET) (envelope-from nox) From: Juergen Lock Date: Tue, 1 Feb 2011 13:30:54 +0100 To: Hans Petter Selasky Message-ID: <20110201123054.GA10962@triton8.kn-bremen.de> References: <20110131212710.GA85739@triton8.kn-bremen.de> <201102010900.11121.hselasky@freebsd.org> <20110201110840.GA8591@triton8.kn-bremen.de> <201102011212.40488.hselasky@freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201102011212.40488.hselasky@freebsd.org> User-Agent: Mutt/1.5.21 (2010-09-15) Cc: freebsd-multimedia@freebsd.org, Juergen Lock Subject: Re: New dvb-s2 tuner, and a hack to get remaining remotes working X-BeenThere: freebsd-multimedia@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Multimedia discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Feb 2011 12:31:50 -0000 On Tue, Feb 01, 2011 at 12:12:40PM +0100, Hans Petter Selasky wrote: > On Tuesday 01 February 2011 12:08:40 Juergen Lock wrote: > > F_SETFL > > Try to change FIONBIO with F_SETFL in the patch. Turns out FIONBIO was correct but I had to allow for FIOASYNC too: Index: webcamd.c =================================================================== --- webcamd.c (revision 1701) +++ webcamd.c (working copy) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2010 Hans Petter Selasky. All rights reserved. + * Copyright (c) 2010-2011 Hans Petter Selasky. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -27,6 +27,7 @@ #include #include #include +#include #include #include @@ -237,14 +238,20 @@ handle = cuse_dev_get_per_file_handle(cdev); + /* we support blocking/non-blocking I/O */ + if (cmd == FIONBIO || cmd == FIOASYNC) + return (0); + /* execute ioctl */ error = linux_ioctl(handle, fflags & CUSE_FFLAG_NONBLOCK, cmd, peer_data); - if (cmd == VIDIOC_QUERYBUF) { + if ((cmd == VIDIOC_QUERYBUF) && (error >= 0)) { - if (copy_from_user(&buf, peer_data, sizeof(buf)) != 0) + if (copy_from_user(&buf, peer_data, sizeof(buf)) != 0) { + error = -EFAULT; goto done; + } ptr = linux_mmap(handle, fflags, NULL, buf.length, buf.m.offset); @@ -255,8 +262,10 @@ buf.m.offset = 0x80000000UL; } - if (copy_to_user(peer_data, &buf, sizeof(buf)) != 0) + if (copy_to_user(peer_data, &buf, sizeof(buf)) != 0) { + error = -EFAULT; goto done; + } } done: return (v4b_convert_error(error)); That allowed the ioctl to complete and irrecord to wait for the first button press, but then select() seems to misbehave: (I get an endless loop of "Really read -1 bytes from '/dev/lirc0', expected 3" until I hit ^c.) [...] 10950 irrecord CALL select(0x5,0x7fffffffe5d0,0,0,0x7fffffffe650) 10950 irrecord RET select 1 10950 irrecord CALL read(0x4,0x7fffffffe660,0x3) 10950 irrecord RET read -1 errno 22 Invalid argument 10950 irrecord CALL clock_gettime(0xd,0x7fffffffe550) 10950 irrecord RET clock_gettime 0 10950 irrecord CALL write(0x2,0x7fffffffdee0,0xa) 10950 irrecord GIO fd 2 wrote 10 bytes "irrecord: " 10950 irrecord RET write 10/0xa 10950 irrecord CALL write(0x2,0x7fffffffdfc0,0x32) 10950 irrecord GIO fd 2 wrote 50 bytes "Really read -1 bytes from '/dev/lirc0', expected 3" 10950 irrecord RET write 50/0x32 10950 irrecord CALL write(0x2,0x8008599d7,0x1) 10950 irrecord GIO fd 2 wrote 1 byte " " 10950 irrecord RET write 1 10950 irrecord CALL select(0x5,0x7fffffffe5d0,0,0,0x7fffffffe650) 10950 irrecord RET select 1 10950 irrecord CALL read(0x4,0x7fffffffe660,0x3) 10950 irrecord RET read -1 errno 22 Invalid argument 10950 irrecord CALL clock_gettime(0xd,0x7fffffffe550) 10950 irrecord RET clock_gettime 0 10950 irrecord CALL write(0x2,0x7fffffffdee0,0xa) 10950 irrecord GIO fd 2 wrote 10 bytes "irrecord: " 10950 irrecord RET write 10/0xa 10950 irrecord CALL write(0x2,0x7fffffffdfc0,0x32) 10950 irrecord GIO fd 2 wrote 50 bytes "Really read -1 bytes from '/dev/lirc0', expected 3" 10950 irrecord RET write 50/0x32 10950 irrecord CALL write(0x2,0x8008599d7,0x1) 10950 irrecord GIO fd 2 wrote 1 byte " " 10950 irrecord RET write 1 10950 irrecord PSIG SIGINT SIG_DFL