]> rtime.felk.cvut.cz Git - CanFestival-3.git/blob - doc/manual/en/manual.tex
8ce567c9fbf50b2054c91db959082c1f994fda75
[CanFestival-3.git] / doc / manual / en / manual.tex
1 \documentclass[a4paper,12pt]{book}
2 \usepackage[ascii]{inputenc}
3 \usepackage[T1]{fontenc}
4 \usepackage[french,english]{babel}
5 \usepackage{amsmath,amssymb,amsfonts,textcomp}
6 \usepackage{color}
7 \usepackage{calc}
8 \usepackage{longtable}
9 \usepackage{hyperref}
10 \usepackage{graphics}
11 \usepackage{graphicx}
12 \DeclareGraphicsExtensions{.jpg}
13 \DeclareGraphicsExtensions{.png}
14 \hypersetup{colorlinks=true, linkcolor=blue, filecolor=blue, pagecolor=blue, urlcolor=blue}
15
16 %%%%\%%%%%%%% titre, auteurs, date, etc...%%%%%%%%%%%%%%%%%%
17 \title{\Huge The CanFestival CANOpen stack manual}
18 \author{Edouard TISSERANT}
19 \date{\today}
20
21 % Text styles
22 %\newcommand\textstyleTeletype[1]{\texttt{#1}}
23 % Outline numbering
24 \setcounter{secnumdepth}{5}
25 \renewcommand\thesection{\arabic{section} -}
26 \renewcommand\thesubsection{\arabic{section}.\arabic{subsection})}
27 \renewcommand\thesubsubsection{\arabic{section}.\arabic{subsection}.\arabic{subsubsection})}
28 \renewcommand\theparagraph{\alph{paragraph})}
29 \renewcommand\thesubparagraph{\roman{subparagraph})}
30 % List styles
31 \newcommand\liststyleLi{%
32 \renewcommand\labelitemi{{--}}
33 \renewcommand\labelitemii{{--}}
34 \renewcommand\labelitemiii{{--}}
35 \renewcommand\labelitemiv{{--}}
36 }
37 \newcommand\liststyleLii{%
38 \renewcommand\labelitemi{{--}}
39 \renewcommand\labelitemii{{--}}
40 \renewcommand\labelitemiii{{--}}
41 \renewcommand\labelitemiv{{--}}
42 }
43 \newcommand\liststyleLiii{%
44 \renewcommand\labelitemi{{--}}
45 \renewcommand\labelitemii{{--}}
46 \renewcommand\labelitemiii{{--}}
47 \renewcommand\labelitemiv{{--}}
48 }
49 \newcommand\liststyleLiv{%
50 \renewcommand\labelitemi{{--}}
51 \renewcommand\labelitemii{{--}}
52 \renewcommand\labelitemiii{{--}}
53 \renewcommand\labelitemiv{{--}}
54 }
55 \newcommand\liststyleLv{%
56 \renewcommand\labelitemi{{--}}
57 \renewcommand\labelitemii{{--}}
58 \renewcommand\labelitemiii{{--}}
59 \renewcommand\labelitemiv{{--}}
60 }
61 \newcommand\liststyleLvi{%
62 \renewcommand\labelitemi{{--}}
63 \renewcommand\labelitemii{{--}}
64 \renewcommand\labelitemiii{{--}}
65 \renewcommand\labelitemiv{{--}}
66 }
67 \newcommand\liststyleLvii{%
68 \renewcommand\labelitemi{{--}}
69 \renewcommand\labelitemii{{--}}
70 \renewcommand\labelitemiii{{--}}
71 \renewcommand\labelitemiv{{--}}
72 }
73 \newcommand\liststyleLviii{%
74 \renewcommand\labelitemi{{--}}
75 \renewcommand\labelitemii{{--}}
76 \renewcommand\labelitemiii{{--}}
77 \renewcommand\labelitemiv{{--}}
78 }
79 \newcommand\liststyleLix{%
80 \renewcommand\labelitemi{{--}}
81 \renewcommand\labelitemii{{--}}
82 \renewcommand\labelitemiii{{--}}
83 \renewcommand\labelitemiv{{--}}
84 }
85 \newcommand\liststyleLx{%
86 \renewcommand\labelitemi{{--}}
87 \renewcommand\labelitemii{{--}}
88 \renewcommand\labelitemiii{{--}}
89 \renewcommand\labelitemiv{{--}}
90 }
91 \newcommand\liststyleLxi{%
92 \renewcommand\labelitemi{{--}}
93 \renewcommand\labelitemii{{--}}
94 \renewcommand\labelitemiii{{--}}
95 \renewcommand\labelitemiv{{--}}
96 }
97 \newcommand\liststyleLxii{%
98 \renewcommand\labelitemi{{--}}
99 \renewcommand\labelitemii{{--}}
100 \renewcommand\labelitemiii{{--}}
101 \renewcommand\labelitemiv{{--}}
102 }
103 \newcommand\liststyleLxiii{%
104 \renewcommand\labelitemi{{\textbullet}}
105 \renewcommand\labelitemii{{\textbullet}}
106 \renewcommand\labelitemiii{{\textbullet}}
107 \renewcommand\labelitemiv{{\textbullet}}
108 }
109
110 \begin{document}
111
112 {\centering\sffamily\Huge The CanFestival CANOpen stack manual.}
113
114 \renewcommand\contentsname{CanFestival v3.0 Manual}
115 \setcounter{tocdepth}{2}
116 \tableofcontents
117 \section{Introduction}
118 CanFestival is an OpenSource (LGPL and GPL) CANOpen framework.
119
120 \subsection{The CanFestival project}
121 This project, initiated by Edouard TISSERANT in 2001, as grown thanks to
122 Francis DUPIN and other contributors.
123
124 Today, CanFestival focuses on providing an ANSI{}-C platform independent
125 CANOpen stack that can be implemented as master or slave nodes on PCs,
126 Real{}-time IPCs, and Microcontrollers.
127
128 CanFestival is a project supported by Lolitech.
129
130 \subsection{What is CANopen}
131 CANopen is a CAN based high level protocol. It defines some protocols to
132 :
133
134 \liststyleLi
135 \begin{enumerate}
136 \item Configure a CAN network.
137 \item Transmit data to a specific node or in broadcast.
138 \item Administrate the network. For example detecting a not responding
139 node.
140 \end{enumerate}
141 The documentation can be found in the Can in automation website :
142
143 \href{http://www.can-cia.de/canopen}{http://www.can{}-cia.de/canopen}
144
145 The most important document about CANopen is the normative CiA Draft
146 Standard 301, version 4.02. You can now download with no cost the
147 specification in Can in automation website.
148
149 To continue reading this document, let us assume that you have read some
150 papers introducing CANopen.
151
152 \section{CanFestival Features}
153 \subsection{Tools }
154 The CANopen library is coming with some tools :
155
156 \liststyleLii
157 \begin{enumerate}
158 \item Object Dictionary editor GUI. WxPython Model{}-View{}-Controler
159 based GUI, that help a lot in generating object dictionary source code
160 for each node.
161 \item A configure script, that let you chose compile time options such
162 as target CPU/HOST, CAN and TIMER drivers.\newline
163 This script have not been generated with autoconf, it have been made
164 keeping micro{}-controller target in mind.
165 \end{enumerate}
166 \subsection{Standard conformance}
167 \paragraph{Multi{}-Platform}
168 \liststyleLiii
169 \begin{enumerate}
170 \item Library source code is C{}-ANSI.
171 \item Driver and examples coding conventions merely depend on target
172 specific contributor/compiler.
173 \item Unix compatible interfaces and examples should compile and run on
174 any Unix system (tested on GNU/Linux and GNU/FreeBSD).
175 \end{enumerate}
176 \paragraph{CanOpen conformance}
177 {\bfseries\upshape
178 DS{}-301}
179
180 \liststyleLiv
181 \begin{enumerate}
182 \item Should conform to DS301. V.4.02 13 february 2002.
183 \item Master and Slave functionality implemented.
184 \item Sending SYNC implemented.
185 \item 1 SDO server per node. (update: more than one possible. To be more
186 tested)
187 \item Unlimited SDO client.
188 \item SDO transmission mode : normal, expedited download and upload.
189 \item Unlimited PDO receive.
190 \item Unlimited PDO transmit.
191 \item Object Data type implemented : 8, 16, 32 bits values, and fixed
192 length strings.
193 \item Slave state full implemented.
194 \item NMT to change slave{\textquotesingle}s state implemented.
195 \item PDO transmission mode : on request, every reception of 0 to n
196 SYNC, on event.
197 \item NMT Heartbeat implemented : A node can be either heartbeat
198 producer or receiver.
199 \item NMT NodeGuard implemented : Not fully implemented.
200 \item TIME (time Stamp) : Not implemented.
201 \item EMCY (emergency objects) : Not implemented.
202 \item PDO Mapping bit per bit implemented.
203 \end{enumerate}
204 {\bfseries\upshape
205 DS{}-302}
206
207 \liststyleLiv
208 \begin{enumerate}
209 \item Concise \space DFC : implemented.
210 \end{enumerate}
211 \section{How to start}
212 \subsection{Host requirements}
213 What you need on your development workstation.
214
215 \subsubsection{Object Dictionary Editor GUI}
216 \liststyleLv
217 \begin{enumerate}
218 \item Python, with 
219 \item wxPyhon modules installed (at least version 2.6.3). 
220 \item Gnosis xml tools. (Optional can also be installed locally to the
221 project automatically will the help of a Makefile. Please see
222 \hyperlink{a91UsingDictionaryEditorGUIoutline}{9.1) Using Dictionary
223 Editor GUI} )
224 \end{enumerate}
225 \subsubsection[\space Linux and Unix{}-likes]{\space Linux and Unix{}-likes}
226 \liststyleLv
227 \begin{enumerate}
228 \item Linux, FreeBSD, Cygwin or any Unix environment with GNU toolchain.
229 \item The GNU C compiler (gcc) or any other ANSI{}-C compiler for your
230 target platform.
231 \item Xpdf, and the official 301\_v04000201.pdf file in order to get GUI
232 context sensitive help. Download the ds301 at\newline
233 \href{http://www.can-cia.org/downloads/ciaspecifications/?1390}{http://www.can{}-cia.org/downloads/ciaspecifications/?1390}.
234 \item GNU Make
235 \item Bash and sed
236 \end{enumerate}
237 \subsubsection{Windows (for native win32 target)}
238 \liststyleLv
239 \begin{enumerate}
240 \item Visual Studio Express 2005 or worst.
241 \item Microsoft platform SDK (requires Genuine Advantage)
242 \item Cygwin (for configuration only)
243 \end{enumerate}
244 \subsection{How to get CanFestival}
245 Please always use CVS, this is the best way to get the most reactive
246 support from the developer community :
247
248 cvs {}-d:pserver:anonymous@lolitech.dyndns.org:/canfestival
249 login\newline
250 (type return, without entering a password) 
251
252 Then, enter : \newline
253 cvs {}-z3 {}-d:pserver:anonymous@lolitech.dyndns.org:/canfestival co
254 {}-P CanFestival{}-3
255
256 \section{Understanding Canfestival}
257 \subsection{CanFestival Project tree layout}
258 Simplified directory structure.
259
260 {\ttfamily\bfseries
261 ./src ANSI{}-C source of CANOpen stack}
262
263 {\ttfamily\bfseries
264 \space /include Exportables Header files}
265
266 {\ttfamily\bfseries
267 ./drivers Interfaces to specific platforms/HW}
268
269 {\ttfamily
270 ./drivers/unix Linux and Cygwin OS interface}
271
272 {\ttfamily
273 ./drivers/win32 Native Win32 OS interface}
274
275 {\ttfamily
276 ./drivers/timers\_xeno Xenomai timers/threads (Linux only)}
277
278 {\ttfamily
279 ./drivers/timers\_unix Posix timers/threads (Linux, Cygwin)}
280
281 {\ttfamily
282 ./drivers/can\_peak\_linux PeakSystem CAN library interface}
283
284 {\ttfamily
285 ./drivers/can\_peak\_win32 PeakSystem PCAN{}-Light interface}
286
287 {\ttfamily
288 ./drivers/can\_uvccm\_win32 Acacetus{\textquotesingle}s RS232
289 ``CAN{}-uVCCM'' interface}
290
291 {\ttfamily
292 ./drivers/can\_virtual Fake CAN network (Linux, Cygwin)}
293
294 {\ttfamily
295 ./drivers/hcs12 HCS12 full target interface}
296
297 {\ttfamily\bfseries
298 ./examples Examples}
299
300 {\ttfamily
301 ./examples/TestMasterSlave 2 nodes, NMT SYNC SDO PDO, win32+unix}
302
303 {\ttfamily
304 ./examples/TestMasterMicroMod 1 node, control Peak I/O Module, unix}
305
306 {\ttfamily
307 ./examples/gene\_SYNC\_HCS12 Just send periodic SYNC on HCS12}
308
309 {\ttfamily
310 ./examples/win32test Ask some DS301 infos to a node (\textbf{win32)}}
311
312 {\ttfamily\bfseries
313 ./objdictgen Object Dictionary editor GUI}
314
315 {\ttfamily
316 ./objdictgen/config Pre{}-defined OD profiles}
317
318 {\ttfamily
319 ./objdictgen/examples Some examples/test OD}
320
321 {\ttfamily\bfseries
322 ./doc Project and CanOpen doc}
323
324 \subsection{Implement CanFestival in your application}
325  
326  \begin{center}
327    \includegraphics[width=12cm]{Pictures/10000201000003F9000002CF880931E7.png}
328 \end{center}
329
330 \bigskip
331
332 \subsection{CanFestival CAN interfaces}
333 Because most CAN controllers and drivers implement FIFOs, CanFestival
334 consider sending message as a non bloking operation.
335
336 In order to prevent reentrent calls to the stack, messages reception is
337 implemented differently on {\textmu}C and OS.:
338
339 \liststyleLvi
340 \begin{enumerate}
341 \item {\textmu}C must provide interuption masking for timer and can
342 receive IT\newline
343  \begin{center}
344    \includegraphics[width=12cm]{Pictures/10000201000003CA0000016604E6A5EF.png}
345 \end{center}
346 \item OS must provide a receive thread, a timer thread and a mutex. CAN
347 reception is a bloking operation.\newline
348 \begin{center}
349    \includegraphics[width=12cm]{Pictures/10000201000003F9000002CF8B0CDAEA.png}
350 \end{center}
351 \end{enumerate}
352 \subsection{CanFestival events scheduling}
353 A CanOpen node must be able to take delayed actions.
354
355 As exemples, periodic sync emission, heartbeat production or SDO timeout
356 need to set some alarms that will be called later and do the job.
357
358 {\textmu}C generaly do not have enough free timers to handle all the
359 CanOpen needs directly. Moreover, CanFestival internal data may be
360 corrupt by reentrant calls. 
361
362 CanFestival implement a micro{}-scheduler (timer.c). It uses only one
363 timer to mimic many timers. It manage an alarm table, and call alarms
364 at desired time.
365
366 \begin{center}
367    \includegraphics[width=12cm]{Pictures/100000000000022C000000DEDAD2140C.png}
368 \end{center}
369
370 Scheduler can handle short clock value ranges limitation found on some
371 {\textmu}C. As an example, value range for a 16bit clock counter with
372 4{\textmu}s tick is crossed within 0.26 seconds... Long alarms must be
373 segmented.
374
375 Chronogram illustrate a long alarm (A) and a short periodic alarm (B),
376 with a A value {\textgreater} clock range {\textgreater} B value.
377 Values t0...t8 are successive setTimer call parameter values. t1
378 illustrates an intermediate call to TimeDispatch, caused by a delay
379 longer than clock range. Because of long alarm segmentation, at the end
380 of t1, TimeDispatch call will not trig any alarm callback.
381
382 \begin{center}
383    \includegraphics[width=12cm]{Pictures/1000000000000396000000FFC42573DA.png}
384 \end{center}
385
386 \section{Linux Target}
387 Linux target is default configure target.
388
389 \subsection{Linux Compilation and installation}
390 Call ./configure {--}help to see all available compile time options.
391
392 After invoking ./configure with your platform specific switches, just
393 type make.
394
395 {\ttfamily
396 ./configure [options]}
397
398 {\ttfamily
399 make}
400
401 {\ttfamily
402 make install}
403
404 \subsubsection{Standard Linux node}
405 Configure switch:
406
407 {\ttfamily
408  {}-{}-timers=unix}
409
410 To do a CANopen node running on PC{}-Linux, you need :
411
412 \liststyleLvii
413 \begin{enumerate}
414 \item A working linux distribution
415 \item One or more Peak system PC CAN interface and the last Peak Linux
416 driver installed.
417 \end{enumerate}
418 \subsubsection{Real{}-Time Linux node}
419 Configure switch:
420
421 {\ttfamily
422  {}-{}-timers=xeno}
423
424 To do a CANopen node running on PC{}-Linux, you need :
425
426 \liststyleLviii
427 \begin{enumerate}
428 \item A working Linux distribution patched with XENOMAI 2.1 or greater.
429 \item One or more Peak system PC CAN interface and the last Peak Real
430 Time Linux driver installed.
431 \end{enumerate}
432 \subsubsection{CAN devices}
433 Curently supported CAN devices and corresponding configure switch:
434
435 \paragraph{Peak systems}
436 Configure switch:
437
438 {\ttfamily
439 {}-{}-can=peak\_linux}
440
441 PeakSystems CAN interface is automatically chosen as default CAN
442 interface if libpcan is present in the system.
443
444 Please download driver at
445 \href{http://www.peak-system.com/linux}{http://www.peak{}-system.com/linux}
446 and follow instructions in order to install driver on your system.
447
448 \paragraph{Socket{}-Can (http://socketcan.berlios.de)}
449 Configure switch:
450
451 {\ttfamily
452 {}-{}-can=socket}
453
454 \paragraph{LinCan}
455 Configure switch:
456
457 {\ttfamily
458 {}-{}-can=lincan}
459
460 \paragraph{Virtual CAN interfaces (for test/debug)}
461 Configure switch:
462
463 {\ttfamily
464 {}-{}-can=virtual}
465
466 Virtual CAN interface use Unix pipes to emulate a virtual CAN network.
467 Each message issued from a node is repeat to all other nodes. Currently
468 only works with nodes running in the same process, and does not support
469 work with Xenomai.
470
471 \subsection{Testing your CanFestival installation}
472 Sample provided in /example/TestMasterSlave is installed into your
473 system during installation.
474
475 {\ttfamily
476 TestMasterSlave}
477
478 Default can driver library is libcanfestival\_can\_virtual.so., which
479 will simply pass CAN messages through Unix pipes between Master and
480 Slave. 
481
482 You may also want to specify different can interface and define some CAN
483 ports. An other example using Peak{\textquotesingle}s dual PCMCIA
484 (configure and install with {--}can=peak) :
485
486 {\ttfamily
487 TestMasterSlave {}-l libcanfestival\_can\_peak.so {}-s 40 {}-m 41}
488
489 \section{Windows Targets}
490 CanFestival can be compiled and run on Windows platform. It is possible
491 to use both Cygwin and win32 native runtime environment.
492
493 \subsection{Object Dictionary Editor GUI installation.}
494 Please refer to
495 \hyperlink{a821UsingDictionaryEditorGUIoutline}{8.2.1)Using Dictionary
496 Editor GUI}
497
498 \subsection{CYGWIN}
499 \subsubsection{Requirements}
500 Cygwin have to be installed with those packages :
501
502 \liststyleLix
503 \begin{enumerate}
504 \item gcc
505 \item unzip
506 \item wget
507 \item make
508 \end{enumerate}
509 Currently, the only supported CAN devices are PeakSystems ones, with
510 PcanLight driver and library. 
511
512 Please download driver at
513 \href{http://www.peak-system.com/themen/download_gb.html}{http://www.peak{}-system.com/themen/download\_gb.html}
514 \space and follow instructions in order to install driver on your system.
515
516 Install Cygwin as required, and the driver for your Peak CAN device.
517
518 Open a Cygwin terminal, and follow those instructions:
519
520 \subsubsection{Cygwin configuration and compilation}
521 \paragraph{A single node with PcanLight and Peak CAN{}-USB adapter}
522 Download the PCAN{}-Light Zip file for your HW ( URL from download page
523 ): 
524
525 {\ttfamily
526 wget http://www.peak{}-system.com/files/usb.zip}
527
528 Extract its content into your cygwin home (it will create a ``Disk''
529 directory):
530
531 {\ttfamily
532 unzip usb.zip}
533
534 Configure CanFestival3 providing path to the desired PcanLight
535 implementation:
536
537 {\ttfamily
538 cd CanFestival{}-3}
539
540 {\ttfamily
541 export PCAN\_INCLUDE=\~{}/Disk/PCAN{}-Light/Api/}
542
543 {\ttfamily
544 export PCAN\_HEADER=Pcan\_usb.h}
545
546 {\ttfamily
547 export PCAN\_LIB=\~{}/Disk/PCAN{}-Light/Lib/Visual{\textbackslash}
548 C++/Pcan\_usb.lib}
549
550 {\ttfamily
551 ./configure {}-{--}can=peak\_win32}
552
553 {\ttfamily
554 make}
555
556 In order to test, you have to use another CanFestival node, connect with
557 a CAN cable.
558
559 {\ttfamily
560 cp \~{}/Disk/PCAN{}-Light/Pcan\_usb.dll .}
561
562 {\ttfamily
563 ./examples/TestMasterSlave/TestMasterSlave {\textbackslash}}
564
565 {\ttfamily
566   {}-l drivers/can\_peak\_win32/cygcan\_peak\_win32.dll
567 {\textbackslash}}
568
569 {\ttfamily
570   {}-S 500K {}-M none}
571
572 Then, on the other node :
573
574 {\ttfamily
575 ./TestMasterSlave {}-l my\_driver.so {}-S none {}-M 500K}
576
577 Now messages are beeing exchanged between master and slave node.
578
579 \paragraph{Two nodes with PcanLight and Peak dual PCMCIA{}-CAN adapter}
580 Download the PCAN{}-Light Zip file for your HW ( URL from download page
581 ): 
582
583 {\ttfamily
584 wget http://www.peak{}-system.com/files/pccard.zip}
585
586 Extract its content into your cygwin home (it will create a ``Disk''
587 directory):
588
589 {\ttfamily
590 unzip pccard.zip}
591
592 The configure CanFestival3 providing path to the desired PcanLight
593 implementation:
594
595 {\ttfamily
596 export PCAN\_INCLUDE=\~{}/Disk/PCAN{}-Light/Api/\newline
597 export PCAN\_HEADER=Pcan\_pcc.h\newline
598 export PCAN\_LIB=\~{}/Disk/PCAN{}-Light/Lib/Visual{\textbackslash}
599 C++/Pcan\_pcc.lib\newline
600 export PCAN2\_HEADER=Pcan\_2pcc.\newline
601 export PCAN2\_LIB=\~{}/Disk/PCAN{}-Light/Lib/Visual{\textbackslash}
602 C++/Pcan\_2pcc.lib}
603
604 In order to test, just connect together both CAN ports of the PCMCIA
605 card. Don{\textquotesingle}t forget 120ohms terminator.
606
607 {\ttfamily
608 cp \~{}/Disk/PCAN{}-Light/Pcan\_pcc.dll .}
609
610 {\ttfamily
611 cp \~{}/Disk/PCAN{}-Light/Pcan\_2pcc.dll .}
612
613 {\ttfamily
614 ./examples/TestMasterSlave/TestMasterSlave {\textbackslash}}
615
616 {\ttfamily
617   {}-l drivers/can\_peak\_win32/cygcan\_peak\_win32.dll}
618
619 Messages are then exchanged between master and slave node, both inside
620 TestMasterSlave{\textquotesingle}s process.
621
622 \subsection{Visual Studio C++}
623 \subsubsection{Requirements}
624 Minimal Cygwin installation is required at configuration time in order
625 to create specific header files (config.h and cancfg.h). Once this
626 files created, cygwin is not necessary any more.
627
628 Project and solution files have been created and tested with Visual
629 Studio Express 2005. Be sure to have installed Microsoft Platform SDK,
630 as recommended at the end of Visual Studio installation.
631
632 \subsubsection{Configuration with cygwin}
633 Follow instructions given at 
634 \hyperlink{Cygwin configuration and compilation}{Cygwin
635 configuration and compilation}, but do neither call make nor do tests,
636 just do configuration steps. This will create headers files accordingly
637 to your configuration parameters, and the desired CAN hardware.
638
639 \subsubsection{Compilation with Visual Studio}
640 You can either load independents ``*.vcproj'' project files along your
641 own projects in your own solution or load the provided
642 ``CanFestival{}-3.vc8.sln'' solution files directly.
643
644 Build CanFestival{}-3 project first.
645
646 \paragraph{PcanLight and the can\_peak\_win32 project.}
647 Chosen Pcan\_xxx.lib and eventually Pcan\_2xxx.lib files must be added
648 to can\_peak\_win32 \space \space project before build of the DLL.
649
650 \subsubsection{Testing}
651 Copy eventually needed dlls (ie : Pcan\_Nxxx.lib) into Release or Debug
652 directory, and run the test program:
653
654 {\ttfamily
655 TestMasterSlave.exe {}-l can\_peak\_win32.dll}
656
657 \section{Motorola HCS12}
658 The examples have been tested on a MC9S12DG255 mounted on a
659 Elektronikladen HCS12 T{}-board.
660
661 Beware that there are a few differences in the MSCAN module of the
662 68HC12 and HCS12 microcontroller. For a HC12, you must adapt the driver
663 that we provide for \space the HCS12.
664
665 For the difference MSCAN HC12/HCS12, see the Motorola application note
666 AN2011/D.
667
668 Configure switch:
669
670 {\ttfamily
671  {}-{}-target=hcs12}
672
673 To do a CANopen node running on a microncontroller Motorola MC9S12DP256,
674 you need :
675
676 \liststyleLx
677 \begin{enumerate}
678 \item The compiler GNU gcc for HC11, HC12, HCS12 : m6811{}-elf. \newline
679 Download the \textbf{release 3.1} at :
680 \space \href{http://m68hc11.serveftp.org/m68hc11_pkg_rpm.php}{http://m68hc11.serveftp.org/m68hc11\_pkg\_rpm.php}
681
682 \item A board with this chip. We are using the T{}-board from
683 Electronikladden. 
684 \item At least about 40 kBytes of program memory.
685 \item A tool to flash the memory. (We are using the hight cost
686 Lauterbach debugger).
687 \end{enumerate}
688 \subsection{Running a HCS12 node}
689 \subsubsection{Compiling Canfestival:}
690 {\ttfamily
691 ./configure {--}target=hcs12}
692
693 \subsubsection{Compiling and building an example}
694 Enter in the folder of an HCS12 example, 
695
696 {\ttfamily
697 make all}
698
699 \subsubsection{Flashing the memory :}
700 Use your prefered loader ! If you are using a debugger Lauterbach, you
701 can load the bash file : trace32\_flash\_programmer.cmm. It loads
702 directly the elf file.
703
704 \subsubsection{Connecting to a serial RS232 console :}
705 Connect the portS(TxD0) of the HCS12 to a console configured at 19200
706 bauds 8N1, via a Max232 chip to adapt the electricals levels. On Linux,
707 you can use minicom. Connecting to a console is usefull to read the
708 messages, but not required.
709
710 \subsubsection{Connecting to the CAN network :}
711 Connect the port CAN0 (pin PM0, PM1) to the network via a CAN
712 controller. On our board, the CAN controler is a PCA82C250 chip.
713
714 \subsubsection{starting the node :}
715 Press the reset of your HCS12 board.
716
717 \section{Example and test program:}
718 The ``examples'' directory contains some test program you can use as
719 example for your own developments.
720
721 \subsection{TestMasterSlave}
722 {\ttfamily
723 **************************************************************\space}
724
725 {\ttfamily
726 * \space TestMasterSlave
727 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
728
729 {\ttfamily
730 *
731 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
732
733 {\ttfamily
734 * \space A simple example for PC. It does implement 2 CanOpen \space \space \space \space \space *}
735
736 {\ttfamily
737 * \space nodes in the same process. A master and a slave. Both \space \space \space \space *}
738
739 {\ttfamily
740 * \space communicate together, exchanging periodically NMT, SYNC, \space *}
741
742 {\ttfamily
743 * \space SDO and PDO. Master configure heartbeat producer time \space \space \space \space *}
744
745 {\ttfamily
746 * \space at 1000 ms for slave node{}-id 0x02 by concise DCF.
747 \space \space \space \space \space \space \space \space *}
748
749 {\ttfamily
750 *
751 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
752
753 {\ttfamily
754 * \space \space Usage:
755 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
756
757 {\ttfamily
758 * \space \space ./TestMasterSlave \space [OPTIONS]
759 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
760
761 {\ttfamily
762 *
763 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
764
765 {\ttfamily
766 * \space \space OPTIONS:
767 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
768
769 {\ttfamily
770 * \space \space \space \space {}-l : Can library
771 [{\textquotedbl}libcanfestival\_can\_virtual.so{\textquotedbl}]
772 \space \space \space \space *}
773
774 {\ttfamily
775 *
776 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
777
778 {\ttfamily
779 * \space \space \space Slave:
780 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
781
782 {\ttfamily
783 * \space \space \space \space {}-s : bus name [{\textquotedbl}0{\textquotedbl}]
784 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
785
786 {\ttfamily
787 * \space \space \space \space {}-S : 1M,500K,250K,125K,100K,50K,20K,10K,none(disable) \space *}
788
789 {\ttfamily
790 *
791 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
792
793 {\ttfamily
794 * \space \space \space Master:
795 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
796
797 {\ttfamily
798 * \space \space \space \space {}-m : bus name [{\textquotedbl}1{\textquotedbl}]
799 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
800
801 {\ttfamily
802 * \space \space \space \space {}-M : 1M,500K,250K,125K,100K,50K,20K,10K,none(disable) \space *}
803
804 {\ttfamily
805 *
806 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
807
808 {\ttfamily
809 **************************************************************}
810
811
812 \bigskip
813
814 {\sffamily
815 Notes for Concise DCF :}
816
817
818 \bigskip
819
820 {\sffamily
821  In this example, Master configure \space heartbeat producer time at 1000 ms
822 for slave node{}-id 0x02 by concise DCF according DS{}-302 profile. }
823
824 {\sffamily
825  }
826
827 {\sffamily
828  Index 0x1F22 , sub{}-index 0x00 of the master OD, correspond to the
829 number of entries. This equal to the maximum possible nodeId (127).
830 Each sub{}-index points to the Node{}-ID of the device, to which the
831 configuration belongs. }
832
833
834 \bigskip
835
836 {\sffamily
837  To add more parameters configurations to the slave, the value at
838 sub{}-index 0x02 must be a binary stream (little{}-endian) following
839 this structure :\newline
840 \{
841 (UNS32) nb of entries\newline
842 (UNS16) index parameter 1\newline
843 (UNS8) sub{}-index parameter 1\newline
844 (UNS32) size data parameter 1\newline
845 (DOMAIN) data parameter 1\newline
846 (UNS16) index parameter 2\newline
847 (UNS8) sub{}-index parameter 2\newline
848 (UNS32) size data parameter 2\newline
849 (DOMAIN) data parameter 2\newline
850 \space \space \space \space \space ....\newline
851 (UNS16) index parameter n\newline
852 (UNS8) sub{}-index parameter n\newline
853 (UNS32) size data parameter n\newline
854 (DOMAIN) data parameter n\newline
855 \}
856 }
857
858 {\sffamily
859  So the binary value stream to configure heartbeat producer time must be
860 :\newline
861     0100000017100002000000e803}
862
863 {\sffamily
864 The slave node is configured just before the Master entering in
865 Pre\_operational state.}
866
867 \subsection{gene\_SYNC\_HCS12 :}
868 This is a simple CanOpen node that only send cyclic SYNC message. It
869 demonstrate implementation on HCS12 based board.
870
871
872 \bigskip
873
874 \subsection{TestMasterMicroMod }
875 {\ttfamily
876 **************************************************************}
877
878 {\ttfamily
879 * \space TestMasterMicroMod
880 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
881
882 {\ttfamily
883 *
884 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
885
886 {\ttfamily
887 * \space A simple example for PC.
888 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
889
890 {\ttfamily
891 * \space A CanOpen master that control a MicroMod module:
892 \space \space \space \space \space \space \space \space \space *}
893
894 {\ttfamily
895 * \space {}- setup module TPDO 1 transmit type
896 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
897
898 {\ttfamily
899 * \space {}- setup module RPDO 1 transmit type
900 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
901
902 {\ttfamily
903 * \space {}- setup module hearbeatbeat period
904 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
905
906 {\ttfamily
907 * \space {}- disable others TPDOs
908 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
909
910 {\ttfamily
911 * \space {}- set state to operational
912 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
913
914 {\ttfamily
915 * \space {}- send periodic SYNC
916 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
917
918 {\ttfamily
919 * \space {}- send periodic RPDO 1 to Micromod (digital output) \space \space \space \space \space \space *}
920
921 {\ttfamily
922 * \space {}- listen Micromod{\textquotesingle}s TPDO 1 (digital input)
923 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
924
925 {\ttfamily
926 * \space {}- Mapping RPDO 1 bit per bit (digital input)
927 \space \space \space \space \space \space \space \space \space \space \space \space \space *}
928
929 {\ttfamily
930 *
931 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
932
933 {\ttfamily
934 * \space \space Usage:
935 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
936
937 {\ttfamily
938 * \space \space ./TestMasterMicroMod \space [OPTIONS]
939 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
940
941 {\ttfamily
942 *
943 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
944
945 {\ttfamily
946 * \space \space OPTIONS:
947 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
948
949 {\ttfamily
950 * \space \space \space \space {}-l : Can library
951 [{\textquotedbl}libcanfestival\_can\_virtual.so{\textquotedbl}]
952 \space \space \space \space *}
953
954 {\ttfamily
955 *
956 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
957
958 {\ttfamily
959 * \space \space \space Slave:
960 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
961
962 {\ttfamily
963 * \space \space \space \space {}-i : Slave Node id format [0x01 , 0x7F]
964 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
965
966 {\ttfamily
967 *
968 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
969
970 {\ttfamily
971 * \space \space \space Master:
972 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
973
974 {\ttfamily
975 * \space \space \space \space {}-m : bus name [{\textquotedbl}1{\textquotedbl}]
976 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
977
978 {\ttfamily
979 * \space \space \space \space {}-M : 1M,500K,250K,125K,100K,50K,20K,10K
980 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
981
982 {\ttfamily
983 *
984 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space *}
985
986 {\ttfamily
987 **************************************************************}
988
989 \section{Developing a new node}
990 Using provided examples as a base for your new node is generally a good
991 idea. You can also use the provided *.od files as a base for your node
992 object dictionary.
993
994 Creating a new CanOpen node implies to define the Object Dictionary of
995 this node. For that, developer have to provide a C file. This C file
996 contains the definition of all dictionary entries, and some kind of
997 index table that helps the stack to access some entries directly.
998
999 \subsection{Using Dictionary Editor GUI}
1000 The Object Dictionary Editor is a WxPython based GUI that is used to
1001 create the C file needed to create a new CanOpen node. 
1002
1003 \subsubsection{Installation and usage on Linux}
1004 You first have to download and install Gnosis XML modules. This is
1005 automated by a Makefile rule.
1006
1007 {\ttfamily
1008 cd objdictgen}
1009
1010 {\ttfamily
1011 make}
1012
1013 Now start the editor.
1014
1015 {\ttfamily
1016 python objdictedit.py [od files...]}
1017
1018 \subsubsection{Installation and usage on Windows}
1019 Install Python (at least version 2.4) and wxPython (at least version
1020 2.6.3.2).
1021
1022 Cygwin users can install Gnosis XML utils the same as Linux use. Just
1023 call make.
1024
1025 {\ttfamily
1026 cd objdictgen}
1027
1028 {\ttfamily
1029 make}
1030
1031 Others will have to download and intall Gnosis XML by hand :
1032
1033 {\ttfamily
1034 Gnosis Utils:}
1035
1036 {\ttfamily
1037 http://freshmeat.net/projects/gnosisxml/}
1038
1039 {\ttfamily
1040 http://www.gnosis.cx/download/Gnosis\_Utils.More/Gnosis\_Utils{}-1.2.1.win32{}-py24.exe}
1041
1042 {\ttfamily
1043 Get latest version.}
1044
1045 Download CanFestival archive and uncompress it. Use windows file
1046 explorer to go into CanFestival3{\textbackslash}objdicgten, and
1047 double{}-click on objdictedit.py.
1048
1049 \subsubsection{About}
1050 The Object Dictionary editor GUI is a python application that use the
1051 Model{}-View{}-Controller design pattern. It depends on WxPython to
1052 display view on any supported platform.
1053
1054  \begin{center}
1055    \includegraphics[width=7cm]{Pictures/10000201000001FC000001E5D65E8766.png}
1056 \end{center}
1057
1058 \subsubsection{Main view}
1059 Top list let you choose dictionary section, bottom left list is the
1060 selected index in that dictionary, and bottom right list are edited
1061 sub{}-indexes.
1062
1063  \begin{center}
1064    \includegraphics[width=12cm]{Pictures/10000201000003E7000001C7B0296577.png}
1065 \end{center}
1066
1067  \begin{center}
1068    \includegraphics[width=3cm]{Pictures/10000000000000B6000000DF1EDD1E73.png}
1069 \end{center}
1070   \begin{center}
1071    \includegraphics[width=3cm]{Pictures/10000000000000AC000000C9C3F53FA6.png}
1072 \end{center}
1073  \begin{center}
1074    \includegraphics[width=3cm]{Pictures/100000000000006D000000A31EC8CB54.png}
1075 \end{center}
1076   \begin{center}
1077    \includegraphics[width=3cm]{Pictures/10000000000000AA0000006014F74635.png}
1078 \end{center}
1079
1080 \subsubsection{New node}
1081 Edit your node name, ID and type. Choose your inherited specific
1082 profile.
1083
1084  \begin{center}
1085    \includegraphics[width=11cm]{Pictures/10000201000001CB0000015F4FC09B68.png}
1086 \end{center}
1087
1088 \subsubsection{Node info}
1089 Edit your node name, ID and type.
1090
1091  \begin{center}
1092    \includegraphics[width=7cm]{Pictures/10000201000001010000011DA724D25C.png}
1093 \end{center}
1094
1095 \subsubsection{Profile editor}
1096 Chose the used profile to edit.\newline
1097  \begin{center}
1098    \includegraphics[width=4cm]{Pictures/10000000000000AB000000C88F594413.png}
1099 \end{center}
1100
1101 Pick up optional chosen profile entries.\newline
1102  \begin{center}
1103    \includegraphics[width=11cm]{Pictures/10000201000002DE000001D82D89C224.png}
1104 \end{center}
1105
1106 \subsubsection{User types}
1107 Use User Types to implement value boundaries, and string lentgth\newline
1108  \begin{center}
1109    \includegraphics[width=11cm]{Pictures/10000201000001C40000010766961D7F.png}
1110 \end{center}
1111
1112 \subsubsection{Mapped variable}
1113 Add your own specific dictionary entries and associated mapped
1114 variables.\newline
1115  \begin{center}
1116    \includegraphics[width=11cm]{Pictures/10000201000001C4000000DD129D4661.png}
1117 \end{center}
1118
1119 \subsubsection{Integrated help}
1120 Using F1 key, you can get context sensitive help.\newline
1121  \begin{center}
1122    \includegraphics[width=12cm]{Pictures/10000201000002F30000020B23ED7F67.png}
1123 \end{center}
1124
1125 In order to do that, official 301\_v04000201.pdf file must be placed
1126 into doc/ directory, and xpdf must be present on your system.
1127
1128 F2 key open HTML CanFestival help.\newline
1129  \begin{center}
1130    \includegraphics[width=12cm]{Pictures/10000201000003440000025ACC3FD2F1.png}
1131 \end{center}
1132
1133 \subsection{Generating the object Dictionary}
1134 Once object dictionary has been edited and saved, you have to generate
1135 object dictionary C code for your CanFestival node.
1136
1137 \subsubsection{With GUI}
1138 Menu entry ``File/Build Dictionary''.
1139
1140  \begin{center}
1141    \includegraphics[width=4cm]{Pictures/10000201000000B7000000C66AF89CD5.png}
1142 \end{center}
1143
1144 Choose C file to create or overwrite. Header file will be also created
1145 with the same prefix as C file.
1146
1147 \subsubsection{With command line}
1148 {\ttfamily
1149 Usage of objdictgen.py :\newline
1150 python objdictgen.py XMLFilePath CfilePath}
1151
1152 \section{FAQ}
1153 \subsection{General}
1154 \subsubsection{Does the code compiles on Windows ?}
1155 Yes, with both Cygwin and Visual Studio C++.
1156
1157 Because CANopen layer is coded with C, put a compilation option /TC or
1158 /TP if you plan to mix C++ files. See the MSDN documentation about
1159 that.
1160
1161 \subsubsection{How to fit the library to an other microcontr\^oler ?}
1162 First, be sure that you have at least 40K bytes of program memory, and
1163 about 2k of RAM. 
1164
1165 You have to create target specific interface to HW resources. Take model
1166 on bundled interfaces provided in drivers/ and create your own
1167 interface. You also have to update Makefile.in files for target
1168 specific cflags and options. Chose {--}targer= configure switch to
1169 compile your specific interface.
1170
1171 You are welcome to contribute{}-back your own interfaces ! Other
1172 Canfestival users will use it and provide feedback, tests and
1173 enhancements.
1174
1175 \subsubsection{Is CanFestival3 conform to DS301 v.4.02 ?}
1176 Thanks to Philippe Foureys (IUT of Valence), a slave node have been
1177 tested with the National Instrument CanOpen Conformance Test. It passed
1178 the test with success.
1179
1180 Some very small unconformity have been found in very unusual situations,
1181 for example in the SDO code response to wrong messages.
1182
1183 \subsection{LINUX}
1184 \subsubsection{How to use a Peaksystem CAN board ?}
1185 Just install peak driver and then compile and install Canfestival. Peak
1186 driver is detected at compile time.
1187
1188 \subsubsection{How to use an unsupported CAN board ?}
1189 You have to install the specific driver on your system, with necessary
1190 libs and headers. 
1191
1192 Use can\_peak.c/h or can\_virtual.c/h as an example, and adapt it to
1193 your driver API.
1194
1195 Execute configure script and choose {}-{}-can=mydriver
1196
1197 \subsection{Win32}
1198 Compatibility:
1199
1200 \liststyleLxi
1201 \begin{enumerate}
1202 \item Code was compiled MS VisualStudio 2003.NET and VisualStudio
1203 2005.NET for WindowsXP \space with ANSI and UNICODE configurations and for
1204 WindowsCE 5.0. 
1205 \item Some preliminary testing was done, but not enough to be used in
1206 mission critical projects.
1207 \end{enumerate}
1208 Additional Features:
1209
1210 \liststyleLxii
1211 \begin{enumerate}
1212 \item Non{}-integral integers support implementation UNS24, UNS40, UNS48
1213 etc.
1214 \item When enable debug output with DEBUG\_WAR\_CONSOLE\_ON or
1215 DEBUG\_ERR\_CONSOLE\_ON, you can navigate in CanFestival source code by
1216 double clicking at diagnostic lines in VisualStudio.NET 200X Debug
1217 Output Window.
1218 \end{enumerate}
1219 Custom size integral types such as INTEGER24, UNS40, INTEGER56 etc. have
1220 been defined as 64 bits integers. You will need to replace sizeof(TYPE)
1221 operators to sizeof\_TYPE definitions in generated code, i.e. replace
1222 sizeof(UNS40) with sizeof\_UNS40.
1223
1224
1225 \bigskip
1226
1227 \subsection{HCS12}
1228 \subsubsection{Which board are you using ?}
1229 A T{}-board from elektronikladen with a MC9S12DP256 or MC9S12DG256.
1230
1231 \subsubsection{Does the code compile with an other compiler than GNU gcc
1232 ?}
1233 It is known to work with Metrowerks CodeWarrior. Here are some tips from
1234 Philippe Foureys. :
1235
1236 \paragraph{Interrupt functions}
1237 \subparagraph{Code for GCC:}
1238 {\ttfamily
1239  // prototype\newline
1240  void \_\_attribute\_\_((interrupt))timer3Hdl(void):\newline
1241  // function\newline
1242  void \_\_attribute\_\_((interrupt))timer3Hdl(void)\{...\}}
1243
1244 \subparagraph{Code for CodeWarrior}
1245 {\ttfamily
1246  // protoype\newline
1247  void interrupt timer3Hdl(void);\newline
1248  // function\newline
1249  pragma CODE\_SEG\_\_NEAR\_SEG\_NON\_BANKED\newline
1250  void interrupt timer3Hdl(void)\newline
1251  \{...\}\newline
1252  pragma CODE\_SEG\_DEFAULT}
1253
1254 \paragraph{Interrupt lock, unlock}
1255 \subparagraph{Code for GCC}
1256 {\ttfamily
1257  void unlock (void)\newline
1258  \{\newline
1259   \space \_\_asm\_\_
1260 \_\_volatile\_\_({\textquotedbl}cli{\textquotedbl});\newline
1261  \}\newline
1262  void lock (void)\newline
1263  \{\newline
1264   \space unsigned short mask;\newline
1265   \space \_\_asm\_\_
1266 \_\_volatile\_\_({\textquotedbl}tpa{\textbackslash}n{\textbackslash}tsei{\textquotedbl}:{\textquotedbl}=d{\textquotedbl}(mask));\newline
1267  \}}
1268
1269 \subparagraph{Code for CodeWarrior}
1270 {\ttfamily
1271 void unlock (void)\newline
1272  \{\newline
1273   \space \_\_asm({\textquotedbl}cli{\textquotedbl});\newline
1274  \}\newline
1275  void lock (void)\newline
1276  \{\newline
1277   \space unsigned short mask;\newline
1278   \space \_\_asm\newline
1279   \{\newline
1280   \space tpa:tsei:{\textquotedbl}=d{\textquotedbl}(mask);\newline
1281   \}\newline
1282  \}}
1283
1284 \paragraph{Initialize function}
1285 \subparagraph{Code for GCC}
1286 {\ttfamily
1287 void initCanHCS12 (void)\newline
1288  \{ \space \newline
1289   \space //Init the HCS12 microcontroler for CanOpen \newline
1290   \space initHCS12();\newline
1291   \space \space // Init the HCS12 \space CAN driver\newline
1292   \space const canBusInit bi0 = \{\newline
1293   \space \space \space 0, \space \space \space /* no low power \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space */
1294 \newline
1295   \space \space \space 0, \space \space \space /* no time stamp
1296 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space */\newline
1297   \space \space \space 1, \space \space \space /* enable MSCAN
1298 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space */\newline
1299   \space \space \space 0, \space \space \space /* clock source : oscillator (In fact, it is not used)
1300 \space \space */\newline
1301   \space \space \space 0, \space \space \space /* no loop back
1302 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space */\newline
1303   \space \space \space 0, \space \space \space /* no listen only
1304 \space \space \space \space \space \space \space \space \space \space \space \space \space \space */\newline
1305   \space \space \space 0, \space \space \space /* no low pass filter for wk up */\newline
1306   \space CAN\_Baudrates[CAN\_BAUDRATE\_250K],\newline
1307   \space \space \space \{\newline
1308   \space \space \space \space \space 0x00, \space \space \space /* Filter on 16 bits.\newline
1309   \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space See Motorola Block Guide V02.14 fig
1310 4{}-3 */\newline
1311   \space \space \space \space \space 0x00, 0xFF, /* filter 0 hight accept all msg
1312 \space \space \space \space \space */\newline
1313   \space \space \space \space \space 0x00, 0xFF, /* filter 0 low accept all msg
1314 \space \space \space \space \space \space \space */\newline
1315   \space \space \space \space \space 0x00, 0xFF, /* filter 1 hight filter all of \space msg
1316 \space */\newline
1317   \space \space \space \space \space 0x00, 0xFF, /* filter 1 low filter all of \space msg
1318 \space \space \space */\newline
1319   \space \space \space \space \space 0x00, 0xFF, /* filter 2 hight filter most of \space msg
1320 */\newline
1321   \space \space \space \space \space 0x00, 0xFF, /* filter 2 low filter most of \space msg
1322 \space \space */\newline
1323   \space \space \space \space \space 0x00, 0xFF, /* filter 3 hight filter most of \space msg
1324 */\newline
1325   \space \space \space \space \space 0x00, 0xFF, /* filter 3 low filter most of \space msg
1326 \space \space */\newline
1327   \space \space \space \}\newline
1328   \space \};}
1329
1330 \subparagraph{Code for CodeWarrior}
1331 {\ttfamily
1332 void initCanHCS12 (void)\newline
1333  \{ \space \newline
1334   \space //Init the HCS12 microcontroler for CanOpen \newline
1335   \space initHCS12();\newline
1336   \space \space // Init the HCS12 \space CAN driver\newline
1337   \space const canBusInit bi0 = \{\newline
1338   \space \space \space 0, \space \space \space /* no low power \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space */
1339 \newline
1340   \space \space \space 0, \space \space \space /* no time stamp
1341 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space */\newline
1342   \space \space \space 1, \space \space \space /* enable MSCAN
1343 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space */\newline
1344   \space \space \space 0, \space \space \space /* clock source : oscillator (In fact, it is not used)
1345 \space \space */\newline
1346   \space \space \space 0, \space \space \space /* no loop back
1347 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space */\newline
1348   \space \space \space 0, \space \space \space /* no listen only
1349 \space \space \space \space \space \space \space \space \space \space \space \space \space \space */\newline
1350   \space \space \space 0, \space \space \space /* no low pass filter for wk up */\newline
1351   \space \space \space \{\newline
1352   \space \space \space \space 1, /* clksrc */\newline
1353   \space \space \space \space 3, /* brp \space \space \space */\newline
1354   \space \space \space \space 0, /* sjw \space \space \space */\newline
1355   \space \space \space \space 0, /* samp \space \space */\newline
1356   \space \space \space \space 1, /* tseg2 \space */\newline
1357   \space \space \space \space 12,/* tseg1 \space */\newline
1358   \space \space \space \},\newline
1359   \space \space \space \{\newline
1360   \space \space \space \space \space 0x00, \space \space \space /* Filter on 16 bits.\newline
1361   \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space See Motorola Block Guide V02.14 fig
1362 4{}-3 */\newline
1363   \space \space \space \space \space 0x00, 0xFF, /* filter 0 hight accept all msg
1364 \space \space \space \space \space */\newline
1365   \space \space \space \space \space 0x00, 0xFF, /* filter 0 low accept all msg
1366 \space \space \space \space \space \space \space */\newline
1367   \space \space \space \space \space 0x00, 0xFF, /* filter 1 hight filter all of \space msg
1368 \space */\newline
1369   \space \space \space \space \space 0x00, 0xFF, /* filter 1 low filter all of \space msg
1370 \space \space \space */\newline
1371   \space \space \space \space \space 0x00, 0xFF, /* filter 2 hight filter most of \space msg
1372 */\newline
1373   \space \space \space \space \space 0x00, 0xFF, /* filter 2 low filter most of \space msg
1374 \space \space */\newline
1375   \space \space \space \space \space 0x00, 0xFF, /* filter 3 hight filter most of \space msg
1376 */\newline
1377   \space \space \space \space \space 0x00, 0xFF, /* filter 3 low filter most of \space msg
1378 \space \space */\newline
1379   \space \space \space \}\newline
1380   \space \};}
1381
1382 \subsubsection{Does the code works in banked memory ?}
1383 No. Today it seems that the port of gcc is bogged for using the banked
1384 memory. So, unfortunately, we are limited to 48 Kbytes of memory code.
1385
1386 \subsubsection{What GCC version are you using ?}
1387 We are using the stable RPM release 2.2 :
1388
1389 \liststyleLxiii
1390 \begin{enumerate}
1391 \item GNU Gcc 3.0.4. Build 20030501
1392 \item Newlib 1.10.0 Build 20030421
1393 \item GNU Binutils 2.12.1 Build 20030427
1394 \end{enumerate}
1395 \section{Documentation resources\newline}
1396 \paragraph{CIA : Can in Automation\newline}
1397 Many documentation on CANopen.\newline
1398 \href{http://www.can-cia.de/}{http://www.can{}-cia.de}
1399
1400 \paragraph{Resources and training in CANopen\newline}
1401 \href{http://www.esacademy.com/}{http://www.esacademy.com}
1402
1403 \paragraph{Elektronikladen HCS12 T{}-board\newline}
1404 \href{http://www.elektronikladen.de/en_hcs12tb.html}{http://www.elektronikladen.de/en\_hcs12tb.html}
1405
1406 \paragraph{Gnu gcc compiler for HC12\newline}
1407 \href{http://m68hc11.serveftp.org/m68hc11_port.php}{http://m68hc11.serveftp.org/m68hc11\_port.php}
1408
1409 \paragraph{Motorola documentation on HC12\newline}
1410 \href{http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MC9S12DP256}{http://www.freescale.com/webapp/sps/site/prod\_summary.jsp?code=MC9S12DP256}
1411
1412 \paragraph{Lauterbach debugger for HC12\newline}
1413 \href{http://www.lauterbach.com/}{http://www.lauterbach.com}
1414
1415 \paragraph{Python language\newline}
1416 \href{http://www.python.org/}{http://www.python.org}
1417
1418 \clearpage\section{About the project}
1419 \subsection{Contributors }
1420  \begin{center}
1421    \includegraphics[width=10cm]{Pictures/1000020100000258000000832C6FFAB4.png}
1422 \end{center}
1423
1424 Unit\'e mixte de recherche INRETS{}-LCPC
1425
1426 sur les Interractions V\'ehicule{}-Infrastructure{}-Conducteur
1427
1428 14, route de la mini\`ere
1429
1430 78000 Versailles
1431
1432 FRANCE
1433
1434 Tel : +33 1 40 43 29 01
1435
1436 \href{http://www.inrets.fr/ur/livic}{http://www.inrets.fr/ur/livic}
1437
1438 \textbf{Contributors :} Francis DUPIN
1439
1440    Camille BOSSARD
1441
1442    Laurent ROMIEUX
1443
1444
1445 \bigskip
1446
1447  \begin{center}
1448    \includegraphics[width=10cm]{Pictures/100002010000013A0000004A96B0C1FF.png}
1449 \end{center}
1450
1451 LOLITECH
1452
1453 204, rue du Haut du Pin
1454
1455 88470 Saint{}-Michel sur Meurthe
1456
1457 FRANCE
1458
1459 Tel : +33 3 29 52 95 67
1460
1461 \href{http://www.lolitech.fr/}{http://www.lolitech.fr}
1462
1463 {\bfseries
1464 Contributors : \textmd{Edouard TISSERANT (Original author)}}
1465
1466 {\mdseries
1467    Laurent BESSARD}
1468
1469
1470 \bigskip
1471
1472 Many thanks to the other contributors for their great work:
1473
1474 \textmd{   }Raphael ZULLIGER
1475
1476 \textmd{   }David DUMINY (st\'e A6R)
1477
1478 \textmd{   }Zakaria BELAMRI
1479
1480 \subsection{Getting support}
1481 Send your feedback and bug reports to
1482 \href{mailto:canfestival-devel@lists.sourceforge.net}{canfestival{}-devel@lists.sourceforge.net}.
1483
1484 For commercial support, \space training and specific integration and
1485 developments, please ask LOLITECH (see contributors).
1486
1487 \subsection{Contributing}
1488 You are free to contribute your specific interfaces back to the project.
1489 This way, you can hope to get support from CanFestival users community.
1490
1491 Please send your patch to
1492 \href{mailto:canfestival-devel@lists.sourceforge.net}{canfestival{}-devel@lists.sourceforge.net}.
1493
1494 Feel free to create some new predefined DS{}-4xx profiles (*.prf) in
1495 objdictgen/config, as much as possible respectful to the official
1496 specifications.
1497
1498 \subsection{License}
1499 All the project is licensed with LGPL. This mean you can link
1500 CanFestival with any code without being obliged to publish it.
1501
1502 {\ttfamily
1503 \#This file is part of CanFestival, a library implementing CanOpen
1504 Stack. \newline
1505 \# \newline
1506 \#Copyright (C): Edouard TISSERANT, Francis DUPIN and Laurent BESSARD
1507 \newline
1508 \# \newline
1509 \#See COPYING file for copyrights details. \newline
1510 \# \newline
1511 \#This library is free software; you can redistribute it and/or \newline
1512 \#modify it under the terms of the GNU Lesser General Public \newline
1513 \#License as published by the Free Software Foundation; either \newline
1514 \#version 2.1 of the License, or (at your option) any later version.
1515 \newline
1516 \# \newline
1517 \#This library is distributed in the hope that it will be useful,
1518 \newline
1519 \#but WITHOUT ANY WARRANTY; without even the implied warranty of
1520 \newline
1521 \#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. \space See the GNU
1522 \newline
1523 \#Lesser General Public License for more details. \newline
1524 \# \newline
1525 \#You should have received a copy of the GNU Lesser General Public
1526 \newline
1527 \#License along with this library; if not, write to the Free Software
1528 \newline
1529 \#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
1530 \space 02111{}-1307 \space USA }
1531
1532
1533 \bigskip
1534
1535 \end{document}