From owner-svn-src-projects@FreeBSD.ORG Thu Jul 28 19:24:34 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4EF1F10656DA; Thu, 28 Jul 2011 19:24:34 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3F9C68FC0A; Thu, 28 Jul 2011 19:24:34 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6SJOYtn016045; Thu, 28 Jul 2011 19:24:34 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6SJOY6X016043; Thu, 28 Jul 2011 19:24:34 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201107281924.p6SJOY6X016043@svn.freebsd.org> From: Alexander Motin Date: Thu, 28 Jul 2011 19:24:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224485 - projects/hid/usr.bin/usbhidaction X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Jul 2011 19:24:34 -0000 Author: mav Date: Thu Jul 28 19:24:33 2011 New Revision: 224485 URL: http://svn.freebsd.org/changeset/base/224485 Log: Fix Array items support: check all reports, not only the first. Modified: projects/hid/usr.bin/usbhidaction/usbhidaction.c Modified: projects/hid/usr.bin/usbhidaction/usbhidaction.c ============================================================================== --- projects/hid/usr.bin/usbhidaction/usbhidaction.c Thu Jul 28 18:42:10 2011 (r224484) +++ projects/hid/usr.bin/usbhidaction/usbhidaction.c Thu Jul 28 19:24:33 2011 (r224485) @@ -203,7 +203,20 @@ main(int argc, char **argv) if (cmd->item.report_ID != 0 && buf[0] != cmd->item.report_ID) continue; - val = hid_get_data(buf, &cmd->item); + if (cmd->item.flags & HIO_VARIABLE) + val = hid_get_data(buf, &cmd->item); + else { + uint32_t pos = cmd->item.pos; + for (i = 0; i < cmd->item.report_count; i++) { + val = hid_get_data(buf, &cmd->item); + if (val == cmd->value) + break; + cmd->item.pos += cmd->item.report_size; + } + cmd->item.pos = pos; + val = (i < cmd->item.report_count) ? + cmd->value : -1; + } if (cmd->value != val && cmd->anyvalue == 0) goto next; if ((cmd->debounce == 0) || @@ -417,7 +430,6 @@ parse_conf(const char *conf, report_desc } foundhid: - hid_end_parse(d); cmd->lastseen = -1; cmd->lastused = -1; cmd->item = h; @@ -429,6 +441,7 @@ parse_conf(const char *conf, report_desc else cmd->value = -1; } + hid_end_parse(d); if (verbose) printf("PARSE:%d %s, %d, '%s'\n", cmd->line, name,