📄 user_define_func.c,v
字号:
head 1.13;access;symbols;locks; strict;comment @ * @;1.13date 2004.12.17.03.36.49; author yr; state Exp;branches;next 1.12;deltatype text;permissions 644;commitid 89441c2544d562b;kopt kv;filename @user_define_func.c@;1.12date 2004.12.16.09.13.47; author yr; state Exp;branches;next 1.11;deltatype text;permissions 644;commitid 60441c151c409e6;kopt kv;filename @user_define_func.c@;1.11date 2004.12.14.08.14.36; author yr; state Exp;branches;next 1.10;deltatype text;permissions 644;commitid 1ba841bea0e84060;kopt kv;filename @user_define_func.c@;1.10date 2004.12.14.07.55.08; author yr; state Exp;branches;next 1.9;deltatype text;permissions 644;commitid 1b4c41be9c573176;kopt kv;filename @user_define_func.c@;1.9date 2004.12.13.02.33.02; author yr; state Exp;branches;next 1.8;deltatype text;permissions 644;commitid 85041bcff596cce;kopt kv;filename @user_define_func.c@;1.8date 2004.12.07.11.27.11; author laj; state Exp;branches;next 1.7;deltatype text;permissions 644;commitid 96441b593733089;kopt kv;filename @user_define_func.c@;1.7date 2004.12.07.10.15.35; author laj; state Exp;branches;next 1.6;deltatype text;permissions 644;commitid 7ac41b582727902;kopt kv;filename @user_define_func.c@;1.6date 2004.12.06.13.42.25; author yr; state Exp;branches;next 1.5;deltatype text;permissions 644;commitid 8e441b46185497f;kopt kv;filename @user_define_func.c@;1.5date 2004.11.30.08.26.02; author tarbit; state Exp;branches;next 1.4;deltatype text;permissions 644;commitid cb041ac2e890319;kopt kv;filename @user_define_func.c@;1.4date 2004.11.30.07.56.24; author tarbit; state Exp;branches;next 1.3;deltatype text;permissions 644;commitid d3c41ac27976c6b;kopt kv;filename @user_define_func.c@;1.3date 2004.11.30.02.43.39; author yr; state Exp;branches;next 1.2;deltatype text;permissions 644;commitid c3c41abde567d33;kopt kv;filename @user_define_func.c@;1.2date 2004.11.30.01.59.15; author yr; state Exp;branches;next 1.1;deltatype text;permissions 644;commitid ce041abd3ee5b38;kopt kv;filename @user_define_func.c@;1.1date 2004.11.01.05.19.55; author yr; state Exp;branches;next ;deltatype text;permissions 644;commitid d404185c7771af5;kopt kv;filename @user_define_func.c@;desc@@1.13log@change mtype of regist, REG_SERIALSERV@text@#include <stdio.h> /*标准输入输出定义*/#include <stdlib.h> /*标准函数库定义*/#include <unistd.h> /*Unix 标准函数定义*/#include <sys/types.h>#include <sys/msg.h>#include <sys/ipc.h>#include <sys/stat.h>#include <fcntl.h> /*文件控制定义*/#include <termios.h> /*PPSIX 终端控制定义*/#include <errno.h> /*错误号定义*/#include <string.h>#include <pthread.h> #include <signal.h>#include <time.h>#include <Message.h>#include <Register.h>#include <alarm_num.h>/***@@brief 设置串口通信速率*@@param fd 类型 int 打开串口的文件句柄*@@param speed 类型 int 串口速度*@@return void*/extern char alarm_set[3];extern char alarm_bit[3];extern char alarm_num;extern char alarm_kind;int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300, B38400, B19200, B9600, B4800, B2400, B1200, B300, };int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9600, 4800, 2400, 1200, 300, };void set_speed(int fd, int speed){ int i; int status; struct termios Opt; tcgetattr(fd, &Opt); for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++) { if (speed == name_arr[i]) { tcflush(fd, TCIOFLUSH); cfsetispeed(&Opt, speed_arr[i]); cfsetospeed(&Opt, speed_arr[i]); status = tcsetattr(fd, TCSANOW, &Opt); if (status != 0) { perror("tcsetattr fd1"); return; } tcflush(fd,TCIOFLUSH); } }}/***@@brief 设置串口数据位,停止位和效验位*@@param fd 类型 int 打开的串口文件句柄*@@param databits 类型 int 数据位 取值 为 7 或者8*@@param stopbits 类型 int 停止位 取值为 1 或者2*@@param parity 类型 int 效验类型 取值为N,E,O,,S*/int set_Parity(int fd,int databits,int stopbits,int parity){ struct termios options; if ( tcgetattr( fd,&options) != 0) { perror("SetupSerial 1"); return(0); } options.c_cflag &= ~CSIZE; switch (databits) /*设置数据位数*/ { case 7: options.c_cflag |= CS7; break; case 8: options.c_cflag |= CS8; break; default: fprintf(stderr,"Unsupported data size\n"); return 0; } switch (parity) { case 'n': case 'N': options.c_cflag &= ~PARENB; /* Clear parity enable */ options.c_iflag &= ~INPCK; /* Enable parity checking */ break; case 'o': case 'O': options.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/ options.c_iflag |= INPCK; /* Disnable parity checking */ break; case 'e': case 'E': options.c_cflag |= PARENB; /* Enable parity */ options.c_cflag &= ~PARODD; /* 转换为偶效验*/ options.c_iflag |= INPCK; /* Disnable parity checking */ break; case 'S': case 's': /*as no parity*/ options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; break; default: fprintf(stderr,"Unsupported parity\n"); return 0; } #if 0 options.c_iflag &= 1;#endif options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); options.c_oflag &= ~OPOST; /* 设置停止位*/ switch (stopbits) { case 1: options.c_cflag &= ~CSTOPB; break; case 2: options.c_cflag |= CSTOPB; break; default: fprintf(stderr,"Unsupported stop bits\n"); return 0; } /* Set input parity option */ if (parity != 'n') options.c_iflag |= INPCK; tcflush(fd,TCIFLUSH); options.c_cc[VTIME] = 150; /* 设置超时15 seconds*/ options.c_cc[VMIN] = 0; /* Update the options and do it NOW */ if (tcsetattr(fd,TCSANOW,&options) != 0) { perror("SetupSerial 3"); return 0; } return 1; }/**********************************************************************代码说明:使用串口二测试的,发送的数据是字符,但是没有发送字符串结束符号,所以接收到后,后面加上了结束符号。我测试使用的是单片机发送数据到第二个串口,测试通过。**********************************************************************/#define FALSE 0 #define TRUE 1 /*********************************************************************/int OpenDev(char *Dev){ int fd = open( Dev, O_RDWR ); //| O_NOCTTY | O_NDELAY if (-1 == fd) { perror("Can't Open Serial Port"); return -1; } else return fd;}//------------------------------------------------------------------------------------------------------------void handle_func(){ printf("End of serial!\n"); _exit(0);}//------------------------------------------------------------------------------------------------------------void func_msg_regst(){ //regist message!! MSG sendmsg; key_t keyval0 = SERVMANAGE_MSGQ; int msgq_id0 = 0; msgq_id0 = msgget(keyval0,0); sendmsg.mtype = REG_SERIALSERV; sendmsg.pid = getpid(); sendmsg.from_service = SERIAL_SERVICE; sendmsg.data_type = REGIST; sendmsg.msg_data.answer_serv=0x00; msgsnd(msgq_id0, &sendmsg, MSG_LEN, 0); }//------------------------------------------------------------------------------------------------------------void func_sig_proc(){ //signal processor! struct sigaction act; sigset_t blockmask; sigemptyset(&blockmask); sigaddset(&blockmask, SIGINT); sigprocmask(SIG_BLOCK, &blockmask, NULL); act.sa_handler = handle_func; sigemptyset(&act.sa_mask); sigaddset(&act.sa_mask, SIGINT); sigaction(SIGINT, &act, NULL); sigprocmask(SIG_UNBLOCK,&blockmask, NULL);}//------------------------------------------------------------------------------------------------------------void func_sign_nack(){ printf("The 485 is disconnected!\n");}//------------------------------------------------------------------------------------------------------------void func_sigalarm_proc(){ struct sigaction act; sigset_t blockmask; sigemptyset(&blockmask); sigaddset(&blockmask, SIGALRM); sigprocmask(SIG_BLOCK, &blockmask, NULL); act.sa_handler = func_sign_nack; sigemptyset(&act.sa_mask); sigaddset(&act.sa_mask, SIGALRM); sigaction(SIGALRM, &act, NULL); sigprocmask(SIG_UNBLOCK,&blockmask, NULL);}//------------------------------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -