/*
This file is part of CanFestival, a library implementing CanOpen Stack.
Copyright (C): Cosateq GmbH & Co.KG
http://www.cosateq.com/
http://www.scale-rt.com/
See COPYING file for copyrights details.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
example for application with CO-PCICAN card.
*/
#include <linux/module.h>
#include <linux/comedi.h>
#include <linux/comedilib.h>
#include "canfestival.h"
/* only for mdelay() */
#include <linux/delay.h>
MODULE_LICENSE("GPL");
#define CHTX 2 /* channel number of the CO-PCICAN */
#define CHRX 0 /* channel number of the CO-PCICAN */
void mySyncHandler( CO_Data* d )
{
printk( "test_copcican_comedi: got a SYNC message...\n" );
}
static int main( void )
{
s_BOARD bd;
CO_Data myData;
CAN_PORT port;
Message myMessage;
const char busname[] = "/dev/comedi0";
const char baudrate[] = "1M";
comedi_t *dev;
memset( &myData, 0x00, sizeof(CO_Data) );
myData.CurrentCommunicationState.csSYNC = 1;
myData.post_sync = mySyncHandler;
bd.busname = (char*)busname;
bd.baudrate = (char*)baudrate;
printk( "test_copcican_comedi: This example sends three SYNCs from port#%u to port#%u with a CO-PCICAN card\n", CHTX, CHRX );
/* direction: 0=RX, 1=TX */
co_pcican_select_channel( CHRX, 0 );
co_pcican_select_channel( CHTX, 1 );
port = canOpen( &bd, &myData );
if( port == NULL )
{
/* something strange happenend */
return 0;
}
/* get device pointer to control the opened device */
dev = get_dev_of_port( port );
co_pcican_enter_config_mode( dev );
co_pcican_configure_selected_channel( dev, &bd, 0 );
co_pcican_configure_selected_channel( dev, &bd, 1 );
co_pcican_enter_run_mode( dev );
memset( &myMessage, 0x00, sizeof(Message) );
myMessage.cob_id = 0x80; /* SYNC message */
myMessage.len = 1;
myMessage.data[0] = 0xA5;
/* SEND HERE */
canSend( port, &myMessage );
myMessage.data[0] = 0x5A;
canSend( port, &myMessage );
myMessage.data[0] = 0xA5;
canSend( port, &myMessage );
/* mySyncHandler() is called by the receive thread and shows a received SYNC message in the kernel log */
mdelay( 1*1000 ); /* 1s */
canClose( &myData );
return 0;
}
static int init(void)
{
printk("test_copcican_comedi for CanFestival loaded\n");
return main();
}
static void exit(void)
{
printk("test_copcican_comedi unloaded\n");
}
module_init(init);
module_exit(exit);