Пытаюсь реализовать TCP/IP/PPP через GPRS на модеме Siemens MC35i. Сразу же наткнулся на проблему. Не могу сосчитать контрольную сумму кадра PPP. Где-то нашел вот это:
Цитата
Name : "X-25"
Width : 16
Poly : 1021
Init : FFFF
RefIn : True
RefOut : True
XorOut : FFFF
Check : 906E
(здесь я не догоняю что есть RefIn, RefOut и Check)
Прогоняю через функцию...
Код
unsigned short Crc16(unsigned char *pcBlock, unsigned short len)
{
unsigned short crc = 0xFFFF;
unsigned char i;
while (len--)
{
crc ^= *pcBlock++ << 8;
for (i = 0; i < 8; i++)
crc = crc & 0x8000 ? (crc << 1) ^ 0x1021 : crc << 1;
}
return crc ^ 0xFFFF;
}
...следующий пакет...
Цитата
FF03C021010300190206000A0000070208020506BC62123F0305C22305
...у которого CRC должен быть EEF1, но я получаю E3E2.
О, гуру L2P, подскажите где я на грабли наступаю.
П.С. Забить на пипипи и взять "нормальный" модем с уже реализованным стеком TCP/IP не предлагать.
Сообщение отредактировал lolful - Aug 13 2008, 12:01