📄 mysms.c
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <fcntl.h>#include <errno.h>#include <ctype.h>#include <sys/types.h>#include <unistd.h>#include <memory.h>#include <time.h>#include <termio.h>#include <iconv.h>#include <mysql/mysql.h>#include "send.h"MYSQL lmy_connection;MYSQL_RES *lres_ptr;MYSQL_ROW lsql_row;int port_read( int fd, void *buffer, int length ){ int byte_left; int byte_read; char *ptr; ptr = buffer; byte_left = length; while( byte_left > 0 ) { byte_read = read( fd,ptr,byte_left ); if( byte_read < 0 ) { if( errno == EINTR ) byte_read = 0; else return ( -1 ); } else if( byte_read == 0 ) break; byte_left -= byte_read; ptr += byte_read; } return( length-byte_left );}void elog( char *logstr ){ FILE *lfp; time_t timep; char filename[30]; memset( filename, 0, sizeof(filename) ); sprintf( filename, "/home/xnjf/sms/errlog" ); time( &timep ); lfp = fopen( filename, "a+" ); if( lfp == NULL ) return; fprintf( lfp, "**********%s***********\n", ctime( &timep) ); fprintf( lfp, "%s\n", logstr ); fclose( lfp ); return;}void time2string(char *str,time_t tim){ strftime(str,15,"%Y%m%d%H%M%S%s",localtime(&tim)); return;}void curr_date( char *str ){ time_t tim; tim = time( NULL ); time2string( str, tim ); return;}/*char *GetNote( char *str ){ FILE *fp; char file[24],line[80],tmp[20]; char ch; char *temp,*val; sprintf( file, "/home/ywh/sms/sms.h" ); if( ( fp = fopen( file, "r" ) ) == NULL ) { elog( "Not found the find" ); exit( 0 ); } while( 1 ) { memset( line, 0x0, 80 ); fgets( line, sizeof( line ), fp ); if( strstr( line, str ) != NULL ) { temp = strtok( line, "=" ); temp = strtok( NULL, "=" ); sprintf( val, "%s", temp ); } else continue; ch = fgetc( fp ); if( ch == EOF ) break; } fclose( fp ); return 1;}*/int OpenDev( char *Dev ){ int fd; fd = open( Dev, O_RDWR | O_NOCTTY | O_NDELAY ); fcntl( fd, F_SETFL, 0 ); if( fd == -1 ) { elog( "Can't open serial port\n" ); return -1; } else return fd;}/*功能:判断cardinfo_tb中是否存在未处理的记录(未处理:flag=0;已处理:flag=1)*//*参数:code:从数据库中获得的手机号码;alarminfo:获取的预警信息*//*返回:-1:error; 0:back value is empty; 1:back value >= 1*/int GetValue( char *code, char *passwd, int *type ){ int sn,nums,flag; char lsql[300]; sprintf( lsql, "select sn,usephone,decode( cardpasswd,'zyq' ),usetype from cardinfo_tb where (usetype='5' or usetype='8') limit 1" ); if( mysql_opr( &lmy_connection, lsql ) || ( lres_ptr=(MYSQL_RES *)mysql_store(&lmy_connection))==NULL ) { elog( "mysql_select error" ); return 0; } nums = mysql_num_rows( lres_ptr ); if( !nums ){ mysql_free_result( lres_ptr ); return 0; } lsql_row = mysql_fetch_row( lres_ptr ); sn = atoi( lsql_row[0] ); sprintf( code, "%.11s", lsql_row[1] ); sprintf( passwd, "%.17s", lsql_row[2] ); *type = atoi( lsql_row[3] ); mysql_free_result( lres_ptr ); return sn;}/*功能:根据id号把处理过的记录的标志位置1*//*参数:fid:id号*//*返回:无返回值*/int UpdateFlag( int id, int flag ){ char day[20]; char lsql[200]; memset( day, 0x0, sizeof( day ) ); curr_date( day ); if( flag == 5 ) sprintf( lsql, "update cardinfo_tb set usetype=1,usedate='%.8s',usetime='%.6s' where sn=%d", day, day+8, id ); else if( flag == 8 ) sprintf( lsql, "delete from cardinfo_tb where sn=%d", id ); if( mysql_opr( &lmy_connection, lsql ) ){ elog( "mysql_update error" ); return 0; } return 1;}int HmCovert( char *code, char *ncode ){ int i,len; char aa; sprintf( ncode, "%s", code ); len = strlen( code ); for( i=0; i<=len; i=i+2 ) { if( i+1 >= len ) { ncode[i+1] = ncode[i]; ncode[i] = 'F'; } else { aa = ncode[i+1]; ncode[i+1] = ncode[i]; ncode [i] = aa; } } return 1;}int IntToHex( char *str, int len ){ sprintf( str, "%02x", len ); return 1;}int TouAlpha( char *str ){ int i,j; j = 0; for( i=0; str[i] != 0; i++ ) if( islower( str[i] ) ) str[i] = toupper( str[i] ); return 1;}unsigned char ctou( char *cmess, char *umess ){ iconv_t cd; char *inptr, *wrptr; size_t insize,avail; inptr=cmess; wrptr=umess; cd=iconv_open("UCS2", "euc-cn" ); avail=140; insize=strlen(cmess); iconv( cd, &inptr, &insize, &wrptr, &avail); iconv_close(cd); return( ( unsigned char )( 140-avail));} int GetSendInfo( Smg *sinfo ){ int i,slen,len,datalen; unsigned char msglen; char smsc[20]; char a,b; char out[100]; char nstr[20],hstr[6],cmsg[120],tmp[160]; char buff[100],tt[10],ll[3],omsg[120]; memset( buff,0x0, 100 ); memset( out,0x0, 100 ); memset( omsg,0x0, 100 ); memset( nstr, 0, 20 ); memset( hstr, 0, 6 ); sprintf( smsc, SMSC ); HmCovert( smsc, nstr ); slen = strlen( nstr )/2+1; IntToHex( hstr, slen ); sprintf( sinfo->smsinfo, "%s91%s1100", hstr, nstr ); memset( nstr, 0, 20 ); memset( hstr, 0, 6 ); HmCovert( sinfo->mobile, nstr ); len = strlen( nstr )-1; IntToHex( hstr, len ); sprintf( tmp, "%s81%s", hstr, nstr ); strcat( sinfo->smsinfo, tmp ); memset( cmsg, 0, 120 ); memset( hstr, 0, 6 ); msglen = ctou( sinfo->alarmstr, cmsg ); memcpy( buff, cmsg, msglen ); for( i=0; i<msglen; i++ ) { sprintf( tt, "%02x", buff[i] ); if( strlen( tt ) > 2 ) sprintf( ll, "%.2s", tt+strlen(tt)-2 ); else sprintf( ll, "%.2s", tt ); strcat( omsg, ll ); } for( i=0; i<strlen( omsg ); i+=4 ) { a = omsg[i]; b = omsg[i+1]; omsg[i] = omsg[i+2]; omsg[i+1] = omsg[i+3]; omsg[i+2] = a; omsg[i+3] = b; } len = strlen( omsg )/2; IntToHex( hstr, len ); sprintf( tmp, "0008A7%s%s", hstr, omsg ); strcat( sinfo->smsinfo, tmp ); sinfo->smsinfo[strlen(sinfo->smsinfo)] = 0x1a; TouAlpha( sinfo->smsinfo ); datalen = strlen( sinfo->smsinfo )/2-1-slen; sprintf( sinfo->smslen, "%d", datalen );}int SendSms( int fd, Smg *sinfo){ char buff[500]; char smsstr[200]; char *dev; memset( buff, 0x0, sizeof( buff ) ); GetSendInfo( sinfo ); sprintf( smsstr, "AT+CMGS=%s\r", sinfo->smslen ); write( fd, smsstr, strlen(smsstr) ); sleep(2); //printf( "buff=%s\n", buff ); write( fd, sinfo->smsinfo, strlen(sinfo->smsinfo) ); //ReadComPort( fd, buff, sizeof( buff ) ); elog ( buff ); fprintf( stdout, "%s", buff ); fflush( stdout ); return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -