mirror of
https://github.com/bluekitchen/btstack.git
synced 2024-12-29 09:26:08 +00:00
112 lines
6.0 KiB
TeX
112 lines
6.0 KiB
TeX
% !TEX root = btstack_gettingstarted.tex
|
|
\section{Events and Errors}
|
|
\label{appendix:api_events_and_errors}
|
|
|
|
L2CAP events and data packets are delivered to the packet handler specified by \emph{l2cap\_register\_service} resp. \emph{l2cap\_create\_channel\_internal}. Data packets have the L2CAP\_DATA\_PACKET packet type. L2CAP provides the following events:
|
|
\begin{itemize}
|
|
\item L2CAP\_EVENT\_CHANNEL\_OPENED - sent if channel establishment is done. Status not equal zero indicates an error. Possible errors: out of memory; connection terminated by local host, when the connection to remote device fails.
|
|
\item L2CAP\_EVENT\_CHANNEL\_CLOSED - emitted when channel is closed. No status information is provided.
|
|
\item L2CAP\_EVENT\_INCOMING\_CONNECTION - received when the connection is requested by remote. Connection accept and decline are performed with \emph{l2cap\_accept\_connection\_internal} and \emph{l2cap\_decline\_connecti-on\_internal} respectively.
|
|
\item L2CAP\_EVENT\_CREDITS - emitted when there is a chance to send a new L2CAP packet. BTstack does not buffer packets. Instead, it requires the application to retry sending if BTstack cannot deliver a packet to the Bluetooth module. In this case, the l2cap\_send\_internal will return an error.
|
|
\item L2CAP\_EVENT\_SERVICE\_REGISTERED - Status not equal zero indicates an error. Possible errors: service is already registered; MAX\_NO-\_L2CAP\_SERVICES (defined in config.h) already registered.
|
|
\end{itemize}
|
|
|
|
\begin{table*}[bp]
|
|
\caption{L2CAP Events}
|
|
\begin{tabular}{p{1cm}p{10cm}c}\toprule
|
|
\multicolumn{2}{c}{Event / Event Parameters (size in bits) } & Event Code\\
|
|
\midrule
|
|
\multicolumn{2}{l}{L2CAP\_EVENT\_CHANNEL\_OPENED} & 0x70\\
|
|
&\emph{event(8), len(8), status(8), address(48), handle(16)}\\
|
|
&\emph{psm(16), local\_cid(16), remote\_cid(16), local\_mtu(16), }\\
|
|
&\emph{remote\_mtu(16)}\\
|
|
\\
|
|
\multicolumn{2}{l}{L2CAP\_EVENT\_CHANNEL\_CLOSED} & 0x71\\
|
|
&\emph{event (8), len(8), channel(16)}\\
|
|
\\
|
|
\multicolumn{2}{l}{L2CAP\_EVENT\_INCOMING\_CONNECTION}& 0x72\\
|
|
&\emph{event(8), len(8), address(48), handle(16), psm (16), }\\
|
|
&\emph{local\_cid(16), remote\_cid (16)}\\
|
|
\\
|
|
\multicolumn{2}{l}{L2CAP\_EVENT\_CREDITS} & 0x74\\
|
|
&\emph{event(8), len(8), local\_cid(16), credits(8)}\\
|
|
\\
|
|
\multicolumn{2}{l}{L2CAP\_EVENT\_SERVICE\_REGISTERED} & 0x75\\
|
|
&\emph{event(8), len(8), status(8), psm(16)}\\
|
|
\\
|
|
\bottomrule
|
|
\label{table:l2capEvents}
|
|
\end{tabular}
|
|
\end{table*}
|
|
|
|
\pagebreak
|
|
|
|
All RFCOMM events and data packets are currently delivered to the packet handler specified by \emph{rfcomm\_register\_packet\_handler}. Data packets have the \mbox{RFCOMM}\_DATA\_PACKET packet type. Here is the list of events provided by RFCOMM:
|
|
\begin{itemize}
|
|
\item RFCOMM\_EVENT\_INCOMING\_CONNECTION - received when the connection is requested by remote. Connection accept and decline are performed with \emph{rfcomm\_accept\_connection\_internal} and \emph{rfcomm\_decline\_con-nection\_internal} respectively.
|
|
\item RFCOMM\_EVENT\_CHANNEL\_CLOSED - emitted when channel is closed. No status information is provided.
|
|
\item RFCOMM\_EVENT\_OPEN\_CHANNEL\_COMPLETE - sent if channel establishment is done. Status not equal zero indicates an error. Possible errors: an L2CAP error, out of memory.
|
|
\item RFCOMM\_EVENT\_CREDITS - The application can resume sending when this even is received. See Section \ref{section:flowcontrol} for more on RFCOMM credit-based flow-control.
|
|
\item RFCOMM\_EVENT\_SERVICE\_REGISTERED - Status not equal zero indicates an error. Possible errors: service is already registered; MAX-\_NO\_RFCOMM\_SERVICES (defined in config.h) already registered.
|
|
\end{itemize}
|
|
|
|
\begin{table*}[bp]
|
|
\caption{RFCOMM Events}
|
|
\begin{tabular}{p{1cm}p{10cm}c}\toprule
|
|
\multicolumn{2}{c}{Event / Event Parameters (size in bits)} & Event Code\\
|
|
\midrule
|
|
|
|
\multicolumn{2}{l}{RFCOMM\_EVENT\_OPEN\_CHANNEL\_COMPLETE} & 0x80\\
|
|
&\emph{event(8), len(8), status(8), address(48), handle(16), }\\
|
|
&\emph{server\_channel(8), rfcomm\_cid(16), max\_frame\_size(16)}\\
|
|
\\
|
|
\multicolumn{2}{l}{RFCOMM\_EVENT\_CHANNEL\_CLOSED} & 0x81\\
|
|
&\emph{event(8), len(8), rfcomm\_cid(16)}\\
|
|
\\
|
|
\multicolumn{2}{l}{RFCOMM\_EVENT\_INCOMING\_CONNECTION}& 0x82\\
|
|
&\emph{event(8), len(8), address(48), channel (8),} \\
|
|
& \emph{rfcomm\_cid(16)}\\
|
|
\\
|
|
\multicolumn{2}{l}{RFCOMM\_EVENT\_CREDITS} & 0x84\\
|
|
&\emph{event(8), len(8), rfcomm\_cid(16), credits(8)}\\
|
|
\\
|
|
\multicolumn{2}{l}{RFCOMM\_EVENT\_SERVICE\_REGISTERED} & 0x85\\
|
|
&\emph{event(8), len(8), status(8), rfcomm server channel\_id(8)}\\
|
|
\bottomrule
|
|
\label{table:rfcommEvents}
|
|
\end{tabular}
|
|
\end{table*}
|
|
|
|
|
|
\begin{table}
|
|
\caption{Errors}
|
|
\begin{tabular}{lc}\toprule
|
|
Error & Error Code\\
|
|
\midrule
|
|
{\tiny BTSTACK\_MEMORY\_ALLOC\_FAILED} & {\tiny 0x56}\\
|
|
{\tiny BTSTACK\_ACL\_BUFFERS\_FULL} & {\tiny 0x57}\\
|
|
{\tiny L2CAP\_COMMAND\_REJECT\_REASON\_COMMAND\_NOT\_UNDERSTOOD} & {\tiny 0x60}\\
|
|
{\tiny L2CAP\_COMMAND\_REJECT\_REASON\_SIGNALING\_MTU\_EXCEEDED} & {\tiny 0x61}\\
|
|
{\tiny L2CAP\_COMMAND\_REJECT\_REASON\_INVALID\_CID\_IN\_REQUEST} & {\tiny 0x62}\\
|
|
{\tiny L2CAP\_CONNECTION\_RESPONSE\_RESULT\_SUCCESSFUL} & {\tiny 0x63}\\
|
|
{\tiny L2CAP\_CONNECTION\_RESPONSE\_RESULT\_PENDING} & {\tiny 0x64}\\
|
|
{\tiny L2CAP\_CONNECTION\_RESPONSE\_RESULT\_REFUSED\_PSM} & {\tiny 0x65}\\
|
|
{\tiny L2CAP\_CONNECTION\_RESPONSE\_RESULT\_REFUSED\_SECURITY} & {\tiny 0x66}\\
|
|
{\tiny L2CAP\_CONNECTION\_RESPONSE\_RESULT\_REFUSED\_RESOURCES} & {\tiny 0x65}\\
|
|
{\tiny L2CAP\_CONFIG\_RESPONSE\_RESULT\_SUCCESSFUL} & {\tiny 0x66}\\
|
|
{\tiny L2CAP\_CONFIG\_RESPONSE\_RESULT\_UNACCEPTABLE\_PARAMS} & {\tiny 0x67}\\
|
|
{\tiny L2CAP\_CONFIG\_RESPONSE\_RESULT\_REJECTED} & {\tiny 0x68}\\
|
|
{\tiny L2CAP\_CONFIG\_RESPONSE\_RESULT\_UNKNOWN\_OPTIONS} & {\tiny 0x69}\\
|
|
{\tiny L2CAP\_SERVICE\_ALREADY\_REGISTERED} & {\tiny 0x6a}\\
|
|
{\tiny RFCOMM\_MULTIPLEXER\_STOPPED} & {\tiny 0x70}\\
|
|
{\tiny RFCOMM\_CHANNEL\_ALREADY\_REGISTERED} & {\tiny 0x71}\\
|
|
{\tiny RFCOMM\_NO\_OUTGOING\_CREDITS} & {\tiny 0x72}\\
|
|
{\tiny SDP\_HANDLE\_ALREADY\_REGISTERED} & {\tiny 0x80}\\
|
|
\bottomrule
|
|
\label{table:sdpErrors}
|
|
\end{tabular}
|
|
\end{table}
|
|
|
|
\begin{minipage}[t][5cm][t]{\textwidth}
|
|
\end{minipage}
|
|
\pagebreak |