summaryrefslogtreecommitdiff
path: root/protocols
diff options
context:
space:
mode:
authorJan Altenberg <jan@linutronix.de>2010-12-01 11:58:44 +0100
committerJan Altenberg <jan@linutronix.de>2010-12-01 11:58:44 +0100
commita817312787f50985eeb4e980d7ed524a975e4709 (patch)
tree45300caae1a13f3375c39ba457d5a4f84b1be915 /protocols
parentefa51c6041b97a75b3fb95721977c14f9d25bb6b (diff)
Basic introduction to socketcan / can-utils
Diffstat (limited to 'protocols')
-rw-r--r--protocols/socketcan/Makefile9
-rw-r--r--protocols/socketcan/pres_socketcan_de.tex206
2 files changed, 215 insertions, 0 deletions
diff --git a/protocols/socketcan/Makefile b/protocols/socketcan/Makefile
new file mode 100644
index 0000000..4663d52
--- /dev/null
+++ b/protocols/socketcan/Makefile
@@ -0,0 +1,9 @@
+all:
+ for pdf in `ls -1 *.tex` ; do \
+ pdflatex $$pdf; \
+ pdflatex $$pdf; \
+ done
+
+clean:
+ rm -f *.aux *.log *.pdf *.log *.snm *.toc *.vrb *.nav *.out
+
diff --git a/protocols/socketcan/pres_socketcan_de.tex b/protocols/socketcan/pres_socketcan_de.tex
new file mode 100644
index 0000000..d57d079
--- /dev/null
+++ b/protocols/socketcan/pres_socketcan_de.tex
@@ -0,0 +1,206 @@
+\documentclass[11pt]{beamer}
+
+%\usepackage{ngerman}
+\usepackage{times}
+\usepackage{graphicx}
+\usepackage{pgf,pgfarrows,pgfnodes,pgfautomata,pgfheaps}
+\usepackage{amsmath,amssymb}
+\usepackage[utf8]{inputenc}
+\usepackage{listings,color}
+\definecolor{lbcolor}{RGB}{255,210,150}
+\lstset{
+ language=C,
+ numbers=left,
+ stepnumber=1,
+ numbersep=5pt,
+ numberstyle=\tiny,
+ breaklines=true,
+ breakautoindent=true,
+ postbreak=\space,
+ tabsize=2,
+ basicstyle=\ttfamily\fontsize{7}{9}\selectfont,
+ showspaces=false,
+ showstringspaces=false,
+ extendedchars=true,
+ backgroundcolor=\color{lbcolor},
+ keywordstyle=\bf ,
+ commentstyle=\color{green},
+ stringstyle=\color{red}
+}
+
+\mode<presentation>
+{
+ \usetheme{linutronix}
+}
+
+% on the following slides, include icon in the left sidebar
+\def\lximg{/usr/share/lx/icons/fueller.png}
+
+\title{Can unter Linux: SocketCAN}
+\institute{Linutronix GmbH}
+
+\begin{document}
+
+\frame{ \titlepage }
+
+% stop displaying 'fueller.png' on the following slides
+\def\lximg{none}
+
+%\AtBeginSection[]
+%{
+% \begin{frame}<beamer>
+% \tableofcontents[currentsection,currentsubsection]
+% \end{frame}
+%}
+\begin{frame}
+\frametitle{Übersicht}
+\begin{itemize}
+\item Als neues Netzwerkprotokoll integriert
+\item PF\_CAN
+\item CAN Kommunikation über Sockets
+\item Konfiguration und Debugging über Netzwerktools
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Virtual CAN interface}
+\begin{verbatim}
+sudo modprobe vcan
+sudo ip link add dev vcan0 type vcan
+sudo ip link set up vcan0
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{ifconfig}
+\tiny
+\begin{verbatim}
+$ ifconfig
+...
+vcan0 Link encap:UNSPEC Hardware Adresse 00-00-00-00-00
+ UP RUNNING NOARP MTU:16 Metrik:1
+ RX packets:1 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
+ Kollisionen:0 Sendewarteschlangenlänge:0
+ RX bytes:4 (4.0 B) TX bytes:4 (4.0 B)
+...
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{cansend / candump}
+cansend:
+\begin{verbatim}
+cansend vcan0 123#11223344
+\end{verbatim}
+candump:
+\begin{verbatim}
+$ candump vcan0
+ vcan0 123 [4] 11 22 33 44
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{cangen}
+\begin{verbatim}
+$ cangen vcan0 -I 123 -L 1 -D i
+\end{verbatim}
+\begin{verbatim}
+$ candump vcan0
+ vcan0 123 [1] 39
+ vcan0 123 [1] 3A
+ vcan0 123 [1] 3B
+ vcan0 123 [1] 3C
+ vcan0 123 [1] 3D
+ vcan0 123 [1] 3E
+ vcan0 123 [1] 3F
+ vcan0 123 [1] 40
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{cansniffer}
+cangen:
+\begin{verbatim}
+$ cangen vcan0 -I 123 -L 1 -D i
+\end{verbatim}
+cansniffer vcan0:
+\begin{verbatim}
+- time ID data ... < cansniffer vcan0 #
+0.200107 123 01000000
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Programmierbeispiel: can example}
+\begin{lstlisting}
+int skt = socket(PF_CAN, SOCK_RAW, CAN_RAW);
+int bytes_sent, bytes_read, i;
+struct ifreq ifr;
+struct sockaddr_can addr;
+struct can_frame frame;
+
+strcpy(ifr.ifr_name, "vcan0");
+ioctl(skt, SIOCGIFINDEX, &ifr);
+
+addr.can_family = AF_CAN;
+addr.can_ifindex = ifr.ifr_ifindex;
+bind(skt, (struct sockaddr*)&addr, sizeof(addr));
+
+frame.can_id = 0x123;
+strcpy(frame.data, "tst");
+frame.can_dlc = strlen(frame.data);
+bytes_sent = write(skt, &frame, sizeof(frame));
+
+bytes_read = read(skt, &frame, sizeof(frame));
+for(i = 0; i < 4; i++)
+ printf("Recveived -> %X\n", frame.data[i]);
+
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Programmierbeispiel: can example}
+1)
+\begin{verbatim}
+$ ./can_example
+\end{verbatim}
+2)
+\begin{verbatim}
+$ candump vcan0
+ vcan0 123 [3] 66 6F 6F
+\end{verbatim}
+3)
+\begin{verbatim}
+$ cansend vcan0 123#11223344
+\end{verbatim}
+4) can\_example:
+\begin{verbatim}
+Received -> 11
+Received -> 22
+...
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{canlogserver}
+\begin{verbatim}
+$ canlogserver vcan0 &
+\end{verbatim}
+\begin{verbatim}
+$ cangen vcan0 -Di -I 42A -L1 &
+\end{verbatim}
+\begin{verbatim}
+$ telnet localhost 28700
+Trying ::1...
+Trying 127.0.0.1...
+Connected to localhost.
+Escape character is '^]'.
+(1289664132.891896) vcan0 42A#00
+(1289664133.092037) vcan0 42A#01
+(1289664133.292138) vcan0 42A#02
+(1289664133.492246) vcan0 42A#03
+(1289664133.692351) vcan0 42A#04
+\end{verbatim}
+\end{frame}
+\end{document}