⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readburst.c

📁 在linux操作系统下CAN收发程序的示例源代码。
💻 C
字号:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <signal.h>

#include "can.h"

#define DEFAULT_DEV "/dev/can0"

#ifndef TRUE
# define TRUE  1
#endif

#ifndef FALSE
# define FALSE 0
#endif

// Prototypes
void usage( char *pname );
void sortie (int sig );

int fd;

/*--- handler on SIGINT signal : the program quit with CTL-C ---*/
void sortie (int sig )
{
  close(fd);
  printf("Terminated by user.\n");
  exit( 0 );
}

////////////////////////////////////////////////////////////////////////////////////////////////////
// main
//

int main( int argc, char **argv )
{
  int n,ret;
  char c;
  unsigned long i=0;
  char szdevice[ 256 ] = DEFAULT_DEV;
  int bVerbose = FALSE;
  int bDebug = FALSE;
  struct canmsg_t readmsg = { 0,0,5,0,0,{0,} };
  struct sigaction act;
  
  /*------- register handler on SIGINT signal -------*/
  act.sa_handler=sortie;
  sigemptyset(&act.sa_mask);
  act.sa_flags=0;
  sigaction(SIGINT,&act,0);
  /*-------------------------------------------------*/	

  while ( ( c = getopt( argc, argv, "vhdD:")) != EOF) {

    switch (c) {
      
    case 'v':
      bVerbose = TRUE;
      break;

    case 'D':
      sprintf( szdevice, "/dev/%s", optarg );
      break;

    case 'd':
      bDebug = TRUE;
      break;

    case 'h':
    default: 
      usage( argv[ 0 ] ); 
      exit(0);

    }
  }

  if ( ( fd = open( szdevice, O_RDONLY ) ) < 0 )  {
    perror("open");
    printf("Error opening %s\n", szdevice);
    exit(1);	
  }
  
  while ( TRUE ) {
    readmsg.flags=0;
    readmsg.cob=0;
    readmsg.timestamp=0;
    ret = read( fd, &readmsg, sizeof( struct canmsg_t ) );
    if ( ret < 0 )  {
      printf( "Error reading message\n" );
    }
    else {
      fprintf( stdout, "Received message #%lu: id=%lX dlc=%u", i, readmsg.id, readmsg.length );
      for( n=0; n < readmsg.length ; n++ )
	fprintf( stdout, " %.2X", ( unsigned char ) readmsg.data[ n ] );
      fprintf( stdout, "\n");
      i++;
    }
  }

  return 0;
}


/////////////////////////////////////////////////////////////////////////////////////////////////////////
// usage
//

void usage( char *pname )
{
  fprintf(stderr, "usage: %s options [id [ byte ..]]\n", pname );
  fprintf(stderr, "-h\t Prints this message.\n");
  fprintf(stderr, "-d\t Enables debug mode.\n");
  fprintf(stderr, "-d\t Enables verbose mode.\n");
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -