Pavel V. писал(а):Выкладывай нормальное описание протокола, придумаем что-нибудь

Наверняка к этой железяке есть мануал.
Вот логи протокола
Вот перевод с китайского
Link слоя:
Формат блока:
Запрос:
Fmt TargetAdr + + + SourceAdr Сид + Data + CS
Fmt: 1BYTE, 0x80 плюс длина значения Com и ComInfo
TargetAdr / SourceAdr: адреса назначения / адрес источника 1BYTE
Sid: 1BYTE идентификатор команды
Данные: 0 байт или больше байт команду информации
CS: число байт 1BYTE контрольной накапливаются, и проверить
Ответ:
Fmt TargetAdr + + + SourceAdr Сид + Data + CS
Sid: 1BYTE команды, ЭКЮ ответить, когда байт содержание оборудования просил команду ID + OX40
Уровень приложений:
Чтение информации о версии:
Версии информацию для ответа на ключевые слова F6 после первого кадра первого байта старший бит равен 0, если ситуация: 0F 01 F6 +31 4A ... ... 03
Версии информацию для ответа на ключевые слова F6 после первого кадра первого байта старший бит ситуации, нынешнего положения, прочитав предыдущую версию информация, затем будут сделаны 03 XX 00 03 читать дополнительные значения, пока Совет Первый кадр из ключевых слов, первый байт после самого высокого уровня от 0 до.
Система ввести команду:
82 28 f1 10 89 34
Читает информацию о версии:
82 28 f1 1a 9B 50
Ссылка для поддержания:
82 28 f1 3E d8
С код работает приблизительно 50 на 40 10 - не фильтрует вообще
if(!begin){
//------------------------------------------------------------
if((bufrd[0]==0)&(btr==1)) return;
else {
p=bufrd; ip=btr;
for(cnt=0; cnt<btr; cnt++) {
if ( (unsigned int )p[0] < 0x80 ) {p++; ip--; }
//---------------------------------------------------------------
else {
if( (unsigned int )p[0] > 0x8A ) {
//-----------------------------------------------
if( ( (unsigned int )p[0] >= 0xC0 )||((unsigned int )p[0] <= 0xCF)) {
/* oт C0 до CF начало посылки */
memcpy(Pwork,bufrd,btr);
Pwork+=btr; cb+=btr;
begin=true; // return;
}
else {p++; ip--; }
//----------------------------------------------
}
else {
/*от 80 до 8A начало посылки*/
memcpy(Pwork,bufrd,btr);
Pwork+=btr; cb+=btr;
begin=true;
}
}
};
if( (p!=bufrd)&&(ip>0)) {
if((work[0]&0xc0==0xc0)|| (work[0]&0xc0==0x80)){
memcpy(Pwork,p,ip);
Pwork+=ip; cb+=ip;
begin=true; }
};
// Sleep(15);
} //else
} //end begin
else {
memcpy(Pwork,bufrd,btr);
Pwork+=btr; cb+=btr;
if(cb>4){
switch(work[0]){
case 0x80:
case 0xC0: len= (work[3] +5); break;
default: len=(work[0]&0x3F) +4; break; //определение всей длины пакета
};
/* тут и есть штопор если cb==len то все ок но если cb>len потеря синхронизации и крах декодирования */
if(cb>=len) { Analiz(); ToInit(); // расшифровка команды
}
if (cb>15) ToInit(); // Это выход из зависания
};
}
}