Re: Дружба NV - 9 с протоколом SSP

Модератор: Guzel

Дружба NV - 9 с протоколом SSP

Сообщение Lee_itb » 10 апр 2009, 17:00


Нужна помощь, ситуация такова - NV-9 подключен к DA2(USB), он в свою очередь подключен к PC (устанолен протокол SSP). Задача - необходимо получить данные, какую денежку получил купюрник (1, 2 или 5 грн.).  Пограмма написанная на 2 фреймвёрке с использованием языка C#. Дрова установиль хорошо. В Валидаторе протестил - всё хорошо. С чего начать? Где достать пример реализации хотябы на С или С++? Или нужны какие-то DDL? Помогите начинающему!!!!!!
Схожая тема была уже 2007 году, но не совсем понятно раскрыта.
Lee_itb
 
Сообщений: 4
Зарегистрирован: 10 апр 2009, 16:06


Re: Дружба NV - 9 с протоколом SSP

Сообщение LIC » 10 апр 2009, 17:41

пробуйте обратиться к фирме производителю, объясните вашу проблему, могут помочь, или посмотрите на сайтах производителей платежных терминалов. Сам не искал, но может и есть где-то
Чем больше технику мы меньше, тем больше меньше она нам.
LIC
Гуру
Гуру
 
Сообщений: 2094
Зарегистрирован: 03 июн 2005, 22:40
Откуда: Донецк

Re: Дружба NV - 9 с протоколом SSP

Сообщение Embedder » 10 апр 2009, 18:37

Lee_itb писал(а):
С чего начать? Где достать пример реализации хотябы на С или С++? Или нужны какие-то DDL? Помогите начинающему!!!!!!
Схожая тема была уже 2007 году, но не совсем понятно раскрыта.


Есть даташит: ga138.pdf.
С примером реализации SSP на С. Для начала достаточно.
Embedder
 
Сообщений: 124
Зарегистрирован: 11 янв 2009, 15:42
Откуда: ЛНР Луганск

Re: Дружба NV - 9 с протоколом SSP

Сообщение Lee_itb » 10 апр 2009, 19:06

Embedder писал(а):Есть даташит: ga138.pdf.
С примером реализации SSP на С. Для начала достаточно.

Смотрел я его. Есть там маленький пример на С, но внятным его трудно назвать. Может есть у кого реальный пример, как обратиться к заданному устройству, передать команду, и получить ответ.
Lee_itb
 
Сообщений: 4
Зарегистрирован: 10 апр 2009, 16:06

Re: Дружба NV - 9 с протоколом SSP

Сообщение LIC » 10 апр 2009, 21:03

Посмотрел, по докам на IT, там есть описание протокола SSP, там даже на С есть подпрограмма подсчета CRC, вот с этого и начинайте, протокол описан  всего на 30 страницах, вот и пишите начиная с оболочки или как модуль для основной программы.
Чем больше технику мы меньше, тем больше меньше она нам.
LIC
Гуру
Гуру
 
Сообщений: 2094
Зарегистрирован: 03 июн 2005, 22:40
Откуда: Донецк

Re: Дружба NV - 9 с протоколом SSP

Сообщение Lee_itb » 10 апр 2009, 21:25

LIC писал(а):Посмотрел, по докам на IT, там есть описание протокола SSP, там даже на С есть подпрограмма подсчета CRC, вот с этого и начинайте, протокол описан  всего на 30 страницах, вот и пишите начиная с оболочки или как модуль для основной программы.

Это конечно всё понятно. Но код там ужасный. Вот он
Код: выделить все
    Function CODE
Function to encrypt 16 bytes of data (4 long ints)
Usage:   :       code (long_data, long_current_key);
Parameters:  data()  - 16 bytes to be encrypted packed into 4 long ints
    Key()  - key to use packed into array of 2 long ints
Returns:    data() - 16 bytes of encrypted data packed into 4 long ints
Locals: w,x,y,z,delta,n
/***********************************************************************
void code(long* data, long* key)  {
unsigned long w=data[0],x=data[1],y=data[2],z=data[3], sum=0,   /* set u
     delta=0x9e3779b9, n=32 ;             /* a key schedule constant */
     while (n-->0) {                         /* basic cycle start */
            sum += delta ;
          w += (z<<4)+key[0] ^ z+sum ^ (z>>5)+key[1] ;
            x += (w<<4)+key[1] ^ w+sum ^ (w>>5)+key[0] ;
            y += (x<<4)+key[0] ^ x+sum ^ (x>>5)+key[1] ;
            z += (y<<4)+key[1] ^ y+sum ^ (y>>5)+key[0] ; 
     }                            /* end cycle */
        data0]=w ; data[1]=x ; data[2]=y ;data[3]=z; 
}
B.2 Decryption routine
/***********************************************************************
    Function DECODE
Function to encrypt 16 bytes of data (4 long ints)
Usage:   :       decode (long_data, long_current_key);
Parameters:  data() - 16 bytes of encrypted data packed into 4 long ints
    Key()  - key to use packed into array of 2 long ints
Returns:         data()  - 16 bytes of decrypted data packed into 4 long ints
Locals: w,x,y,z,delta,n
/***********************************************************************
void decode(long* data, long* key)  {
   unsigned long n=32, sum,w=data[0],x=data[1], y=data[2], z=data[3],
    delta=0x9e3779b9 ;
    sum=delta<<5 ;
       while (n-->0) {        /* start cycle */
             z-= (y<<4)+key[1] ^ y+sum ^ (y>>5)+key[0] ;
             y-= (x<<4)+key[0] ^ x+sum ^ (x>>5)+key[1] ;
             x-= (w<<4)+key[1] ^ w+sum ^ (w>>5)+key[0] ;
             w-= (z<<4)+key[0] ^ z+sum ^ (z>>5)+key[1] ;
             sum-=delta ;  
}                         /* end cycle */
       data[0]=w ; data[1]=x ; data[2]=y ;data[3]=z;   
}
#define FALSE           0x00
#define TRUE            0x01
unsigned char CRCL,CRCH;
int CRC_Table[8*32]={
0x0000,0x8005,0x800F,0x000A,0x801B,0x001E,0x0014,0x8011,
0x8033,0x0036,0x003C,0x8039,0x0028,0x802D,0x8027,0x0022,
0x8063,0x0066,0x006C,0x8069,0x0078,0x807D,0x8077,0x0072,
0x0050,0x8055,0x805F,0x005A,0x804B,0x004E,0x0044,0x8041,
0x80C3,0x00C6,0x00CC,0x80C9,0x00D8,0x80DD,0x80D7,0x00D2,
0x00F0,0x80F5,0x80FF,0x00FA,0x80EB,0x00EE,0x00E4,0x80E1,
0x00A0,0x80A5,0x80AF,0x00AA,0x80BB,0x00BE,0x00B4,0x80B1,
0x8093,0x0096,0x009C,0x8099,0x0088,0x808D,0x8087,0x0082,
0x8183,0x0186,0x018C,0x8189,0x0198,0x819D,0x8197,0x0192,
0x01B0,0x81B5,0x81BF,0x01BA,0x81AB,0x01AE,0x01A4,0x81A1,
0x01E0,0x81E5,0x81EF,0x01EA,0x81FB,0x01FE,0x01F4,0x81F1,
0x81D3,0x01D6,0x01DC,0x81D9,0x01C8,0x81CD,0x81C7,0x01C2,
0x0140,0x8145,0x814F,0x014A,0x815B,0x015E,0x0154,0x8151,
0x8173,0x0176,0x017C,0x8179,0x0168,0x816D,0x8167,0x0162,
0x8123,0x0126,0x012C,0x8129,0x0138,0x813D,0x8137,0x0132,
0x0110,0x8115,0x811F,0x011A,0x810B,0x010E,0x0104,0x8101,
0x8303,0x0306,0x030C,0x8309,0x0318,0x831D,0x8317,0x0312,
0x0330,0x8335,0x833F,0x033A,0x832B,0x032E,0x0324,0x8321,
0x0360,0x8365,0x836F,0x036A,0x837B,0x037E,0x0374,0x8371,
0x8353,0x0356,0x035C,0x8359,0x0348,0x834D,0x8347,0x0342,
0x03C0,0x83C5,0x83CF,0x03CA,0x83DB,0x03DE,0x03D4,0x83D1,
0x83F3,0x03F6,0x03FC,0x83F9,0x03E8,0x83ED,0x83E7,0x03E2,
0x83A3,0x03A6,0x03AC,0x83A9,0x03B8,0x83BD,0x83B7,0x03B2,
0x0390,0x8395,0x839F,0x039A,0x838B,0x038E,0x0384,0x8381,
0x0280,0x8285,0x828F,0x028A,0x829B,0x029E,0x0294,0x8291,
0x82B3,0x02B6,0x02BC,0x82B9,0x02A8,0x82AD,0x82A7,0x02A2,
0x82E3,0x02E6,0x02EC,0x82E9,0x02F8,0x82FD,0x82F7,0x02F2,
0x02D0,0x82D5,0x82DF,0x02DA,0x82CB,0x02CE,0x02C4,0x82C1,
0x8243,0x0246,0x024C,0x8249,0x0258,0x825D,0x8257,0x0252,
0x0270,0x8275,0x827F,0x027A,0x826B,0x026E,0x0264,0x8261,
0x0220,0x8225,0x822F,0x022A,0x823B,0x023E,0x0234,0x8231,
0x8213,0x0216,0x021C,0x8219,0x0208,0x820D,0x8207,0x0202};
 
//------------------------------------------------------------------------
void Update_CRC(unsigned char num){
unsigned int  table_addr;
  table_addr=(num ^ CRCH);
  CRCH=(CRC_Table[table_addr] >> 8) ^ CRCL;
  CRCL=(CRC_Table[table_addr] & 0x00FF);
}
//------------------------------------------------------------------------
void Reset_CRC(void){
  CRCL=0xFF;
  CRCH=0xFF;
}

Непонимаю назначение этого кода, только лишь отдельные части. Непонятен механизм взимодействия, исходя из такого кода. 
Но я пишу на C#, использую для взаимодействия с купюрником компонент SerialPort, с настройками:
    Baud Rate:  9600
    Start bits:  1
    Data Bits:  8
    Parity:  none
    Stop bits:  2
Вопросы с какой команды начинать и  как отправлять с каким интервалом опроса?
Lee_itb
 
Сообщений: 4
Зарегистрирован: 10 апр 2009, 16:06

Re: Дружба NV - 9 с протоколом SSP

Сообщение LIC » 10 апр 2009, 22:06

Ну так читать описание протокола, там вначале хост дает команду инициализации, К.П, должен ответить и так далее и тому подобное. Параметр сети - страница 7. Временные интервалы описаны для каждой команды (если это для нее важно)
Чем больше технику мы меньше, тем больше меньше она нам.
LIC
Гуру
Гуру
 
Сообщений: 2094
Зарегистрирован: 03 июн 2005, 22:40
Откуда: Донецк

Re: Дружба NV - 9 с протоколом SSP

Сообщение Lee_itb » 10 апр 2009, 22:57

LIC писал(а):Ну так читать описание протокола, там вначале хост дает команду инициализации, К.П, должен ответить и так далее и тому подобное.

А можно поподробнее, я такого не нашёл :'(
И еще если можно пример использования, с какой стороны подходить к нему? Можно в словестной форме. Написал письмо разработчики, посмотрю что ответят.
Lee_itb
 
Сообщений: 4
Зарегистрирован: 10 апр 2009, 16:06

Re: Дружба NV - 9 с протоколом SSP

Сообщение LIC » 11 апр 2009, 00:18

Если подробно, то очень долго, а вот это одно из начальных.
5.2 Encryption Keys.
At power up the first encrypted data packet sent to the peripheral will be encrypted using the
peripherals serial number (the host requests and stores the serial number of each peripheral when it
is installed – see control layer).
After the first transmission data is encrypted/decrypted using the key contained in the last packet, the
host generates this randomly. The peripheral will always reply to an encrypted packet with data
encrypted using the same key as the original packet from the host.
After the data has been decrypted the CRC algorithm is preformed on all bytes including DATA,
NEXT KEY, CRCL and CRCH. The result of this calculation will be zero if the data has been
decrypted with the correct key.
If the result of this calculation is non-zero then the peripheral should assume that the host did not
encrypt the data (transmission errors are detected by the transport layer). The slave should go out of
service until it is reset.

Да и вообще я этот протокол не знаю, но смотрел по аналогии с чем работал.
Чем больше технику мы меньше, тем больше меньше она нам.
LIC
Гуру
Гуру
 
Сообщений: 2094
Зарегистрирован: 03 июн 2005, 22:40
Откуда: Донецк


Вернуться в ITL

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15

cron