
nico@208: \documentclass[12pt,twoside]{article}
nico@208: \usepackage[ascii]{inputenc}
nico@208: \usepackage[T1]{fontenc}
nico@208: \usepackage[french,english]{babel}
nico@208: \usepackage{amsmath,amssymb,amsfonts,textcomp}
nico@208: \usepackage{color}
nico@208: \usepackage{calc}
nico@208: \usepackage{longtable}
nico@208: \usepackage{hyperref}
nico@208: \usepackage{graphics}
nico@208: \usepackage{graphicx}
nico@208: \DeclareGraphicsExtensions{.jpg}
nico@208: \DeclareGraphicsExtensions{.png}
nico@208: \hypersetup{colorlinks=true, linkcolor=blue, filecolor=blue, pagecolor=blue, urlcolor=blue}
nico@208: 
nico@208: \newenvironment{changemargin}[2]{\begin{list}{}{%
nico@208: \setlength{\topsep}{0pt}%
nico@208: \setlength{\leftmargin}{0pt}%
nico@208: \setlength{\rightmargin}{0pt}%
nico@208: \setlength{\listparindent}{\parindent}%
nico@208: \setlength{\itemindent}{\parindent}%
nico@208: \setlength{\parsep}{0pt plus 1pt}%
nico@208: \addtolength{\leftmargin}{#1}%
nico@208: \addtolength{\rightmargin}{#2}%
nico@208: }\item }{\end{list}}
nico@208: 
nico@208: 
nico@208: %%%%\%%%%%%%% titre, auteurs, date, etc...%%%%%%%%%%%%%%%%%%
nico@208: 
nico@208: \title{\Huge Documentation}
nico@208: \author{Edouard TISSERANT}
nico@208: \date{\today}
nico@208: 
nico@208: % Text styles
nico@208: \newcommand\textstyleTeletype[1]{\texttt{#1}}
nico@208: % Outline numbering
nico@208: \setcounter{secnumdepth}{5}
nico@208: \renewcommand\thesection{\arabic{section} -}
nico@208: \renewcommand\thesubsection{\arabic{section}.\arabic{subsection})}
nico@208: \renewcommand\thesubsubsection{\arabic{section}.\arabic{subsection}.\arabic{subsubsection})}
nico@208: \renewcommand\theparagraph{\alph{paragraph})}
nico@208: \renewcommand\thesubparagraph{\roman{subparagraph})}
nico@208: % List styles
nico@208: \newcommand\liststyleLi{%
nico@208: \renewcommand\labelitemi{{--}}
nico@208: \renewcommand\labelitemii{{--}}
nico@208: \renewcommand\labelitemiii{{--}}
nico@208: \renewcommand\labelitemiv{{--}}
nico@208: }
nico@208: \newcommand\liststyleLii{%
nico@208: \renewcommand\labelitemi{{--}}
nico@208: \renewcommand\labelitemii{{--}}
nico@208: \renewcommand\labelitemiii{{--}}
nico@208: \renewcommand\labelitemiv{{--}}
nico@208: }
nico@208: \newcommand\liststyleLiii{%
nico@208: \renewcommand\labelitemi{{--}}
nico@208: \renewcommand\labelitemii{{--}}
nico@208: \renewcommand\labelitemiii{{--}}
nico@208: \renewcommand\labelitemiv{{--}}
nico@208: }
nico@208: \newcommand\liststyleLiv{%
nico@208: \renewcommand\labelitemi{{--}}
nico@208: \renewcommand\labelitemii{{--}}
nico@208: \renewcommand\labelitemiii{{--}}
nico@208: \renewcommand\labelitemiv{{--}}
nico@208: }
nico@208: \newcommand\liststyleLv{%
nico@208: \renewcommand\labelitemi{{--}}
nico@208: \renewcommand\labelitemii{{--}}
nico@208: \renewcommand\labelitemiii{{--}}
nico@208: \renewcommand\labelitemiv{{--}}
nico@208: }
nico@208: \newcommand\liststyleLvi{%
nico@208: \renewcommand\labelitemi{{--}}
nico@208: \renewcommand\labelitemii{{--}}
nico@208: \renewcommand\labelitemiii{{--}}
nico@208: \renewcommand\labelitemiv{{--}}
nico@208: }
nico@208: \newcommand\liststyleLvii{%
nico@208: \renewcommand\labelitemi{{--}}
nico@208: \renewcommand\labelitemii{{--}}
nico@208: \renewcommand\labelitemiii{{--}}
nico@208: \renewcommand\labelitemiv{{--}}
nico@208: }
nico@208: \newcommand\liststyleLviii{%
nico@208: \renewcommand\labelitemi{{--}}
nico@208: \renewcommand\labelitemii{{--}}
nico@208: \renewcommand\labelitemiii{{--}}
nico@208: \renewcommand\labelitemiv{{--}}
nico@208: }
nico@208: \newcommand\liststyleLix{%
nico@208: \renewcommand\labelitemi{{--}}
nico@208: \renewcommand\labelitemii{{--}}
nico@208: \renewcommand\labelitemiii{{--}}
nico@208: \renewcommand\labelitemiv{{--}}
nico@208: }
nico@208: \newcommand\liststyleLx{%
nico@208: \renewcommand\labelitemi{{--}}
nico@208: \renewcommand\labelitemii{{--}}
nico@208: \renewcommand\labelitemiii{{--}}
nico@208: \renewcommand\labelitemiv{{--}}
nico@208: }
nico@208: \newcommand\liststyleLxi{%
nico@208: \renewcommand\labelitemi{{--}}
nico@208: \renewcommand\labelitemii{{--}}
nico@208: \renewcommand\labelitemiii{{--}}
nico@208: \renewcommand\labelitemiv{{--}}
nico@208: }
nico@208: \newcommand\liststyleLxii{%
nico@208: \renewcommand\labelitemi{{--}}
nico@208: \renewcommand\labelitemii{{--}}
nico@208: \renewcommand\labelitemiii{{--}}
nico@208: \renewcommand\labelitemiv{{--}}
nico@208: }
nico@208: \newcommand\liststyleLxiii{%
nico@208: \renewcommand\labelitemi{{\textbullet}}
nico@208: \renewcommand\labelitemii{{\textbullet}}
nico@208: \renewcommand\labelitemiii{{\textbullet}}
nico@208: \renewcommand\labelitemiv{{\textbullet}}
nico@208: }
nico@208: % Pages styles (master pages)
nico@208: \makeatletter
nico@208: \newcommand\ps@Standard{%
nico@208: \renewcommand\@oddhead{}%
nico@208: \renewcommand\@evenhead{}%
nico@208: \renewcommand\@oddfoot{}%
nico@208: \renewcommand\@evenfoot{\@oddfoot}%
nico@208: \setlength\paperwidth{8.2673in}\setlength\paperheight{11.6925in}\setlength\voffset{-1in}\setlength\hoffset{-1in}\setlength\topmargin{0.1965in}\setlength\headheight{12pt}\setlength\headsep{0cm}\setlength\footskip{12pt+0.1965in}\setlength\textheight{11.6925in-0.1965in-0.7874in-0cm-12pt-0.1965in-12pt}\setlength\oddsidemargin{0.3937in}\setlength\textwidth{8.2673in-0.3937in-0.3937in}
nico@208: \renewcommand\thepage{\arabic{page}}
nico@208: \setlength{\skip\footins}{0.0398in}\renewcommand\footnoterule{\vspace*{-0.0071in}\noindent\textcolor{black}{\rule{0.25\columnwidth}{0.0071in}}\vspace*{0.0398in}}
nico@208: }
nico@208: \makeatother
nico@208: \pagestyle{Standard}
nico@208: \setlength\tabcolsep{1mm}
nico@208: \renewcommand\arraystretch{1.3}
nico@208: \begin{document}
nico@208: {\centering\sffamily
nico@208: CanFestival3. Version 3.0\newline
nico@208: The CANOpen stack manual
nico@208: \par}
nico@208: 
nico@208: \setcounter{tocdepth}{2}
nico@208: \renewcommand\contentsname{Table of contents}
nico@208: \tableofcontents
nico@208: \section{Introduction}
nico@208: This document describe the CANOpen layer.CanFestival is an OpenSource
nico@208: (LGPL) CANOpen framework.
nico@208: 
nico@208: \subsection{The CanFestival project}
nico@208: This project, initiated by Edouard TISSERANT in 2001, as grown thanks to
nico@208: Francis DUPIN and other contributors.
nico@208: 
nico@208: Today, CanFestival focuses on providing an ANSI{}-C platform independent
nico@208: CANOpen stack that can be implemented as master or slave nodes on PCs,
nico@208: Real{}-time IPCs, and Microcontrollers.
nico@208: 
nico@208: CanFestival is a project supported by Lolitech.
nico@208: 
nico@208: \subsection{What is CANopen}
nico@208: CANopen is a CAN based high level protocol. It defines some protocols to
nico@208: :
nico@208: 
nico@208: \liststyleLi
nico@208: \begin{enumerate}
nico@208: \item Configure a CAN network.
nico@208: \item Transmit data to a specific node or in broadcast.
nico@208: \item Administrate the network. For example detecting a not responding
nico@208: node.
nico@208: \end{enumerate}
nico@208: The documentation can be found in the Can in automation website :
nico@208: 
nico@208: \href{http://www.can-cia.de/canopen}{http://www.can{}-cia.de/canopen}
nico@208: 
nico@208: The most important document about CANopen is the normative CiA Draft
nico@208: Standard 301, version 4.02. You can now download with no cost the
nico@208: specification in Can in automation website.
nico@208: 
nico@208: To continue reading this document, let us assume that you have read some
nico@208: papers introducing CANopen.
nico@208: 
nico@208: \section{CanFestival Features}
nico@208: \subsection{Tools }
nico@208: The CANopen library is coming with some tools :
nico@208: 
nico@208: \liststyleLii
nico@208: \begin{enumerate}
nico@208: \item Object Dictionary editor GUI. WxPython Model{}-View{}-Controler
nico@208: based GUI, that help a lot in generating object dictionary source code
nico@208: for each node.
nico@208: \item A configure script, that let you chose compile time options such
nico@208: as target CPU/HOST, CAN and TIMER drivers.\newline
nico@208: This script have not been generated with autoconf, it have been made
nico@208: keeping micro{}-controller target in mind.
nico@208: \end{enumerate}
nico@208: \subsection{Standard conformance}
nico@208: \paragraph{Multi{}-Platform}
nico@208: \liststyleLiii
nico@208: \begin{enumerate}
nico@208: \item Library source code is C{}-ANSI.
nico@208: \item Driver and examples coding conventions merely depend on target
nico@208: specific contributor/compiler.
nico@208: \item Unix compatible interfaces and examples should compile and run on
nico@208: any Unix system (tested on GNU/Linux and GNU/FreeBSD).
nico@208: \end{enumerate}
nico@208: \paragraph{CanOpen conformance}
nico@208: {\bfseries\upshape
nico@208: DS{}-301}
nico@208: 
nico@208: \liststyleLiv
nico@208: \begin{enumerate}
nico@208: \item Should conform to DS301. V.4.02 13 february 2002.
nico@208: \item Master and Slave functionality implemented.
nico@208: \item Sending SYNC implemented.
nico@208: \item 1 SDO server per node. (update: more than one possible. To be more
nico@208: tested)
nico@208: \item Unlimited SDO client.
nico@208: \item SDO transmission mode : normal, expedited download and upload.
nico@208: \item Unlimited PDO receive.
nico@208: \item Unlimited PDO transmit.
nico@208: \item Object Data type implemented : 8, 16, 32 bits values, and fixed
nico@208: length strings.
nico@208: \item Slave state full implemented.
nico@208: \item NMT to change slave{\textquotesingle}s state implemented.
nico@208: \item PDO transmission mode : on request, every reception of 0 to n
nico@208: SYNC, on event.
nico@208: \item NMT Heartbeat implemented : A node can be either heartbeat
nico@208: producer or receiver.
nico@208: \item NMT NodeGuard implemented : Not fully implemented.
nico@208: \item TIME (time Stamp) : Not implemented.
nico@208: \item EMCY (emergency objects) : Not implemented.
nico@208: \item PDO Mapping bit per bit implemented.
nico@208: \end{enumerate}
nico@208: {\bfseries\upshape
nico@208: DS{}-302}
nico@208: 
nico@208: \liststyleLiv
nico@208: \begin{enumerate}
nico@208: \item Concise \ DFC : implemented.
nico@208: \end{enumerate}
nico@208: \section{How to start}
nico@208: \subsection{Host requirements}
nico@208: What you need on your development workstation.
nico@208: 
nico@208: \subsubsection{Object Dictionary Editor GUI}
nico@208: \liststyleLv
nico@208: \begin{enumerate}
nico@208: \item Python, with 
nico@208: \item wxPyhon modules installed (at least version 2.6.3). 
nico@208: \item Gnosis xml tools. (Optional can also be installed locally to the
nico@208: project automatically will the help of a Makefile. Please see
nico@208: \hyperlink{a91UsingDictionaryEditorGUIoutline}{9.1) Using Dictionary
nico@208: Editor GUI} )
nico@208: \end{enumerate}
nico@208: \subsubsection[\ Linux and Unix{}-likes]{\ Linux and Unix{}-likes}
nico@208: \liststyleLv
nico@208: \begin{enumerate}
nico@208: \item Linux, FreeBSD, Cygwin or any Unix environment with GNU toolchain.
nico@208: \item The GNU C compiler (gcc) or any other ANSI{}-C compiler for your
nico@208: target platform.
nico@208: \item Xpdf, and the official 301\_v04000201.pdf file in order to get GUI
nico@208: context sensitive help. Download the ds301 at
nico@208: \href{http://www.can-cia.org/downloads/ciaspecifications/?1390}{http://www.can{}-cia.org/downloads/ciaspecifications/?1390}.
nico@208: \item GNU Make
nico@208: \item Bash and sed
nico@208: \end{enumerate}
nico@208: \subsubsection{Windows (for native win32 target)}
nico@208: \liststyleLv
nico@208: \begin{enumerate}
nico@208: \item Visual Studio Express 2005 or worst.
nico@208: \item Microsoft platform SDK (requires Genuine Advantage)
nico@208: \item Cygwin (for configuration only)
nico@208: \end{enumerate}
nico@208: \subsection{How to get CanFestival}
nico@208: Please always use CVS, this is the best way to get the most reactive
nico@208: support from the developer community :
nico@208: 
nico@208: cvs {}-d:pserver:anonymous@lolitech.dyndns.org:/canfestival
nico@208: login\newline
nico@208: (type return, without entering a password) 
nico@208: 
nico@208: Then, enter : \newline
nico@208: cvs {}-z3 {}-d:pserver:anonymous@lolitech.dyndns.org:/canfestival co
nico@208: {}-P CanFestival{}-3
nico@208: 
nico@208: \section{Understanding Canfestival}
nico@208: \subsection{CanFestival Project tree layout}
nico@208: Simplified directory structure.
nico@208: 
nico@208: {\ttfamily\bfseries
nico@208: ./src ANSI{}-C source of CANOpen stack}
nico@208: 
nico@208: {\ttfamily\bfseries
nico@208: \ /include Exportables Header files}
nico@208: 
nico@208: {\ttfamily\bfseries
nico@208: ./drivers Interfaces to specific platforms/HW}
nico@208: 
nico@208: {\ttfamily
nico@208: ./drivers/unix Linux and Cygwin OS interface}
nico@208: 
nico@208: {\ttfamily
nico@208: ./drivers/win32 Native Win32 OS interface}
nico@208: 
nico@208: {\ttfamily
nico@208: ./drivers/timers\_xeno Xenomai timers/threads (Linux only)}
nico@208: 
nico@208: {\ttfamily
nico@208: ./drivers/timers\_unix Posix timers/threads (Linux, Cygwin)}
nico@208: 
nico@208: {\ttfamily
nico@208: ./drivers/can\_peak\_linux PeakSystem CAN library interface}
nico@208: 
nico@208: {\ttfamily
nico@208: ./drivers/can\_peak\_win32 PeakSystem PCAN{}-Light interface}
nico@208: 
nico@208: {\ttfamily
nico@208: ./drivers/can\_uvccm\_win32 Acacetus{\textquotesingle}s RS232
nico@208: ``CAN{}-uVCCM'' interface}
nico@208: 
nico@208: {\ttfamily
nico@208: ./drivers/can\_virtual Fake CAN network (Linux, Cygwin)}
nico@208: 
nico@208: {\ttfamily
nico@208: ./drivers/hcs12 HCS12 full target interface}
nico@208: 
nico@208: {\ttfamily\bfseries
nico@208: ./examples Examples}
nico@208: 
nico@208: {\ttfamily
nico@208: ./examples/TestMasterSlave 2 nodes, NMT SYNC SDO PDO, win32+unix}
nico@208: 
nico@208: {\ttfamily
nico@208: ./examples/TestMasterMicroMod 1 node, control Peak I/O Module, unix}
nico@208: 
nico@208: {\ttfamily
nico@208: ./examples/gene\_SYNC\_HCS12 Just send periodic SYNC on HCS12}
nico@208: 
nico@208: {\ttfamily
nico@208: ./examples/win32test Ask some DS301 infos to a node (\textbf{win32)}}
nico@208: 
nico@208: {\ttfamily\bfseries
nico@208: ./objdictgen Object Dictionary editor GUI}
nico@208: 
nico@208: {\ttfamily
nico@208: ./objdictgen/config Pre{}-defined OD profiles}
nico@208: 
nico@208: {\ttfamily
nico@208: ./objdictgen/examples Some examples/test OD}
nico@208: 
nico@208: {\ttfamily\bfseries
nico@208: ./doc Project and CanOpen doc}
nico@208: 
nico@208: \subsection{Implement CanFestival in your application}
nico@208:  
nico@208:  \begin{center}
nico@208:    \includegraphics[width=20cm]{Pictures/10000201000003F9000002CF880931E7.png}
nico@208: \end{center}
nico@208: 
nico@208: \bigskip
nico@208: 
nico@208: \subsection{CanFestival CAN interfaces}
nico@208: Because most CAN controllers and drivers implement FIFOs, CanFestival
nico@208: consider sending message as a non bloking operation.
nico@208: 
nico@208: In order to prevent reentrent calls to the stack, messages reception is
nico@208: implemented differently on {\textmu}C and OS.:
nico@208: 
nico@208: \liststyleLvi
nico@208: \begin{enumerate}
nico@208: \item {\textmu}C must provide interuption masking for timer and can
nico@208: receive IT\newline
nico@208:  \begin{center}
nico@208:    \includegraphics[width=20cm]{Pictures/10000201000003CA0000016604E6A5EF.png}
nico@208: \end{center}
nico@208: \item OS must provide a receive thread, a timer thread and a mutex. CAN
nico@208: reception is a bloking operation.\newline
nico@208: \begin{center}
nico@208:    \includegraphics[width=20cm]{Pictures/10000201000003F9000002CF8B0CDAEA.png}
nico@208: \end{center}
nico@208: \end{enumerate}
nico@208: \subsection{CanFestival events scheduling}
nico@208: A CanOpen node must be able to take delayed actions.
nico@208: 
nico@208: As exemples, periodic sync emission, heartbeat production or SDO timeout
nico@208: need to set some alarms that will be called later and do the job.
nico@208: 
nico@208: {\textmu}C generaly do not have enough free timers to handle all the
nico@208: CanOpen needs directly. Moreover, CanFestival internal data may be
nico@208: corrupt by reentrant calls. 
nico@208: 
nico@208: CanFestival implement a micro{}-scheduler (timer.c). It uses only one
nico@208: timer to mimic many timers. It manage an alarm table, and call alarms
nico@208: at desired time.
nico@208: 
nico@208: \begin{center}
nico@208:    \includegraphics[width=20cm]{Pictures/100000000000022C000000DEDAD2140C.png}
nico@208: \end{center}
nico@208: 
nico@208: Scheduler can handle short clock value ranges limitation found on some
nico@208: {\textmu}C. As an example, value range for a 16bit clock counter with
nico@208: 4{\textmu}s tick is crossed within 0.26 seconds... Long alarms must be
nico@208: segmented.
nico@208: 
nico@208: Chronogram illustrate a long alarm (A) and a short periodic alarm (B),
nico@208: with a A value {\textgreater} clock range {\textgreater} B value.
nico@208: Values t0...t8 are successive setTimer call parameter values. t1
nico@208: illustrates an intermediate call to TimeDispatch, caused by a delay
nico@208: longer than clock range. Because of long alarm segmentation, at the end
nico@208: of t1, TimeDispatch call will not trig any alarm callback.
nico@208: 
nico@208: \begin{center}
nico@208:    \includegraphics[width=20cm]{Pictures/1000000000000396000000FFC42573DA.png}
nico@208: \end{center}
nico@208: 
nico@208: \section{Linux Target}
nico@208: Linux target is default configure target.
nico@208: 
nico@208: \subsection{Linux Compilation and installation}
nico@208: Call ./configure {--}help to see all available compile time options.
nico@208: 
nico@208: After invoking ./configure with your platform specific switches, just
nico@208: type make.
nico@208: 
nico@208: {\ttfamily
nico@208: ./configure [options]}
nico@208: 
nico@208: {\ttfamily
nico@208: make}
nico@208: 
nico@208: {\ttfamily
nico@208: \textstyleTeletype{make install}}
nico@208: 
nico@208: \subsubsection{Standard Linux node}
nico@208: Configure switch:
nico@208: 
nico@208: {\ttfamily
nico@208:  {}-{}-timers=unix}
nico@208: 
nico@208: To do a CANopen node running on PC{}-Linux, you need :
nico@208: 
nico@208: \liststyleLvii
nico@208: \begin{enumerate}
nico@208: \item A working linux distribution
nico@208: \item One or more Peak system PC CAN interface and the last Peak Linux
nico@208: driver installed.
nico@208: \end{enumerate}
nico@208: \subsubsection{Real{}-Time Linux node}
nico@208: Configure switch:
nico@208: 
nico@208: {\ttfamily
nico@208:  {}-{}-timers=xeno}
nico@208: 
nico@208: To do a CANopen node running on PC{}-Linux, you need :
nico@208: 
nico@208: \liststyleLviii
nico@208: \begin{enumerate}
nico@208: \item A working Linux distribution patched with XENOMAI 2.1 or greater.
nico@208: \item One or more Peak system PC CAN interface and the last Peak Real
nico@208: Time Linux driver installed.
nico@208: \end{enumerate}
nico@208: \subsubsection{CAN devices}
nico@208: Curently supported CAN devices and corresponding configure switch:
nico@208: 
nico@208: \paragraph{Peak systems}
nico@208: Configure switch:
nico@208: 
nico@208: {\ttfamily
nico@208: {}-{}-can=peak\_linux}
nico@208: 
nico@208: PeakSystems CAN interface is automatically chosen as default CAN
nico@208: interface if libpcan is present in the system.
nico@208: 
nico@208: Please download driver at
nico@208: \href{http://www.peak-system.com/linux}{http://www.peak{}-system.com/linux}
nico@208: and follow instructions in order to install driver on your system.
nico@208: 
nico@208: \paragraph{Socket{}-Can (http://socketcan.berlios.de)}
nico@208: Configure switch:
nico@208: 
nico@208: {\ttfamily
nico@208: {}-{}-can=socket}
nico@208: 
nico@208: \paragraph{LinCan}
nico@208: Configure switch:
nico@208: 
nico@208: {\ttfamily
nico@208: {}-{}-can=lincan}
nico@208: 
nico@208: \paragraph{Virtual CAN interfaces (for test/debug)}
nico@208: Configure switch:
nico@208: 
nico@208: {\ttfamily
nico@208: {}-{}-can=virtual}
nico@208: 
nico@208: Virtual CAN interface use Unix pipes to emulate a virtual CAN network.
nico@208: Each message issued from a node is repeat to all other nodes. Currently
nico@208: only works with nodes running in the same process, and does not support
nico@208: work with Xenomai.
nico@208: 
nico@208: \subsection{Testing your CanFestival installation}
nico@208: Sample provided in /example/TestMasterSlave is installed into your
nico@208: system during installation.
nico@208: 
nico@208: {\ttfamily
nico@208: TestMasterSlave}
nico@208: 
nico@208: Default can driver library is libcanfestival\_can\_virtual.so., which
nico@208: will simply pass CAN messages through Unix pipes between Master and
nico@208: Slave. 
nico@208: 
nico@208: You may also want to specify different can interface and define some CAN
nico@208: ports. An other example using Peak{\textquotesingle}s dual PCMCIA
nico@208: (configure and install with {--}can=peak) :
nico@208: 
nico@208: {\ttfamily
nico@208: TestMasterSlave {}-l libcanfestival\_can\_peak.so {}-s 40 {}-m 41}
nico@208: 
nico@208: \section{Windows Targets}
nico@208: CanFestival can be compiled and run on Windows platform. It is possible
nico@208: to use both Cygwin and win32 native runtime environment.
nico@208: 
nico@208: \subsection{Object Dictionary Editor GUI installation.}
nico@208: Please refer to
nico@208: \hyperlink{a821UsingDictionaryEditorGUIoutline}{8.2.1)Using Dictionary
nico@208: Editor GUI}
nico@208: 
nico@208: \subsection{CYGWIN}
nico@208: \subsubsection{Requirements}
nico@208: Cygwin have to be installed with those packages :
nico@208: 
nico@208: \liststyleLix
nico@208: \begin{enumerate}
nico@208: \item gcc
nico@208: \item unzip
nico@208: \item wget
nico@208: \item make
nico@208: \end{enumerate}
nico@208: Currently, the only supported CAN devices are PeakSystems ones, with
nico@208: PcanLight driver and library. 
nico@208: 
nico@208: Please download driver at
nico@208: \href{http://www.peak-system.com/themen/download_gb.html}{http://www.peak{}-system.com/themen/download\_gb.html}
nico@208: \ and follow instructions in order to install driver on your system.
nico@208: 
nico@208: Install Cygwin as required, and the driver for your Peak CAN device.
nico@208: 
nico@208: Open a Cygwin terminal, and follow those instructions:
nico@208: 
nico@208: \subsubsection{Cygwin configuration and compilation}
nico@208: \paragraph{A single node with PcanLight and Peak CAN{}-USB adapter}
nico@208: Download the PCAN{}-Light Zip file for your HW ( URL from download page
nico@208: ): 
nico@208: 
nico@208: {\ttfamily
nico@208: wget http://www.peak{}-system.com/files/usb.zip}
nico@208: 
nico@208: Extract its content into your cygwin home (it will create a ``Disk''
nico@208: directory):
nico@208: 
nico@208: {\ttfamily
nico@208: unzip usb.zip}
nico@208: 
nico@208: Configure CanFestival3 providing path to the desired PcanLight
nico@208: implementation:
nico@208: 
nico@208: {\ttfamily
nico@208: cd CanFestival{}-3}
nico@208: 
nico@208: {\ttfamily
nico@208: export PCAN\_INCLUDE=\~{}/Disk/PCAN{}-Light/Api/}
nico@208: 
nico@208: {\ttfamily
nico@208: export PCAN\_HEADER=Pcan\_usb.h}
nico@208: 
nico@208: {\ttfamily
nico@208: export PCAN\_LIB=\~{}/Disk/PCAN{}-Light/Lib/Visual{\textbackslash}
nico@208: C++/Pcan\_usb.lib}
nico@208: 
nico@208: {\ttfamily
nico@208: ./configure {}-{--}can=peak\_win32}
nico@208: 
nico@208: {\ttfamily
nico@208: make}
nico@208: 
nico@208: In order to test, you have to use another CanFestival node, connect with
nico@208: a CAN cable.
nico@208: 
nico@208: {\ttfamily
nico@208: cp \~{}/Disk/PCAN{}-Light/Pcan\_usb.dll .}
nico@208: 
nico@208: {\ttfamily
nico@208: ./examples/TestMasterSlave/TestMasterSlave {\textbackslash}}
nico@208: 
nico@208: {\ttfamily
nico@208:   {}-l drivers/can\_peak\_win32/cygcan\_peak\_win32.dll
nico@208: {\textbackslash}}
nico@208: 
nico@208: {\ttfamily
nico@208:   {}-S 500K {}-M none}
nico@208: 
nico@208: Then, on the other node :
nico@208: 
nico@208: {\ttfamily
nico@208: ./TestMasterSlave {}-l my\_driver.so {}-S none {}-M 500K}
nico@208: 
nico@208: Now messages are beeing exchanged between master and slave node.
nico@208: 
nico@208: \paragraph{Two nodes with PcanLight and Peak dual PCMCIA{}-CAN adapter}
nico@208: Download the PCAN{}-Light Zip file for your HW ( URL from download page
nico@208: ): 
nico@208: 
nico@208: {\ttfamily
nico@208: wget http://www.peak{}-system.com/files/pccard.zip}
nico@208: 
nico@208: Extract its content into your cygwin home (it will create a ``Disk''
nico@208: directory):
nico@208: 
nico@208: {\ttfamily
nico@208: unzip pccard.zip}
nico@208: 
nico@208: The configure CanFestival3 providing path to the desired PcanLight
nico@208: implementation:
nico@208: 
nico@208: {\ttfamily
nico@208: export PCAN\_INCLUDE=\~{}/Disk/PCAN{}-Light/Api/\newline
nico@208: export PCAN\_HEADER=Pcan\_pcc.h\newline
nico@208: export PCAN\_LIB=\~{}/Disk/PCAN{}-Light/Lib/Visual{\textbackslash}
nico@208: C++/Pcan\_pcc.lib\newline
nico@208: export PCAN2\_HEADER=Pcan\_2pcc.\newline
nico@208: export PCAN2\_LIB=\~{}/Disk/PCAN{}-Light/Lib/Visual{\textbackslash}
nico@208: C++/Pcan\_2pcc.lib}
nico@208: 
nico@208: In order to test, just connect together both CAN ports of the PCMCIA
nico@208: card. Don{\textquotesingle}t forget 120ohms terminator.
nico@208: 
nico@208: {\ttfamily
nico@208: cp \~{}/Disk/PCAN{}-Light/Pcan\_pcc.dll .}
nico@208: 
nico@208: {\ttfamily
nico@208: cp \~{}/Disk/PCAN{}-Light/Pcan\_2pcc.dll .}
nico@208: 
nico@208: {\ttfamily
nico@208: ./examples/TestMasterSlave/TestMasterSlave {\textbackslash}}
nico@208: 
nico@208: {\ttfamily
nico@208:   {}-l drivers/can\_peak\_win32/cygcan\_peak\_win32.dll}
nico@208: 
nico@208: Messages are then exchanged between master and slave node, both inside
nico@208: TestMasterSlave{\textquotesingle}s process.
nico@208: 
nico@208: \subsection{Visual Studio C++}
nico@208: \subsubsection{Requirements}
nico@208: Minimal Cygwin installation is required at configuration time in order
nico@208: to create specific header files (config.h and cancfg.h). Once this
nico@208: files created, cygwin is not necessary any more.
nico@208: 
nico@208: Project and solution files have been created and tested with Visual
nico@208: Studio Express 2005. Be sure to have installed Microsoft Platform SDK,
nico@208: as recommended at the end of Visual Studio installation.
nico@208: 
nico@208: \subsubsection{Configuration with cygwin}
nico@208: Follow instructions given at
nico@208: \hyperlink{a422Cygwinconfigurationandcompilationoutline}{4.2.2)Cygwin
nico@208: configuration and compilation}, but do neither call make nor do tests,
nico@208: just do configuration steps. This will create headers files accordingly
nico@208: to your configuration parameters, and the desired CAN hardware.
nico@208: 
nico@208: \subsubsection{Compilation with Visual Studio}
nico@208: You can either load independents ``*.vcproj'' project files along your
nico@208: own projects in your own solution or load the provided
nico@208: ``CanFestival{}-3.vc8.sln'' solution files directly.
nico@208: 
nico@208: Build CanFestival{}-3 project first.
nico@208: 
nico@208: \paragraph{PcanLight and the can\_peak\_win32 project.}
nico@208: Chosen Pcan\_xxx.lib and eventually Pcan\_2xxx.lib files must be added
nico@208: to can\_peak\_win32 \ \ project before build of the DLL.
nico@208: 
nico@208: \subsubsection{Testing}
nico@208: Copy eventually needed dlls (ie : Pcan\_Nxxx.lib) into Release or Debug
nico@208: directory, and run the test program:
nico@208: 
nico@208: {\ttfamily
nico@208: TestMasterSlave.exe {}-l can\_peak\_win32.dll}
nico@208: 
nico@208: \section{Motorola HCS12}
nico@208: The examples have been tested on a MC9S12DG255 mounted on a
nico@208: Elektronikladen HCS12 T{}-board.
nico@208: 
nico@208: Beware that there are a few differences in the MSCAN module of the
nico@208: 68HC12 and HCS12 microcontroller. For a HC12, you must adapt the driver
nico@208: that we provide for \ the HCS12.
nico@208: 
nico@208: For the difference MSCAN HC12/HCS12, see the Motorola application note
nico@208: AN2011/D.
nico@208: 
nico@208: Configure switch:
nico@208: 
nico@208: {\ttfamily
nico@208:  {}-{}-target=hcs12}
nico@208: 
nico@208: To do a CANopen node running on a microncontroller Motorola MC9S12DP256,
nico@208: you need :
nico@208: 
nico@208: \liststyleLx
nico@208: \begin{enumerate}
nico@208: \item The compiler GNU gcc for HC11, HC12, HCS12 : m6811{}-elf. \newline
nico@208: Download the \textbf{release 3.1} at :
nico@208: \ \href{http://m68hc11.serveftp.org/m68hc11_pkg_rpm.php}{http://m68hc11.serveftp.org/m68hc11\_pkg\_rpm.php}
nico@208: 
nico@208: \item A board with this chip. We are using the T{}-board from
nico@208: Electronikladden. 
nico@208: \item At least about 40 kBytes of program memory.
nico@208: \item A tool to flash the memory. (We are using the hight cost
nico@208: Lauterbach debugger).
nico@208: \end{enumerate}
nico@208: \subsection{Running a HCS12 node}
nico@208: \subsubsection{Compiling Canfestival:}
nico@208: {\ttfamily
nico@208: ./configure {--}target=hcs12}
nico@208: 
nico@208: \subsubsection{Compiling and building an example}
nico@208: Enter in the folder of an HCS12 example, 
nico@208: 
nico@208: {\ttfamily
nico@208: make all}
nico@208: 
nico@208: \subsubsection{Flashing the memory :}
nico@208: Use your prefered loader ! If you are using a debugger Lauterbach, you
nico@208: can load the bash file : trace32\_flash\_programmer.cmm. It loads
nico@208: directly the elf file.
nico@208: 
nico@208: \subsubsection{Connecting to a serial RS232 console :}
nico@208: Connect the portS(TxD0) of the HCS12 to a console configured at 19200
nico@208: bauds 8N1, via a Max232 chip to adapt the electricals levels. On Linux,
nico@208: you can use minicom. Connecting to a console is usefull to read the
nico@208: messages, but not required.
nico@208: 
nico@208: \subsubsection{Connecting to the CAN network :}
nico@208: Connect the port CAN0 (pin PM0, PM1) to the network via a CAN
nico@208: controller. On our board, the CAN controler is a PCA82C250 chip.
nico@208: 
nico@208: \subsubsection{starting the node :}
nico@208: Press the reset of your HCS12 board.
nico@208: 
nico@208: \section{Example and test program:}
nico@208: The ``examples'' directory contains some test program you can use as
nico@208: example for your own developments.
nico@208: 
nico@208: \subsection{TestMasterSlave}
nico@208: {\ttfamily
nico@208: **************************************************************}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ TestMasterSlave
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: *
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ A simple example for PC. It does implement 2 CanOpen \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ nodes in the same process. A master and a slave. Both \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ communicate together, exchanging periodically NMT, SYNC, \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ SDO and PDO. Master configure heartbeat producer time \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ at 1000 ms for slave node{}-id 0x02 by concise DCF.
nico@208: \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: *
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ Usage:
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ ./TestMasterSlave \ [OPTIONS]
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: *
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ OPTIONS:
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ \ \ {}-l : Can library
nico@208: [{\textquotedbl}libcanfestival\_can\_virtual.so{\textquotedbl}]
nico@208: \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: *
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ \ Slave:
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ \ \ {}-s : bus name [{\textquotedbl}0{\textquotedbl}]
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ \ \ {}-S : 1M,500K,250K,125K,100K,50K,20K,10K,none(disable) \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: *
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ \ Master:
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ \ \ {}-m : bus name [{\textquotedbl}1{\textquotedbl}]
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ \ \ {}-M : 1M,500K,250K,125K,100K,50K,20K,10K,none(disable) \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: *
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: **************************************************************}
nico@208: 
nico@208: 
nico@208: \bigskip
nico@208: 
nico@208: {\sffamily
nico@208: Notes for Concise DCF :}
nico@208: 
nico@208: 
nico@208: \bigskip
nico@208: 
nico@208: {\sffamily
nico@208:  In this example, Master configure \ heartbeat producer time at 1000 ms
nico@208: for slave node{}-id 0x02 by concise DCF according DS{}-302 profile. }
nico@208: 
nico@208: {\sffamily
nico@208:  }
nico@208: 
nico@208: {\sffamily
nico@208:  Index 0x1F22 , sub{}-index 0x00 of the master OD, correspond to the
nico@208: number of entries. This equal to the maximum possible nodeId (127).
nico@208: Each sub{}-index points to the Node{}-ID of the device, to which the
nico@208: configuration belongs. }
nico@208: 
nico@208: 
nico@208: \bigskip
nico@208: 
nico@208: {\sffamily
nico@208:  To add more parameters configurations to the slave, the value at
nico@208: sub{}-index 0x02 must be a binary stream (little{}-endian) following
nico@208: this structure :}
nico@208: 
nico@208: {\sffamily
nico@208:     }
nico@208: 
nico@208: {\sffamily
nico@208: [ nb of entries / index parameter 1 / sub{}-index parameter 1 \ / size
nico@208: data parameter 1 \ / data parameter 1 / index parameter n / ...]}
nico@208: 
nico@208: {\sffamily
nico@208: \ \ \ \ \ \ (UNS32) \ \ \ \ \ \ \ \ \ \ \ \ (UNS16)  (UNS8)  
nico@208: \ \ \ \ \ \ \ \ \ \ \ (UNS32)   \ \ \ (DOMAIN)}
nico@208: 
nico@208: {\sffamily
nico@208:  }
nico@208: 
nico@208: {\sffamily
nico@208:  So the binary value stream to configure heartbeat producer time must be
nico@208: : }
nico@208: 
nico@208: 
nico@208: \bigskip
nico@208: 
nico@208: {\sffamily
nico@208:     0100000017100002000000e803}
nico@208: 
nico@208: 
nico@208: \bigskip
nico@208: 
nico@208: {\sffamily
nico@208: The slave node is configured just before the Master entering in
nico@208: Pre\_operational state.}
nico@208: 
nico@208: \subsection{gene\_SYNC\_HCS12 :}
nico@208: This is a simple CanOpen node that only send cyclic SYNC message. It
nico@208: demonstrate implementation on HCS12 based board.
nico@208: 
nico@208: 
nico@208: \bigskip
nico@208: 
nico@208: \subsection{TestMasterMicroMod }
nico@208: {\ttfamily
nico@208: **************************************************************}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ TestMasterMicroMod
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: *
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ A simple example for PC.
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ A CanOpen master that control a MicroMod module:
nico@208: \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ {}- setup module TPDO 1 transmit type
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ {}- setup module RPDO 1 transmit type
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ {}- setup module hearbeatbeat period
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ {}- disable others TPDOs
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ {}- set state to operational
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ {}- send periodic SYNC
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ {}- send periodic RPDO 1 to Micromod (digital output) \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ {}- listen Micromod{\textquotesingle}s TPDO 1 (digital input)
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ {}- Mapping RPDO 1 bit per bit (digital input)
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: *
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ Usage:
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ ./TestMasterMicroMod \ [OPTIONS]
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: *
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ OPTIONS:
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ \ \ {}-l : Can library
nico@208: [{\textquotedbl}libcanfestival\_can\_virtual.so{\textquotedbl}]
nico@208: \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: *
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ \ Slave:
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ \ \ {}-i : Slave Node id format [0x01 , 0x7F]
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: *
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ \ Master:
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ \ \ {}-m : bus name [{\textquotedbl}1{\textquotedbl}]
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: * \ \ \ \ {}-M : 1M,500K,250K,125K,100K,50K,20K,10K
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: *
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *}
nico@208: 
nico@208: {\ttfamily
nico@208: **************************************************************}
nico@208: 
nico@208: \section{Developing a new node}
nico@208: Using provided examples as a base for your new node is generally a good
nico@208: idea. You can also use the provided *.od files as a base for your node
nico@208: object dictionary.
nico@208: 
nico@208: Creating a new CanOpen node implies to define the Object Dictionary of
nico@208: this node. For that, developer have to provide a C file. This C file
nico@208: contains the definition of all dictionary entries, and some kind of
nico@208: index table that helps the stack to access some entries directly.
nico@208: 
nico@208: \subsection{Using Dictionary Editor GUI}
nico@208: The Object Dictionary Editor is a WxPython based GUI that is used to
nico@208: create the C file needed to create a new CanOpen node. 
nico@208: 
nico@208: \subsubsection{Installation and usage on Linux}
nico@208: You first have to download and install Gnosis XML modules. This is
nico@208: automated by a Makefile rule.
nico@208: 
nico@208: {\ttfamily
nico@208: cd objdictgen}
nico@208: 
nico@208: {\ttfamily
nico@208: make}
nico@208: 
nico@208: Now start the editor.
nico@208: 
nico@208: {\ttfamily
nico@208: python objdictedit.py [od files...]}
nico@208: 
nico@208: \subsubsection{Installation and usage on Windows}
nico@208: Install Python (at least version 2.4) and wxPython (at least version
nico@208: 2.6.3.2).
nico@208: 
nico@208: Cygwin users can install Gnosis XML utils the same as Linux use. Just
nico@208: call make.
nico@208: 
nico@208: {\ttfamily
nico@208: cd objdictgen}
nico@208: 
nico@208: {\ttfamily
nico@208: make}
nico@208: 
nico@208: Others will have to download and intall Gnosis XML by hand :
nico@208: 
nico@208: {\ttfamily
nico@208: Gnosis Utils:}
nico@208: 
nico@208: {\ttfamily
nico@208: http://freshmeat.net/projects/gnosisxml/}
nico@208: 
nico@208: {\ttfamily
nico@208: http://www.gnosis.cx/download/Gnosis\_Utils.More/Gnosis\_Utils{}-1.2.1.win32{}-py24.exe}
nico@208: 
nico@208: {\ttfamily
nico@208: Get latest version.}
nico@208: 
nico@208: Download CanFestival archive and uncompress it. Use windows file
nico@208: explorer to go into CanFestival3{\textbackslash}objdicgten, and
nico@208: double{}-click on objdictedit.py.
nico@208: 
nico@208: \subsubsection{About}
nico@208: The Object Dictionary editor GUI is a python application that use the
nico@208: Model{}-View{}-Controller design pattern. It depends on WxPython to
nico@208: display view on any supported platform.
nico@208: 
nico@208:  \begin{center}
nico@208:    \includegraphics[width=15cm]{Pictures/10000201000001FC000001E5D65E8766.png}
nico@208: \end{center}
nico@208: 
nico@208: \subsubsection{Main view}
nico@208: Top list let you choose dictionary section, bottom left list is the
nico@208: selected index in that dictionary, and bottom right list are edited
nico@208: sub{}-indexes.
nico@208: 
nico@208:  \begin{center}
nico@208:    \includegraphics[width=5cm]{Pictures/10000201000001FC000001E5D65E8766.png}
nico@208: \end{center}
nico@208: 
nico@208:  \begin{center}
nico@208:    \includegraphics[width=5cm]{Pictures/10000000000000B6000000DF1EDD1E73.png}
nico@208: \end{center}
nico@208:   \begin{center}
nico@208:    \includegraphics[width=5cm]{Pictures/10000000000000AC000000C9C3F53FA6.png}
nico@208: \end{center}
nico@208:  \begin{center}
nico@208:    \includegraphics[width=5cm]{Pictures/100000000000006D000000A31EC8CB54.png}
nico@208: \end{center}
nico@208:   \begin{center}
nico@208:    \includegraphics[width=5cm]{Pictures/10000000000000AA0000006014F74635.png}
nico@208: \end{center}
nico@208: 
nico@208: \subsubsection{New node}
nico@208: Edit your node name, ID and type. Choose your inherited specific
nico@208: profile.
nico@208: 
nico@208:  \begin{center}
nico@208:    \includegraphics[width=15cm]{Pictures/10000201000001CB0000015F4FC09B68.png}
nico@208: \end{center}
nico@208: 
nico@208: \subsubsection{Node info}
nico@208: Edit your node name, ID and type.
nico@208: 
nico@208:  \begin{center}
nico@208:    \includegraphics[width=10cm]{Pictures/10000201000001010000011DA724D25C.png}
nico@208: \end{center}
nico@208: 
nico@208: \subsubsection{Profile editor}
nico@208: Chose the used profile to edit.\newline
nico@208:  \begin{center}
nico@208:    \includegraphics[width=15cm]{Pictures/10000000000000AB000000C88F594413.png}
nico@208: \end{center}
nico@208: 
nico@208: Pick up optional chosen profile entries.\newline
nico@208:  \begin{center}
nico@208:    \includegraphics[width=10cm]{Pictures/10000201000002DE000001D82D89C224.png}
nico@208: \end{center}
nico@208: 
nico@208: \subsubsection{User types}
nico@208: Use User Types to implement value boundaries, and string lentgth\newline
nico@208:  \begin{center}
nico@208:    \includegraphics[width=15cm]{Pictures/10000201000001C40000010766961D7F.png}
nico@208: \end{center}
nico@208: 
nico@208: \subsubsection{Mapped variable}
nico@208: Add your own specific dictionary entries and associated mapped
nico@208: variables.\newline
nico@208:  \begin{center}
nico@208:    \includegraphics[width=10cm]{Pictures/10000201000001C4000000DD129D4661.png}
nico@208: \end{center}
nico@208: 
nico@208: \subsubsection{Integrated help}
nico@208: Using F1 key, you can get context sensitive help.\newline
nico@208:  \begin{center}
nico@208:    \includegraphics[width=15cm]{Pictures/10000201000002F30000020B23ED7F67.png}
nico@208: \end{center}
nico@208: 
nico@208: In order to do that, official 301\_v04000201.pdf file must be placed
nico@208: into doc/ directory, and xpdf must be present on your system.
nico@208: 
nico@208: F2 key open HTML CanFestival help.\newline
nico@208:  \begin{center}
nico@208:    \includegraphics[width=15cm]{Pictures/10000201000003440000025ACC3FD2F1.png}
nico@208: \end{center}
nico@208: 
nico@208: \subsection{Generating the object Dictionary}
nico@208: Once object dictionary has been edited and saved, you have to generate
nico@208: object dictionary C code for your CanFestival node.
nico@208: 
nico@208: \subsubsection{With GUI}
nico@208: Menu entry ``File/Build Dictionary''.
nico@208: 
nico@208:  \begin{center}
nico@208:    \includegraphics[width=15cm]{Pictures/10000201000000B7000000C66AF89CD5.png}
nico@208: \end{center}
nico@208: 
nico@208: Choose C file to create or overwrite. Header file will be also created
nico@208: with the same prefix as C file.
nico@208: 
nico@208: \subsubsection{With command line}
nico@208: {\ttfamily
nico@208: Usage of objdictgen.py :\newline
nico@208: python objdictgen.py XMLFilePath CfilePath}
nico@208: 
nico@208: \section{FAQ}
nico@208: \subsection{General}
nico@208: \subsubsection{Does the code compiles on Windows ?}
nico@208: Yes, with both Cygwin and Visual Studio C++.
nico@208: 
nico@208: Because CANopen layer is coded with C, put a compilation option /TC or
nico@208: /TP if you plan to mix C++ files. See the MSDN documentation about
nico@208: that.
nico@208: 
nico@208: \subsubsection{How to fit the library to an other microcontr\^oler ?}
nico@208: First, be sure that you have at least 40K bytes of program memory, and
nico@208: about 2k of RAM. 
nico@208: 
nico@208: You have to create target specific interface to HW resources. Take model
nico@208: on bundled interfaces provided in drivers/ and create your own
nico@208: interface. You also have to update Makefile.in files for target
nico@208: specific cflags and options. Chose {--}targer= configure switch to
nico@208: compile your specific interface.
nico@208: 
nico@208: You are welcome to contribute{}-back your own interfaces ! Other
nico@208: Canfestival users will use it and provide feedback, tests and
nico@208: enhancements.
nico@208: 
nico@208: \subsubsection{Is CanFestival3 conform to DS301 v.4.02 ?}
nico@208: Thanks to Philippe Foureys (IUT of Valence), a slave node have been
nico@208: tested with the National Instrument CanOpen Conformance Test. It passed
nico@208: the test with success.
nico@208: 
nico@208: Some very small unconformity have been found in very unusual situations,
nico@208: for example in the SDO code response to wrong messages.
nico@208: 
nico@208: \subsection{LINUX}
nico@208: \subsubsection{How to use a Peaksystem CAN board ?}
nico@208: Just install peak driver and then compile and install Canfestival. Peak
nico@208: driver is detected at compile time.
nico@208: 
nico@208: \subsubsection{How to use an unsupported CAN board ?}
nico@208: You have to install the specific driver on your system, with necessary
nico@208: libs and headers. 
nico@208: 
nico@208: Use can\_peak.c/h or can\_virtual.c/h as an example, and adapt it to
nico@208: your driver API.
nico@208: 
nico@208: Execute configure script and choose {}-{}-can=mydriver
nico@208: 
nico@208: \subsection{Win32}
nico@208: Compatibility:
nico@208: 
nico@208: \liststyleLxi
nico@208: \begin{enumerate}
nico@208: \item Code was compiled MS VisualStudio 2003.NET and VisualStudio
nico@208: 2005.NET for WindowsXP \ with ANSI and UNICODE configurations and for
nico@208: WindowsCE 5.0. 
nico@208: \item Some preliminary testing was done, but not enough to be used in
nico@208: mission critical projects.
nico@208: \end{enumerate}
nico@208: Additional Features:
nico@208: 
nico@208: \liststyleLxii
nico@208: \begin{enumerate}
nico@208: \item Non{}-integral integers support implementation UNS24, UNS40, UNS48
nico@208: etc.
nico@208: \item When enable debug output with DEBUG\_WAR\_CONSOLE\_ON or
nico@208: DEBUG\_ERR\_CONSOLE\_ON, you can navigate in CanFestival source code by
nico@208: double clicking at diagnostic lines in VisualStudio.NET 200X Debug
nico@208: Output Window.
nico@208: \end{enumerate}
nico@208: Custom size integral types such as INTEGER24, UNS40, INTEGER56 etc. have
nico@208: been defined as 64 bits integers. You will need to replace sizeof(TYPE)
nico@208: operators to sizeof\_TYPE definitions in generated code, i.e. replace
nico@208: sizeof(UNS40) with sizeof\_UNS40.
nico@208: 
nico@208: 
nico@208: \bigskip
nico@208: 
nico@208: \subsection{HCS12}
nico@208: \subsubsection{Which board are you using ?}
nico@208: A T{}-board from elektronikladen with a MC9S12DP256 or MC9S12DG256.
nico@208: 
nico@208: \subsubsection{Does the code compile with an other compiler than GNU gcc
nico@208: ?}
nico@208: It is known to work with Metrowerks CodeWarrior. Here are some tips from
nico@208: Philippe Foureys. :
nico@208: 
nico@208: \paragraph{Interrupt functions}
nico@208: \subparagraph{Code for GCC:}
nico@208: {\ttfamily
nico@208:  // prototype\newline
nico@208:  void \_\_attribute\_\_((interrupt))timer3Hdl(void):\newline
nico@208:  // function\newline
nico@208:  void \_\_attribute\_\_((interrupt))timer3Hdl(void)\{...\}}
nico@208: 
nico@208: \subparagraph{Code for CodeWarrior}
nico@208: {\ttfamily
nico@208:  // protoype\newline
nico@208:  void interrupt timer3Hdl(void);\newline
nico@208:  // function\newline
nico@208:  pragma CODE\_SEG\_\_NEAR\_SEG\_NON\_BANKED\newline
nico@208:  void interrupt timer3Hdl(void)\newline
nico@208:  \{...\}\newline
nico@208:  pragma CODE\_SEG\_DEFAULT}
nico@208: 
nico@208: \paragraph{Interrupt lock, unlock}
nico@208: \subparagraph{Code for GCC}
nico@208: {\ttfamily
nico@208:  void unlock (void)\newline
nico@208:  \{\newline
nico@208:   \ \_\_asm\_\_
nico@208: \_\_volatile\_\_({\textquotedbl}cli{\textquotedbl});\newline
nico@208:  \}\newline
nico@208:  void lock (void)\newline
nico@208:  \{\newline
nico@208:   \ unsigned short mask;\newline
nico@208:   \ \_\_asm\_\_
nico@208: \_\_volatile\_\_({\textquotedbl}tpa{\textbackslash}n{\textbackslash}tsei{\textquotedbl}:{\textquotedbl}=d{\textquotedbl}(mask));\newline
nico@208:  \}}
nico@208: 
nico@208: \subparagraph{Code for CodeWarrior}
nico@208: {\ttfamily
nico@208: void unlock (void)\newline
nico@208:  \{\newline
nico@208:   \ \_\_asm({\textquotedbl}cli{\textquotedbl});\newline
nico@208:  \}\newline
nico@208:  void lock (void)\newline
nico@208:  \{\newline
nico@208:   \ unsigned short mask;\newline
nico@208:   \ \_\_asm\newline
nico@208:   \{\newline
nico@208:   \ tpa:tsei:{\textquotedbl}=d{\textquotedbl}(mask);\newline
nico@208:   \}\newline
nico@208:  \}}
nico@208: 
nico@208: \paragraph{Initialize function}
nico@208: \subparagraph{Code for GCC}
nico@208: {\ttfamily
nico@208: void initCanHCS12 (void)\newline
nico@208:  \{ \ \newline
nico@208:   \ //Init the HCS12 microcontroler for CanOpen \newline
nico@208:   \ initHCS12();\newline
nico@208:   \ \ // Init the HCS12 \ CAN driver\newline
nico@208:   \ const canBusInit bi0 = \{\newline
nico@208:   \ \ \ 0, \ \ \ /* no low power \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ */
nico@208: \newline
nico@208:   \ \ \ 0, \ \ \ /* no time stamp
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ */\newline
nico@208:   \ \ \ 1, \ \ \ /* enable MSCAN
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ */\newline
nico@208:   \ \ \ 0, \ \ \ /* clock source : oscillator (In fact, it is not used)
nico@208: \ \ */\newline
nico@208:   \ \ \ 0, \ \ \ /* no loop back
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ */\newline
nico@208:   \ \ \ 0, \ \ \ /* no listen only
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ */\newline
nico@208:   \ \ \ 0, \ \ \ /* no low pass filter for wk up */\newline
nico@208:   \ CAN\_Baudrates[CAN\_BAUDRATE\_250K],\newline
nico@208:   \ \ \ \{\newline
nico@208:   \ \ \ \ \ 0x00, \ \ \ /* Filter on 16 bits.\newline
nico@208:   \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ See Motorola Block Guide V02.14 fig
nico@208: 4{}-3 */\newline
nico@208:   \ \ \ \ \ 0x00, 0xFF, /* filter 0 hight accept all msg
nico@208: \ \ \ \ \ */\newline
nico@208:   \ \ \ \ \ 0x00, 0xFF, /* filter 0 low accept all msg
nico@208: \ \ \ \ \ \ \ */\newline
nico@208:   \ \ \ \ \ 0x00, 0xFF, /* filter 1 hight filter all of \ msg
nico@208: \ */\newline
nico@208:   \ \ \ \ \ 0x00, 0xFF, /* filter 1 low filter all of \ msg
nico@208: \ \ \ */\newline
nico@208:   \ \ \ \ \ 0x00, 0xFF, /* filter 2 hight filter most of \ msg
nico@208: */\newline
nico@208:   \ \ \ \ \ 0x00, 0xFF, /* filter 2 low filter most of \ msg
nico@208: \ \ */\newline
nico@208:   \ \ \ \ \ 0x00, 0xFF, /* filter 3 hight filter most of \ msg
nico@208: */\newline
nico@208:   \ \ \ \ \ 0x00, 0xFF, /* filter 3 low filter most of \ msg
nico@208: \ \ */\newline
nico@208:   \ \ \ \}\newline
nico@208:   \ \};}
nico@208: 
nico@208: \subparagraph{Code for CodeWarrior}
nico@208: {\ttfamily
nico@208: void initCanHCS12 (void)\newline
nico@208:  \{ \ \newline
nico@208:   \ //Init the HCS12 microcontroler for CanOpen \newline
nico@208:   \ initHCS12();\newline
nico@208:   \ \ // Init the HCS12 \ CAN driver\newline
nico@208:   \ const canBusInit bi0 = \{\newline
nico@208:   \ \ \ 0, \ \ \ /* no low power \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ */
nico@208: \newline
nico@208:   \ \ \ 0, \ \ \ /* no time stamp
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ */\newline
nico@208:   \ \ \ 1, \ \ \ /* enable MSCAN
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ */\newline
nico@208:   \ \ \ 0, \ \ \ /* clock source : oscillator (In fact, it is not used)
nico@208: \ \ */\newline
nico@208:   \ \ \ 0, \ \ \ /* no loop back
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ */\newline
nico@208:   \ \ \ 0, \ \ \ /* no listen only
nico@208: \ \ \ \ \ \ \ \ \ \ \ \ \ \ */\newline
nico@208:   \ \ \ 0, \ \ \ /* no low pass filter for wk up */\newline
nico@208:   \ \ \ \{\newline
nico@208:   \ \ \ \ 1, /* clksrc */\newline
nico@208:   \ \ \ \ 3, /* brp \ \ \ */\newline
nico@208:   \ \ \ \ 0, /* sjw \ \ \ */\newline
nico@208:   \ \ \ \ 0, /* samp \ \ */\newline
nico@208:   \ \ \ \ 1, /* tseg2 \ */\newline
nico@208:   \ \ \ \ 12,/* tseg1 \ */\newline
nico@208:   \ \ \ \},\newline
nico@208:   \ \ \ \{\newline
nico@208:   \ \ \ \ \ 0x00, \ \ \ /* Filter on 16 bits.\newline
nico@208:   \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ See Motorola Block Guide V02.14 fig
nico@208: 4{}-3 */\newline
nico@208:   \ \ \ \ \ 0x00, 0xFF, /* filter 0 hight accept all msg
nico@208: \ \ \ \ \ */\newline
nico@208:   \ \ \ \ \ 0x00, 0xFF, /* filter 0 low accept all msg
nico@208: \ \ \ \ \ \ \ */\newline
nico@208:   \ \ \ \ \ 0x00, 0xFF, /* filter 1 hight filter all of \ msg
nico@208: \ */\newline
nico@208:   \ \ \ \ \ 0x00, 0xFF, /* filter 1 low filter all of \ msg
nico@208: \ \ \ */\newline
nico@208:   \ \ \ \ \ 0x00, 0xFF, /* filter 2 hight filter most of \ msg
nico@208: */\newline
nico@208:   \ \ \ \ \ 0x00, 0xFF, /* filter 2 low filter most of \ msg
nico@208: \ \ */\newline
nico@208:   \ \ \ \ \ 0x00, 0xFF, /* filter 3 hight filter most of \ msg
nico@208: */\newline
nico@208:   \ \ \ \ \ 0x00, 0xFF, /* filter 3 low filter most of \ msg
nico@208: \ \ */\newline
nico@208:   \ \ \ \}\newline
nico@208:   \ \};}
nico@208: 
nico@208: \subsubsection{Who to use warnings and errors messages ?}
nico@208: \paragraph{Warnings messages}
nico@208: \begin{longtable}[c]{|p{0.8476598in}|p{0.7761598in}|p{1.0268599in}|p{-0.026640158in}|p{1.0386599in}|p{1.2247599in}|p{1.1761599in}|}
nico@208: \hline
nico@208: {\bfseries
nico@208: DEBUG\_WAR\_CONSOLE \_ON}
nico@208: &
nico@208: {\bfseries
nico@208: DEBUG \_CAN}
nico@208: &
nico@208: {\bfseries
nico@208: PrintMsg{}-WarTo{}-Console}
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: {\bfseries
nico@208: Printing long message on console }
nico@208: &
nico@208: \textbf{Printing short message on console.} (number and value only) 
nico@208: &
nico@208: \textbf{Sending number and value in a PDO}., only if the node is a
nico@208: slave, in operational state. 
nico@208: \\\hline
nico@208: \endhead
nico@208: DEF
nico@208: &
nico@208: DEF
nico@208: &
nico@208: 1
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: yes
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: \\\hline
nico@208: DEF
nico@208: &
nico@208: DEF
nico@208: &
nico@208: 0
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: yes
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: \\\hline
nico@208: DEF
nico@208: &
nico@208: UNDEF
nico@208: &
nico@208: 1
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: \\\hline
nico@208: DEF
nico@208: &
nico@208: UNDEF
nico@208: &
nico@208: 0
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: \\\hline
nico@208: UNDEF
nico@208: &
nico@208: X
nico@208: &
nico@208: X
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: \\\hline
nico@208: \end{longtable}
nico@208: 
nico@208: \bigskip
nico@208: 
nico@208: \paragraph{Errors messages}
nico@208: \begin{longtable}[c]{|p{0.8476598in}|p{0.7351598in}|p{0.6511598in}|p{0.7865598in}|p{-0.026640158in}|p{0.8087598in}|p{0.9955599in}|p{1.1858599in}|}
nico@208: \hline
nico@208: {\bfseries
nico@208: DEBUG\_ERR\_CONSOLE \_ON}
nico@208: &
nico@208: {\bfseries
nico@208: DEBUG \_CAN}
nico@208: &
nico@208: {\bfseries
nico@208: PDO \_ERROR }
nico@208: &
nico@208: {\bfseries
nico@208: PrintMsg{}-ErrTo{}-Console}
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: {\bfseries
nico@208: Printing long message on console}
nico@208: &
nico@208: \textbf{Printing short message on console.} (number and value only) 
nico@208: &
nico@208: \textbf{Sending number and value in a PDO}., only if the node is a
nico@208: slave, in operational state. 
nico@208: \\\hline
nico@208: \endhead
nico@208: DEF
nico@208: &
nico@208: DEF
nico@208: &
nico@208: X
nico@208: &
nico@208: 1
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: yes
nico@208: &
nico@208: yes
nico@208: \\\hline
nico@208: DEF
nico@208: &
nico@208: DEF
nico@208: &
nico@208: X
nico@208: &
nico@208: 0
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: yes
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: yes
nico@208: \\\hline
nico@208: DEF
nico@208: &
nico@208: UNDEF
nico@208: &
nico@208: X
nico@208: &
nico@208: 1
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: yes
nico@208: \\\hline
nico@208: DEF
nico@208: &
nico@208: UNDEF
nico@208: &
nico@208: X
nico@208: &
nico@208: 0
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: yes
nico@208: \\\hline
nico@208: UNDEF
nico@208: &
nico@208: X
nico@208: &
nico@208: DEF
nico@208: &
nico@208: X
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: yes
nico@208: \\\hline
nico@208: UNDEF
nico@208: &
nico@208: X
nico@208: &
nico@208: UNDEF
nico@208: &
nico@208: X
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: &
nico@208: 
nico@208: \bigskip
nico@208: \\\hline
nico@208: \end{longtable}
nico@208: 
nico@208: \bigskip
nico@208: 
nico@208: \subsubsection{Does the code works in banked memory ?}
nico@208: No. Today it seems that the port of gcc is bogged for using the banked
nico@208: memory. So, unfortunately, we are limited to 48 Kbytes of memory code.
nico@208: 
nico@208: \subsubsection{What GCC version are you using ?}
nico@208: We are using the stable RPM release 2.2 :
nico@208: 
nico@208: \liststyleLxiii
nico@208: \begin{enumerate}
nico@208: \item GNU Gcc 3.0.4. Build 20030501
nico@208: \item Newlib 1.10.0 Build 20030421
nico@208: \item GNU Binutils 2.12.1 Build 20030427
nico@208: \end{enumerate}
nico@208: \section{Documentation resources}
nico@208: \paragraph{CIA : Can in Automation}
nico@208: Many documentation on CANopen.
nico@208: 
nico@208: \href{http://www.can-cia.de/}{http://www.can{}-cia.de}
nico@208: 
nico@208: \paragraph{Resources and training in CANopen}
nico@208: \href{http://www.esacademy.com/}{http://www.esacademy.com}
nico@208: 
nico@208: \paragraph{Elektronikladen HCS12 T{}-board}
nico@208: \href{http://www.elektronikladen.de/en_hcs12tb.html}{http://www.elektronikladen.de/en\_hcs12tb.html}
nico@208: 
nico@208: \paragraph{Gnu gcc compiler for HC12}
nico@208: \href{http://m68hc11.serveftp.org/m68hc11_port.php}{http://m68hc11.serveftp.org/m68hc11\_port.php}
nico@208: 
nico@208: \paragraph{Motorola documentation on HC12}
nico@208: \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}
nico@208: 
nico@208: \paragraph{Lauterbach debugger for HC12}
nico@208: \href{http://www.lauterbach.com/}{http://www.lauterbach.com}
nico@208: 
nico@208: \paragraph{Python language}
nico@208: \href{http://www.python.org/}{http://www.python.org}
nico@208: 
nico@208: \clearpage\section{About the project}
nico@208: \subsection{Contributors }
nico@208:  \begin{center}
nico@208:    \includegraphics[width=15cm]{Pictures/1000020100000258000000832C6FFAB4.png}
nico@208: \end{center}
nico@208: 
nico@208: Unit\'e mixte de recherche INRETS{}-LCPC
nico@208: 
nico@208: sur les Interractions V\'ehicule{}-Infrastructure{}-Conducteur
nico@208: 
nico@208: 14, route de la mini\`ere
nico@208: 
nico@208: 78000 Versailles
nico@208: 
nico@208: FRANCE
nico@208: 
nico@208: Tel : +33 1 40 43 29 01
nico@208: 
nico@208: \href{http://www.inrets.fr/ur/livic}{http://www.inrets.fr/ur/livic}
nico@208: 
nico@208: \textbf{Contributors :} Francis DUPIN
nico@208: 
nico@208:    Camille BOSSARD
nico@208: 
nico@208:    Laurent ROMIEUX
nico@208: 
nico@208: 
nico@208: \bigskip
nico@208: 
nico@208:  \begin{center}
nico@208:    \includegraphics[width=15cm]{Pictures/100002010000013A0000004A96B0C1FF.png}
nico@208: \end{center}
nico@208: 
nico@208: LOLITECH
nico@208: 
nico@208: 204, rue du Haut du Pin
nico@208: 
nico@208: 88470 Saint{}-Michel sur Meurthe
nico@208: 
nico@208: FRANCE
nico@208: 
nico@208: Tel : +33 3 29 52 95 67
nico@208: 
nico@208: \href{http://www.lolitech.fr/}{http://www.lolitech.fr}
nico@208: 
nico@208: {\bfseries
nico@208: Contributors : \textmd{Edouard TISSERANT (Original author)}}
nico@208: 
nico@208: {\mdseries
nico@208:    Laurent BESSARD}
nico@208: 
nico@208: 
nico@208: \bigskip
nico@208: 
nico@208: Many thanks to the other contributors for their great work:
nico@208: 
nico@208: \textmd{   }Raphael ZULLIGER
nico@208: 
nico@208: \textmd{   }David DUMINY (st\'e A6R)
nico@208: 
nico@208: \textmd{   }Zakaria BELAMRI
nico@208: 
nico@208: \subsection{Getting support}
nico@208: Send your feedback and bug reports to
nico@208: \href{mailto:canfestival-devel@lists.sourceforge.net}{canfestival{}-devel@lists.sourceforge.net}.
nico@208: 
nico@208: For commercial support, \ training and specific integration and
nico@208: developments, please ask LOLITECH (see contributors).
nico@208: 
nico@208: \subsection{Contributing}
nico@208: You are free to contribute your specific interfaces back to the project.
nico@208: This way, you can hope to get support from CanFestival users community.
nico@208: 
nico@208: Please send your patch to
nico@208: \href{mailto:canfestival-devel@lists.sourceforge.net}{canfestival{}-devel@lists.sourceforge.net}.
nico@208: 
nico@208: Feel free to create some new predefined DS{}-4xx profiles (*.prf) in
nico@208: objdictgen/config, as much as possible respectful to the official
nico@208: specifications.
nico@208: 
nico@208: \subsection{License}
nico@208: All the project is licensed with LGPL. This mean you can link
nico@208: CanFestival with any code without being obliged to publish it.
nico@208: 
nico@208: {\ttfamily
nico@208: \#This file is part of CanFestival, a library implementing CanOpen
nico@208: Stack. \newline
nico@208: \# \newline
nico@208: \#Copyright (C): Edouard TISSERANT, Francis DUPIN and Laurent BESSARD
nico@208: \newline
nico@208: \# \newline
nico@208: \#See COPYING file for copyrights details. \newline
nico@208: \# \newline
nico@208: \#This library is free software; you can redistribute it and/or \newline
nico@208: \#modify it under the terms of the GNU Lesser General Public \newline
nico@208: \#License as published by the Free Software Foundation; either \newline
nico@208: \#version 2.1 of the License, or (at your option) any later version.
nico@208: \newline
nico@208: \# \newline
nico@208: \#This library is distributed in the hope that it will be useful,
nico@208: \newline
nico@208: \#but WITHOUT ANY WARRANTY; without even the implied warranty of
nico@208: \newline
nico@208: \#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. \ See the GNU
nico@208: \newline
nico@208: \#Lesser General Public License for more details. \newline
nico@208: \# \newline
nico@208: \#You should have received a copy of the GNU Lesser General Public
nico@208: \newline
nico@208: \#License along with this library; if not, write to the Free Software
nico@208: \newline
nico@208: \#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
nico@208: \ 02111{}-1307 \ USA }
nico@208: 
nico@208: 
nico@208: \bigskip
nico@208: \end{document}




