Протокол за комуникация с Panasonic TES824

Фискални устройства, баркод-четци, телефонни централи, принтери и др.
Отговори
Потребителски аватар
stoar08
Мнения: 1548
Регистриран: 09-11-2004 08:15
Име: Стоян Арабаджиев
Местоположение: Самоков

Протокол за комуникация с Panasonic TES824

Мнение от stoar08 » 09-12-2006 01:31

Дам, ...нямам го целия, но с търпение всичко се постига. За последните 60 минутки разбрах основите и в тази тема приемам поръчки за по-нататъшно ривърсене. До няколко дни мисля да добавя и още някой неща, до които тази вечер няма да стигна. Според panasonic различните версии са с различен протокол, но може опитно да се останови при необходимост ...пък и няма да се обидя да почина 1 вечер при някоя централа, ако има необходимост :) .

1 Логване в централата :
pc : 08 0D
pbx : 05 00 02 00 F8
pc : 0A 00 01 04 [pass] 0D 19
pbx : 1A 03 02 00 00 59 39 31
pc : 05 03 01 00 F6
pbx : 31 41 41 30 35 31 32 30 36 32 2E 30 2E 32 20 20 20 EC
[pass] е системната парола, с дължина от 4 до 7 символа
32 2E 30 2E 32 е версията на firmware (2.0.2)
59 39 31 31 41 41 30 35 31 32 30 36 е по-подробна версия на централата (в моя случай Y911AA051206)

2 Задаване на право (или липсата му) за изход на външна линия
2A 02 01 00 34 30 [1] 43 [CO] 2F
** ** ** ** 5F ** ** ** ** ** 2C
** ** ** ** 5F ** ** ** ** ** 2C
** ** ** ** 5F ** ** ** ** ** 2F
0D [HB]
[1] е 0x35 (за "дневен" режим), 0x36 (за "нощен режим) или 0x37 (за "обеден" режим)
[CO] е номера на изходящата линия (0x31 до 0x38 )
** представлява 0x30 ('0') или 0x31 ('1') за всеки вътрешен пост на централата от 1ви до 24и (има или няма)
[HB] е хаш байт, който представлява X минус [номера на изходящата линия( 1 до 8 ) ] минус [броя постове с права (с 1)];
X e 0x66,0x65,0x64 съответно за дневен, нощен, обеден режим


Пимерна сесия, даваща право на първите 4 вътрешни поста да ползват първа линия през деня.
2A 02 01 00 34 30 35 43 31 2F
31 31 31 31 5F 30 30 30 30 30 2C
30 30 30 30 5F 30 30 30 30 30 2C
30 30 30 30 5F 30 30 30 30 30 2F
0D 61
при изход се праща
05 00 11 00 E9
Всеки неописан байт е с неясно за мен (поне за момента) предназначение. Вероятно hash-а също има по-глобална формулка, но смятам, че хотела се нуждае да контролира прекалено малко неща и дори да има някаква промелнива според графата няма да е фатално. Утре ще се опитам да опиша как точно се прочита въпросната таблица с правото за изходяща линия, за да може хотела да проверява дали не е променена външно и да държи актуално копие при себе си. Възнамерявам, ако намеря време, днес и утре да разгадая и COS (class of service) таблицата.

И btw ето какво каза sniffer-а за настройките на rs-а, които през софтуерчето на panasonic нямаше как да променя въпреки бутончето setup :)
Serial0 Rate: 9600
Serial0 StopBits: 1 Parity: NONE WordLength: 8
Serial0 EOF:0 ERR:0 BRK:0 EVT:0 XON:11 XOFF:13
Serial0 Shake:1 Replace:40 XonLimit:0 XoffLimit:0
Serial0 RI:1 RM:0 RC:0 WM:0 WC:0
Serial0 InSize: 1024 OutSize: 1024

Потребителски аватар
stoar08
Мнения: 1548
Регистриран: 09-11-2004 08:15
Име: Стоян Арабаджиев
Местоположение: Самоков

Мнение от stoar08 » 09-12-2006 23:48

Ние лудите сме на изчезване :) Четенето на настройките към момента няма как да засека с достатъчна точност ...протокола е доста стегнат и се появяват твърде много магически числа. Ако наистина се окаже, че си заслужава часовете писане, които трябва да вложа - вероятно ще го направя.

Class of Service, обаче, се сменя с абсолютно същата лекота, както правото за изходяща линия ...

0F 02 01 00 36 30 [3*] 45 [post] 2F [COS] 2F 0D [HB]

[3*] - 1/2/3 съответно ден/нощ/обяд

[post] - Номера на поста, представен с 2 байта, във вида 0x3* 0x3* (например пост 16 е 0x31 0x36)
[COS] - Class of Service (0x31 до 0x35)

[HB] - хаш :)
"дневен коефициент" минус [клас на услугата(от 1 до 5)] минус[сбора от двете числа в десетичния запис на номера на поста]
"дневния коефициент" е съответно 0x16/0x15/0x14 за ден/нощ/обяд.

Както и в предишния пост - числата в хаш-бита са десетични стойности (коефициента за времето от деня). Т.е. при COS 0x31 се вади 1 (0x01), а не 0x31. По същия начин и с номера на поста. За пост 13 например се вади 0x04 (1+3),а не 0x64 (0x31 + 0x33).

Ще се опитам да прослушам и записа на самата COS таблица, но смятам, че дори и това е достатъчно за момента като контрол ... за синхрон между централата и базата на хотела може да се разчита на липсата на външни намеси по съответните полета, но това не са неща които всеки може да променя и не смятам, че ще е проблем.

П.С. не знам на колко места съм нарекъл контролната сума "хаш бит", но не съм в състояние да си оправям сега постовете :)

Потребителски аватар
stoar08
Мнения: 1548
Регистриран: 09-11-2004 08:15
Име: Стоян Арабаджиев
Местоположение: Самоков

Мнение от stoar08 » 11-12-2006 00:01

И ето какво успях да направя последно, докато централката още е до мен ...
Class of Service таблицата представлява таблица с 4 колони (за всеки клас от 2 до 5) и 20 реда (до 20 забрани за всеки клас).

Първо по-лесното ...за премахване на дадена забрана от даден клас - централата получава следния пакет :


0E 02 01 00 33 30 3* 53 [] [] 2F 2F 0D [CS]

3* - COS
[] [] - номера забрана, във вида 0x3* 0x3*
[CS] - check sum, който е равен на 0x3d - COS - [] - []
COS и двете числа от номера на забраната се взимат като нормални десетични стойности (не 0x3*, а *)

като например свалянето на забрана 15 от клас 4 би изглеждало ето така :
0E 02 01 00 33 30 34 53 31 35 2F 2F 0D 33

Ако трябва да се добави забрана пакета е малко по-дълъг :

19 02 01 00 33 30 3* 53 [] [] 2F [...] 2f 0D [CS]

3* - COS
[] [] - номера забрана, като по-горе
[...] - самата забрана (например 0), като е с дължина точно 11 знака. Празните места се запълват с 0x78 ('x').
[CS] - check sum :
(0x0a - COS +[броя въведени числа]*0x48 - [] - [] - [сбора от цифрите на самата забрана) & 0xff

И ето как можем да забраним на всички телефони от клас 4 да набират 0722 например ...

19 02 01 00 33 30 34 53 30 31 2F 30 37 32 32 78 78 78 78 78 78 78 2f 0D

Понеже от вече два обекта ме попитаха ще могат ли да задават такива "екстри" на централата през хотелската програма бих бил много благодарен ако поне правото на изходяща линия се появи като опция (тези 2 дни си "играя" с една от тези 2 централи ...) ...За логин-а не съм сигурен дали също няма някаква контролна сума, но кафето започва да ме напуска и за момента ще бъда доволен и ако се направи в този вид ...всички централи са ми с паролата, чиято чек-сума фигурира по-горе в темата :) .
Предполагам ще се наложи хотела/tel.exe да пази някъде списък с настройките, които дава на централата (писах как стои въпроса с четенето), но се надявам това да не е проблем.

П.С. Възможно е, ако има повече от 1 команди от 1 вид да се слеят, но се появяват прекалено много "магически" числа, а и чек-сумата е по-различна ... реших, че ще е по-лесно да се повтори няколко пъти единичния пакет и затова не съм разучавал "сливанията" :) .

Потребителски аватар
stoar08
Мнения: 1548
Регистриран: 09-11-2004 08:15
Име: Стоян Арабаджиев
Местоположение: Самоков

Мнение от stoar08 » 11-12-2006 00:24

Е ... щеше да ме изяде от вътре ако, не довърша поне малкото, което съм започнал.
Реда
0A 00 01 04 [pass] 0D 19
Всъщност представлява
[] 00 01 [len] [pass] 0D [CS]

[] - 0x0A + дължината на паролата минус 4
[len] - дължината на паролат, но не в 0x3* вид, а в 0x0* !!!
[CS] - (0x23 + (len-4)*0xCE -[сбора от цифрите на паролата]) & 0xff

Вече мога да умра щастлив :) . Всички "записки", на които се базират изчисленията ми, стоят на компютъра и бих могъл да ги пресметна наново, но ако има проблеми те са някое "магическо число" в чек-сумата и не пречат пряко на писането ... Ще ги прегледам тези дни и ако има проблем с някоя сметка ще нанеса задължително корекцията тук.


Благодаря за цялото отделено внимание,
Вечно ваш ривърсър 8) .

Потребителски аватар
alex
Site Admin
Мнения: 1556
Регистриран: 02-11-2004 14:26
Име: Александър Димитров
Местоположение: Пловдив
Контакти:

Мнение от alex » 11-12-2006 07:45

Сега най-добре направи всичко това на функцийки, тествай ги как работят и ги сподели с нас. Така ще е много по-добре и по-бързо.
Изображение
Изображение
Изображение

Потребителски аватар
stoar08
Мнения: 1548
Регистриран: 09-11-2004 08:15
Име: Стоян Арабаджиев
Местоположение: Самоков

Мнение от stoar08 » 11-12-2006 19:29

Мога ... , но не разбирам от Pascal :( . На C/CPP няма да е проблем, но в живота си не съм пипал RS-232 под DOS. Единствената област където мога да правя вход/изход от/към периферията е Windows, но дори и там пиша на VB .NET :( . Ако върши работа мога да напиша функция, която да гради целия пакет за изпращане, но ще трябва някак да се импортне от C/CPP, а и това не съм правил :oops:

Отговори