- 論壇徽章:
- 0
|
原程序如下
int IC_init(char *comx)
{
struct termios newtty;
if ( (ICCOM =open(comx, O_RDWR|O_NOCTTY|O_NONBLOCK )) < 0 )
return -21;
memset(&newtty, 0, sizeof(newtty));
newtty.c_iflag = IGNBRK;
newtty.c_oflag = 0;
newtty.c_cflag = B9600|CS8|CREAD|HUPCL|CLOCAL;
newtty.c_lflag = 0;
newtty.c_cc[VMIN] = 1;
tcflush(ICCOM, TCIFLUSH);
tcsetattr(ICCOM,TCSANOW,&newtty);
//Ic init
return IC_model_set(IC_RESET, NULL, NULL);
}
int IC_model_set( int model, char *data, char *retdata )
{
int i,len=0;
int flag=0; //是否保存返回數(shù)據(jù) 0-不保存 1-保存
long time=0;
unsigned char LRC=0x00;
unsigned char buffer[128];
ICERRNO = 0x00;
memset(buffer, 0, sizeof(buffer));
buffer[0] = 0xAA;
switch(model)
{
case IC_RESET: //密鑰機復位2+0) command: 0x21
len=2;
flag=FALSE;
time=100*1000; //100ms
buffer[1]=0x21; //LEN
buffer[2]=0x32; //CMD
break;
}
for(i=1;i<len+1;i++)
LRC ^= buffer;
buffer[len+1]=LRC;
buffer[len+2]=0xCC;
return IC_read_buffer( buffer, len+3 ,flag, (unsigned char *)retdata, time);
unsigned char chr[8];
unsigned char tmpbuf[128];
unsigned char LRC = 0x00;
unsigned char getdata[128]; //從串口讀出的數(shù)據(jù)
int getlen;
int i,iret,len;
memset( getdata, 0, sizeof(getdata) );
memset( tmpbuf, 0, sizeof(tmpbuf) );
memset( chr, 0, sizeof(chr) );
tcflush(ICCOM, TCIFLUSH); //清空串口緩沖區(qū)
//#ifdef _GMCC_DEBUG
{
int j;
printf("Write Com data:\n\t");
for(j=0; j<cmd_len; j++)
{
printf("%02X ",cmd[j]);
if( (j+1)%16 == 0 )
printf("\n\t");
}
printf("\n");
fflush(stdout);
}
//#endif
if ( (iret=write(ICCOM, cmd, cmd_len)) < cmd_len ) //寫入操作命令
{
printf("write error\n");
return (ICERRNO=0x83,-1);
}
//debug start
//usleep(times);
usleep(1000*1000);
//debug end
if( (iret=read(ICCOM, chr, 3)) != 3)
{
printf("read error ICCOM=[%d],iret = [%d] errno = [%d]\n",ICCOM,iret, errno);
return (ICERRNO=0x84,-1);
}
}
大概程序如上,串口描述符是/dev/ttyp0. |
|