📄 snd_tele.c
字号:
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <stdio.h>
#include <fcntl.h>
#include <termio.h>
#include <unistd.h>
#include <string.h>
#include "nfcnet.h"
int portinit(int devid);
void strtoup(char *strp);
void strtolo(char *strp);
int semset(void);
int semopena(int semset_semid,int semset_semno);
int semopenr(int semset_semid,int semset_semno);
int semclose(int semset_semid,int semset_semno);
main()
{ int Retry,i, devidd,len,len1,semid,statusx;
char buf[1024]={0},buf1[128]={0},c;
Retry=0;
for(;;)
{ if((devidd=open(P_DEVNAME,O_RDWR|O_NONBLOCK))==-1)
{ printf("SND_TELE Open (%s) failed\n",P_DEVNAME);
Retry++; if(Retry==5)exit(1); continue; }
if(portinit(devidd)<0)
{ printf("SND_TELE Port initial failed\n");
close(devidd); exit(1); }
break;
}
semid=semset();
for(;;)
{ len=0;
for(;;)
{ printf("\nText line: ");
gets(buf1); strtoup(buf1);len1=strlen(buf1);
for(i=0;i<len1;i++){buf[len]=buf1[i]; len++;}
if(strcmp(&buf[len-4],"NNNN")==0){break;}
buf[len]='\n';len++;
}
statusx=semopena(semid,P_SENDTEL);
write(devidd,buf,len);
statusx=semclose(semid,P_SENDTEL);
printf("\nEXIT will go out .\nCommand line: ");
gets(buf1); strtoup(buf1); if(strcmp(buf1,"EXIT")==0)break;
}
}
void strtoup(char *strp)
{ int s_length,i,ich;
s_length=strlen(strp);
if(s_length != 0)
for(i=0;i<s_length;i++)
{ ich=*(strp+i);
*(strp+i)=toupper(ich);
}
}
void strtolo(char *strp)
{ int s_length,i,ich;
s_length=strlen(strp);
if(s_length != 0)
for(i=0;i<s_length;i++)
{ ich=*(strp+i);
*(strp+i)=tolower(ich);
}
}
int portinit(int devid)
{ struct termio tm;
int num;
if (ioctl(devid,TCGETA,&tm)<0)
{ printf("SND_TELE Can't get %s speed\n",P_DEVNAME);
return(-1);}
/*
tm.c_cflag&=~(CBAUD|CSTOPB|PARENB|PARODD);
tm.c_cflag|=(P_PORTBAUD|P_DATABIT);
tm.c_iflag|=(IXON|IGNCR|BRKINT|IXOFF|IXANY|IGNBRK);
tm.c_iflag&=~(ISTRIP);
tm.c_oflag|=(ONLCR|OFDEL|NL0|CR0|TAB3|BS0|VT0|FF1);
tm.c_oflag&=~(OLCUC|OCRNL|ONOCR|ONLRET|OFILL|OPOST);
tm.c_lflag|=(FLUSHO|TOSTOP);
tm.c_cflag&=~(ECHO|ICANON|NOFLSH|PENDIN);
tm.c_cc[VMIN]=1;
tm.c_cc[VTIME]=0;
*/
tm.c_oflag=TAB3|OPOST|ONLCR;
tm.c_cflag=(B9600|CS8|CREAD);
tm.c_cc[VMIN]=1;
tm.c_cc[VTIME]=0;
if (ioctl(devid,TCSETA,&tm)<0)
{ printf("SEN_TELE Can't set %s speed\n",P_DEVNAME);
return(-1); }
return(0);
}
int semset(void)
{ int semset_semid;
key_t semset_key= P_SEMSKEY;
int semset_nsems= P_SEMNUMB;
int semset_semflg= IPC_CREAT|P_SEMACCESS;
semset_semid=semget(semset_key,semset_nsems,semset_semflg);
return semset_semid;
}
int semopena(int semset_semid,int semset_semno)
{ extern int errno; int status;
int semset_semflg=P_SEMACCESS;
struct sembuf *semset_sops;
struct sembuf semset_sopsbuf;
size_t semset_nsops=1;
semset_sops=&semset_sopsbuf;
semset_sopsbuf.sem_num=semset_semno;
semset_sopsbuf.sem_op=-1;
semset_sopsbuf.sem_flg=semset_semflg;
status=semop(semset_semid,semset_sops,semset_nsops);
if(status==-1) {return -1;} else {return 0;}
}
int semopenr(int semset_semid,int semset_semno)
{ extern int errno; int status;
int semset_semflg=P_SEMACCESS|IPC_NOWAIT;
struct sembuf *semset_sops;
struct sembuf semset_sopsbuf;
size_t semset_nsops=1;
semset_sops=&semset_sopsbuf;
semset_sopsbuf.sem_num=semset_semno;
semset_sopsbuf.sem_op=-1;
semset_sopsbuf.sem_flg=semset_semflg;
status=semop(semset_semid,semset_sops,semset_nsops);
if(status==-1) {return -1;} else {return 0;}
}
int semclose(int semset_semid, int semset_semno)
{ extern int errno; int status;
int semset_semflg=P_SEMACCESS|IPC_NOWAIT;
struct sembuf *semset_sops;
struct sembuf semset_sopsbuf;
size_t semset_nsops=1;
semset_sops=&semset_sopsbuf;
semset_sopsbuf.sem_num=semset_semno;
semset_sopsbuf.sem_op=1;
semset_sopsbuf.sem_flg=semset_semflg;
status=semop(semset_semid,semset_sops,semset_nsops);
if(status==-1) {return -1;} else {return 0;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -