Со мной поделились кусочком кода расшифровки pdu sms, кто нибудь может его написать только в Protone Вот код:
void decode_pdu(void) {
char n, length, offset, i, b, mask;
offset = pdu_data[0]+2; //позиция в массиве
length = pdu_data[offset]/2+(pdu_data[offset] % 2);
offset += 2;
sms_orig[0] = length;
//номер телефона, с которого отрправлена SMS'ka
for (i = 0; i < length; i++) sms_orig[i+1] = (pdu_data[i+offset] << 4)|(pdu_data[i+offset] >> 4);
if ((sms_orig[1] & 0xF0) != 0x70) sms_orig[1] = (sms_orig[1] & 0x0F) | 0x70;
offset += length+9;
length = pdu_data[offset++];
if (length > sizeof(sms_message)-1) length = sizeof(sms_message)-1;
n = 0;
b = 0;
mask = 0x3F;
i = 0;
//декодирование сообщения (7 бит - 8 бит)
do {
if (n == 0) sms_message[b] = pdu_data[offset+i] & 0x7F; else {
sms_message[b] = (pdu_data[offset+i-1] >> (8-n))|((pdu_data[offset+i] & mask) << n); //!!!!
mask >>= 1;
}
if (n++ > 5) {
if (++b >= length) break;
sms_message[b] = pdu_data[offset+i] >> 1;
n = 0;
mask = 0x3F;
}
i++;
} while (b++ < length);
sms_message[b] = 0;
}