Callerid/afficheur en mode console ala winpopup

Contenu du snippet

Projet perso pour afficher les appelants sur ma ligne telephonique.
En mode console, C, sous linux (ubuntu)
L'affichage ce fait a l'aide de linpopup(linux)
ou
Winpopup(windows)
Une version Alpha, mal en point...
Commentaires bienvenues

Source / Exemple :


/*Auteur : Stephane Marchand

  • Date : 23 dec 2008
  • Loc.: Rouyn-Noranda, Quebec, Canada
  • Version Alpha000001, mode console
  • requis : un modem avec fonction callerid
  • GCC, Linpopup(linux) ou winpopup(windblows)
  • But : avoir la fonction d'affichage en modem graphique (X, win)
  • etat du code : mal en point
  • J'etais suppose utilise un toolkit GTK, mais j'ai laisser tomber...
  • /
#include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <string.h> #include <stdarg.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <termios.h> #define BAUDRATE B38400 #define MODEMDEVICE "/dev/ttyS1" #define _POSIX_SOURCE 1 /* POSIX compliant source */ #define FALSE 0 #define TRUE 1 #define MAX_FILE_LEN 256 // max length of file, dev, strbuf volatile int STOP=FALSE; void sendcmd(int fd, int timewait, char *fmt, ...); void mygtksend(char *gtkthemessage); char mystring[500]; int thering=0; char buffermsg[501]; char buffermsg2[501]; char buf[255]; int freakflag; int main(void) { int fd,res; struct termios oldtio,newtio; // you need your network to work with a win2000 (linux-windows) // win2k is my target machine along with a linux station // but... smbclient need to be install along with linpopup so // from linux station you can send/receive mesg. // My test were with several ubuntu station with a win2k pc // Every comments below here are for debugging // THIS code is from a learner and from the internet. // strcat(buffermsg,"/home/titou/Documents/dev_Steph/gnomecallerid/calleridmain "); fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY ); if (fd <0) {perror(MODEMDEVICE); exit(1); } tcgetattr(fd,&oldtio); /* save current port settings */ bzero(&newtio, sizeof(newtio)); newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD; newtio.c_iflag = IGNPAR; newtio.c_oflag = 0; /* set input mode (non-canonical, no echo,...) */ newtio.c_lflag = 0; newtio.c_cc[VTIME] = 0; /* inter-character timer unused */ newtio.c_cc[VMIN] = 5; /* blocking read until 5 chars received */ tcflush(fd, TCIFLUSH); tcsetattr(fd,TCSANOW,&newtio); sendcmd(fd, 3, "+++\r"); sendcmd(fd, 3, "ath\r"); sendcmd(fd, 3, "at#CID=1\r"); while (STOP==FALSE) { /* loop for input */ res = read(fd,buf,255); /* returns after 5 chars have been input */ buf[res]=0; /* so we can printf... */ /*printf(":%s:%d", buf, res);*/ //printf("%s", buf); if(freakflag==1){ buf[0]='\0'; printf("freakflag to 1"); } mygtksend(buf); if (buf[0]=='z') STOP=TRUE; } tcsetattr(fd,TCSANOW,&oldtio); return 0; } void sendcmd(int fd, int timewait, char *fmt, ...) { char strbuf[MAX_FILE_LEN]; va_list ap; bzero(strbuf, sizeof(strbuf)); // flush i/o tcflush(fd, TCIOFLUSH); // send the command va_start(ap, fmt); vsnprintf(strbuf, sizeof(strbuf) - 1, fmt, ap); write(fd, strbuf, strlen(strbuf)); va_end(ap); //wait for whatever char has been transmitted tcdrain(fd); sleep(timewait); return; } void mygtksend(char *gtkthemessage){ //sending message to 2 stations //so 2 buffers if(strstr(gtkthemessage,"RING")!=NULL) thering++; if(thering==2){ thering=0; // send message to gtk prog. strcat(buffermsg,"echo \"GNOMECALLERID\n\r"); strcat(buffermsg2,"echo \"GNOMECALLERID\n\r"); strcat(buffermsg, mystring); strcat(buffermsg2, mystring); strcat(buffermsg,"\" | smbclient -M drebi"); strcat(buffermsg2,"\" | smbclient -M voyager"); //printf("%s", buffermsg); system(buffermsg); system(buffermsg2); buffermsg[0]='\0'; buffermsg2[0]='\0'; mystring[0]='\0'; // freaking put the buffer to 0 character !!! freakflag=1; }else{ strcat(mystring, gtkthemessage); freakflag=0; } // printf("%s",gtkthemessage); return; }

Conclusion :


ca fait le travail mais c'est pas tres 'beau' comme code

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.