2012-06-25 5 views
2

J'ai écrit un programme pour décoder un message SMS point-à-point CDMA 3GPP2. Je l'ai testé sur quelques cordes hexagonales CDMA PDU trouvées sur internet, et ça marche parfaitement. Cependant, lorsque j'essaie de l'implémenter sur tous les messages texte entrants sur la plate-forme Android, il échoue toujours. J'ai jeté un coup d'oeil à la PDU entrante, et il ne semble pas suivre le même modèle que j'ai été habitué à voir. Quelqu'un peut-il expliquer dans quel format est cette PDU, ou ce qui me manque pour décoder correctement cette PDU? Y at-il des en-têtes ou des champs supplémentaires que je ne prends pas en compte?CDMA PDU analyse sur Android

Exemple PDU tiré d'un message texte entrant sur mon téléphone:

000000000000100200000000000000000A36373839313031363734000000000000000000001B000310864D000306120624205611010B104C2CF9F3F5EBD73E7000 

Tous les pdus CDMA j'ai trouvé et testé mon analyseur sur look plus comme:

00000210020207028CE95DCC65800601FC08150003168D3001061024183060800306101004044847 

Transporteur: Verizon Téléphone: Samsung Galaxy S Fascinate en cours d'exécution Android 2.3.3

Répondre

2

Voir le javadoc de $ SDK/sources/android-16/com/et roid/interne/téléphonie/AMRC/SmsMessage:

/** 
* Creates byte array (pseudo pdu) from SMS object. 
* Note: Do not call this method more than once per object! 
*/ 

... donc il ne suit pas une norme CDMA particulière. Vous pouvez le décoder cependant; si in fine art ASCII: -

000000000000100200000000000000000A36373839313031363734000000000000000000001B000310864D000306120624205611010B104C2CF9F3F5EBD73E7000 
--------messageType  --digitMode     --------bearerReply ------------------------------------------------------bearer data 
     --------teleService --ton --------------------src  --replySeqNo --messageID --msts   --userdata 
       --------serviceCategory       --errorClass --len --XX--len   --len 
          --numberMode       --causeCode ------  ------------2012/06/24 20:56:11 
           --npi         --------bearerDataLength    ----------------------userdata 
           --len           

Notez que je pense que vous avez fait une erreur de couper/coller dans votre message - l'octet 00 marqué « XX » Je pense ne devrait pas être là - heureusement, il est facile de repérer les date et travailler en arrière. Donc, ceci est un message de 6789101674 avec userdata:

104C2CF9F3F5EBD73E7000, dont les cinq premiers bits montrent qu'il s'agit d'un codage à 7 bits (0x02). Après avoir déplacé le reste des userdata 5 bits vers la gauche, nous nous retrouvons avec:

09859f3e7ebd7ae7ce00 
--len(septets) 9 septets == 63 bits, so we expect 8 bytes of body 
    ----------------7bit-body 

Ainsi, votre corps 7bit décodée est « Bggguuugg ».