Есть такой вот трабл...пишу софт под *nix.
Купюроприемник GPT Aurora, команды шлю такие, которые описаны в протоколе V2.2. Я слышал что их есть несколько версий, может я не потому протоколу работаю?
Вот он исходник...
- Код: выделить все
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
#include <errno.h>
#include <pthread.h>
#include <iostream>
using namespace std;
int fd;
int open_port();
void* status_req(void* ptr);
void* reading_port(void* ptr);
int main()
{
open_port();
pthread_t thread1, thread2;
termios options;
tcgetattr(fd,&options);
cfsetispeed(&options,B9600);
cfsetospeed(&options,B9600);
options.c_cflag |= PARENB;
options.c_cflag &= ~PARODD;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_cflag |= (CLOCAL | CREAD);
tcsetattr(fd,TCSANOW,&options);
int iret1, iret2;
iret1 = pthread_create( &thread1, NULL,reading_port, 0);
iret2 = pthread_create( &thread2, NULL, status_req, 0);
unsigned char inhibit[7]={2,0,0,7,240,255,7};
unsigned char uninhibit[7]={2,0,0,7,241,255,6};
pthread_join( thread1, NULL);
pthread_join( thread2, NULL);
while(1)
{
int b=0 ;
cin>>b;
int w=0;
switch(b)
{
case 1:
write(fd,inhibit,7);
printf("Status request: %d bytes sended\n",w);
break;
case 2:
w=write(fd,uninhibit,7);
printf("Status request: %d bytes sended\n",w);
break;
}
}
printf("Thread 1 returns: %d\n",iret1);
printf("Thread 2 returns: %d\n",iret2);
return 1;
}
int open_port()
{
fd=open("/dev/ttyS0",O_RDWR|O_NOCTTY|O_NDELAY);
if(fd == -1)
perror("open_port: Unable to open /dev/ttyS0 -\n");
else
fcntl(fd,F_SETFL,0);
return fd;
}
void* reading_port(void* ptr)
{
unsigned char buff[255]={0};
int r=0;
while(1) {
r = read(fd,&buff,255);
if(r!=-1) {
for(int i=0;i<r;i++){
printf("%X ",buff[i]);
}
printf("\n");
}
bzero(&buff,sizeof(buff));
tcflush(fd,TCIFLUSH);
}
}
void* status_req(void* ptr)
{
unsigned char status_req[7]={2,0,0,7,204,255,43};
int w =0;
while(1){
usleep(1500);
w=write(fd,status_req,7);
}
}
Прошу прощение, за неаккуратность кода, ибо нервый уже не пределе :)
Вот что получаю в ответ...
- Код: выделить все
2 0 0 A
2 0 0 A
0 0 0 FF
0 0 0 FF 24 2 0 0 7 FF FE F8 2 0 0 A
2 0 0 A
0 0 FF 24 2 0 0 A
2 0 0 A
0 0 FF 24 2 0 0 7 FF FE F8 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 7 FF FE F8 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 1 0 0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 7 FF FE F8 2 0 0 A
FF 24 2 0 0 A
0 0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 7 FF FE F8 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 0 FF 24 2 0 0 7 FF FE F8 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 A
1 0 0 0 0 FF 24 2 0 0 7 FF FE F8 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 0 0 0 FF 24 2 0 0 7 FF FE F8 2 0 0 A
0 1 0 0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 0 FF 24 2 0 0 A
CC 0 1 0 0 0 0 FF 24 2 0 0 7 FF FE F8 2 0 0 A
1 0 0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 A
1 0 0 0 0 FF 24 2 0 0 A
0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 A
CC 0 1 0 0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 A
0 0 FF 24 2 0 0 A
1 0 0 0 0 FF 24 2 0 0 A
0 0 0 FF 24 2 0 0 7 FF FE F8 2 0 0 A
0 0 0 FF 24 2 0 0 7 FF FE F8 2 0 0 A
Т.е. купюпроприемник меня понимает прекрасно, а то что он мне шлет в ответ я понять не могу :) либо гдето происходить потеря байт, либо я осел.
Что я не правильно делаю?
Кто с этим сталкивался, будьте добры в асю или на мэйл, пивом не обижу...