\hypertarget{usb__template__kbd_8c}{}\doxysection{dev/usb/template/usb\+\_\+template\+\_\+kbd.c File Reference}
\label{usb__template__kbd_8c}\index{dev/usb/template/usb\_template\_kbd.c@{dev/usb/template/usb\_template\_kbd.c}}
{\ttfamily \#include $<$sys/stdint.\+h$>$}\newline
{\ttfamily \#include $<$sys/stddef.\+h$>$}\newline
{\ttfamily \#include $<$sys/param.\+h$>$}\newline
{\ttfamily \#include $<$sys/queue.\+h$>$}\newline
{\ttfamily \#include $<$sys/types.\+h$>$}\newline
{\ttfamily \#include $<$sys/systm.\+h$>$}\newline
{\ttfamily \#include $<$sys/kernel.\+h$>$}\newline
{\ttfamily \#include $<$sys/bus.\+h$>$}\newline
{\ttfamily \#include $<$sys/module.\+h$>$}\newline
{\ttfamily \#include $<$sys/lock.\+h$>$}\newline
{\ttfamily \#include $<$sys/mutex.\+h$>$}\newline
{\ttfamily \#include $<$sys/condvar.\+h$>$}\newline
{\ttfamily \#include $<$sys/sysctl.\+h$>$}\newline
{\ttfamily \#include $<$sys/sx.\+h$>$}\newline
{\ttfamily \#include $<$sys/unistd.\+h$>$}\newline
{\ttfamily \#include $<$sys/callout.\+h$>$}\newline
{\ttfamily \#include $<$sys/malloc.\+h$>$}\newline
{\ttfamily \#include $<$sys/priv.\+h$>$}\newline
{\ttfamily \#include $<$dev/usb/usb.\+h$>$}\newline
{\ttfamily \#include $<$dev/usb/usbdi.\+h$>$}\newline
{\ttfamily \#include $<$dev/usb/usb\+\_\+core.\+h$>$}\newline
{\ttfamily \#include $<$dev/usb/usb\+\_\+cdc.\+h$>$}\newline
{\ttfamily \#include $<$dev/usb/usb\+\_\+ioctl.\+h$>$}\newline
{\ttfamily \#include $<$dev/usb/usb\+\_\+util.\+h$>$}\newline
{\ttfamily \#include $<$dev/usb/template/usb\+\_\+template.\+h$>$}\newline
Include dependency graph for usb\+\_\+template\+\_\+kbd.\+c\+:
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{d2/d10/usb__template__kbd_8c__incl}
\end{center}
\end{figure}
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \mbox{\hyperlink{usb__template__kbd_8c_a06035cc6591e6c0cf6d20330dfb0ec84}{KBD\+\_\+\+DEFAULT\+\_\+\+VENDOR\+\_\+\+ID}}~\mbox{\hyperlink{usb__template_8h_a4eb1c883c2f66f7f4ae94383fd6e01e3}{USB\+\_\+\+TEMPLATE\+\_\+\+VENDOR}}
\item 
\#define \mbox{\hyperlink{usb__template__kbd_8c_aef91e4d24bc1b7a7ce35d0af5eb07a73}{KBD\+\_\+\+DEFAULT\+\_\+\+PRODUCT\+\_\+\+ID}}~0x27db
\item 
\#define \mbox{\hyperlink{usb__template__kbd_8c_a60c1e8e6b56b3b94b371584a98b1d9db}{KBD\+\_\+\+DEFAULT\+\_\+\+INTERFACE}}~\char`\"{}Keyboard Interface\char`\"{}
\item 
\#define \mbox{\hyperlink{usb__template__kbd_8c_a0b965dd585feb4bfb73ef4a268920c42}{KBD\+\_\+\+DEFAULT\+\_\+\+MANUFACTURER}}~\mbox{\hyperlink{usb__template_8h_a1a5f2918512e51fd0164ca8208965e24}{USB\+\_\+\+TEMPLATE\+\_\+\+MANUFACTURER}}
\item 
\#define \mbox{\hyperlink{usb__template__kbd_8c_ad1846f9e6ea950266ff1b46d195db607}{KBD\+\_\+\+DEFAULT\+\_\+\+PRODUCT}}~\char`\"{}Keyboard Test Device\char`\"{}
\item 
\#define \mbox{\hyperlink{usb__template__kbd_8c_a7c72c1177353dda6dc93d47bd08d3c19}{KBD\+\_\+\+DEFAULT\+\_\+\+SERIAL\+\_\+\+NUMBER}}~\char`\"{}March 2008\char`\"{}
\end{DoxyCompactItemize}
\doxysubsection*{Enumerations}
\begin{DoxyCompactItemize}
\item 
enum \{ \newline
\mbox{\hyperlink{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7a6517fb2e9128523188c2cb2cbebda571}{KBD\+\_\+\+LANG\+\_\+\+INDEX}}
, \mbox{\hyperlink{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7abe71a1a3d949a4d2c6bbbf6785f73acd}{KBD\+\_\+\+INTERFACE\+\_\+\+INDEX}}
, \mbox{\hyperlink{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7ad0d0e13c1c8ab32140ba8023615713b3}{KBD\+\_\+\+MANUFACTURER\+\_\+\+INDEX}}
, \mbox{\hyperlink{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7a2ad8ccbc1bcaeea6a5a8dcf39421f1b8}{KBD\+\_\+\+PRODUCT\+\_\+\+INDEX}}
, \newline
\mbox{\hyperlink{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7a2b78cd1ca992eb80c469af81bb3ec7e7}{KBD\+\_\+\+SERIAL\+\_\+\+NUMBER\+\_\+\+INDEX}}
, \mbox{\hyperlink{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7af6899495f5f396cfdd0ce5e8dc729fb9}{KBD\+\_\+\+MAX\+\_\+\+INDEX}}
 \}
\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
static const void $\ast$ \mbox{\hyperlink{usb__template__kbd_8c_a8e34875802033f3e06539e367c6ab4d8}{keyboard\+\_\+get\+\_\+vendor\+\_\+desc}} (const struct \mbox{\hyperlink{structusb__device__request}{usb\+\_\+device\+\_\+request}} $\ast$\mbox{\hyperlink{usb__if_8m_accfb270fc1884a0d1e4b9a0fb6234f14}{req}}, uint16\+\_\+t $\ast$\mbox{\hyperlink{usb__if_8m_aaba3806a5156b2c2a6d6f95f0d95ed03}{plen}})
\item 
static const void $\ast$ \mbox{\hyperlink{usb__template__kbd_8c_ad0c2e8e4b7d9a434597d413deab60d1d}{keyboard\+\_\+get\+\_\+string\+\_\+desc}} (uint16\+\_\+t lang\+\_\+id, uint8\+\_\+t string\+\_\+index)
\item 
static void \mbox{\hyperlink{usb__template__kbd_8c_a176bfdaeb645a7d6a2d57fa5d6090658}{kbd\+\_\+init}} (void $\ast$arg \+\_\+\+\_\+unused)
\item 
static void \mbox{\hyperlink{usb__template__kbd_8c_ae21ce7ceedf27afc1c33725b8a06e404}{kbd\+\_\+uninit}} (void $\ast$arg \+\_\+\+\_\+unused)
\item 
\mbox{\hyperlink{usb__template__kbd_8c_a1a1817c0df1dc36a5ae9c974f2acc899}{SYSINIT}} (\mbox{\hyperlink{usb__template__kbd_8c_a176bfdaeb645a7d6a2d57fa5d6090658}{kbd\+\_\+init}}, SI\+\_\+\+SUB\+\_\+\+LOCK, SI\+\_\+\+ORDER\+\_\+\+FIRST, \mbox{\hyperlink{usb__template__kbd_8c_a176bfdaeb645a7d6a2d57fa5d6090658}{kbd\+\_\+init}}, NULL)
\item 
\mbox{\hyperlink{usb__template__kbd_8c_ac1bf9e6da0c7e13b63a1b31b6a718355}{SYSUNINIT}} (\mbox{\hyperlink{usb__template__kbd_8c_ae21ce7ceedf27afc1c33725b8a06e404}{kbd\+\_\+uninit}}, SI\+\_\+\+SUB\+\_\+\+LOCK, SI\+\_\+\+ORDER\+\_\+\+FIRST, \mbox{\hyperlink{usb__template__kbd_8c_ae21ce7ceedf27afc1c33725b8a06e404}{kbd\+\_\+uninit}}, NULL)
\end{DoxyCompactItemize}
\doxysubsection*{Variables}
\begin{DoxyCompactItemize}
\item 
static struct \mbox{\hyperlink{structusb__string__descriptor}{usb\+\_\+string\+\_\+descriptor}} \mbox{\hyperlink{usb__template__kbd_8c_a80602335a30f52c4dba3f5c810cebe43}{kbd\+\_\+interface}}
\item 
static struct \mbox{\hyperlink{structusb__string__descriptor}{usb\+\_\+string\+\_\+descriptor}} \mbox{\hyperlink{usb__template__kbd_8c_a266f652108c243bb95c4cc60510f8f4b}{kbd\+\_\+manufacturer}}
\item 
static struct \mbox{\hyperlink{structusb__string__descriptor}{usb\+\_\+string\+\_\+descriptor}} \mbox{\hyperlink{usb__template__kbd_8c_a675b6b3c07b6e218b9e439b48f7b836f}{kbd\+\_\+product}}
\item 
static struct \mbox{\hyperlink{structusb__string__descriptor}{usb\+\_\+string\+\_\+descriptor}} \mbox{\hyperlink{usb__template__kbd_8c_a7ea8ae3521e70a55e8f55beeb907ab6f}{kbd\+\_\+serial\+\_\+number}}
\item 
static struct sysctl\+\_\+ctx\+\_\+list \mbox{\hyperlink{usb__template__kbd_8c_ac5cf49dd81879bae6d8b5d6dc8c8c2cf}{kbd\+\_\+ctx\+\_\+list}}
\item 
static const struct \mbox{\hyperlink{structusb__temp__packet__size}{usb\+\_\+temp\+\_\+packet\+\_\+size}} \mbox{\hyperlink{usb__template__kbd_8c_a9b9f034aa04da1011ae6e016cd143ca9}{keyboard\+\_\+intr\+\_\+mps}}
\item 
static const struct \mbox{\hyperlink{structusb__temp__interval}{usb\+\_\+temp\+\_\+interval}} \mbox{\hyperlink{usb__template__kbd_8c_ad14de96d7497b374d98bf20490caa48f}{keyboard\+\_\+intr\+\_\+interval}}
\item 
static uint8\+\_\+t \mbox{\hyperlink{usb__template__kbd_8c_a8b7afb2da6e2dd0bc1b062d50101a5b8}{keyboard\+\_\+hid\+\_\+descriptor}} \mbox{[}$\,$\mbox{]}
\item 
static const struct \mbox{\hyperlink{structusb__temp__endpoint__desc}{usb\+\_\+temp\+\_\+endpoint\+\_\+desc}} \mbox{\hyperlink{usb__template__kbd_8c_a903bfd275b995599b4ccde34b97aac0b}{keyboard\+\_\+ep\+\_\+0}}
\item 
static const struct \mbox{\hyperlink{structusb__temp__endpoint__desc}{usb\+\_\+temp\+\_\+endpoint\+\_\+desc}} $\ast$ \mbox{\hyperlink{usb__template__kbd_8c_a95197c92e596e66ccec973312868a222}{keyboard\+\_\+endpoints}} \mbox{[}$\,$\mbox{]}
\item 
static const uint8\+\_\+t \mbox{\hyperlink{usb__template__kbd_8c_a3d246e7911ae95b9df59c6ffc155e4af}{keyboard\+\_\+raw\+\_\+desc}} \mbox{[}$\,$\mbox{]}
\item 
static const void $\ast$ \mbox{\hyperlink{usb__template__kbd_8c_ab253193a11de7521e148b891b2479ea8}{keyboard\+\_\+iface\+\_\+0\+\_\+desc}} \mbox{[}$\,$\mbox{]}
\item 
static const struct \mbox{\hyperlink{structusb__temp__interface__desc}{usb\+\_\+temp\+\_\+interface\+\_\+desc}} \mbox{\hyperlink{usb__template__kbd_8c_aa42586988654e4cb5cc4ed94321a08ad}{keyboard\+\_\+iface\+\_\+0}}
\item 
static const struct \mbox{\hyperlink{structusb__temp__interface__desc}{usb\+\_\+temp\+\_\+interface\+\_\+desc}} $\ast$ \mbox{\hyperlink{usb__template__kbd_8c_ac15437405b90971a8d26ca6722144ed2}{keyboard\+\_\+interfaces}} \mbox{[}$\,$\mbox{]}
\item 
static const struct \mbox{\hyperlink{structusb__temp__config__desc}{usb\+\_\+temp\+\_\+config\+\_\+desc}} \mbox{\hyperlink{usb__template__kbd_8c_af9ed0854225bfeb11d5685977e09abd0}{keyboard\+\_\+config\+\_\+desc}}
\item 
static const struct \mbox{\hyperlink{structusb__temp__config__desc}{usb\+\_\+temp\+\_\+config\+\_\+desc}} $\ast$ \mbox{\hyperlink{usb__template__kbd_8c_a9e3aa2ac58c4d63e3b5a54198e051896}{keyboard\+\_\+configs}} \mbox{[}$\,$\mbox{]}
\item 
static \mbox{\hyperlink{usb__template_8h_ab56131b3dcadea9f2be25f942a4f2af7}{usb\+\_\+temp\+\_\+get\+\_\+string\+\_\+desc\+\_\+t}} \mbox{\hyperlink{usb__template__kbd_8c_aabcc99aec1e75311ae627b5459c34a86}{keyboard\+\_\+get\+\_\+string\+\_\+desc}}
\item 
static \mbox{\hyperlink{usb__template_8h_ab111925929cf0aecdc4029bf4fe9a869}{usb\+\_\+temp\+\_\+get\+\_\+vendor\+\_\+desc\+\_\+t}} \mbox{\hyperlink{usb__template__kbd_8c_a1c96b8187221f382d5a834b0f1f00392}{keyboard\+\_\+get\+\_\+vendor\+\_\+desc}}
\item 
struct \mbox{\hyperlink{structusb__temp__device__desc}{usb\+\_\+temp\+\_\+device\+\_\+desc}} \mbox{\hyperlink{usb__template__kbd_8c_aedc880ca8b7086b12a1272d153255c2b}{usb\+\_\+template\+\_\+kbd}}
\end{DoxyCompactItemize}


\doxysubsection{Macro Definition Documentation}
\mbox{\Hypertarget{usb__template__kbd_8c_a60c1e8e6b56b3b94b371584a98b1d9db}\label{usb__template__kbd_8c_a60c1e8e6b56b3b94b371584a98b1d9db}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!KBD\_DEFAULT\_INTERFACE@{KBD\_DEFAULT\_INTERFACE}}
\index{KBD\_DEFAULT\_INTERFACE@{KBD\_DEFAULT\_INTERFACE}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{KBD\_DEFAULT\_INTERFACE}{KBD\_DEFAULT\_INTERFACE}}
{\footnotesize\ttfamily \#define KBD\+\_\+\+DEFAULT\+\_\+\+INTERFACE~\char`\"{}Keyboard Interface\char`\"{}}



Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00081}{81}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.

\mbox{\Hypertarget{usb__template__kbd_8c_a0b965dd585feb4bfb73ef4a268920c42}\label{usb__template__kbd_8c_a0b965dd585feb4bfb73ef4a268920c42}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!KBD\_DEFAULT\_MANUFACTURER@{KBD\_DEFAULT\_MANUFACTURER}}
\index{KBD\_DEFAULT\_MANUFACTURER@{KBD\_DEFAULT\_MANUFACTURER}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{KBD\_DEFAULT\_MANUFACTURER}{KBD\_DEFAULT\_MANUFACTURER}}
{\footnotesize\ttfamily \#define KBD\+\_\+\+DEFAULT\+\_\+\+MANUFACTURER~\mbox{\hyperlink{usb__template_8h_a1a5f2918512e51fd0164ca8208965e24}{USB\+\_\+\+TEMPLATE\+\_\+\+MANUFACTURER}}}



Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00082}{82}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.

\mbox{\Hypertarget{usb__template__kbd_8c_ad1846f9e6ea950266ff1b46d195db607}\label{usb__template__kbd_8c_ad1846f9e6ea950266ff1b46d195db607}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!KBD\_DEFAULT\_PRODUCT@{KBD\_DEFAULT\_PRODUCT}}
\index{KBD\_DEFAULT\_PRODUCT@{KBD\_DEFAULT\_PRODUCT}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{KBD\_DEFAULT\_PRODUCT}{KBD\_DEFAULT\_PRODUCT}}
{\footnotesize\ttfamily \#define KBD\+\_\+\+DEFAULT\+\_\+\+PRODUCT~\char`\"{}Keyboard Test Device\char`\"{}}



Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00083}{83}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.

\mbox{\Hypertarget{usb__template__kbd_8c_aef91e4d24bc1b7a7ce35d0af5eb07a73}\label{usb__template__kbd_8c_aef91e4d24bc1b7a7ce35d0af5eb07a73}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!KBD\_DEFAULT\_PRODUCT\_ID@{KBD\_DEFAULT\_PRODUCT\_ID}}
\index{KBD\_DEFAULT\_PRODUCT\_ID@{KBD\_DEFAULT\_PRODUCT\_ID}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{KBD\_DEFAULT\_PRODUCT\_ID}{KBD\_DEFAULT\_PRODUCT\_ID}}
{\footnotesize\ttfamily \#define KBD\+\_\+\+DEFAULT\+\_\+\+PRODUCT\+\_\+\+ID~0x27db}



Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00080}{80}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.

\mbox{\Hypertarget{usb__template__kbd_8c_a7c72c1177353dda6dc93d47bd08d3c19}\label{usb__template__kbd_8c_a7c72c1177353dda6dc93d47bd08d3c19}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!KBD\_DEFAULT\_SERIAL\_NUMBER@{KBD\_DEFAULT\_SERIAL\_NUMBER}}
\index{KBD\_DEFAULT\_SERIAL\_NUMBER@{KBD\_DEFAULT\_SERIAL\_NUMBER}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{KBD\_DEFAULT\_SERIAL\_NUMBER}{KBD\_DEFAULT\_SERIAL\_NUMBER}}
{\footnotesize\ttfamily \#define KBD\+\_\+\+DEFAULT\+\_\+\+SERIAL\+\_\+\+NUMBER~\char`\"{}March 2008\char`\"{}}



Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00084}{84}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.

\mbox{\Hypertarget{usb__template__kbd_8c_a06035cc6591e6c0cf6d20330dfb0ec84}\label{usb__template__kbd_8c_a06035cc6591e6c0cf6d20330dfb0ec84}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!KBD\_DEFAULT\_VENDOR\_ID@{KBD\_DEFAULT\_VENDOR\_ID}}
\index{KBD\_DEFAULT\_VENDOR\_ID@{KBD\_DEFAULT\_VENDOR\_ID}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{KBD\_DEFAULT\_VENDOR\_ID}{KBD\_DEFAULT\_VENDOR\_ID}}
{\footnotesize\ttfamily \#define KBD\+\_\+\+DEFAULT\+\_\+\+VENDOR\+\_\+\+ID~\mbox{\hyperlink{usb__template_8h_a4eb1c883c2f66f7f4ae94383fd6e01e3}{USB\+\_\+\+TEMPLATE\+\_\+\+VENDOR}}}



Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00079}{79}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.



\doxysubsection{Enumeration Type Documentation}
\mbox{\Hypertarget{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7}\label{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7}} 
\doxysubsubsection{\texorpdfstring{anonymous enum}{anonymous enum}}
{\footnotesize\ttfamily anonymous enum}

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{KBD\_LANG\_INDEX@{KBD\_LANG\_INDEX}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!KBD\_LANG\_INDEX@{KBD\_LANG\_INDEX}}}\mbox{\Hypertarget{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7a6517fb2e9128523188c2cb2cbebda571}\label{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7a6517fb2e9128523188c2cb2cbebda571}} 
KBD\+\_\+\+LANG\+\_\+\+INDEX&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{KBD\_INTERFACE\_INDEX@{KBD\_INTERFACE\_INDEX}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!KBD\_INTERFACE\_INDEX@{KBD\_INTERFACE\_INDEX}}}\mbox{\Hypertarget{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7abe71a1a3d949a4d2c6bbbf6785f73acd}\label{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7abe71a1a3d949a4d2c6bbbf6785f73acd}} 
KBD\+\_\+\+INTERFACE\+\_\+\+INDEX&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{KBD\_MANUFACTURER\_INDEX@{KBD\_MANUFACTURER\_INDEX}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!KBD\_MANUFACTURER\_INDEX@{KBD\_MANUFACTURER\_INDEX}}}\mbox{\Hypertarget{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7ad0d0e13c1c8ab32140ba8023615713b3}\label{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7ad0d0e13c1c8ab32140ba8023615713b3}} 
KBD\+\_\+\+MANUFACTURER\+\_\+\+INDEX&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{KBD\_PRODUCT\_INDEX@{KBD\_PRODUCT\_INDEX}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!KBD\_PRODUCT\_INDEX@{KBD\_PRODUCT\_INDEX}}}\mbox{\Hypertarget{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7a2ad8ccbc1bcaeea6a5a8dcf39421f1b8}\label{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7a2ad8ccbc1bcaeea6a5a8dcf39421f1b8}} 
KBD\+\_\+\+PRODUCT\+\_\+\+INDEX&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{KBD\_SERIAL\_NUMBER\_INDEX@{KBD\_SERIAL\_NUMBER\_INDEX}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!KBD\_SERIAL\_NUMBER\_INDEX@{KBD\_SERIAL\_NUMBER\_INDEX}}}\mbox{\Hypertarget{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7a2b78cd1ca992eb80c469af81bb3ec7e7}\label{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7a2b78cd1ca992eb80c469af81bb3ec7e7}} 
KBD\+\_\+\+SERIAL\+\_\+\+NUMBER\+\_\+\+INDEX&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{KBD\_MAX\_INDEX@{KBD\_MAX\_INDEX}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!KBD\_MAX\_INDEX@{KBD\_MAX\_INDEX}}}\mbox{\Hypertarget{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7af6899495f5f396cfdd0ce5e8dc729fb9}\label{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7af6899495f5f396cfdd0ce5e8dc729fb9}} 
KBD\+\_\+\+MAX\+\_\+\+INDEX&\\
\hline

\end{DoxyEnumFields}


Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00070}{70}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.



\doxysubsection{Function Documentation}
\mbox{\Hypertarget{usb__template__kbd_8c_a176bfdaeb645a7d6a2d57fa5d6090658}\label{usb__template__kbd_8c_a176bfdaeb645a7d6a2d57fa5d6090658}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!kbd\_init@{kbd\_init}}
\index{kbd\_init@{kbd\_init}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{kbd\_init()}{kbd\_init()}}
{\footnotesize\ttfamily static void kbd\+\_\+init (\begin{DoxyParamCaption}\item[{void $\ast$arg}]{\+\_\+\+\_\+unused }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00238}{238}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.



References \mbox{\hyperlink{usb__template_8h_source_l00090}{usb\+\_\+temp\+\_\+device\+\_\+desc\+::id\+Product}}, \mbox{\hyperlink{usb__template_8h_source_l00089}{usb\+\_\+temp\+\_\+device\+\_\+desc\+::id\+Vendor}}, \mbox{\hyperlink{usb__template__kbd_8c_source_l00091}{kbd\+\_\+ctx\+\_\+list}}, \mbox{\hyperlink{usb__template__kbd_8c_source_l00081}{KBD\+\_\+\+DEFAULT\+\_\+\+INTERFACE}}, \mbox{\hyperlink{usb__template__kbd_8c_source_l00082}{KBD\+\_\+\+DEFAULT\+\_\+\+MANUFACTURER}}, \mbox{\hyperlink{usb__template__kbd_8c_source_l00083}{KBD\+\_\+\+DEFAULT\+\_\+\+PRODUCT}}, \mbox{\hyperlink{usb__template__kbd_8c_source_l00084}{KBD\+\_\+\+DEFAULT\+\_\+\+SERIAL\+\_\+\+NUMBER}}, \mbox{\hyperlink{usb__template__kbd_8c_source_l00086}{kbd\+\_\+interface}}, \mbox{\hyperlink{usb__template__kbd_8c_source_l00087}{kbd\+\_\+manufacturer}}, \mbox{\hyperlink{usb__template__kbd_8c_source_l00088}{kbd\+\_\+product}}, \mbox{\hyperlink{usb__template__kbd_8c_source_l00089}{kbd\+\_\+serial\+\_\+number}}, \mbox{\hyperlink{usb__util_8c_source_l00193}{usb\+\_\+make\+\_\+str\+\_\+desc()}}, \mbox{\hyperlink{usb__ioctl_8h_source_l00057}{USB\+\_\+\+TEMP\+\_\+\+KBD}}, \mbox{\hyperlink{usb__template_8c_source_l00173}{usb\+\_\+temp\+\_\+sysctl()}}, and \mbox{\hyperlink{usb__template__kbd_8c_source_l00173}{usb\+\_\+template\+\_\+kbd}}.

Here is the call graph for this function\+:
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{d9/d95/usb__template__kbd_8c_a176bfdaeb645a7d6a2d57fa5d6090658_cgraph}
\end{center}
\end{figure}
\mbox{\Hypertarget{usb__template__kbd_8c_ae21ce7ceedf27afc1c33725b8a06e404}\label{usb__template__kbd_8c_ae21ce7ceedf27afc1c33725b8a06e404}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!kbd\_uninit@{kbd\_uninit}}
\index{kbd\_uninit@{kbd\_uninit}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{kbd\_uninit()}{kbd\_uninit()}}
{\footnotesize\ttfamily static void kbd\+\_\+uninit (\begin{DoxyParamCaption}\item[{void $\ast$arg}]{\+\_\+\+\_\+unused }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00286}{286}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.



References \mbox{\hyperlink{usb__template__kbd_8c_source_l00091}{kbd\+\_\+ctx\+\_\+list}}.

\mbox{\Hypertarget{usb__template__kbd_8c_ad0c2e8e4b7d9a434597d413deab60d1d}\label{usb__template__kbd_8c_ad0c2e8e4b7d9a434597d413deab60d1d}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!keyboard\_get\_string\_desc@{keyboard\_get\_string\_desc}}
\index{keyboard\_get\_string\_desc@{keyboard\_get\_string\_desc}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{keyboard\_get\_string\_desc()}{keyboard\_get\_string\_desc()}}
{\footnotesize\ttfamily static const void $\ast$ keyboard\+\_\+get\+\_\+string\+\_\+desc (\begin{DoxyParamCaption}\item[{uint16\+\_\+t}]{lang\+\_\+id,  }\item[{uint8\+\_\+t}]{string\+\_\+index }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00215}{215}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.



References \mbox{\hyperlink{usb__template__kbd_8c_source_l00086}{kbd\+\_\+interface}}, \mbox{\hyperlink{usb__template__kbd_8c_source_l00072}{KBD\+\_\+\+INTERFACE\+\_\+\+INDEX}}, \mbox{\hyperlink{usb__template__kbd_8c_source_l00071}{KBD\+\_\+\+LANG\+\_\+\+INDEX}}, \mbox{\hyperlink{usb__template__kbd_8c_source_l00087}{kbd\+\_\+manufacturer}}, \mbox{\hyperlink{usb__template__kbd_8c_source_l00073}{KBD\+\_\+\+MANUFACTURER\+\_\+\+INDEX}}, \mbox{\hyperlink{usb__template__kbd_8c_source_l00076}{KBD\+\_\+\+MAX\+\_\+\+INDEX}}, \mbox{\hyperlink{usb__template__kbd_8c_source_l00088}{kbd\+\_\+product}}, \mbox{\hyperlink{usb__template__kbd_8c_source_l00074}{KBD\+\_\+\+PRODUCT\+\_\+\+INDEX}}, \mbox{\hyperlink{usb__template__kbd_8c_source_l00089}{kbd\+\_\+serial\+\_\+number}}, \mbox{\hyperlink{usb__template__kbd_8c_source_l00075}{KBD\+\_\+\+SERIAL\+\_\+\+NUMBER\+\_\+\+INDEX}}, and \mbox{\hyperlink{usb__core_8c_source_l00063}{usb\+\_\+string\+\_\+lang\+\_\+en}}.

\mbox{\Hypertarget{usb__template__kbd_8c_a8e34875802033f3e06539e367c6ab4d8}\label{usb__template__kbd_8c_a8e34875802033f3e06539e367c6ab4d8}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!keyboard\_get\_vendor\_desc@{keyboard\_get\_vendor\_desc}}
\index{keyboard\_get\_vendor\_desc@{keyboard\_get\_vendor\_desc}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{keyboard\_get\_vendor\_desc()}{keyboard\_get\_vendor\_desc()}}
{\footnotesize\ttfamily static const void $\ast$ keyboard\+\_\+get\+\_\+vendor\+\_\+desc (\begin{DoxyParamCaption}\item[{const struct \mbox{\hyperlink{structusb__device__request}{usb\+\_\+device\+\_\+request}} $\ast$}]{req,  }\item[{uint16\+\_\+t $\ast$}]{plen }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00196}{196}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.



References \mbox{\hyperlink{usb__template__kbd_8c_source_l00109}{keyboard\+\_\+hid\+\_\+descriptor}}, \mbox{\hyperlink{usb__if_8m_source_l00053}{plen}}, and \mbox{\hyperlink{usb__if_8m_source_l00051}{req}}.

\mbox{\Hypertarget{usb__template__kbd_8c_a1a1817c0df1dc36a5ae9c974f2acc899}\label{usb__template__kbd_8c_a1a1817c0df1dc36a5ae9c974f2acc899}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!SYSINIT@{SYSINIT}}
\index{SYSINIT@{SYSINIT}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{SYSINIT()}{SYSINIT()}}
{\footnotesize\ttfamily SYSINIT (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{usb__template__kbd_8c_a176bfdaeb645a7d6a2d57fa5d6090658}{kbd\+\_\+init}}}]{,  }\item[{SI\+\_\+\+SUB\+\_\+\+LOCK}]{,  }\item[{SI\+\_\+\+ORDER\+\_\+\+FIRST}]{,  }\item[{\mbox{\hyperlink{usb__template__kbd_8c_a176bfdaeb645a7d6a2d57fa5d6090658}{kbd\+\_\+init}}}]{,  }\item[{NULL}]{ }\end{DoxyParamCaption})}

\mbox{\Hypertarget{usb__template__kbd_8c_ac1bf9e6da0c7e13b63a1b31b6a718355}\label{usb__template__kbd_8c_ac1bf9e6da0c7e13b63a1b31b6a718355}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!SYSUNINIT@{SYSUNINIT}}
\index{SYSUNINIT@{SYSUNINIT}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{SYSUNINIT()}{SYSUNINIT()}}
{\footnotesize\ttfamily SYSUNINIT (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{usb__template__kbd_8c_ae21ce7ceedf27afc1c33725b8a06e404}{kbd\+\_\+uninit}}}]{,  }\item[{SI\+\_\+\+SUB\+\_\+\+LOCK}]{,  }\item[{SI\+\_\+\+ORDER\+\_\+\+FIRST}]{,  }\item[{\mbox{\hyperlink{usb__template__kbd_8c_ae21ce7ceedf27afc1c33725b8a06e404}{kbd\+\_\+uninit}}}]{,  }\item[{NULL}]{ }\end{DoxyParamCaption})}



\doxysubsection{Variable Documentation}
\mbox{\Hypertarget{usb__template__kbd_8c_ac5cf49dd81879bae6d8b5d6dc8c8c2cf}\label{usb__template__kbd_8c_ac5cf49dd81879bae6d8b5d6dc8c8c2cf}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!kbd\_ctx\_list@{kbd\_ctx\_list}}
\index{kbd\_ctx\_list@{kbd\_ctx\_list}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{kbd\_ctx\_list}{kbd\_ctx\_list}}
{\footnotesize\ttfamily struct sysctl\+\_\+ctx\+\_\+list kbd\+\_\+ctx\+\_\+list\hspace{0.3cm}{\ttfamily [static]}}



Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00091}{91}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.



Referenced by \mbox{\hyperlink{usb__template__kbd_8c_source_l00238}{kbd\+\_\+init()}}, and \mbox{\hyperlink{usb__template__kbd_8c_source_l00286}{kbd\+\_\+uninit()}}.

\mbox{\Hypertarget{usb__template__kbd_8c_a80602335a30f52c4dba3f5c810cebe43}\label{usb__template__kbd_8c_a80602335a30f52c4dba3f5c810cebe43}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!kbd\_interface@{kbd\_interface}}
\index{kbd\_interface@{kbd\_interface}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{kbd\_interface}{kbd\_interface}}
{\footnotesize\ttfamily struct \mbox{\hyperlink{structusb__string__descriptor}{usb\+\_\+string\+\_\+descriptor}} kbd\+\_\+interface\hspace{0.3cm}{\ttfamily [static]}}



Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00086}{86}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.



Referenced by \mbox{\hyperlink{usb__template__kbd_8c_source_l00238}{kbd\+\_\+init()}}, and \mbox{\hyperlink{usb__template__kbd_8c_source_l00215}{keyboard\+\_\+get\+\_\+string\+\_\+desc()}}.

\mbox{\Hypertarget{usb__template__kbd_8c_a266f652108c243bb95c4cc60510f8f4b}\label{usb__template__kbd_8c_a266f652108c243bb95c4cc60510f8f4b}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!kbd\_manufacturer@{kbd\_manufacturer}}
\index{kbd\_manufacturer@{kbd\_manufacturer}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{kbd\_manufacturer}{kbd\_manufacturer}}
{\footnotesize\ttfamily struct \mbox{\hyperlink{structusb__string__descriptor}{usb\+\_\+string\+\_\+descriptor}} kbd\+\_\+manufacturer\hspace{0.3cm}{\ttfamily [static]}}



Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00087}{87}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.



Referenced by \mbox{\hyperlink{usb__template__kbd_8c_source_l00238}{kbd\+\_\+init()}}, and \mbox{\hyperlink{usb__template__kbd_8c_source_l00215}{keyboard\+\_\+get\+\_\+string\+\_\+desc()}}.

\mbox{\Hypertarget{usb__template__kbd_8c_a675b6b3c07b6e218b9e439b48f7b836f}\label{usb__template__kbd_8c_a675b6b3c07b6e218b9e439b48f7b836f}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!kbd\_product@{kbd\_product}}
\index{kbd\_product@{kbd\_product}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{kbd\_product}{kbd\_product}}
{\footnotesize\ttfamily struct \mbox{\hyperlink{structusb__string__descriptor}{usb\+\_\+string\+\_\+descriptor}} kbd\+\_\+product\hspace{0.3cm}{\ttfamily [static]}}



Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00088}{88}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.



Referenced by \mbox{\hyperlink{usb__template__kbd_8c_source_l00238}{kbd\+\_\+init()}}, and \mbox{\hyperlink{usb__template__kbd_8c_source_l00215}{keyboard\+\_\+get\+\_\+string\+\_\+desc()}}.

\mbox{\Hypertarget{usb__template__kbd_8c_a7ea8ae3521e70a55e8f55beeb907ab6f}\label{usb__template__kbd_8c_a7ea8ae3521e70a55e8f55beeb907ab6f}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!kbd\_serial\_number@{kbd\_serial\_number}}
\index{kbd\_serial\_number@{kbd\_serial\_number}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{kbd\_serial\_number}{kbd\_serial\_number}}
{\footnotesize\ttfamily struct \mbox{\hyperlink{structusb__string__descriptor}{usb\+\_\+string\+\_\+descriptor}} kbd\+\_\+serial\+\_\+number\hspace{0.3cm}{\ttfamily [static]}}



Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00089}{89}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.



Referenced by \mbox{\hyperlink{usb__template__kbd_8c_source_l00238}{kbd\+\_\+init()}}, and \mbox{\hyperlink{usb__template__kbd_8c_source_l00215}{keyboard\+\_\+get\+\_\+string\+\_\+desc()}}.

\mbox{\Hypertarget{usb__template__kbd_8c_af9ed0854225bfeb11d5685977e09abd0}\label{usb__template__kbd_8c_af9ed0854225bfeb11d5685977e09abd0}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!keyboard\_config\_desc@{keyboard\_config\_desc}}
\index{keyboard\_config\_desc@{keyboard\_config\_desc}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{keyboard\_config\_desc}{keyboard\_config\_desc}}
{\footnotesize\ttfamily const struct \mbox{\hyperlink{structusb__temp__config__desc}{usb\+\_\+temp\+\_\+config\+\_\+desc}} keyboard\+\_\+config\+\_\+desc\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .ppIfaceDesc = \mbox{\hyperlink{usb__template__kbd_8c_ac15437405b90971a8d26ca6722144ed2}{keyboard\_interfaces}},}
\DoxyCodeLine{        .bmAttributes = 0,}
\DoxyCodeLine{        .bMaxPower = 0,}
\DoxyCodeLine{        .iConfiguration = \mbox{\hyperlink{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7a2ad8ccbc1bcaeea6a5a8dcf39421f1b8}{KBD\_PRODUCT\_INDEX}},}
\DoxyCodeLine{\}}

\end{DoxyCode}


Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00158}{158}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.

\mbox{\Hypertarget{usb__template__kbd_8c_a9e3aa2ac58c4d63e3b5a54198e051896}\label{usb__template__kbd_8c_a9e3aa2ac58c4d63e3b5a54198e051896}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!keyboard\_configs@{keyboard\_configs}}
\index{keyboard\_configs@{keyboard\_configs}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{keyboard\_configs}{keyboard\_configs}}
{\footnotesize\ttfamily const struct \mbox{\hyperlink{structusb__temp__config__desc}{usb\+\_\+temp\+\_\+config\+\_\+desc}}$\ast$ keyboard\+\_\+configs\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \&\mbox{\hyperlink{usb__template__kbd_8c_af9ed0854225bfeb11d5685977e09abd0}{keyboard\_config\_desc}},}
\DoxyCodeLine{        NULL,}
\DoxyCodeLine{\}}

\end{DoxyCode}


Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00165}{165}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.

\mbox{\Hypertarget{usb__template__kbd_8c_a95197c92e596e66ccec973312868a222}\label{usb__template__kbd_8c_a95197c92e596e66ccec973312868a222}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!keyboard\_endpoints@{keyboard\_endpoints}}
\index{keyboard\_endpoints@{keyboard\_endpoints}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{keyboard\_endpoints}{keyboard\_endpoints}}
{\footnotesize\ttfamily const struct \mbox{\hyperlink{structusb__temp__endpoint__desc}{usb\+\_\+temp\+\_\+endpoint\+\_\+desc}}$\ast$ keyboard\+\_\+endpoints\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \&\mbox{\hyperlink{usb__template__kbd_8c_a903bfd275b995599b4ccde34b97aac0b}{keyboard\_ep\_0}},}
\DoxyCodeLine{        NULL,}
\DoxyCodeLine{\}}

\end{DoxyCode}


Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00129}{129}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.

\mbox{\Hypertarget{usb__template__kbd_8c_a903bfd275b995599b4ccde34b97aac0b}\label{usb__template__kbd_8c_a903bfd275b995599b4ccde34b97aac0b}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!keyboard\_ep\_0@{keyboard\_ep\_0}}
\index{keyboard\_ep\_0@{keyboard\_ep\_0}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{keyboard\_ep\_0}{keyboard\_ep\_0}}
{\footnotesize\ttfamily const struct \mbox{\hyperlink{structusb__temp__endpoint__desc}{usb\+\_\+temp\+\_\+endpoint\+\_\+desc}} keyboard\+\_\+ep\+\_\+0\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .ppRawDesc = NULL,              }
\DoxyCodeLine{        .pPacketSize = \&\mbox{\hyperlink{usb__template__kbd_8c_a9b9f034aa04da1011ae6e016cd143ca9}{keyboard\_intr\_mps}},}
\DoxyCodeLine{        .pIntervals = \&\mbox{\hyperlink{usb__template__kbd_8c_ad14de96d7497b374d98bf20490caa48f}{keyboard\_intr\_interval}},}
\DoxyCodeLine{        .bEndpointAddress = \mbox{\hyperlink{usb_8h_a72bb077a860132c175c166f344c75893}{UE\_DIR\_IN}},}
\DoxyCodeLine{        .bmAttributes = \mbox{\hyperlink{usb_8h_a01e28e87ad16f6dfffefc6ccab08baed}{UE\_INTERRUPT}},}
\DoxyCodeLine{\}}

\end{DoxyCode}


Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00121}{121}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.

\mbox{\Hypertarget{usb__template__kbd_8c_aabcc99aec1e75311ae627b5459c34a86}\label{usb__template__kbd_8c_aabcc99aec1e75311ae627b5459c34a86}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!keyboard\_get\_string\_desc@{keyboard\_get\_string\_desc}}
\index{keyboard\_get\_string\_desc@{keyboard\_get\_string\_desc}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{keyboard\_get\_string\_desc}{keyboard\_get\_string\_desc}}
{\footnotesize\ttfamily \mbox{\hyperlink{usb__template_8h_ab56131b3dcadea9f2be25f942a4f2af7}{usb\+\_\+temp\+\_\+get\+\_\+string\+\_\+desc\+\_\+t}} keyboard\+\_\+get\+\_\+string\+\_\+desc\hspace{0.3cm}{\ttfamily [static]}}



Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00170}{170}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.

\mbox{\Hypertarget{usb__template__kbd_8c_a1c96b8187221f382d5a834b0f1f00392}\label{usb__template__kbd_8c_a1c96b8187221f382d5a834b0f1f00392}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!keyboard\_get\_vendor\_desc@{keyboard\_get\_vendor\_desc}}
\index{keyboard\_get\_vendor\_desc@{keyboard\_get\_vendor\_desc}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{keyboard\_get\_vendor\_desc}{keyboard\_get\_vendor\_desc}}
{\footnotesize\ttfamily \mbox{\hyperlink{usb__template_8h_ab111925929cf0aecdc4029bf4fe9a869}{usb\+\_\+temp\+\_\+get\+\_\+vendor\+\_\+desc\+\_\+t}} keyboard\+\_\+get\+\_\+vendor\+\_\+desc\hspace{0.3cm}{\ttfamily [static]}}



Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00171}{171}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.

\mbox{\Hypertarget{usb__template__kbd_8c_a8b7afb2da6e2dd0bc1b062d50101a5b8}\label{usb__template__kbd_8c_a8b7afb2da6e2dd0bc1b062d50101a5b8}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!keyboard\_hid\_descriptor@{keyboard\_hid\_descriptor}}
\index{keyboard\_hid\_descriptor@{keyboard\_hid\_descriptor}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{keyboard\_hid\_descriptor}{keyboard\_hid\_descriptor}}
{\footnotesize\ttfamily uint8\+\_\+t keyboard\+\_\+hid\+\_\+descriptor\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x05, 0x07,}
\DoxyCodeLine{        0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01,}
\DoxyCodeLine{        0x75, 0x01, 0x95, 0x08, 0x81, 0x02, 0x95, 0x01,}
\DoxyCodeLine{        0x75, 0x08, 0x81, 0x01, 0x95, 0x03, 0x75, 0x01,}
\DoxyCodeLine{        0x05, 0x08, 0x19, 0x01, 0x29, 0x03, 0x91, 0x02,}
\DoxyCodeLine{        0x95, 0x05, 0x75, 0x01, 0x91, 0x01, 0x95, 0x06,}
\DoxyCodeLine{        0x75, 0x08, 0x15, 0x00, 0x26, 0xff, 0x00, 0x05,}
\DoxyCodeLine{        0x07, 0x19, 0x00, 0x2a, 0xff, 0x00, 0x81, 0x00,}
\DoxyCodeLine{        0xc0}
\DoxyCodeLine{\}}

\end{DoxyCode}


Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00109}{109}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.



Referenced by \mbox{\hyperlink{usb__template__kbd_8c_source_l00196}{keyboard\+\_\+get\+\_\+vendor\+\_\+desc()}}.

\mbox{\Hypertarget{usb__template__kbd_8c_aa42586988654e4cb5cc4ed94321a08ad}\label{usb__template__kbd_8c_aa42586988654e4cb5cc4ed94321a08ad}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!keyboard\_iface\_0@{keyboard\_iface\_0}}
\index{keyboard\_iface\_0@{keyboard\_iface\_0}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{keyboard\_iface\_0}{keyboard\_iface\_0}}
{\footnotesize\ttfamily const struct \mbox{\hyperlink{structusb__temp__interface__desc}{usb\+\_\+temp\+\_\+interface\+\_\+desc}} keyboard\+\_\+iface\+\_\+0\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .ppRawDesc = \mbox{\hyperlink{usb__template__kbd_8c_ab253193a11de7521e148b891b2479ea8}{keyboard\_iface\_0\_desc}},}
\DoxyCodeLine{        .ppEndpoints = \mbox{\hyperlink{usb__template__kbd_8c_a95197c92e596e66ccec973312868a222}{keyboard\_endpoints}},}
\DoxyCodeLine{        .bInterfaceClass = \mbox{\hyperlink{usb_8h_a77eca6d49a1f0f93fb31aad0ef2f33b4}{UICLASS\_HID}},}
\DoxyCodeLine{        .bInterfaceSubClass = \mbox{\hyperlink{usb_8h_a52fa495c7147e166f647c179db74b0bd}{UISUBCLASS\_BOOT}},}
\DoxyCodeLine{        .bInterfaceProtocol = \mbox{\hyperlink{usb_8h_afb41e8c64624580d7d4e14c7122d5183}{UIPROTO\_BOOT\_KEYBOARD}},}
\DoxyCodeLine{        .iInterface = \mbox{\hyperlink{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7abe71a1a3d949a4d2c6bbbf6785f73acd}{KBD\_INTERFACE\_INDEX}},}
\DoxyCodeLine{\}}

\end{DoxyCode}


Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00144}{144}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.

\mbox{\Hypertarget{usb__template__kbd_8c_ab253193a11de7521e148b891b2479ea8}\label{usb__template__kbd_8c_ab253193a11de7521e148b891b2479ea8}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!keyboard\_iface\_0\_desc@{keyboard\_iface\_0\_desc}}
\index{keyboard\_iface\_0\_desc@{keyboard\_iface\_0\_desc}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{keyboard\_iface\_0\_desc}{keyboard\_iface\_0\_desc}}
{\footnotesize\ttfamily const void$\ast$ keyboard\+\_\+iface\+\_\+0\+\_\+desc\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \mbox{\hyperlink{usb__template__kbd_8c_a3d246e7911ae95b9df59c6ffc155e4af}{keyboard\_raw\_desc}},}
\DoxyCodeLine{        NULL,}
\DoxyCodeLine{\}}

\end{DoxyCode}


Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00139}{139}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.

\mbox{\Hypertarget{usb__template__kbd_8c_ac15437405b90971a8d26ca6722144ed2}\label{usb__template__kbd_8c_ac15437405b90971a8d26ca6722144ed2}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!keyboard\_interfaces@{keyboard\_interfaces}}
\index{keyboard\_interfaces@{keyboard\_interfaces}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{keyboard\_interfaces}{keyboard\_interfaces}}
{\footnotesize\ttfamily const struct \mbox{\hyperlink{structusb__temp__interface__desc}{usb\+\_\+temp\+\_\+interface\+\_\+desc}}$\ast$ keyboard\+\_\+interfaces\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \&\mbox{\hyperlink{usb__template__kbd_8c_aa42586988654e4cb5cc4ed94321a08ad}{keyboard\_iface\_0}},}
\DoxyCodeLine{        NULL,}
\DoxyCodeLine{\}}

\end{DoxyCode}


Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00153}{153}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.

\mbox{\Hypertarget{usb__template__kbd_8c_ad14de96d7497b374d98bf20490caa48f}\label{usb__template__kbd_8c_ad14de96d7497b374d98bf20490caa48f}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!keyboard\_intr\_interval@{keyboard\_intr\_interval}}
\index{keyboard\_intr\_interval@{keyboard\_intr\_interval}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{keyboard\_intr\_interval}{keyboard\_intr\_interval}}
{\footnotesize\ttfamily const struct \mbox{\hyperlink{structusb__temp__interval}{usb\+\_\+temp\+\_\+interval}} keyboard\+\_\+intr\+\_\+interval\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .bInterval[\mbox{\hyperlink{usb_8h_a97e7c882fa8cd21898173a29471616ffa0ec4f8f66feaf7ee8f2ee618302e9470}{USB\_SPEED\_LOW}}] = 2,     }
\DoxyCodeLine{        .bInterval[\mbox{\hyperlink{usb_8h_a97e7c882fa8cd21898173a29471616ffa0f17d0b9928086c6114fea73e08f1780}{USB\_SPEED\_FULL}}] = 2,   }
\DoxyCodeLine{        .bInterval[\mbox{\hyperlink{usb_8h_a97e7c882fa8cd21898173a29471616ffa57eeede6d769b09c01ac9c9c62fef8c9}{USB\_SPEED\_HIGH}}] = 5,   }
\DoxyCodeLine{\}}

\end{DoxyCode}


Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00101}{101}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.

\mbox{\Hypertarget{usb__template__kbd_8c_a9b9f034aa04da1011ae6e016cd143ca9}\label{usb__template__kbd_8c_a9b9f034aa04da1011ae6e016cd143ca9}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!keyboard\_intr\_mps@{keyboard\_intr\_mps}}
\index{keyboard\_intr\_mps@{keyboard\_intr\_mps}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{keyboard\_intr\_mps}{keyboard\_intr\_mps}}
{\footnotesize\ttfamily const struct \mbox{\hyperlink{structusb__temp__packet__size}{usb\+\_\+temp\+\_\+packet\+\_\+size}} keyboard\+\_\+intr\+\_\+mps\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .mps[\mbox{\hyperlink{usb_8h_a97e7c882fa8cd21898173a29471616ffa0ec4f8f66feaf7ee8f2ee618302e9470}{USB\_SPEED\_LOW}}] = 16,}
\DoxyCodeLine{        .mps[\mbox{\hyperlink{usb_8h_a97e7c882fa8cd21898173a29471616ffa0f17d0b9928086c6114fea73e08f1780}{USB\_SPEED\_FULL}}] = 16,}
\DoxyCodeLine{        .mps[\mbox{\hyperlink{usb_8h_a97e7c882fa8cd21898173a29471616ffa57eeede6d769b09c01ac9c9c62fef8c9}{USB\_SPEED\_HIGH}}] = 16,}
\DoxyCodeLine{\}}

\end{DoxyCode}


Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00095}{95}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.

\mbox{\Hypertarget{usb__template__kbd_8c_a3d246e7911ae95b9df59c6ffc155e4af}\label{usb__template__kbd_8c_a3d246e7911ae95b9df59c6ffc155e4af}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!keyboard\_raw\_desc@{keyboard\_raw\_desc}}
\index{keyboard\_raw\_desc@{keyboard\_raw\_desc}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{keyboard\_raw\_desc}{keyboard\_raw\_desc}}
{\footnotesize\ttfamily const uint8\+\_\+t keyboard\+\_\+raw\+\_\+desc\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        0x09, 0x21, 0x10, 0x01, 0x00, 0x01, 0x22, \textcolor{keyword}{sizeof}(\mbox{\hyperlink{usb__template__kbd_8c_a8b7afb2da6e2dd0bc1b062d50101a5b8}{keyboard\_hid\_descriptor}}),}
\DoxyCodeLine{        0x00}
\DoxyCodeLine{\}}

\end{DoxyCode}


Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00134}{134}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.

\mbox{\Hypertarget{usb__template__kbd_8c_aedc880ca8b7086b12a1272d153255c2b}\label{usb__template__kbd_8c_aedc880ca8b7086b12a1272d153255c2b}} 
\index{usb\_template\_kbd.c@{usb\_template\_kbd.c}!usb\_template\_kbd@{usb\_template\_kbd}}
\index{usb\_template\_kbd@{usb\_template\_kbd}!usb\_template\_kbd.c@{usb\_template\_kbd.c}}
\doxysubsubsection{\texorpdfstring{usb\_template\_kbd}{usb\_template\_kbd}}
{\footnotesize\ttfamily struct \mbox{\hyperlink{structusb__temp__device__desc}{usb\+\_\+temp\+\_\+device\+\_\+desc}} usb\+\_\+template\+\_\+kbd}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .getStringDesc = \&\mbox{\hyperlink{usb__template__kbd_8c_aabcc99aec1e75311ae627b5459c34a86}{keyboard\_get\_string\_desc}},}
\DoxyCodeLine{        .getVendorDesc = \&\mbox{\hyperlink{usb__template__kbd_8c_a1c96b8187221f382d5a834b0f1f00392}{keyboard\_get\_vendor\_desc}},}
\DoxyCodeLine{        .ppConfigDesc = \mbox{\hyperlink{usb__template__kbd_8c_a9e3aa2ac58c4d63e3b5a54198e051896}{keyboard\_configs}},}
\DoxyCodeLine{        .idVendor = \mbox{\hyperlink{usb__template__kbd_8c_a06035cc6591e6c0cf6d20330dfb0ec84}{KBD\_DEFAULT\_VENDOR\_ID}},}
\DoxyCodeLine{        .idProduct = \mbox{\hyperlink{usb__template__kbd_8c_aef91e4d24bc1b7a7ce35d0af5eb07a73}{KBD\_DEFAULT\_PRODUCT\_ID}},}
\DoxyCodeLine{        .bcdDevice = 0x0100,}
\DoxyCodeLine{        .bDeviceClass = \mbox{\hyperlink{usb_8h_afb401cd4f795d145dcfb80ab08f383bb}{UDCLASS\_COMM}},}
\DoxyCodeLine{        .bDeviceSubClass = 0,}
\DoxyCodeLine{        .bDeviceProtocol = 0,}
\DoxyCodeLine{        .iManufacturer = \mbox{\hyperlink{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7ad0d0e13c1c8ab32140ba8023615713b3}{KBD\_MANUFACTURER\_INDEX}},}
\DoxyCodeLine{        .iProduct = \mbox{\hyperlink{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7a2ad8ccbc1bcaeea6a5a8dcf39421f1b8}{KBD\_PRODUCT\_INDEX}},}
\DoxyCodeLine{        .iSerialNumber = \mbox{\hyperlink{usb__template__kbd_8c_a79e9f285d34216706a748fd7ba8941b7a2b78cd1ca992eb80c469af81bb3ec7e7}{KBD\_SERIAL\_NUMBER\_INDEX}},}
\DoxyCodeLine{\}}

\end{DoxyCode}


Definition at line \mbox{\hyperlink{usb__template__kbd_8c_source_l00173}{173}} of file \mbox{\hyperlink{usb__template__kbd_8c_source}{usb\+\_\+template\+\_\+kbd.\+c}}.



Referenced by \mbox{\hyperlink{usb__template__kbd_8c_source_l00238}{kbd\+\_\+init()}}, and \mbox{\hyperlink{usb__template_8c_source_l01416}{usb\+\_\+temp\+\_\+setup\+\_\+by\+\_\+index()}}.

