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

📄 user_define_func.c,v

📁 linux下的串口通讯
💻 C,V
📖 第 1 页 / 共 3 页
字号:
void func_set_timer(){	struct itimerval new;        new.it_interval.tv_sec = 7200;        new.it_interval.tv_usec = 0;        new.it_value.tv_sec = 7200;        new.it_value.tv_usec = 0;                                                                                                                       setitimer(ITIMER_REAL, &new, NULL);	}//------------------------------------------------------------------------------------------------------------void fn_oprt_msg(){	MSG     rcvmsg_alarm;	MSG	rcvmsg_serial;	int     status;        int     msgid_serial;		//set up MSGQ_SERIAL                                                                if((msgid_serial = msgget(SERIAL_MSGQ, IPC_CREAT)) == -1)        {                printf("SERIAL_MSGQ get error!\n");                exit(1);        }//        printf("msgid_serial = %d\n",msgid_serial);	while (1)	{	        //to judge "the SERIAL_MSGQ has a message !"        	struct msqid_ds *msgq_buf;	        msgq_buf =  (struct msqid_ds *)malloc(sizeof(struct msqid_ds));        	do	        {        	        msgctl(msgid_serial, IPC_STAT, msgq_buf);                	usleep(1000);	        }while(msgq_buf->msg_cbytes == 0);        	free(msgq_buf);       		//		printf("in the pthread!\n"); 		//receive the message		if(msgrcv(msgid_serial, (MSG *)&rcvmsg_serial, 80, 0, 0) == -1)        	{                	printf("rcvmsg_alarm rcv error!\n");	                exit(1);        	}				//以后,这里可以用switch,对不同的data_type作不同的处理;		if (rcvmsg_serial.data_type == 7)		{			alarm_set[0] = rcvmsg_serial.msg_data.alarm[0];			alarm_set[1] = rcvmsg_serial.msg_data.alarm[1];			alarm_set[2] = rcvmsg_serial.msg_data.alarm[2];//			printf("In the serial!\n");//			printf("The message from SERIAL_MSGQ data_type:%x\n",rcvmsg_serial.data_type);//	        	printf("The message from SERIAL_MSGQ alarm[0]:%x\n",rcvmsg_serial.msg_data.alarm[0]);//	        	printf("The message from SERIAL_MSGQ alarm[1]:%x\n",rcvmsg_serial.msg_data.alarm[1]);//			printf("The msssage from SERIAL_MSGQ alarm[2]:%x\n",rcvmsg_serial.msg_data.alarm[2]);        	}         }                                                                                                   }//-----------------------------------------------------------------------------------------------------------void func_read_alarm_set(){	int	i;	FILE	*fp2;		if((fp2 = fopen("./temp/set_record", "r")) == NULL)        {                printf("can't open file fp2!\n");                exit(1);        }                                                                                                    fread(alarm_set, 1, 3, fp2);        fclose(fp2);}//-----------------------------------------------------------------------------------------------------------void fn_read_port(int fdcom, unsigned char *buffer){	int     readlen, fs_sel;	int	i;        unsigned char    sign_1 = 0xf6;        unsigned char    sign_2 = 0xf9;	unsigned char	sign_err_1 = 0xfa;	unsigned char	sign_err_2 = 0xf7;	unsigned char	sign_ack = 0xf8;	unsigned char	sign;        fd_set  fs_read;        while(1){	        FD_ZERO(&fs_read);        FD_SET(fdcom, &fs_read);        fs_sel = select(fdcom+1, &fs_read, NULL, NULL, NULL);	        if(FD_ISSET(fdcom, &fs_read))	{               if(read(fdcom, &sign, 1) > 0){                                                                  	if(sign == 0xf5){                	write(fdcom, &sign_1, 1);			printf("0xf5 successful!\n");			break;		}		else if(sign == sign_ack){			printf("sign_ack received, The 485 is ok!\n");			func_set_timer();		}		else{			write(fdcom, &sign_err_1, 1);			printf("0xf5 failed!\n");                }		}        }}while(1){	FD_ZERO(&fs_read);        FD_SET(fdcom, &fs_read);        fs_sel = select(fdcom+1, &fs_read, NULL, NULL, NULL);        if(fs_sel)	{	                readlen = read(fdcom, buffer, 6);	}	if(readlen == 6){		write(fdcom, &sign_2, 1);		printf("readlen == 6 successful!\n");		for(i = 0; i<6; i++)		{			printf("the data is:%x\n",buffer[i]);		}		break;	}	        else{   		printf("readlen != 6\n");		write(fdcom, &sign_err_2, 1);        }}	}//------------------------------------------------------------------------------------------------------------void fn_operation(char * buffer){//	char	alarm_bit[3];		switch (buffer[0])	{		case 0xd2: 	alarm_bit[0] = alarm_set[0] & 0x01; 				alarm_num = RESCUE_ONE; alarm_kind = 1; break;		case 0xe8: 	alarm_bit[0] = alarm_set[0] & 0x02; 				alarm_num = RESCUE_TWO; alarm_kind = 1; break;		case 0xd3: 	alarm_bit[0] = alarm_set[0] & 0x04; 				alarm_num = SMOKE_ONE; alarm_kind = 2; break;		case 0xdb: 	alarm_bit[0] = alarm_set[0] & 0x08; 				alarm_num = SMOKE_TWO; alarm_kind = 2; break;		case 0xe9: 	alarm_bit[0] = alarm_set[0] & 0x10; 				alarm_num = SMOKE_THREE; alarm_kind = 2; break;		case 0xd5: 	alarm_bit[0] = alarm_set[0] & 0x20; 				alarm_num = GAS_ONE; alarm_kind = 3;break;		case 0xea: 	alarm_bit[0] = alarm_set[0] & 0x40; 				alarm_num = GAS_TWO; alarm_kind = 3;break;		//无0x80 				case 0xd8: 	alarm_bit[1] = alarm_set[1] & 0x01; 				alarm_num = DOOR_MAG_ONE; alarm_kind = 4;break;		case 0xed: 	alarm_bit[1] = alarm_set[1] & 0x02; 				alarm_num = DOOR_MAG_TWO; alarm_kind = 4;break;		case 0xd9: 	alarm_bit[1] = alarm_set[1] & 0x04; 				alarm_num = WIN_MAG_ONE; alarm_kind = 5;break;		case 0xde: 	alarm_bit[1] = alarm_set[1] & 0x08; 				alarm_num = WIN_MAG_TWO; alarm_kind = 5;break;		case 0xee: 	alarm_bit[1] = alarm_set[1] & 0x10; 				alarm_num = WIN_MAG_THREE; alarm_kind = 5;break;		case 0xd6: 	alarm_bit[1] = alarm_set[1] & 0x20; 				alarm_num = INFRARED_ONE; alarm_kind = 6;break;		case 0xdc: 	alarm_bit[1] = alarm_set[1] & 0x40; 				alarm_num = INFRARED_TWO; alarm_kind = 6;break;		case 0xeb: 	alarm_bit[1] = alarm_set[1] & 0x80; 				alarm_num = INFRARED_THREE; alarm_kind = 6;break;		case 0xd7: 	alarm_bit[2] = alarm_set[2] & 0x01; 				alarm_num = CURTAIN_ONE; alarm_kind = 7;break;		case 0xdd: 	alarm_bit[2] = alarm_set[2] & 0x02; 				alarm_num = CURTAIN_TWO; alarm_kind = 7;break;		case 0xec: 	alarm_bit[2] = alarm_set[2] & 0x04; 				alarm_num = CURTAIN_THREE; alarm_kind = 7;break;		case 0xda: 	alarm_bit[2] = alarm_set[2] & 0x08; 					alarm_num = QUAKE_ONE; alarm_kind = 8;break;		case 0xef: 	alarm_bit[2] = alarm_set[2] & 0x10; 				alarm_num = QUAKE_TWO; alarm_kind = 8;break;		//无0x20,0x40		case 0xdf: 	alarm_bit[2] = alarm_set[2] & 0x80; 				alarm_num = AROUND_PROTECT; alarm_kind = 9;break;	}	//	return alarm_bit;}//------------------------------------------------------------------------------------------------------------void fn_msg_snd(){	MSG	sndmsg_sysinfo;	MSG	sndmsg_network;	MSG	rcvmsg_arise;	int	msgid_sysinfo;	int	msgid_network;	int	i;	FILE	*fp1;	if(alarm_bit[0] || alarm_bit[1] || alarm_bit[2])	{		//send message to sys_info(indmain)!                                             	        sndmsg_sysinfo.mtype = 1;        	sndmsg_sysinfo.data_type = SYSINFO;	        sndmsg_sysinfo.msg_data.sys_info = ALARM;		if((msgid_sysinfo = msgget(SYSINFO_MSGQ, 0)) == -1)      		{               		printf("SYSINFO_MSGQ get error!\n");	       	  	exit(1);      		}		if(msgsnd(msgid_sysinfo, (MSG *)&sndmsg_sysinfo, sizeof(MSG)-4, IPC_NOWAIT) == -1)        	{       	        	printf("sndmsg_sysinfo msgsnd error!\n");	               	exit(1);       		}				//send kind message to network                sndmsg_network.mtype = 1;                sndmsg_network.data_type = ALARM_SEND;                sndmsg_network.msg_data.alarm_send[0] = alarm_kind;                sndmsg_network.msg_data.alarm_send[1] = alarm_num;                                                                                                                               if((msgid_network = msgget(NETWORK_MSGQ, 0)) == -1)                {                        printf("NETWORK_MSGQ get error!\n");                        exit(1);                }                if(msgsnd(msgid_network, (MSG *)&sndmsg_network, sizeof(MSG)-4, IPC_NOWAIT) == -1)                {                        printf("sndmsg_network msgsnd error!\n");                        exit(1);                }		//write to arise_record, which record the alarm happened!		if((fp1 = fopen("./temp/arise_record", "w")) == NULL)	        {        	        printf("can't open file fp1!\n");                	exit(1);	        }        	fwrite(alarm_bit, 1, 3, fp1);		printf("write to arise_record!\n");		fclose(fp1);	}	else		printf("The device is unsetted!\n");	alarm_num = 0;//reset the alarm_num!	alarm_bit[0] = 0;	alarm_bit[1] = 0;	alarm_bit[2] = 0;	}//-----------------------------------------------------------------------------------------------------------@1.12log@add func_set_timer@text@d196 1a196 1        sendmsg.mtype           = 100;@1.11log@to merge two message into one@text@d14 1d224 32d330 1a331 1d333 1a333 1                                                                                                                             d348 5a352 1		else{	d354 2a355 2			printf("0xf5 failed!\n");	                }	@1.10log@add alarm_kind & alarm_num@text@d26 2a27 2extern 	int	alarm_num;extern	int 	alarm_kind;d415 1a415 2	MSG	sndmsg_alarm_num;	MSG	sndmsg_alarm_kind;d441 4a444 3                sndmsg_alarm_kind.mtype = 1;                sndmsg_alarm_kind.data_type = ALARM_KIND_SEND;                sndmsg_alarm_kind.msg_data.alarm_kind = alarm_kind;d451 1a451 1                if(msgsnd(msgid_network, (MSG *)&sndmsg_alarm_kind, sizeof(MSG)-4, IPC_NOWAIT) == -1)d453 1a453 1                        printf("sndmsg_alarm_kind msgsnd error!\n");a455 12		//send num message to network		sndmsg_alarm_num.mtype = 1;                sndmsg_alarm_num.data_type = ALARM_NUM_SEND;                sndmsg_alarm_num.msg_data.alarm_num = alarm_num;                if(msgsnd(msgid_network, (MSG *)&sndmsg_alarm_num, sizeof(MSG)-4, IPC_NOWAIT) == -1)                {                        printf("sndmsg_alarm_num msgsnd error!\n");                        exit(1);                }@1.9log@send alarm_send to network@text@d27 1a27 1d358 14a371 7		case 0xd2: alarm_bit[0] = alarm_set[0] & 0x01; alarm_num = RESCUE_ONE; break;		case 0xe8: alarm_bit[0] = alarm_set[0] & 0x02; alarm_num = RESCUE_TWO; break;		case 0xd3: alarm_bit[0] = alarm_set[0] & 0x04; alarm_num = SMOKE_ONE; break;		case 0xdb: alarm_bit[0] = alarm_set[0] & 0x08; alarm_num = SMOKE_TWO; break;		case 0xe9: alarm_bit[0] = alarm_set[0] & 0x10; alarm_num = SMOKE_THREE; break;		case 0xd5: alarm_bit[0] = alarm_set[0] & 0x20; alarm_num = GAS_ONE; break;		case 0xea: alarm_bit[0] = alarm_set[0] & 0x40; alarm_num = GAS_TWO; break;d374 28a401 15		case 0xd8: alarm_bit[1] = alarm_set[1] & 0x01; alarm_num = DOOR_MAG_ONE; break;		case 0xed: alarm_bit[1] = alarm_set[1] & 0x02; alarm_num = DOOR_MAG_TWO; break;		case 0xd9: alarm_bit[1] = alarm_set[1] & 0x04; alarm_num = WIN_MAG_ONE; break;		case 0xde: alarm_bit[1] = alarm_set[1] & 0x08; alarm_num = WIN_MAG_TWO; break;		case 0xee: alarm_bit[1] = alarm_set[1] & 0x10; alarm_num = WIN_MAG_THREE; break;		case 0xd6: alarm_bit[1] = alarm_set[1] & 0x20; alarm_num = INFRARED_ONE; break;		case 0xdc: alarm_bit[1] = alarm_set[1] & 0x40; alarm_num = INFRARED_TWO; break;		case 0xeb: alarm_bit[1] = alarm_set[1] & 0x80; alarm_num = INFRARED_THREE; break;		case 0xd7: alarm_bit[2] = alarm_set[2] & 0x01; alarm_num = CURTAIN_ONE; break;		case 0xdd: alarm_bit[2] = alarm_set[2] & 0x02; alarm_num = CURTAIN_TWO; break;		case 0xec: alarm_bit[2] = alarm_set[2] & 0x04; alarm_num = CURTAIN_THREE; break;		case 0xda: alarm_bit[2] = alarm_set[2] & 0x08; alarm_num = QUAKE_ONE; break;		case 0xef: alarm_bit[2] = alarm_set[2] & 0x10; alarm_num = QUAKE_TWO; break;d403 2a404 1		case 0xdf: alarm_bit[2] = alarm_set[2] & 0x80; alarm_num = AROUND_PROTECT; break;d415 2a416 1	MSG	sndmsg_network;d440 5a444 7

⌨️ 快捷键说明

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