Te paso como ejemplo la lista de comandos que acepta mi componente de GSM.
Fijate que estan ordenados del ASCII mas alto al mas bajo, esto es para que cuando se efectua la busqueda se pueda tomar textos que comparten palabras en comun. (EJ: PEPE y PEPE2)
char const R_GSM_MODULE_CMD_IN[16][12]=
{"OK", //R_GSM_LO_CMD_IN_OK
"NO CARRIER", //R_GSM_LO_CMD_IN_NO_CARRIER
"ERROR", //R_GSM_LO_CMD_IN_ERROR
"+MIPSTAT: ", //R_GSM_LO_CMD_IN_LINK_STAT
"+MIPSEND: ", //R_GSM_LO_CMD_IN_BUFF_SENT
"+MIPRUDP: ", //R_GSM_LO_CMD_IN_PQ_UDP
"+MIPRTCP: ", //R_GSM_LO_CMD_IN_PQ_TCP
"+MIPPUSH: ", //R_GSM_LO_CMD_IN_BLOCK_SENT
"+MIPOPEN: ", //R_GSM_LO_CMD_IN_IP_CNT
"+MIPCLOSE: ", //R_GSM_LO_CMD_IN_IP_DCNT
"+MIPCALL: ", //R_GSM_LO_CMD_IN_APN_CNT
"+CSQ: ", //R_GSM_LO_CMD_IN_SIGNAL
"+CREG: ", //R_GSM_LO_CMD_IN_GSM_REG
"+CMT: ", //R_GSM_LO_CMD_IN_SMS_RECEIVE
"+CMGS: " //R_GSM_LO_CMD_IN_SMS_SENT
"" //Necesario para fin de analisis
};
Se hace el analisis del texto entrante y se termina en un switch case de 16 casos.
El algoritmo de busqueda esta optimizado (Search + Deltasearch)