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

📄 main.c

📁 mcp2510的spi驱动
💻 C
字号:
/************************************************\
*	by threewater<threewater@up-tech.com>	*
*		2003.12.18			*
*						*
\***********************************************/

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
#include <sys/ioctl.h>
#include <pthread.h>
#include "can.h"

#define CAN_DEV		"/dev/s3c2410can"
static int can_fd = -1;

#define DEBUG
#ifdef DEBUG
#define DPRINTF(x...)	printf("Debug:"##x)
#else
#define DPRINTF(x...)
#endif

static void* canRev(void* t)
{
	CanData	data;
	int i;
	
	DPRINTF("can recieve thread begin.\n");
	for(;;){
		read(can_fd, &data, sizeof(CanData));
		for(i=0;i<data.dlc;i++)
			putchar(data.data[i]);
		fflush(stdout);
		
	}
	return NULL;
}

#define MAX_CANDATALEN		8
static void CanSendString(char *pstr)
{
	CanData data;
	int len=strlen(pstr);
	memset(&data,0,sizeof(CanData));
	data.id=0x123;
	data.dlc=8;
	for(;len>MAX_CANDATALEN;len-=MAX_CANDATALEN){
		memcpy(data.data, pstr, 8);
		
		write(can_fd, &data, sizeof(data));
		pstr+=8;
	}
	data.dlc=len;
	memcpy(data.data, pstr, len);
	//write(can_fd, pstr, len);
	write(can_fd, &data, sizeof(CanData));
}

int main(int argc, char** argv)
{
	int i;
	pthread_t th_can;
	static char str[256];
	static const char quitcmd[]="\\q!";
	void * retval;
	int id=0x123;
	char usrname[100]={0,};
 
       if((can_fd=open(CAN_DEV, O_RDWR))<0){
                printf("Error opening %s can device\n", CAN_DEV);
                return 1;
        }

	ioctl(can_fd, UPCAN_IOCTRL_PRINTRIGISTER, 1);
	ioctl(can_fd, UPCAN_IOCTRL_SETID, id);
	
#ifdef DEBUG
	ioctl(can_fd, UPCAN_IOCTRL_SETLPBK, 1);
#endif
	/* Create the threads */
	pthread_create(&th_can, NULL, canRev, 0);

	printf("\nPress \"%s\" to quit!\n", quitcmd);
	printf("\nPress Enter to send!\n");

	if(argc==2){	//Send user name
		sprintf(usrname, "%s: ", argv[1]);
	}
		
	for(;;){
		int len;
		scanf("%s", str);
		
		if(strcmp(quitcmd, str)==0){
			break;
		}
		                                     
		if(argc==2)	//Send user name
			CanSendString(usrname);
		
		len=strlen(str);
		str[len]='\n';
		str[len+1]=0;
		CanSendString(str);
	}
	/* Wait until producer and consumer finish. */
	//pthread_join(th_com, &retval);

	printf("\n");
	close(can_fd);
	return 0;
}

⌨️ 快捷键说明

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