Autor Tema: ¿Cómo determinar que un string tenga una cadena valida?  (Leído 4121 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:¿Cómo determinar que un string tenga una cadena valida?
« Respuesta #15 en: 28 de Octubre de 2022, 22:53:06 »
Esta pregunta te respondo primero

¿Por qué haces eso con un microcontrolador? Es decir, tal vez debías usar un protocolo más simple para enviar y recibir datos desde un servidor remoto.

Existe una aplicación realizado tanto para PC como para dispositivos Android, que intercambian información con un servidor.

Estos dispositivos se colocan en estaciones de combustible para controlar el despacho de combustible, generar facturas y otras funciones.

El problema con dispositivos Android es que no duran mucho tiempo, el sensor capacitivo de las pantallas se daña aproximadamente luego de 4 meses, el clima y el maltrato por parte de las personas que lo usan provocan el deterioro.

Hace varios años atrás estuve involucrado en el diseño de un dispositivo con QTouch, el cual era una caja de acrílico de unos 5 mm de grosor, este dispositivo soportaba muy bien el medio ambiente, estaba diseñado en base a un microcontrolador.

Ahora, una empresa nos contrató para hacer algo similar, pero iba a tomar mucho tiempo en realizar un protocolo simple sobre TCP/IP para que haga lo mismo, y ellos plantearon utilizar lo que ya está funcionando y esa es la razón del porque está diseñado de esa manera.

En un futuro es posible que se retorne a un protocolo simple en lugar de enviar información utilizando JSON

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:¿Cómo determinar que un string tenga una cadena valida?
« Respuesta #16 en: 28 de Octubre de 2022, 23:11:04 »
Respecto a esta pregunta

Cambiando de coles a nabos, mencionaste que ya desrealizaste un JSON en C

¿Puedes compartir o explicar el código?


El código es extenso, trataré de explicar sólo algunas partes, tampoco puedo publicar código que no puede ser publico

Por ejemplo, tengo estructuras que emulan las clases (se tomo como ejemplo el código hecho en C# )

Una estructura es de la siguiente manera:

Código: C
  1. typedef struct
  2. {
  3.     unsigned char Nivel;
  4.     char Mensaje[MaximoStringEnJson];
  5.     unsigned char TipoDePeriodoID;
  6.     char TipoDePeriodoNombre[MaximoStringEnJson];
  7.     unsigned char FormaDePagoID;
  8.     unsigned char TarjetaID;
  9.     char TarjetaNombre[MaximoStringEnJson];
  10.     char FormaDePagoNombre[MaximoStringEnJson];
  11.     unsigned char NfcId;
  12.     unsigned short ClienteID;
  13.     unsigned char  TipoIdentificacionID;
  14.     char TipoIdentificacionNombre[MaximoStringEnJson];
  15.     char ClienteIdentificacion[MaximoStringEnJson];
  16.     char ContribuyenteNombreComercial[MaximoStringEnJson];
  17.     char ContribuyenteActividadEconomica[MaximoStringEnJson];
  18.     char ClienteRazonSocial[MaximoStringEnJson];
  19.     char ClienteEmail[MaximoStringEnJson];
  20.     char ClienteDireccion[MaximoStringEnJson];
  21.     char ClienteTelefono[MaximoStringEnJson];
  22. etc etc etc
  23. }ClienteEstacion;

Declaro una variable de tipo ClienteEstacion

Código: C
  1. typedef struct
  2. {
  3.     /* The application's current state */
  4.     APPJSON_STATES state;
  5.     /* TODO: Define any additional data used by the application. */
  6.     Bomba bombaRetornar;
  7.     EstructuraIdentificacionDeCliente identificacionDeCliente;
  8.     Dispositivo dispositivoRetornar;
  9.     ClienteEstacion clienteRetornar;
  10.     unsigned char *p; //puntero a arreglo de datos donde está el JSON
  11.     unsigned char estadoDeserailizar;
  12.     unsigned char *tmp;
  13.     unsigned char punteroParaListadoJSON;
  14.     CatalogoTarjetas listaCatalogoTarjetas[MaximoCatalogoGeneral]; //Hasta 20 tarejtas de créito
  15.     Producto listaProductosDisponibles[MaximoCatalogoGeneral];
  16.     ProductoAprobado productoAprobado;
  17.     char UUID[20];
  18. } APPJSON_DATA;

Sobre comunicación sobre Ethernet y utilizando la pila TCP/IP de Harmony 3, creo un cliente TCP que se comunica con un servidor TCP alojado en un servidor en la estación de combustible.

Puedes verificar los ejemplos de Servidor y/o Cliente para el PIC32MZ de Harmony 3:

La recepción de datos es algo así:

Código: C
  1. case APPETH_TCPIP_ESPERAR_POR_RESPUESTA:
  2. {
  3.     memset(appethData.bufferRecepcionCliente, 0, sizeof(appethData.bufferRecepcionCliente));
  4.     while (TCPIP_TCP_GetIsReady(appethData.clientSocket))
  5.     {
  6.         TCPIP_TCP_ArrayGet(appethData.clientSocket, (uint8_t*)appethData.bufferRecepcionCliente, sizeof(appethData.bufferRecepcionCliente) - 1);
  7.     }
  8.  
  9.     if (!TCPIP_TCP_IsConnected(appethData.clientSocket) || TCPIP_TCP_WasDisconnected(appethData.clientSocket))
  10.     {
  11.         appethData.clientState = APPETH_TCPIP_ANALIZAR_RESPUESTA_PARA_CLIENTE;//APPETH_ESTADO_INICIAL;
  12.      
  13.     }
  14.     break;
  15. }

Para deserializar un campo del JSON, hago algo así, por ejemplo para ClienteRazonSocial

Código: C
  1. retornarStringJson(appjsonData.p,"\"ClienteRazonSocial\":\"",appjsonData.clienteRetornar.ClienteRazonSocial);

Donde retornarStringJson extrae el string o arreglo que venga luego de ClienteRazonSocial:

Acá tienes un video del primer protipo:


Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32


 

anything