webmaster_Chris
Новичок
И так
) Задача
приходит пакет по сокету, который мы их bin2hex переводим. Получаем 41 03 56 89 60 34 06 01 61 45 69 00 00 00 00 00 00 00 00
Далее на такой пакет нужно устройству ответить это 4103568960340601610000000000 + CRC... Цитирую документацию:
Т.е. ответ 41035689603406016100000000003B78, через функцию:
засылаю устройству.. а в ответ нифига.. где я ошибаюсь, помогите подумать


Далее на такой пакет нужно устройству ответить это 4103568960340601610000000000 + CRC... Цитирую документацию:
т.е. пакет ответа получился 14 байт (без учета CRC) получается 56*14 отбрасываем последние цыфры, тоесть 784 -> 78 это CRC 16-ый байт.При «авторизации» отправляются поля 1, 2, 5 (1+17+1=19 байт) (должен получить ответ CRC в виде resp_crc=xx, где xx – «посчитанная» сервером CRC)
CRC включает в себя все переданные байты (кроме самого байта CRC).
Перед передачей первого байта CRC устанавливается в 0x3B (GPRS_CRC=0x3B).
Функция расчета CRC (для каждого передаваемого байта):
void CRC (byte) {GPRS_CRC+=0x56^byte; GPRS_CRC++; GPRS_CRC^=0xC5+byte; GPRS_CRC--;}
Т.е. ответ 41035689603406016100000000003B78, через функцию:
PHP:
define('HEX2BIN_WS', " \t\n\r");
function hex2bin($hex_string) {
$pos = 0;
$result = '';
while ($pos < strlen($hex_string)) {
if (strpos(HEX2BIN_WS, $hex_string{$pos}) !== FALSE) {
$pos++;
} else {
$code = hexdec(substr($hex_string, $pos, 2));
$pos = $pos + 2;
$result .= chr($code);
}
}
return $result;
}