Страница 1 из 2

GPT Aurora vs Linux

Добавлено: 24 окт 2006, 14:29
Anton B
Доброго времени суток  ;)
Есть такой вот трабл...пишу софт под *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

Т.е. купюпроприемник меня понимает прекрасно, а то что он мне шлет в ответ я понять не могу :) либо гдето происходить потеря байт, либо я осел.

Что я не правильно делаю?
Кто с этим сталкивался, будьте добры в асю или на мэйл, пивом не обижу...

Re: GPT Aurora vs Linux

Добавлено: 25 окт 2006, 11:36
Anton B
Ау..
Мне кто нибудь подскажет? это очень важно :(

Re: GPT Aurora vs Linux

Добавлено: 25 окт 2006, 14:28
ANY
Anton B
У меня есть програмка, для теста GPT по протоколу v.2.2 атм есть вкладка где показываются какие команды отправляются на купюрник, и какие с него приходят, больше ничем помочь немогу в программировании несилен :)

лови на почте!

Re: GPT Aurora vs Linux

Добавлено: 25 окт 2006, 14:46
ANY
Вроде неотправилось письмо ругательное прислали с твоего ящика.
Дай другой адрес.

Re: GPT Aurora vs Linux

Добавлено: 25 окт 2006, 14:51
Anton B
ANY писал(а): Вроде неотправилось письмо ругательное прислали с твоего ящика.
Дай другой адрес.
странно...какой размер файла?
baterikov@gmail.com
batonb@gmail.com

адреса валидные 100%..

Программа под линукс? ;) как я понял у тебя v2e host иль чет такое, у меня она есть, мне бы что нибудь подобное под Linux и в исходникак :))

Re: GPT Aurora vs Linux

Добавлено: 25 окт 2006, 15:50
ANY
Не под линукс нету, а програмка называется V2test наверно тожесамое ??? На твои адреса  нехочет отпровлять заведи ящик на mail.ru

А интересно зачем ты под GPT пишеш есть же много других купюрников пиши под Cach Сode по протоколу ID003? Хотя я недавно узнал что и Cach Code бывает по протоколу v.2.2

Re: GPT Aurora vs Linux

Добавлено: 25 окт 2006, 15:58
Anton B
ANY писал(а): А интересно зачем ты под GPT пишеш есть же много других купюрников пиши под Cach Сode по протоколу ID003? Хотя я недавно узнал что и Cach Code бывает по протоколу v.2.2
Хорошо рассуждаешь :))
Начальство сказало под GPT писать... протокол id003 намного проще, я бы сам был рад под него писать. а вод под gpt никак не могу вкурить :((

Re: GPT Aurora vs Linux

Добавлено: 25 окт 2006, 17:36
ANY
Да знакомая ситуация. Начальство с технарями нисоветуется и покупает большую партию купюрников, а можноли их приклеить к тому куда они хотят это вопрос  :'( Вот и приходится с помощю топора и какойто матери лепить

А еси не так повлияй на них скажи мол никак это неподружить давайте купим другой

Re: GPT Aurora vs Linux

Добавлено: 25 окт 2006, 17:51
AR_Favorit
Начальство не всегда такое тупое ;)

Re: GPT Aurora vs Linux

Добавлено: 26 окт 2006, 08:39
Anton B
AR_Favorit писал(а): Начальство не всегда такое тупое ;)
Правильно подметил :) Так что вопрос еще остается в силе...

Re: GPT Aurora vs Linux

Добавлено: 26 окт 2006, 09:00
AR_Favorit
Что-то ты с потоками перемудрил по-моему... Сделай в одном потоке тупо посылка запроса - чтение из порта - пауза - и по кругу...

Re: GPT Aurora vs Linux

Добавлено: 26 окт 2006, 09:12
Anton B
AR_Favorit писал(а): Что-то ты с потоками перемудрил по-моему... Сделай в одном потоке тупо посылка запроса - чтение из порта - пауза - и по кругу...
Так было изначально... тоже не работает...он виснет на read и ждет данных... а когда ставил флажок F_NDELAY, то просто все время возращает -1

Re: GPT Aurora vs Linux

Добавлено: 26 окт 2006, 09:19
AR_Favorit
Кинь описание протокола на мыло в профайле...

Re: GPT Aurora vs Linux

Добавлено: 26 окт 2006, 12:25
AR_Favorit
Получил, давай смотреть....

У тебя в статус-реквесте
2,0,0,7,204,255,43

В пдф-ке
message frame: STX | LEN | CMD | DATA (0 to 251 data bytes) | CHK

Это как это так??? Не потому ли и висло на приеме, что команды он таки не понимал и не слал ничего??? А в разных потоках ты на приеме попросту получаешь кашу - обрывки того что и слал?

Re: GPT Aurora vs Linux

Добавлено: 26 окт 2006, 12:33
Anton B
AR_Favorit писал(а): Получил, давай смотреть....

У тебя в статус-реквесте
2,0,0,7,204,255,43

В пдф-ке
message frame: STX | LEN | CMD | DATA (0 to 251 data bytes) | CHK

Это как это так??? Не потому ли и висло на приеме, что команды он таки не понимал и не слал ничего??? А в разных потоках ты на приеме попросту получаешь кашу - обрывки того что и слал?
Да..в пдфке так написано, но когда я шлю месаггу такого формата то в ответ мне приходит NAK(т.е. команда сформирована неправильно), а мои сообщение купюрник понимает, входит в статус готовности, я делал ему inhibit и unhibit все работает...но вот ответ нормальный никак не могу получить...

Re: GPT Aurora vs Linux

Добавлено: 26 окт 2006, 12:38
AR_Favorit
Странно
А V2тест-ом под виндой смотрел? Там как?

Re: GPT Aurora vs Linux

Добавлено: 26 окт 2006, 12:46
Anton B
AR_Favorit писал(а): Странно
А V2тест-ом под виндой смотрел? Там как?
Под виндой все нормально, я даже писал небольшую апликуху на шарпе, тоже работает!

Re: GPT Aurora vs Linux

Добавлено: 26 окт 2006, 13:16
AR_Favorit
Такс... а NAK он шлет в нормальном виде, т.е. 02 04 FF FB ?

Re: GPT Aurora vs Linux

Добавлено: 26 окт 2006, 13:26
Anton B
Да, NAK в нормально виде..

Re: GPT Aurora vs Linux

Добавлено: 26 окт 2006, 14:10
AR_Favorit
А как слал статус-реквест, когда NAK получал? Мож просто ошибся в КС?

Re: GPT Aurora vs Linux

Добавлено: 26 окт 2006, 14:16
Anton B
AR_Favorit писал(а): А как слал статус-реквест, когда NAK получал? Мож просто ошибся в КС?
0x02,0x04,0xCC,0x2B - 2E выдает ошибку...хотя в описание написано 2E

Re: GPT Aurora vs Linux

Добавлено: 26 окт 2006, 14:18
Anton B
Может у кого есть самый простой пример? а я бы вам в ответ такой же только по id003 ;) с id003 проблем практически не было..есесно все это под Линух..

Re: GPT Aurora vs Linux

Добавлено: 26 окт 2006, 14:45
AR_Favorit
Хммм судя по описанию, 2E как раз должно быть:
0x02+0x04+0xCC=0хD2=b11010010
инвертируем все байты получается b00101101=0x2D
прибавляем 1 - получаем 0x2E
а в остальных случаях как раз должен быть NACK - не совпадает контрольная сумма либо кол-во байт)

настройку порта еще раз проверь, я по тексту программы не понял, 1 стоп-бит выставлен или нет?

Re: GPT Aurora vs Linux

Добавлено: 26 окт 2006, 14:58
Anton B
1 стоп бит, вроде как стоит...с 2Е он даже на сообщения не реагирует..в общем у меня скоро бошка лопнет :)

Re: GPT Aurora vs Linux

Добавлено: 26 окт 2006, 15:17
AR_Favorit
options.c_cflag &= ~CSIZE;

это что значит???