logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[c] [atmega] problem z dekodowaniem PDU

KamBys 20 Wrz 2009 09:28 1539 3
REKLAMA
  • #1 7036957
    KamBys
    Poziom 23  
    mam problem z dekodowaniem smsa z PDU. Mam prawidłowo wydzielony fragment zawierający samą treść smsa (obcięte info o ilości znaków) i próbuję go zdekodować.

    zmienne:
    unsigned char sms_dl;
    unsigned char sms[99]; //wyodrebniony zakodowany tekst sms
    unsigned char sms_bin[99];
    unsigned char sms_decode[99];
    unsigned int themp;
    unsigned char j;


    do zmiennej sms jest zapisany ciąg znaków PDU odebrany z telefonu, zakończony zerem. zmienna sms_dl zawiera liczbę znaków liczoną z zerem na końcu.

    procedura dekodująca:
    unsigned char  hexstr2bin(unsigned char *addr) 
    { 
    unsigned char hb,lb; 
    
       hb=*addr-0x30; 
       if(hb>0x09) hb-=0x07; 
       addr++; 
       lb=*addr-0x30; 
       if(lb>0x9) lb-=0x07; 
       return ((hb<<4)|lb); 
    } 
    
    void pdu2ascii(unsigned char *ppdu,unsigned char *pascii,unsigned char pdulen) 
    { 
    unsigned char bl,bh=0; 
    unsigned int i; 
    pdulen=hexstr2bin(ppdu); 
    //ppdu+=2; 
    for(i=0;i<pdulen;i++) 
       { 
          bl=(hexstr2bin(ppdu)<<(i%8)); 
          *pascii++=(bl|bh)&0x7F; 
          bh=hexstr2bin(ppdu)>>(7-(i%8)); 
          if(7-(i%8)) ppdu+=2; 
       } 
       *pascii=0x00;//koniec string'a 
    }


    oraz jej wywołanie:
    pdu2ascii(sms,sms_decode,sms_dl-1)


    niestety w zmiennej sms_decode są krzaki zamiast tekstu. zmienna sms zawiera prawidłowy string, sprawdzane (w urządzeniu poprzez wyświetlenei na lcd, nie symulatorem).
    w czym może twić problem?
  • REKLAMA
  • #2 7037098
    gothye
    Poziom 33  
    wiec czemu nie odbierasz sms w ansi ?
  • REKLAMA
  • Pomocny post
    #3 7037333
    michalko12
    Specjalista - Mikrokontrolery
    Pierwsza rzecz która rzuca sie w oczy to to że podajesz długość sms jako argument funkcji dekodującej a potem zmieniasz ten argument wyciagając tą długość z zakodowanego stringu. I jeśli w stringu jest ta wartość to potem nie zwiększasz wskaźnika i te same dane wykorzystujesz do dekodowania smsa. Albo zapomniałeś zakomentować pdulen=hexstr2bin(ppdu); , albo podajesz string z długością sms i dekodujesz tego smsa z tą wartością.
  • #4 7039291
    KamBys
    Poziom 23  
    @gothye bo nie mam telefonu który obsługuje tryb tekstowy, bo jest b. mało, jedynie gotowe moduły obsługują w większości ten tryb

    @michalko12, dzięki, zapomniałem wymazać tej linii. jutro będę walczył dalej

    wszystko dziala, co prawda funkcja zwraca mi kilka dodatkowych krzakow, ale to nie problem w bierzacej aplikacji
REKLAMA