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