\hypertarget{g__keyboard_8c_source}{}\doxysection{g\+\_\+keyboard.\+c}
\label{g__keyboard_8c_source}\index{dev/usb/gadget/g\_keyboard.c@{dev/usb/gadget/g\_keyboard.c}}
\mbox{\hyperlink{g__keyboard_8c}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00001}00001 \textcolor{comment}{/*-\/}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00002}00002 \textcolor{comment}{ * SPDX-\/License-\/Identifier: BSD-\/2-\/Clause-\/FreeBSD}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00003}00003 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00004}00004 \textcolor{comment}{ * Copyright (c) 2010 Hans Petter Selasky. All rights reserved.}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00005}00005 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00006}00006 \textcolor{comment}{ * Redistribution and use in source and binary forms, with or without}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00007}00007 \textcolor{comment}{ * modification, are permitted provided that the following conditions}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00008}00008 \textcolor{comment}{ * are met:}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00009}00009 \textcolor{comment}{ * 1. Redistributions of source code must retain the above copyright}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00010}00010 \textcolor{comment}{ *    notice, this list of conditions and the following disclaimer.}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00011}00011 \textcolor{comment}{ * 2. Redistributions in binary form must reproduce the above copyright}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00012}00012 \textcolor{comment}{ *    notice, this list of conditions and the following disclaimer in the}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00013}00013 \textcolor{comment}{ *    documentation and/or other materials provided with the distribution.}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00014}00014 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00015}00015 \textcolor{comment}{ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00016}00016 \textcolor{comment}{ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00017}00017 \textcolor{comment}{ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00018}00018 \textcolor{comment}{ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00019}00019 \textcolor{comment}{ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00020}00020 \textcolor{comment}{ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00021}00021 \textcolor{comment}{ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00022}00022 \textcolor{comment}{ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00023}00023 \textcolor{comment}{ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00024}00024 \textcolor{comment}{ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00025}00025 \textcolor{comment}{ * SUCH DAMAGE.}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00026}00026 \textcolor{comment}{ */}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00027}00027 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00028}00028 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00029}00029 \textcolor{comment}{ * HID spec: http://www.usb.org/developers/devclass\_docs/HID1\_11.pdf}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00030}00030 \textcolor{comment}{ */}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00031}00031 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00032}00032 \textcolor{preprocessor}{\#include <sys/param.h>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00033}\mbox{\hyperlink{g__keyboard_8c_a8c3ef283470a68cd30afe9b8a72cb60f}{00033}} \mbox{\hyperlink{g__keyboard_8c_a8c3ef283470a68cd30afe9b8a72cb60f}{\_\_FBSDID}}(\textcolor{stringliteral}{"{}\$FreeBSD\$"{}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00034}00034 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00035}00035 \textcolor{preprocessor}{\#include <sys/stdint.h>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00036}00036 \textcolor{preprocessor}{\#include <sys/stddef.h>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00037}00037 \textcolor{preprocessor}{\#include <sys/queue.h>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00038}00038 \textcolor{preprocessor}{\#include <sys/systm.h>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00039}00039 \textcolor{preprocessor}{\#include <sys/kernel.h>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00040}00040 \textcolor{preprocessor}{\#include <sys/bus.h>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00041}00041 \textcolor{preprocessor}{\#include <sys/linker\_set.h>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00042}00042 \textcolor{preprocessor}{\#include <sys/module.h>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00043}00043 \textcolor{preprocessor}{\#include <sys/lock.h>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00044}00044 \textcolor{preprocessor}{\#include <sys/mutex.h>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00045}00045 \textcolor{preprocessor}{\#include <sys/condvar.h>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00046}00046 \textcolor{preprocessor}{\#include <sys/sysctl.h>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00047}00047 \textcolor{preprocessor}{\#include <sys/sx.h>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00048}00048 \textcolor{preprocessor}{\#include <sys/unistd.h>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00049}00049 \textcolor{preprocessor}{\#include <sys/callout.h>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00050}00050 \textcolor{preprocessor}{\#include <sys/malloc.h>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00051}00051 \textcolor{preprocessor}{\#include <sys/priv.h>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00052}00052 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00053}00053 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{usb_8h}{dev/usb/usb.h}}>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00054}00054 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{usbdi_8h}{dev/usb/usbdi.h}}>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00055}00055 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{usbdi__util_8h}{dev/usb/usbdi\_util.h}}>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00056}00056 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{usbhid_8h}{dev/usb/usbhid.h}}>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00057}00057 \textcolor{preprocessor}{\#include "{}usb\_if.h"{}}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00058}00058 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00059}\mbox{\hyperlink{g__keyboard_8c_a927dd6f59caf10a2991dfb564bcbb1e1}{00059}} \textcolor{preprocessor}{\#define USB\_DEBUG\_VAR g\_keyboard\_debug}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00060}00060 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{usb__debug_8h}{dev/usb/usb\_debug.h}}>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00061}00061 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00062}00062 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{g__keyboard_8h}{dev/usb/gadget/g\_keyboard.h}}>}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00063}00063 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00064}\mbox{\hyperlink{g__keyboard_8c_af5567c3688817bab4fb4e409b50f1cb8}{00064}} \textcolor{keyword}{static} \mbox{\hyperlink{g__keyboard_8c_af5567c3688817bab4fb4e409b50f1cb8}{SYSCTL\_NODE}}(\_hw\_usb, OID\_AUTO, g\_keyboard,}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00065}00065     CTLFLAG\_RW | CTLFLAG\_MPSAFE, 0,}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00066}00066     \textcolor{stringliteral}{"{}USB keyboard gadget"{}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00067}00067 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00068}00068 \textcolor{preprocessor}{\#ifdef USB\_DEBUG}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00069}00069 \textcolor{keyword}{static} \textcolor{keywordtype}{int} g\_keyboard\_debug = 0;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00070}00070 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00071}00071 \mbox{\hyperlink{g__keyboard_8c_a46095de9e433986aa2cc9d5faa9773c4}{SYSCTL\_INT}}(\_hw\_usb\_g\_keyboard, OID\_AUTO, \mbox{\hyperlink{cfumass_8c_ac3e1795766a80ec63b157951b4b9a7d4}{debug}}, CTLFLAG\_RWTUN,}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00072}00072     \&g\_keyboard\_debug, 0, \textcolor{stringliteral}{"{}Debug level"{}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00073}00073 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00074}00074 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00075}\mbox{\hyperlink{g__keyboard_8c_a9e601e77329904b1e4f425c97d1ed4a8}{00075}} \textcolor{keyword}{static} \textcolor{keywordtype}{int} \mbox{\hyperlink{g__keyboard_8c_a9e601e77329904b1e4f425c97d1ed4a8}{g\_keyboard\_mode}} = 0;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00076}00076 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00077}\mbox{\hyperlink{g__keyboard_8c_a46095de9e433986aa2cc9d5faa9773c4}{00077}} \mbox{\hyperlink{g__keyboard_8c_a46095de9e433986aa2cc9d5faa9773c4}{SYSCTL\_INT}}(\_hw\_usb\_g\_keyboard, OID\_AUTO, mode, CTLFLAG\_RWTUN,}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00078}00078     \&\mbox{\hyperlink{g__keyboard_8c_a9e601e77329904b1e4f425c97d1ed4a8}{g\_keyboard\_mode}}, 0, \textcolor{stringliteral}{"{}Mode selection"{}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00079}00079 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00080}\mbox{\hyperlink{g__keyboard_8c_a6bc9790992093f5999a02dd882a76813}{00080}} \textcolor{keyword}{static} \textcolor{keywordtype}{int} \mbox{\hyperlink{g__keyboard_8c_a6bc9790992093f5999a02dd882a76813}{g\_keyboard\_key\_press\_interval}} = 1000;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00081}00081 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00082}\mbox{\hyperlink{g__keyboard_8c_a38712073f5b43c46228c12fd56b268ea}{00082}} \mbox{\hyperlink{g__keyboard_8c_a46095de9e433986aa2cc9d5faa9773c4}{SYSCTL\_INT}}(\_hw\_usb\_g\_keyboard, OID\_AUTO, key\_press\_interval, CTLFLAG\_RWTUN,}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00083}00083     \&\mbox{\hyperlink{g__keyboard_8c_a6bc9790992093f5999a02dd882a76813}{g\_keyboard\_key\_press\_interval}}, 0, \textcolor{stringliteral}{"{}Key Press Interval in milliseconds"{}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00084}00084 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00085}\mbox{\hyperlink{g__keyboard_8c_ada22a854814f8c9d0a92df14ead5a52e}{00085}} \textcolor{keyword}{static} \textcolor{keywordtype}{char} \mbox{\hyperlink{g__keyboard_8c_ada22a854814f8c9d0a92df14ead5a52e}{g\_keyboard\_key\_press\_pattern}}[\mbox{\hyperlink{g__keyboard_8h_aa92958b736497c1ffa0c41e13252d21b}{G\_KEYBOARD\_MAX\_STRLEN}}];}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00086}00086 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00087}\mbox{\hyperlink{g__keyboard_8c_a51988ab6c4b23667bd099636e91055f8}{00087}} \mbox{\hyperlink{g__keyboard_8c_a51988ab6c4b23667bd099636e91055f8}{SYSCTL\_STRING}}(\_hw\_usb\_g\_keyboard, OID\_AUTO, key\_press\_pattern, CTLFLAG\_RW,}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00088}00088     \mbox{\hyperlink{g__keyboard_8c_ada22a854814f8c9d0a92df14ead5a52e}{g\_keyboard\_key\_press\_pattern}}, \textcolor{keyword}{sizeof}(\mbox{\hyperlink{g__keyboard_8c_ada22a854814f8c9d0a92df14ead5a52e}{g\_keyboard\_key\_press\_pattern}}),}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00089}00089     \textcolor{stringliteral}{"{}Key Press Patterns"{}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00090}00090 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00091}\mbox{\hyperlink{g__keyboard_8c_ae210534f396fa3ce3240ea25e4e9bc79}{00091}} \textcolor{preprocessor}{\#define UPROTO\_BOOT\_KEYBOARD 1}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00092}00092 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00093}\mbox{\hyperlink{g__keyboard_8c_a46f29fcef2e9020de56683250c478e71}{00093}} \textcolor{preprocessor}{\#define G\_KEYBOARD\_NMOD                     8   }\textcolor{comment}{/* units */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00094}\mbox{\hyperlink{g__keyboard_8c_a37577bae420d0ae4ed8d88a4459e4e7c}{00094}} \textcolor{preprocessor}{\#define G\_KEYBOARD\_NKEYCODE                 6   }\textcolor{comment}{/* units */}\textcolor{preprocessor}{}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00095}00095 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00096}\mbox{\hyperlink{structg__keyboard__data}{00096}} \textcolor{keyword}{struct }\mbox{\hyperlink{structg__keyboard__data}{g\_keyboard\_data}} \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00097}\mbox{\hyperlink{structg__keyboard__data_a3d22a4aba3d6d604da5b3683122411fc}{00097}}         uint8\_t \mbox{\hyperlink{structg__keyboard__data_a3d22a4aba3d6d604da5b3683122411fc}{modifiers}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00098}\mbox{\hyperlink{g__keyboard_8c_ad0e2b6d758ed988fc1f931211d5833fd}{00098}} \textcolor{preprocessor}{\#define MOD\_CONTROL\_L   0x01}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00099}\mbox{\hyperlink{g__keyboard_8c_ab54b87452b610606baed418afca444c1}{00099}} \textcolor{preprocessor}{\#define MOD\_CONTROL\_R   0x10}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00100}\mbox{\hyperlink{g__keyboard_8c_a44f584545acc93e009d53b56bb90117e}{00100}} \textcolor{preprocessor}{\#define MOD\_SHIFT\_L     0x02}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00101}\mbox{\hyperlink{g__keyboard_8c_a665a4b2b1b77f16d1e3093f10446f4e5}{00101}} \textcolor{preprocessor}{\#define MOD\_SHIFT\_R     0x20}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00102}\mbox{\hyperlink{g__keyboard_8c_a0715e84f6e4ddfe3c7457176008eaa3e}{00102}} \textcolor{preprocessor}{\#define MOD\_ALT\_L       0x04}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00103}\mbox{\hyperlink{g__keyboard_8c_a5d28312e8ab3bb0dd39c75b7d75df9d0}{00103}} \textcolor{preprocessor}{\#define MOD\_ALT\_R       0x40}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00104}\mbox{\hyperlink{g__keyboard_8c_a0f0c5fc4bfefd4040aef864be1ba2087}{00104}} \textcolor{preprocessor}{\#define MOD\_WIN\_L       0x08}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00105}\mbox{\hyperlink{g__keyboard_8c_a0df0503b3b9fd36b761feb17616a6efe}{00105}} \textcolor{preprocessor}{\#define MOD\_WIN\_R       0x80}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00106}\mbox{\hyperlink{structg__keyboard__data_ad3fa6c722cfeb3eca364db8c3a301488}{00106}}         uint8\_t \mbox{\hyperlink{structg__keyboard__data_ad3fa6c722cfeb3eca364db8c3a301488}{reserved}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00107}\mbox{\hyperlink{structg__keyboard__data_a141aeb660d3fc5f71b86df777dad1b37}{00107}}         uint8\_t \mbox{\hyperlink{structg__keyboard__data_a141aeb660d3fc5f71b86df777dad1b37}{keycode}}[\mbox{\hyperlink{g__keyboard_8c_a37577bae420d0ae4ed8d88a4459e4e7c}{G\_KEYBOARD\_NKEYCODE}}];}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00108}00108 \};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00109}00109 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00110}00110 \textcolor{keyword}{enum} \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00111}\mbox{\hyperlink{g__keyboard_8c_adc29c2ff13d900c2f185ee95427fb06ca22d64fe5ae86a2fffb56a828be6ecab0}{00111}}         \mbox{\hyperlink{g__keyboard_8c_adc29c2ff13d900c2f185ee95427fb06ca22d64fe5ae86a2fffb56a828be6ecab0}{G\_KEYBOARD\_INTR\_DT}},}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00112}\mbox{\hyperlink{g__keyboard_8c_adc29c2ff13d900c2f185ee95427fb06caaf1206ba1d2bc6f8eb95588ed4797570}{00112}}         \mbox{\hyperlink{g__keyboard_8c_adc29c2ff13d900c2f185ee95427fb06caaf1206ba1d2bc6f8eb95588ed4797570}{G\_KEYBOARD\_N\_TRANSFER}},}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00113}00113 \};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00114}00114 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00115}\mbox{\hyperlink{structg__keyboard__softc}{00115}} \textcolor{keyword}{struct }\mbox{\hyperlink{structg__keyboard__softc}{g\_keyboard\_softc}} \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00116}\mbox{\hyperlink{structg__keyboard__softc_a0dee4bca6197f5cf9e0ae56147b1d7aa}{00116}}         \textcolor{keyword}{struct }mtx \mbox{\hyperlink{structg__keyboard__softc_a0dee4bca6197f5cf9e0ae56147b1d7aa}{sc\_mtx}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00117}\mbox{\hyperlink{structg__keyboard__softc_aaf44d64b1a5ecda33e925a4b7f439c52}{00117}}         \textcolor{keyword}{struct }\mbox{\hyperlink{structusb__callout}{usb\_callout}} \mbox{\hyperlink{structg__keyboard__softc_aaf44d64b1a5ecda33e925a4b7f439c52}{sc\_callout}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00118}\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{00118}}         \textcolor{keyword}{struct }\mbox{\hyperlink{structg__keyboard__data}{g\_keyboard\_data}} \mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}[2];}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00119}\mbox{\hyperlink{structg__keyboard__softc_a6442eeb64622447c99a415111267dd05}{00119}}         \textcolor{keyword}{struct }\mbox{\hyperlink{structusb__xfer}{usb\_xfer}} *\mbox{\hyperlink{structg__keyboard__softc_a6442eeb64622447c99a415111267dd05}{sc\_xfer}}[\mbox{\hyperlink{g__keyboard_8c_adc29c2ff13d900c2f185ee95427fb06caaf1206ba1d2bc6f8eb95588ed4797570}{G\_KEYBOARD\_N\_TRANSFER}}];}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00120}00120 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00121}\mbox{\hyperlink{structg__keyboard__softc_a86ad0cf623d3f3d939aa5290d80e953d}{00121}}         \textcolor{keywordtype}{int}     \mbox{\hyperlink{structg__keyboard__softc_a86ad0cf623d3f3d939aa5290d80e953d}{sc\_mode}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00122}\mbox{\hyperlink{structg__keyboard__softc_affe5ba8bfc8f074ef02abf9381ca49bb}{00122}}         \textcolor{keywordtype}{int}     \mbox{\hyperlink{structg__keyboard__softc_affe5ba8bfc8f074ef02abf9381ca49bb}{sc\_state}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00123}\mbox{\hyperlink{structg__keyboard__softc_ae9ecc822287fe1b5782fd13c9b40c14a}{00123}}         \textcolor{keywordtype}{int}     \mbox{\hyperlink{structg__keyboard__softc_ae9ecc822287fe1b5782fd13c9b40c14a}{sc\_pattern\_len}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00124}00124 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00125}\mbox{\hyperlink{structg__keyboard__softc_a24a2b9b84d8225e90c911dae57359877}{00125}}         \textcolor{keywordtype}{char}    \mbox{\hyperlink{structg__keyboard__softc_a24a2b9b84d8225e90c911dae57359877}{sc\_pattern}}[\mbox{\hyperlink{g__keyboard_8h_aa92958b736497c1ffa0c41e13252d21b}{G\_KEYBOARD\_MAX\_STRLEN}}];}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00126}00126 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00127}\mbox{\hyperlink{structg__keyboard__softc_a237050b79a08425f8e6c236d1cf63be4}{00127}}         uint8\_t \mbox{\hyperlink{structg__keyboard__softc_a237050b79a08425f8e6c236d1cf63be4}{sc\_led\_state}}[4];}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00128}00128 \};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00129}00129 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00130}\mbox{\hyperlink{g__keyboard_8c_ad84fe7937d91d2b733e9f063e8240e2b}{00130}} \textcolor{keyword}{static} device\_probe\_t \mbox{\hyperlink{g__keyboard_8c_ad84fe7937d91d2b733e9f063e8240e2b}{g\_keyboard\_probe}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00131}\mbox{\hyperlink{g__keyboard_8c_aa02383ef017727b5e0de1d4dbbf266f4}{00131}} \textcolor{keyword}{static} device\_attach\_t \mbox{\hyperlink{g__keyboard_8c_aa02383ef017727b5e0de1d4dbbf266f4}{g\_keyboard\_attach}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00132}\mbox{\hyperlink{g__keyboard_8c_a431473d67a9f43f454d6000aa797d74b}{00132}} \textcolor{keyword}{static} device\_detach\_t \mbox{\hyperlink{g__keyboard_8c_a431473d67a9f43f454d6000aa797d74b}{g\_keyboard\_detach}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00133}\mbox{\hyperlink{g__keyboard_8c_a482399d1ac3841acc38f2cfb4a1bd8d4}{00133}} \textcolor{keyword}{static} usb\_handle\_request\_t \mbox{\hyperlink{g__keyboard_8c_a482399d1ac3841acc38f2cfb4a1bd8d4}{g\_keyboard\_handle\_request}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00134}\mbox{\hyperlink{g__keyboard_8c_adbe52c4f6d779d05bb8ef80857fbcb7b}{00134}} \textcolor{keyword}{static} \mbox{\hyperlink{usbdi_8h_aad1085e1e87347ed71e554c4b0209239}{usb\_callback\_t}} \mbox{\hyperlink{g__keyboard_8c_adbe52c4f6d779d05bb8ef80857fbcb7b}{g\_keyboard\_intr\_callback}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00135}00135 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00136}\mbox{\hyperlink{g__keyboard_8c_a59f4af2872ad590e759c5062813a425e}{00136}} \textcolor{keyword}{static} devclass\_t \mbox{\hyperlink{g__keyboard_8c_a59f4af2872ad590e759c5062813a425e}{g\_keyboard\_devclass}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00137}00137 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00138}\mbox{\hyperlink{g__keyboard_8c_aa26a4ebcfae63912dd037ec2f956d271}{00138}} \textcolor{keyword}{static} device\_method\_t \mbox{\hyperlink{g__keyboard_8c_aa26a4ebcfae63912dd037ec2f956d271}{g\_keyboard\_methods}}[] = \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00139}00139         \textcolor{comment}{/* USB interface */}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00140}00140         DEVMETHOD(\mbox{\hyperlink{usb__handle__request_8c_acd7ff252b93f3bd9e87d0f8b3eb3ffa5}{usb\_handle\_request}}, \mbox{\hyperlink{g__keyboard_8c_a482399d1ac3841acc38f2cfb4a1bd8d4}{g\_keyboard\_handle\_request}}),}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00141}00141 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00142}00142         \textcolor{comment}{/* Device interface */}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00143}00143         DEVMETHOD(device\_probe, \mbox{\hyperlink{g__keyboard_8c_ad84fe7937d91d2b733e9f063e8240e2b}{g\_keyboard\_probe}}),}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00144}00144         DEVMETHOD(device\_attach, \mbox{\hyperlink{g__keyboard_8c_aa02383ef017727b5e0de1d4dbbf266f4}{g\_keyboard\_attach}}),}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00145}00145         DEVMETHOD(device\_detach, \mbox{\hyperlink{g__keyboard_8c_a431473d67a9f43f454d6000aa797d74b}{g\_keyboard\_detach}}),}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00146}00146 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00147}00147         DEVMETHOD\_END}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00148}00148 \};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00149}00149 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00150}\mbox{\hyperlink{g__keyboard_8c_a1a80ad3c65ef0f5fed4deb3202fc2774}{00150}} \textcolor{keyword}{static} driver\_t \mbox{\hyperlink{g__keyboard_8c_a1a80ad3c65ef0f5fed4deb3202fc2774}{g\_keyboard\_driver}} = \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00151}00151         .name = \textcolor{stringliteral}{"{}g\_keyboard"{}},}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00152}00152         .methods = \mbox{\hyperlink{g__keyboard_8c_aa26a4ebcfae63912dd037ec2f956d271}{g\_keyboard\_methods}},}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00153}00153         .size = \textcolor{keyword}{sizeof}(\textcolor{keyword}{struct }\mbox{\hyperlink{structg__keyboard__softc}{g\_keyboard\_softc}}),}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00154}00154 \};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00155}00155 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00156}\mbox{\hyperlink{g__keyboard_8c_a1a63a8904d5559167619c7d2f08c623f}{00156}} \mbox{\hyperlink{g__keyboard_8c_a1a63a8904d5559167619c7d2f08c623f}{DRIVER\_MODULE}}(g\_keyboard, uhub, \mbox{\hyperlink{g__keyboard_8c_a1a80ad3c65ef0f5fed4deb3202fc2774}{g\_keyboard\_driver}}, \mbox{\hyperlink{g__keyboard_8c_a59f4af2872ad590e759c5062813a425e}{g\_keyboard\_devclass}}, 0, 0);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00157}\mbox{\hyperlink{g__keyboard_8c_abefe2af58e828f822bd2b75d3a0b9988}{00157}} \mbox{\hyperlink{g__keyboard_8c_abefe2af58e828f822bd2b75d3a0b9988}{MODULE\_DEPEND}}(g\_keyboard, \mbox{\hyperlink{usb__if_8m_adfa3f6da9c4881e494b180c4ebb06470}{usb}}, 1, 1, 1);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00158}00158 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00159}\mbox{\hyperlink{g__keyboard_8c_a6f394aa39bbc94486a980798f6dbb66e}{00159}} \textcolor{keyword}{static} \textcolor{keyword}{const} \textcolor{keyword}{struct }\mbox{\hyperlink{structusb__config}{usb\_config}} \mbox{\hyperlink{g__keyboard_8c_a6f394aa39bbc94486a980798f6dbb66e}{g\_keyboard\_config}}[\mbox{\hyperlink{g__keyboard_8c_adc29c2ff13d900c2f185ee95427fb06caaf1206ba1d2bc6f8eb95588ed4797570}{G\_KEYBOARD\_N\_TRANSFER}}] = \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00160}00160         [\mbox{\hyperlink{g__keyboard_8c_adc29c2ff13d900c2f185ee95427fb06ca22d64fe5ae86a2fffb56a828be6ecab0}{G\_KEYBOARD\_INTR\_DT}}] = \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00161}00161                 .\mbox{\hyperlink{structusb__config_a5bd5d569870291a54d9bed8377ed8b10}{type}} = \mbox{\hyperlink{usb_8h_a01e28e87ad16f6dfffefc6ccab08baed}{UE\_INTERRUPT}},}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00162}00162                 .endpoint = \mbox{\hyperlink{usb_8h_a1e8d1f402536e634471569b83f603197}{UE\_ADDR\_ANY}},}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00163}00163                 .direction = \mbox{\hyperlink{usb_8h_a72bb077a860132c175c166f344c75893}{UE\_DIR\_IN}},}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00164}00164                 .flags = \{.ext\_buffer = 1,.pipe\_bof = 1,\},}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00165}00165                 .bufsize = \textcolor{keyword}{sizeof}(\textcolor{keyword}{struct }\mbox{\hyperlink{structg__keyboard__data}{g\_keyboard\_data}}),}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00166}00166                 .callback = \&\mbox{\hyperlink{g__keyboard_8c_adbe52c4f6d779d05bb8ef80857fbcb7b}{g\_keyboard\_intr\_callback}},}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00167}00167                 .frames = 2,}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00168}00168                 .usb\_mode = \mbox{\hyperlink{usb_8h_a9bc559812598988121896dceb483806bada6c05f1ad342e782a92990170fca2cc}{USB\_MODE\_DEVICE}},}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00169}00169         \},}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00170}00170 \};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00171}00171 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00172}00172 \textcolor{keyword}{static} \textcolor{keywordtype}{void} \mbox{\hyperlink{g__keyboard_8c_ab4c820d3612695e46daf68a78c0794ae}{g\_keyboard\_timeout}}(\textcolor{keywordtype}{void} *arg);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00173}00173 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00174}00174 \textcolor{keyword}{static} \textcolor{keywordtype}{void}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00175}\mbox{\hyperlink{g__keyboard_8c_a472a2de55d895db6d76a5aa25a5a4fa9}{00175}} \mbox{\hyperlink{g__keyboard_8c_a472a2de55d895db6d76a5aa25a5a4fa9}{g\_keyboard\_timeout\_reset}}(\textcolor{keyword}{struct} \mbox{\hyperlink{structg__keyboard__softc}{g\_keyboard\_softc}} *sc)}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00176}00176 \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00177}00177         \textcolor{keywordtype}{int} i = \mbox{\hyperlink{g__keyboard_8c_a6bc9790992093f5999a02dd882a76813}{g\_keyboard\_key\_press\_interval}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00178}00178 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00179}00179         \textcolor{keywordflow}{if} (i <= 0)}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00180}00180                 i = 1;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00181}00181         \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (i > 1023)}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00182}00182                 i = 1023;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00183}00183 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00184}00184         i = \mbox{\hyperlink{usbdi_8h_a9715d25e0db2e92bd86423a9283893b7}{USB\_MS\_TO\_TICKS}}(i);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00185}00185 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00186}00186         \mbox{\hyperlink{usbdi_8h_a5ba556ca3595eb8006822a123ac9d54f}{usb\_callout\_reset}}(\&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_aaf44d64b1a5ecda33e925a4b7f439c52}{sc\_callout}}, i, \&\mbox{\hyperlink{g__keyboard_8c_ab4c820d3612695e46daf68a78c0794ae}{g\_keyboard\_timeout}}, sc);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00187}00187 \}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00188}00188 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00189}00189 \textcolor{keyword}{static} \textcolor{keywordtype}{void}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00190}\mbox{\hyperlink{g__keyboard_8c_ab4c820d3612695e46daf68a78c0794ae}{00190}} \mbox{\hyperlink{g__keyboard_8c_ab4c820d3612695e46daf68a78c0794ae}{g\_keyboard\_timeout}}(\textcolor{keywordtype}{void} *arg)}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00191}00191 \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00192}00192         \textcolor{keyword}{struct }\mbox{\hyperlink{structg__keyboard__softc}{g\_keyboard\_softc}} *sc = arg;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00193}00193 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00194}00194         sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a86ad0cf623d3f3d939aa5290d80e953d}{sc\_mode}} = \mbox{\hyperlink{g__keyboard_8c_a9e601e77329904b1e4f425c97d1ed4a8}{g\_keyboard\_mode}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00195}00195 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00196}00196         memcpy(sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a24a2b9b84d8225e90c911dae57359877}{sc\_pattern}}, \mbox{\hyperlink{g__keyboard_8c_ada22a854814f8c9d0a92df14ead5a52e}{g\_keyboard\_key\_press\_pattern}}, \textcolor{keyword}{sizeof}(sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a24a2b9b84d8225e90c911dae57359877}{sc\_pattern}}));}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00197}00197 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00198}00198         sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a24a2b9b84d8225e90c911dae57359877}{sc\_pattern}}[\mbox{\hyperlink{g__keyboard_8h_aa92958b736497c1ffa0c41e13252d21b}{G\_KEYBOARD\_MAX\_STRLEN}} -\/ 1] = 0;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00199}00199 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00200}00200         sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ae9ecc822287fe1b5782fd13c9b40c14a}{sc\_pattern\_len}} = strlen(sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a24a2b9b84d8225e90c911dae57359877}{sc\_pattern}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00201}00201 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00202}00202         DPRINTFN(11, \textcolor{stringliteral}{"{}Timeout \%p\(\backslash\)n"{}}, sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a6442eeb64622447c99a415111267dd05}{sc\_xfer}}[\mbox{\hyperlink{g__keyboard_8c_adc29c2ff13d900c2f185ee95427fb06ca22d64fe5ae86a2fffb56a828be6ecab0}{G\_KEYBOARD\_INTR\_DT}}]);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00203}00203 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00204}00204         \mbox{\hyperlink{usb__transfer_8c_a7a1f2d22a70b832e8cc31366adec443d}{usbd\_transfer\_start}}(sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a6442eeb64622447c99a415111267dd05}{sc\_xfer}}[\mbox{\hyperlink{g__keyboard_8c_adc29c2ff13d900c2f185ee95427fb06ca22d64fe5ae86a2fffb56a828be6ecab0}{G\_KEYBOARD\_INTR\_DT}}]);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00205}00205 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00206}00206         \mbox{\hyperlink{g__keyboard_8c_a472a2de55d895db6d76a5aa25a5a4fa9}{g\_keyboard\_timeout\_reset}}(sc);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00207}00207 \}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00208}00208 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00209}00209 \textcolor{keyword}{static} \textcolor{keywordtype}{int}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00210}\mbox{\hyperlink{g__keyboard_8c_a75b5b707c168df4f54997bbe4dbef089}{00210}} \mbox{\hyperlink{g__keyboard_8c_ad84fe7937d91d2b733e9f063e8240e2b}{g\_keyboard\_probe}}(device\_t dev)}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00211}00211 \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00212}00212         \textcolor{keyword}{struct }\mbox{\hyperlink{structusb__attach__arg}{usb\_attach\_arg}} *uaa = device\_get\_ivars(dev);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00213}00213 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00214}00214         DPRINTFN(11, \textcolor{stringliteral}{"{}\(\backslash\)n"{}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00215}00215 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00216}00216         \textcolor{keywordflow}{if} (uaa-\/>\mbox{\hyperlink{structusb__attach__arg_a246691e99681281d3113d63e81b7e4f0}{usb\_mode}} != \mbox{\hyperlink{usb_8h_a9bc559812598988121896dceb483806bada6c05f1ad342e782a92990170fca2cc}{USB\_MODE\_DEVICE}})}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00217}00217                 \textcolor{keywordflow}{return} (ENXIO);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00218}00218 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00219}00219         \textcolor{keywordflow}{if} ((uaa-\/>\mbox{\hyperlink{structusb__attach__arg_a66c2afc71fce73cc432f7d58593e1f26}{info}}.\mbox{\hyperlink{structusbd__lookup__info_ab0d02dc59a6a042d2de8c12708afc8b3}{bInterfaceClass}} == \mbox{\hyperlink{usb_8h_a77eca6d49a1f0f93fb31aad0ef2f33b4}{UICLASS\_HID}}) \&\&}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00220}00220             (uaa-\/>\mbox{\hyperlink{structusb__attach__arg_a66c2afc71fce73cc432f7d58593e1f26}{info}}.\mbox{\hyperlink{structusbd__lookup__info_aa8ed5421fc671dcbd1fefb09180b604c}{bInterfaceSubClass}} == \mbox{\hyperlink{usb_8h_a52fa495c7147e166f647c179db74b0bd}{UISUBCLASS\_BOOT}}) \&\&}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00221}00221             (uaa-\/>\mbox{\hyperlink{structusb__attach__arg_a66c2afc71fce73cc432f7d58593e1f26}{info}}.\mbox{\hyperlink{structusbd__lookup__info_ae7cd4aacf13732f19919bf228d2b2ef4}{bInterfaceProtocol}} == \mbox{\hyperlink{g__keyboard_8c_ae210534f396fa3ce3240ea25e4e9bc79}{UPROTO\_BOOT\_KEYBOARD}}))}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00222}00222                 \textcolor{keywordflow}{return} (0);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00223}00223 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00224}00224         \textcolor{keywordflow}{return} (ENXIO);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00225}00225 \}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00226}00226 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00227}00227 \textcolor{keyword}{static} \textcolor{keywordtype}{int}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00228}\mbox{\hyperlink{g__keyboard_8c_ac32a3d5032398ad96fb947c99cf1944e}{00228}} \mbox{\hyperlink{g__keyboard_8c_aa02383ef017727b5e0de1d4dbbf266f4}{g\_keyboard\_attach}}(device\_t dev)}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00229}00229 \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00230}00230         \textcolor{keyword}{struct }\mbox{\hyperlink{structg__keyboard__softc}{g\_keyboard\_softc}} *sc = device\_get\_softc(dev);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00231}00231         \textcolor{keyword}{struct }\mbox{\hyperlink{structusb__attach__arg}{usb\_attach\_arg}} *uaa = device\_get\_ivars(dev);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00232}00232         \textcolor{keywordtype}{int} \mbox{\hyperlink{if__runreg_8h_a9f8f252ecb5b3fb46dafe827231faf70}{error}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00233}00233 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00234}00234         DPRINTFN(11, \textcolor{stringliteral}{"{}\(\backslash\)n"{}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00235}00235 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00236}00236         \mbox{\hyperlink{usb__util_8c_a2f65a197990caa1a69a16691ce4dc66a}{device\_set\_usb\_desc}}(dev);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00237}00237 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00238}00238         mtx\_init(\&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a0dee4bca6197f5cf9e0ae56147b1d7aa}{sc\_mtx}}, \textcolor{stringliteral}{"{}g\_keyboard"{}}, NULL, MTX\_DEF);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00239}00239 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00240}00240         \mbox{\hyperlink{usbdi_8h_a1f241362056f1ed3d4c4b5cfb63ce8e5}{usb\_callout\_init\_mtx}}(\&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_aaf44d64b1a5ecda33e925a4b7f439c52}{sc\_callout}}, \&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a0dee4bca6197f5cf9e0ae56147b1d7aa}{sc\_mtx}}, 0);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00241}00241 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00242}00242         sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a86ad0cf623d3f3d939aa5290d80e953d}{sc\_mode}} = \mbox{\hyperlink{g__keyboard_8h_a5ab6fa89ed15eb3e2858669ce079455f}{G\_KEYBOARD\_MODE\_SILENT}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00243}00243 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00244}00244         \mbox{\hyperlink{if__runreg_8h_a9f8f252ecb5b3fb46dafe827231faf70}{error}} = \mbox{\hyperlink{usb__transfer_8c_a7494c04fae5c5e7ef1af436308670a21}{usbd\_transfer\_setup}}(uaa-\/>\mbox{\hyperlink{structusb__attach__arg_ac86557d3eaf77874d436ce38648b0276}{device}},}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00245}00245             \&uaa-\/>\mbox{\hyperlink{structusb__attach__arg_a66c2afc71fce73cc432f7d58593e1f26}{info}}.\mbox{\hyperlink{structusbd__lookup__info_a50a68740a4c82f1a9b999d4a7994b550}{bIfaceIndex}}, sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a6442eeb64622447c99a415111267dd05}{sc\_xfer}}, \mbox{\hyperlink{g__keyboard_8c_a6f394aa39bbc94486a980798f6dbb66e}{g\_keyboard\_config}},}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00246}00246             \mbox{\hyperlink{g__keyboard_8c_adc29c2ff13d900c2f185ee95427fb06caaf1206ba1d2bc6f8eb95588ed4797570}{G\_KEYBOARD\_N\_TRANSFER}}, sc, \&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a0dee4bca6197f5cf9e0ae56147b1d7aa}{sc\_mtx}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00247}00247 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00248}00248         \textcolor{keywordflow}{if} (\mbox{\hyperlink{if__runreg_8h_a9f8f252ecb5b3fb46dafe827231faf70}{error}}) \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00249}00249                 \mbox{\hyperlink{umass_8c_aa786fc43d4857c3ab9f2c777b4e6f9c5}{DPRINTF}}(\textcolor{stringliteral}{"{}error=\%s\(\backslash\)n"{}}, \mbox{\hyperlink{usb__error_8c_a2391eb446dce3e4368cacf781857774e}{usbd\_errstr}}(\mbox{\hyperlink{if__runreg_8h_a9f8f252ecb5b3fb46dafe827231faf70}{error}}));}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00250}00250                 \textcolor{keywordflow}{goto} detach;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00251}00251         \}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00252}00252         mtx\_lock(\&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a0dee4bca6197f5cf9e0ae56147b1d7aa}{sc\_mtx}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00253}00253         \mbox{\hyperlink{g__keyboard_8c_a472a2de55d895db6d76a5aa25a5a4fa9}{g\_keyboard\_timeout\_reset}}(sc);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00254}00254         mtx\_unlock(\&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a0dee4bca6197f5cf9e0ae56147b1d7aa}{sc\_mtx}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00255}00255 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00256}00256         \textcolor{keywordflow}{return} (0);                     \textcolor{comment}{/* success */}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00257}00257 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00258}00258 detach:}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00259}00259         \mbox{\hyperlink{g__keyboard_8c_a431473d67a9f43f454d6000aa797d74b}{g\_keyboard\_detach}}(dev);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00260}00260 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00261}00261         \textcolor{keywordflow}{return} (ENXIO);                 \textcolor{comment}{/* error */}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00262}00262 \}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00263}00263 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00264}00264 \textcolor{keyword}{static} \textcolor{keywordtype}{int}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00265}\mbox{\hyperlink{g__keyboard_8c_a53c0d2c7f9f9a33ecb75b73698dbadc2}{00265}} \mbox{\hyperlink{g__keyboard_8c_a431473d67a9f43f454d6000aa797d74b}{g\_keyboard\_detach}}(device\_t dev)}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00266}00266 \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00267}00267         \textcolor{keyword}{struct }\mbox{\hyperlink{structg__keyboard__softc}{g\_keyboard\_softc}} *sc = device\_get\_softc(dev);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00268}00268 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00269}00269         \mbox{\hyperlink{umass_8c_aa786fc43d4857c3ab9f2c777b4e6f9c5}{DPRINTF}}(\textcolor{stringliteral}{"{}\(\backslash\)n"{}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00270}00270 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00271}00271         mtx\_lock(\&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a0dee4bca6197f5cf9e0ae56147b1d7aa}{sc\_mtx}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00272}00272         \mbox{\hyperlink{usbdi_8h_ad74dd2f25febf2ba5083574711e4101a}{usb\_callout\_stop}}(\&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_aaf44d64b1a5ecda33e925a4b7f439c52}{sc\_callout}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00273}00273         mtx\_unlock(\&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a0dee4bca6197f5cf9e0ae56147b1d7aa}{sc\_mtx}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00274}00274 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00275}00275         \mbox{\hyperlink{usb__transfer_8c_a2f5ab55bfe7f356bb7a7505ff35c9741}{usbd\_transfer\_unsetup}}(sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a6442eeb64622447c99a415111267dd05}{sc\_xfer}}, \mbox{\hyperlink{g__keyboard_8c_adc29c2ff13d900c2f185ee95427fb06caaf1206ba1d2bc6f8eb95588ed4797570}{G\_KEYBOARD\_N\_TRANSFER}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00276}00276 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00277}00277         \mbox{\hyperlink{usbdi_8h_a828c4d79b0d9b11c8dcb77899a2bffda}{usb\_callout\_drain}}(\&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_aaf44d64b1a5ecda33e925a4b7f439c52}{sc\_callout}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00278}00278 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00279}00279         mtx\_destroy(\&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a0dee4bca6197f5cf9e0ae56147b1d7aa}{sc\_mtx}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00280}00280 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00281}00281         \textcolor{keywordflow}{return} (0);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00282}00282 \}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00283}00283 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00284}00284 \textcolor{keyword}{static} uint8\_t}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00285}\mbox{\hyperlink{g__keyboard_8c_aada7bab548a84a818d7f285b0272f550}{00285}} \mbox{\hyperlink{g__keyboard_8c_aada7bab548a84a818d7f285b0272f550}{g\_keyboard\_get\_keycode}}(\textcolor{keyword}{struct} \mbox{\hyperlink{structg__keyboard__softc}{g\_keyboard\_softc}} *sc, \textcolor{keywordtype}{int} index)}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00286}00286 \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00287}00287         \textcolor{keywordtype}{int} key;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00288}00288         \textcolor{keywordtype}{int} mod = sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ae9ecc822287fe1b5782fd13c9b40c14a}{sc\_pattern\_len}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00289}00289 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00290}00290         \textcolor{keywordflow}{if} (mod == 0)}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00291}00291                 index = 0;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00292}00292         \textcolor{keywordflow}{else}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00293}00293                 index \%= mod;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00294}00294 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00295}00295         \textcolor{keywordflow}{if} ((index >= 0) \&\& (index < sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ae9ecc822287fe1b5782fd13c9b40c14a}{sc\_pattern\_len}}))}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00296}00296                 key = sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a24a2b9b84d8225e90c911dae57359877}{sc\_pattern}}[index];}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00297}00297         \textcolor{keywordflow}{else}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00298}00298                 key = \textcolor{charliteral}{'a'};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00299}00299 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00300}00300         \textcolor{keywordflow}{if} (key >= \textcolor{charliteral}{'a'} \&\& key <= \textcolor{charliteral}{'z'})}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00301}00301                 \textcolor{keywordflow}{return} (key -\/ \textcolor{charliteral}{'a'} + 0x04);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00302}00302         \textcolor{keywordflow}{else}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00303}00303                 \textcolor{keywordflow}{return} (0x04);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00304}00304 \}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00305}00305 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00306}00306 \textcolor{keyword}{static} \textcolor{keywordtype}{void}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00307}\mbox{\hyperlink{g__keyboard_8c_aa5a713cf7d0f7ad8aee8716b89dcdf86}{00307}} \mbox{\hyperlink{g__keyboard_8c_adbe52c4f6d779d05bb8ef80857fbcb7b}{g\_keyboard\_intr\_callback}}(\textcolor{keyword}{struct} \mbox{\hyperlink{structusb__xfer}{usb\_xfer}} *xfer, \mbox{\hyperlink{usbdi_8h_a5daf16538c7ea36dad2de85182c72945}{usb\_error\_t}} \mbox{\hyperlink{if__runreg_8h_a9f8f252ecb5b3fb46dafe827231faf70}{error}})}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00308}00308 \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00309}00309         \textcolor{keyword}{struct }\mbox{\hyperlink{structg__keyboard__softc}{g\_keyboard\_softc}} *sc = \mbox{\hyperlink{usb__transfer_8c_ab75ef6d82c4a000a3d16c133d1d589b0}{usbd\_xfer\_softc}}(xfer);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00310}00310         \textcolor{keywordtype}{int} actlen;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00311}00311         \textcolor{keywordtype}{int} aframes;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00312}00312 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00313}00313         \mbox{\hyperlink{usb__transfer_8c_ac0c68320222f26c2a3eba47b46c47899}{usbd\_xfer\_status}}(xfer, \&actlen, NULL, \&aframes, NULL);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00314}00314 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00315}00315         \mbox{\hyperlink{umass_8c_aa786fc43d4857c3ab9f2c777b4e6f9c5}{DPRINTF}}(\textcolor{stringliteral}{"{}st=\%d aframes=\%d actlen=\%d bytes\(\backslash\)n"{}},}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00316}00316             \mbox{\hyperlink{usbdi_8h_adc2dd35bd0dd6a42d3abd4230796a7b0}{USB\_GET\_STATE}}(xfer), aframes, actlen);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00317}00317 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00318}00318         \textcolor{keywordflow}{switch} (\mbox{\hyperlink{usbdi_8h_adc2dd35bd0dd6a42d3abd4230796a7b0}{USB\_GET\_STATE}}(xfer)) \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00319}00319         \textcolor{keywordflow}{case} \mbox{\hyperlink{usbdi_8h_a8f0386217ba77be3e47721fae9aa9b3d}{USB\_ST\_TRANSFERRED}}:}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00320}00320                 \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00321}00321 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00322}00322         \textcolor{keywordflow}{case} \mbox{\hyperlink{usbdi_8h_a3aa7120c3ecab31972b8fe219530f552}{USB\_ST\_SETUP}}:}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00323}00323 tr\_setup:}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00324}00324                 \textcolor{keywordflow}{if} (sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a86ad0cf623d3f3d939aa5290d80e953d}{sc\_mode}} == \mbox{\hyperlink{g__keyboard_8h_a5ab6fa89ed15eb3e2858669ce079455f}{G\_KEYBOARD\_MODE\_SILENT}}) \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00325}00325                         memset(\&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}, 0, \textcolor{keyword}{sizeof}(sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}));}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00326}00326                         \mbox{\hyperlink{usb__transfer_8c_a30d239cbfe3c02ec7da6e6dfe5055762}{usbd\_xfer\_set\_frame\_data}}(xfer, 0, \&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}[0], \textcolor{keyword}{sizeof}(sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}[0]));}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00327}00327                         \mbox{\hyperlink{usb__transfer_8c_a30d239cbfe3c02ec7da6e6dfe5055762}{usbd\_xfer\_set\_frame\_data}}(xfer, 1, \&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}[1], \textcolor{keyword}{sizeof}(sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}[1]));}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00328}00328                         \mbox{\hyperlink{usb__transfer_8c_a10f82b008c3a5311e5210e44beaca014}{usbd\_xfer\_set\_frames}}(xfer, 2);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00329}00329                         \mbox{\hyperlink{usb__transfer_8c_a10c440b0b97cac293b4df9d558f15bac}{usbd\_transfer\_submit}}(xfer);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00330}00330 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00331}00331                 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a86ad0cf623d3f3d939aa5290d80e953d}{sc\_mode}} == \mbox{\hyperlink{g__keyboard_8h_a375b335406b319c9d1b9712c9b55a9ab}{G\_KEYBOARD\_MODE\_PATTERN}}) \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00332}00332                         memset(\&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}, 0, \textcolor{keyword}{sizeof}(sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}));}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00333}00333 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00334}00334                         \textcolor{keywordflow}{if} ((sc-\/>\mbox{\hyperlink{structg__keyboard__softc_affe5ba8bfc8f074ef02abf9381ca49bb}{sc\_state}} < 0) || (sc-\/>\mbox{\hyperlink{structg__keyboard__softc_affe5ba8bfc8f074ef02abf9381ca49bb}{sc\_state}} >= \mbox{\hyperlink{g__keyboard_8h_aa92958b736497c1ffa0c41e13252d21b}{G\_KEYBOARD\_MAX\_STRLEN}}))}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00335}00335                                 sc-\/>\mbox{\hyperlink{structg__keyboard__softc_affe5ba8bfc8f074ef02abf9381ca49bb}{sc\_state}} = 0;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00336}00336 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00337}00337                         \textcolor{keywordflow}{switch} (sc-\/>\mbox{\hyperlink{structg__keyboard__softc_affe5ba8bfc8f074ef02abf9381ca49bb}{sc\_state}} \% 6) \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00338}00338                         \textcolor{keywordflow}{case} 0:}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00339}00339                                 sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}[0].\mbox{\hyperlink{structg__keyboard__data_a141aeb660d3fc5f71b86df777dad1b37}{keycode}}[0] =}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00340}00340                                     \mbox{\hyperlink{g__keyboard_8c_aada7bab548a84a818d7f285b0272f550}{g\_keyboard\_get\_keycode}}(sc, sc-\/>\mbox{\hyperlink{structg__keyboard__softc_affe5ba8bfc8f074ef02abf9381ca49bb}{sc\_state}} + 0);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00341}00341                         \textcolor{keywordflow}{case} 1:}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00342}00342                                 sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}[0].\mbox{\hyperlink{structg__keyboard__data_a141aeb660d3fc5f71b86df777dad1b37}{keycode}}[1] =}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00343}00343                                     \mbox{\hyperlink{g__keyboard_8c_aada7bab548a84a818d7f285b0272f550}{g\_keyboard\_get\_keycode}}(sc, sc-\/>\mbox{\hyperlink{structg__keyboard__softc_affe5ba8bfc8f074ef02abf9381ca49bb}{sc\_state}} + 1);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00344}00344                         \textcolor{keywordflow}{case} 2:}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00345}00345                                 sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}[0].\mbox{\hyperlink{structg__keyboard__data_a141aeb660d3fc5f71b86df777dad1b37}{keycode}}[2] =}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00346}00346                                     \mbox{\hyperlink{g__keyboard_8c_aada7bab548a84a818d7f285b0272f550}{g\_keyboard\_get\_keycode}}(sc, sc-\/>\mbox{\hyperlink{structg__keyboard__softc_affe5ba8bfc8f074ef02abf9381ca49bb}{sc\_state}} + 2);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00347}00347                         \textcolor{keywordflow}{case} 3:}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00348}00348                                 sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}[0].\mbox{\hyperlink{structg__keyboard__data_a141aeb660d3fc5f71b86df777dad1b37}{keycode}}[3] =}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00349}00349                                     \mbox{\hyperlink{g__keyboard_8c_aada7bab548a84a818d7f285b0272f550}{g\_keyboard\_get\_keycode}}(sc, sc-\/>\mbox{\hyperlink{structg__keyboard__softc_affe5ba8bfc8f074ef02abf9381ca49bb}{sc\_state}} + 3);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00350}00350                         \textcolor{keywordflow}{case} 4:}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00351}00351                                 sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}[0].\mbox{\hyperlink{structg__keyboard__data_a141aeb660d3fc5f71b86df777dad1b37}{keycode}}[4] =}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00352}00352                                     \mbox{\hyperlink{g__keyboard_8c_aada7bab548a84a818d7f285b0272f550}{g\_keyboard\_get\_keycode}}(sc, sc-\/>\mbox{\hyperlink{structg__keyboard__softc_affe5ba8bfc8f074ef02abf9381ca49bb}{sc\_state}} + 4);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00353}00353                         \textcolor{keywordflow}{default}:}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00354}00354                                 sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}[0].\mbox{\hyperlink{structg__keyboard__data_a141aeb660d3fc5f71b86df777dad1b37}{keycode}}[5] =}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00355}00355                                     \mbox{\hyperlink{g__keyboard_8c_aada7bab548a84a818d7f285b0272f550}{g\_keyboard\_get\_keycode}}(sc, sc-\/>\mbox{\hyperlink{structg__keyboard__softc_affe5ba8bfc8f074ef02abf9381ca49bb}{sc\_state}} + 5);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00356}00356                         \}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00357}00357 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00358}00358                         sc-\/>\mbox{\hyperlink{structg__keyboard__softc_affe5ba8bfc8f074ef02abf9381ca49bb}{sc\_state}}++;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00359}00359 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00360}00360                         \mbox{\hyperlink{usb__transfer_8c_a30d239cbfe3c02ec7da6e6dfe5055762}{usbd\_xfer\_set\_frame\_data}}(xfer, 0, \&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}[0], \textcolor{keyword}{sizeof}(sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}[0]));}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00361}00361                         \mbox{\hyperlink{usb__transfer_8c_a30d239cbfe3c02ec7da6e6dfe5055762}{usbd\_xfer\_set\_frame\_data}}(xfer, 1, \&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}[1], \textcolor{keyword}{sizeof}(sc-\/>\mbox{\hyperlink{structg__keyboard__softc_ab817a257d98425fd6f08fc48720fdeaf}{sc\_data}}[1]));}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00362}00362                         \mbox{\hyperlink{usb__transfer_8c_a10f82b008c3a5311e5210e44beaca014}{usbd\_xfer\_set\_frames}}(xfer, 2);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00363}00363                         \mbox{\hyperlink{usb__transfer_8c_a10c440b0b97cac293b4df9d558f15bac}{usbd\_transfer\_submit}}(xfer);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00364}00364                 \}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00365}00365                 \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00366}00366 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00367}00367         \textcolor{keywordflow}{default}:                        \textcolor{comment}{/* Error */}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00368}00368                 \mbox{\hyperlink{umass_8c_aa786fc43d4857c3ab9f2c777b4e6f9c5}{DPRINTF}}(\textcolor{stringliteral}{"{}error=\%s\(\backslash\)n"{}}, \mbox{\hyperlink{usb__error_8c_a2391eb446dce3e4368cacf781857774e}{usbd\_errstr}}(\mbox{\hyperlink{if__runreg_8h_a9f8f252ecb5b3fb46dafe827231faf70}{error}}));}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00369}00369 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00370}00370                 \textcolor{keywordflow}{if} (\mbox{\hyperlink{if__runreg_8h_a9f8f252ecb5b3fb46dafe827231faf70}{error}} != \mbox{\hyperlink{usbdi_8h_a5daf16538c7ea36dad2de85182c72945abe72c3e4b6644141519a28f1ef97f717}{USB\_ERR\_CANCELLED}}) \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00371}00371                         \textcolor{comment}{/* try to clear stall first */}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00372}00372                         \mbox{\hyperlink{usb__transfer_8c_abadf9cb2f8e81a5133af0c8030039de3}{usbd\_xfer\_set\_stall}}(xfer);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00373}00373                         \textcolor{keywordflow}{goto} tr\_setup;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00374}00374                 \}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00375}00375                 \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00376}00376         \}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00377}00377 \}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00378}00378 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00379}00379 \textcolor{keyword}{static} \textcolor{keywordtype}{int}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00380}\mbox{\hyperlink{g__keyboard_8c_acaa92bc3d0cdbd29e6ee22cdd070afc1}{00380}} \mbox{\hyperlink{g__keyboard_8c_a482399d1ac3841acc38f2cfb4a1bd8d4}{g\_keyboard\_handle\_request}}(device\_t dev,}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00381}00381     \textcolor{keyword}{const} \textcolor{keywordtype}{void} *preq, \textcolor{keywordtype}{void} **\mbox{\hyperlink{usb__if_8m_a074c17a419327b41805af2dd7cb152e7}{pptr}}, uint16\_t *\mbox{\hyperlink{usb__if_8m_aaba3806a5156b2c2a6d6f95f0d95ed03}{plen}},}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00382}00382     uint16\_t \mbox{\hyperlink{usb__if_8m_ac681806181c80437cfab37335f62ff39}{offset}}, uint8\_t *\mbox{\hyperlink{usb__if_8m_a8a16a0091a5793ece040278427496b23}{pstate}})}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00383}00383 \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00384}00384         \textcolor{keyword}{struct }\mbox{\hyperlink{structg__keyboard__softc}{g\_keyboard\_softc}} *sc = device\_get\_softc(dev);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00385}00385         \textcolor{keyword}{const} \textcolor{keyword}{struct }\mbox{\hyperlink{structusb__device__request}{usb\_device\_request}} *\mbox{\hyperlink{usb__if_8m_accfb270fc1884a0d1e4b9a0fb6234f14}{req}} = preq;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00386}00386         uint8\_t is\_complete = *\mbox{\hyperlink{usb__if_8m_a8a16a0091a5793ece040278427496b23}{pstate}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00387}00387 }
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00388}00388         \textcolor{keywordflow}{if} (!is\_complete) \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00389}00389                 \textcolor{keywordflow}{if} ((\mbox{\hyperlink{usb__if_8m_accfb270fc1884a0d1e4b9a0fb6234f14}{req}}-\/>bmRequestType == \mbox{\hyperlink{usb_8h_ac338c3af82b085859b50582e10fa7cb7}{UT\_WRITE\_CLASS\_INTERFACE}}) \&\&}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00390}00390                     (\mbox{\hyperlink{usb__if_8m_accfb270fc1884a0d1e4b9a0fb6234f14}{req}}-\/>bRequest == \mbox{\hyperlink{usbhid_8h_a9fc94613b9ef6bb7fcc37deda784c760}{UR\_SET\_REPORT}}) \&\&}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00391}00391                     (\mbox{\hyperlink{usb__if_8m_accfb270fc1884a0d1e4b9a0fb6234f14}{req}}-\/>wValue[0] == 0x00) \&\&}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00392}00392                     (\mbox{\hyperlink{usb__if_8m_accfb270fc1884a0d1e4b9a0fb6234f14}{req}}-\/>wValue[1] == 0x02)) \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00393}00393                         \textcolor{keywordflow}{if} (\mbox{\hyperlink{usb__if_8m_ac681806181c80437cfab37335f62ff39}{offset}} == 0) \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00394}00394                                 *\mbox{\hyperlink{usb__if_8m_aaba3806a5156b2c2a6d6f95f0d95ed03}{plen}} = \textcolor{keyword}{sizeof}(sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a237050b79a08425f8e6c236d1cf63be4}{sc\_led\_state}});}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00395}00395                                 *\mbox{\hyperlink{usb__if_8m_a074c17a419327b41805af2dd7cb152e7}{pptr}} = \&sc-\/>\mbox{\hyperlink{structg__keyboard__softc_a237050b79a08425f8e6c236d1cf63be4}{sc\_led\_state}};}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00396}00396                         \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00397}00397                                 *\mbox{\hyperlink{usb__if_8m_aaba3806a5156b2c2a6d6f95f0d95ed03}{plen}} = 0;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00398}00398                         \}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00399}00399                         \textcolor{keywordflow}{return} (0);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00400}00400                 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} ((\mbox{\hyperlink{usb__if_8m_accfb270fc1884a0d1e4b9a0fb6234f14}{req}}-\/>bmRequestType == \mbox{\hyperlink{usb_8h_ac338c3af82b085859b50582e10fa7cb7}{UT\_WRITE\_CLASS\_INTERFACE}}) \&\&}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00401}00401                             (\mbox{\hyperlink{usb__if_8m_accfb270fc1884a0d1e4b9a0fb6234f14}{req}}-\/>bRequest == \mbox{\hyperlink{usbhid_8h_afea159697b5a77d5adf395f95055f6f7}{UR\_SET\_PROTOCOL}}) \&\&}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00402}00402                             (\mbox{\hyperlink{usb__if_8m_accfb270fc1884a0d1e4b9a0fb6234f14}{req}}-\/>wValue[0] == 0x00) \&\&}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00403}00403                     (\mbox{\hyperlink{usb__if_8m_accfb270fc1884a0d1e4b9a0fb6234f14}{req}}-\/>wValue[1] == 0x00)) \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00404}00404                         *\mbox{\hyperlink{usb__if_8m_aaba3806a5156b2c2a6d6f95f0d95ed03}{plen}} = 0;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00405}00405                         \textcolor{keywordflow}{return} (0);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00406}00406                 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} ((\mbox{\hyperlink{usb__if_8m_accfb270fc1884a0d1e4b9a0fb6234f14}{req}}-\/>bmRequestType == \mbox{\hyperlink{usb_8h_ac338c3af82b085859b50582e10fa7cb7}{UT\_WRITE\_CLASS\_INTERFACE}}) \&\&}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00407}00407                     (\mbox{\hyperlink{usb__if_8m_accfb270fc1884a0d1e4b9a0fb6234f14}{req}}-\/>bRequest == \mbox{\hyperlink{usbhid_8h_adfaea6848ff8bd9a94cc6a059e94b54a}{UR\_SET\_IDLE}})) \{}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00408}00408                         *\mbox{\hyperlink{usb__if_8m_aaba3806a5156b2c2a6d6f95f0d95ed03}{plen}} = 0;}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00409}00409                         \textcolor{keywordflow}{return} (0);}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00410}00410                 \}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00411}00411         \}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00412}00412         \textcolor{keywordflow}{return} (ENXIO);                 \textcolor{comment}{/* use builtin handler */}}
\DoxyCodeLine{\Hypertarget{g__keyboard_8c_source_l00413}00413 \}}

\end{DoxyCode}
