Programa para pasar de Octetos a septetos en tramas PDU usadas en mensajes de texto SMS que viajan por la red GSM

Dependencies:   mbed

main.cpp

Committer:
tony63
Date:
2017-04-28
Revision:
1:a1fe02210bb6
Parent:
0:e74448c0b740

File content as of revision 1:a1fe02210bb6:

#include "mbed.h"
Serial pc(USBTX, USBRX); // tx, rx
/*
ALGORITMO PARA PASAR DE OCTETOS A SEPTETOS
EN UN MENSAJE DE TEXTO DE CELULAR EN FORMATO PDU
SE APLICA AL RECIBIR UN MENSAJE QUE TRAE OCTETOS
SON VISIBLES EN ASCCI AL SER SEPTETOS
USA DOS CADENAS; UNA DE ENTRADA Y OTRA DE SALIDA
LENIN ES LA LONGITUD DE LA CADENA DE ENTRADA
LENOUT LA LONGITUD DE LA DE SALIDA
VERIFIQUE CON EL DECODIFICADOR DE ESTA PAGINA::
http://www.twit88.com/home/utility/sms-pdu-encode-decode
en septetos use esta....http://www.asciitohex.com/
LA ULTIMA VERSION ES PARA CUALQUIER NUMERO DE CARACTERES VER:abril 27 2017
tanto LENIN y LENOUT se deben especificar al ensamblar la trama PDU en el MODEM
GSM o GPRS
*/

char gi[50];
char gs[50];
int i,K,LENOUT,LENIN,C;
// PRUEBA CON LA CADENA "gallina cafe"
// cadena de octetos =   E7309B9D768741E3B0B90C
// cadena de septetos o lo que entrega esta funcion = 67 61 6c 6c 69 6e 61 20 63 61 66 65
void OctToSep(char *DE, char *DS);
int main(){
         
         gi[0]=0xE7;
         gi[1]=0x30;
         gi[2]=0x9B;
         gi[3]=0x9D;
         gi[4]=0x76;
         gi[5]=0x87;
         gi[6]=0x41;
         gi[7]=0xE3;
         gi[8]=0xB0;
         gi[9]=0xB9;
         gi[10]=0x0C;
         OctToSep(gi,gs);//se llama la funcion
         for (i=0;i < LENOUT;i++){  // se imprime el resultado
         pc.printf("%2X,%d,%d\r\n",gs[i],i,K);
         }
        
  } 
//----------------funcion de interes ---------------------------
         void OctToSep(char *DE, char *DS){
         LENIN=strlen(DE);    
         LENOUT= LENIN*8/7;
         K=7;
         C=0;
         DS[0]=DE[0] & 0x7F;  // la primera sola
         for (i=1;i < LENOUT;i++){  // inicia el algoritmo
         DS[i]=(DE[i-1-C]>>K | DE[i-C]<<(8-K))& 0x7F;  //valido para todos
         if (K==0) {K=8;C++;}
         K--;
         }
         return;        
         }