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