CarApp
Notificaciones a celulares al detectar la alarma del auto activada.
 Todo Estructuras de Datos Archivos Funciones Variables Enumeraciones Valores de enumeraciones 'defines'
shell_commands.c
Ir a la documentación de este archivo.
1 //******************************************************************************
2 // Nombre: shell_commands.c
3 // Versión: 1.0
4 // Descripción: Módulo donde se definen los comandos y la lista de los mismos
5 // con el puntero que apunta a la función y su descripción. En
6 // este módulo también se definen la lista de usuarios que tienen
7 // permitido modificar la configuración de la alarma.
8 // Autores: Juan Martín Ortega, Ramiro Barrón, Andrea Cukerman
9 // IIE, Facultad de Ingeniería, UdelaR
10 // Uruguay
11 // Fecha: Junio 2012
12 //******************************************************************************
13 
24 #include <string.h>
25 #include "aux_functions.h"
26 #include "shell_commands.h"
27 #include "gsm.h"
28 #include "timer.h"
29 #include "car-app.h"
30 #include "shell.h"
31 
40 #define MAX_USERS 6
41 
42 
48 char alarm_reply[250];
49 
56  {
57  {"ACTIVAR","Activa notificaciones.", activate},
58  {"DESACTIVAR","Desactiva notificaciones.",deactivate},
59  {"ENVIAR1","Configura celular prioritario.",send1},
60  {"ENVIAR2","Configura celular secundario.",send2},
61  {"TIEMPO","Configura tiempo, en minutos, entre notificaciones.",setTime},
62  {"UBICACION","Consulta coordenadas actuales del automovil.",location},
63  {"SALDO","Consulta saldo.",credit},
64  {"AYUDA","Imprime una lista con todos los comandos disponibles.",help},
65  {"CONFIGURACION", "Muestra configuracion actual.", showConfig},
66  {"AGREGAR", "Agrega el numero de celular a la lista de usuarios habilitados", addUser},
67  {"ELIMINAR", "Elimina el numero de celular de la lista de usuarios habilitados", deleteUser},
68  {"USUARIOS", "Muestra todos los usuarios habilitados a configurar el sistema", showUser},
69  //acá se agregarían los nuevos comandos...
70  {0,0,0}
71  };
72 
80  {
81  {"+59899939633"},
82  //acá se agregarían los nuevos numeros...
83  {"0"}
84  };
85 
93 void activate(unsigned int argc, char** argv)
94  {
95  activate_alarm(); // Activa notificaciones
96  send_sms(argv[0],"NOTIFICACION ACTIVADA "); // Envia sms a quien envió el comando notificándole que se activaron notificaciones
97  }
98 
106 void deactivate(unsigned int argc, char** argv)
107  {
108  deactivate_alarm(); // Desactiva notificaciones
109  send_sms(argv[0],"NOTIFICACION DESACTIVADA "); // Envia sms a quien envió el comando notificándole que se desactivaron notificaciones
110  }
111 
118 void send1(unsigned int argc, char** argv)
119  {
120  if(argc<3) // Verifica si el número de parámetros es menor a 3
121  { // SI ES MENOR A 3
122  send_sms(argv[0],"CANTIDAD DE PARAMETROS ERRONEA."); // Envia sms a quien envió el comando notificándole que la cantidad de parámetros es erronea
123  }
124  else
125  { // SI NO ES MENOR A 3
126  set_first_phone(argv[2]); // Configura el celular prioritario
127  strcpy(alarm_reply, "CELULAR PRIORITARIO: "); // Prepara respuesta a quien envió el comando
128  strcat(alarm_reply, get_first_phone()); // Agrega el celular prioritario a la respuesta
129  send_sms(argv[0],alarm_reply); // Envia sms a quien envió el comando notificándole cual es el celular prioritario
130  }
131  }
132 
139 void send2(unsigned int argc, char** argv)
140  {
141  if(argc<3) // Verifica si el número de parámetros es menor a 3
142  { // SI ES MENOR A 3
143  send_sms(argv[0],"CANTIDAD DE PARAMETROS ERRONEA."); // Envia sms a quien envió el comando notificándole que la cantidad de parámetros es erronea
144  }
145  else
146  { // SI NO ES MENOR A 3
147  if (strcmp(argv[2],get_first_phone())) // Verifica si el celular es el celular prioritario
148  { // SI NO ES EL CELULAR PRIORITARIO
149  set_second_phone(argv[2]); // Configura el celular secundario
150  strcpy(alarm_reply, "CELULAR SECUNDARIO: "); // Prepara respuesta a quien envió el comando
151  strcat(alarm_reply, get_second_phone()); // Agrega celular secundario a la respuesta
152  send_sms(argv[0],alarm_reply); // Envia sms a quien envió el comando notificándole cual es el celular secundario
153  }
154  else
155  { // SI ES EL CELULAR PRIORITARIO
156  send_sms(argv[0], "ERROR: NUMERO CONFIGURADO COMO CELULAR PRIORITARIO"); // Envia sms a quien envió el comando notificándole que el celular ya es el celular prioritario
157  }
158  }
159  }
160 
170 void setTime(unsigned int argc, char** argv)
171  {
172  if(argc<3) // Verifica si el número de parámetros es menor a 3
173  { // SI ES MENOR A 3
174  send_sms(argv[0],"CANTIDAD DE PARAMETROS ERRONEA."); // Envia sms a quien envió el comando notificándole que la cantidad de parámetros es erronea
175  }
176  else
177  { // SI NO ES MENOR A 3
178  set_control_time(argv[2]); // Configura tiempo entre notificaciones
179  strcpy(alarm_reply, "TIEMPO ENTRE AVISOS: "); // Prepara respuesta a quien envio el comando
180  strcat(alarm_reply, itoa(get_control_time())); // Agrega el tiempo entre notificaciones a la respuesta
181  strcat(alarm_reply, "min."); // Agrega la unidad de tiempo a la respuesta
182  send_sms(argv[0], alarm_reply); // Envia sms a quien envió el comando notificándole tiempo entre notificaciones
183  }
184  }
185 
193 void location(unsigned int argc, char** argv)
194  {
195  send_sms(argv[0], "NO DISPONIBLE"); // Envia sms a quien envió el comando notificándole que el comando no esta disponible
196  }
197 
205 void credit(unsigned int argc, char** argv)
206  {
207  send_sms(argv[0], "NO DISPONIBLE"); // Envia sms a quien envió el comando notificandole que el comando no está disponible
208  }
209 
219 void help(unsigned int argc, char** argv)
220  {
221  if(argc != 2) // Verifica si la cantidad de parámetros es distinta de dos
222  { // SI ES DISTINTA
223  int j = 0; // Define e inicializa primer contador auxiliar
224  char middle[] = ": "; // Define cadena separadora
225  while(commands[j].nombre != 0) // Recorre lista de comandos
226  {
227  if(!stricmp(commands[j].nombre, argv[2])) // Verifica si el comando está en la lista de comandos
228  { // SI ESTÁ EN LA LISTA
229  strcpy(alarm_reply, commands[j].nombre); // Prepara respuesta con el nombre del comando recibido como parámetro
230  strcat(alarm_reply, middle); // Agrega cadena separadora a respuesta
231  strcat(alarm_reply ,commands[j].descripcion); // Agrega descripción del comando recibido como parámetro a respuesta
232  break;
233  }
234  j++; // Incrementa primer contador auxiliar
235  if(commands[j].nombre == 0) // Verifica si se llego al final de la lista de comandos
236  { // SI SE LLEGO AL FINAL DE LA LISTA
237  strcpy(alarm_reply,"COMANDO PASADO COMO ARGUMENTO NO EXISTE."); // Prepara respuesta indicando que el comando ingresado no existe
238  }
239  }
240  send_sms(argv[0], alarm_reply); // Envia sms al celular que envió el comando con respuesta
241  }
242  else
243  { // SI NO ES DISTINTA
244  int j = 0; // Define e inicializa primer contador auxiliar
245  strcpy(alarm_reply,"COMANDOS DISPONIBLES: "); // Prepara respuesta indicando comandos disponibles
246  while(commands[j].nombre != 0) // Recorre lista de comandos
247  {
248  strcat(alarm_reply ,commands[j++].nombre); // Agrega nombre de comando a la respuesta
249  strcat(alarm_reply ," "); // Agrega un espacio a la respuesta
250  }
251  send_sms(argv[0], alarm_reply); // Envia sms al celular que envió el comando con respuesta
252  }
253  }
254 
262 void showConfig(unsigned int argc, char** argv)
263  {
264  if(get_status_flag()) // Verifica estado de las notificaciones
265  { // SI ACTIVADAS
266  strcpy(alarm_reply, "NOTIFICACION ACTIVADA "); // Prepara respuesta con estado de las notificaciones
267  }
268  else // SI DESACTIVADAS
269  {
270  strcpy(alarm_reply, "NOTIFICACION DESACTIVADA "); // Prepara respuesta con estado de las notificaciones
271  }
272  strcat(alarm_reply, "CELULAR 1: "); // Agrega "CELULAR 1" a la respuesta
273  strcat(alarm_reply, get_first_phone()); // Agrega celular prioritario a la respuesta
274  strcat(alarm_reply, " CELULAR 2: "); // Agrega "CELULAR 2" a la respuesta
275  strcat(alarm_reply, get_second_phone()); // Agrega celular secundario a la respuesta
276  strcat(alarm_reply, " TIEMPO ENTRE AVISOS: "); // Agrega "TIEMPO ENTRE AVISOS" a la respuesta
277  strcat(alarm_reply, itoa(get_control_time())); // Agrega el tiempo entre avisos a la respuesta
278  strcat(alarm_reply, "min."); // Agrega la unidad del tiempo entre avisos
279  send_sms(argv[0], alarm_reply); // Envia sms al celular que envió el comando con respuesta
280  }
281 
288 void addUser(unsigned int argc, char** argv)
289  {
290  char cel[15]; // Define cadena para cargar celular a setear
291  strcpy(cel, argv[2]); // Copia el celular pasado como parámetro a la cadena anterior
292  char new_cel[15]; // Define cadena para armar celular
293  strcpy(new_cel, "+598"); // Copia prefijo a cadena anterior
294  int i = 0; // Define contador auxiliar
295  int used = 0; // Define bandera para saber si ya ha sido utilizado
296  while( cel[i]!= 0x00) // Recorre el celular a setear
297  {
298  cel[i-1] = cel[i]; // Corre un lugar a la izquierda para eliminar 0
299  i++; // Aumenta contador
300  }
301  cel[i-1] = 0x00; // Agrega caracter NULO
302  strcat(new_cel, cel); // Agrega celular a setear sin el cero a cadena para armar celular
303  i = 0; // Inicializa contador auxiliar
304  while((strcmp(users[i].number,"0")) && (used == 0)) // Recorre lista de usuarios
305  {
306  if(!strcmp(users[i++].number, new_cel)) // Verifica que no esté en la lista
307  { // SI ESTÁ EN LA LISTA
308  used = 1; // Prende bandera de ya utilizado
309  }
310  }
311  if(i<MAX_USERS && used == 0) // Verifica que no esté usado y que no se haya alcanzado el número máximo de usuarios
312  { // SI NO SE ALCANZÓ NÚMERO MÁXIMO Y NO ESTÁ USADO
313  strcpy(users[i].number,new_cel); // Agrega usuario a la lista
314  strcpy(users[i+1].number, "0"); // Agrega cero al final de la lista
315  strcpy(alarm_reply, "USUARIO AGREGADO: "); // Prepara respuesta a quien envió el comando
316  strcat(alarm_reply, users[i].number); // Agrega número de usuario agregado
317  send_sms(argv[0],alarm_reply); // Enviá sms indicando que el usuario ha sido agregado
318  }
319  else if(used == 1)
320  { // SI EL NÚMERO YA HA SIDO UTILIZADO
321  send_sms(argv[0],"USUARIO EXISTENTE"); // Enviá sms indicando que el usuario ya existe
322  }
323  else
324  { // SI SE ALCANZÓ NÚMERO MÁXIMO DE USUARIOS
325  send_sms(argv[0],"AGENDA COMPLETA"); // Enviá sms indicando que se alcanzó número máximo de usuarios
326  }
327  }
328 
335 void deleteUser(unsigned int argc, char** argv)
336  {
337  char cel[15]; // Define cadena para cargar celular a eliminar
338  strcpy(cel, argv[2]); // Copia el celular pasado como parámetro a la cadena anterior
339  char new_cel[15]; // Define cadena para armar celular
340  strcpy(new_cel, "+598"); // Copia prefijo a cadena anterior
341  int i = 0; // Define contador auxilia
342  int deleted = 0; // Define bandera eliminado
343  while( cel[i]!= 0x00) // Recorre el celular a setear
344  {
345  cel[i-1] = cel[i]; // Corre un lugar a la izquierda para eliminar 0
346  i++; // Aumenta contador
347  }
348  cel[i-1] = 0x00; // Agrega caracter NULO
349  strcat(new_cel, cel); // Agrega celular a setear sin el cero a cadena para armar celular
350  if(strcmp(users[0].number,new_cel)) // Verifica que no sea el primer celular
351  { // SI NO ES EL PRIMER CELULAR
352  int i = 1; // Inicializa contador auxiliar
353  while((strcmp(users[i].number,"0")) && (deleted == 0)) // Recorre lista de usuarios
354  {
355  if(!strcmp(users[i].number, new_cel)) // Verifica si el usuario está en la lista
356  { // SI ESTÁ EN LA LISTA
357  while(strcmp(users[i].number,"0")) // Recorre resto de la lista
358  {
359  strcpy(users[i].number,users[i+1].number); // Corre un lugar hacia abajo el resto de los números
360  i++; // Aumenta contador auxiliar
361  }
362  deleted = 1; // Prende bandera eliminado
363  }
364  i++; // Aumenta contador auxiliar
365  }
366  if (deleted == 1) // Verifica si se borro el usuario
367  { // SI SE BORRÓ
368  strcpy(alarm_reply, "USUARIO ELIMINADO: "); // Prepara respuesta
369  strcat(alarm_reply, new_cel); // Agraga celular que se eliminó
370  send_sms(argv[0], alarm_reply); // Enviá sms indicando que se alcanzó número máximo de usuarios
371  }
372  else
373  { // SI NO SE BORRÓ
374  send_sms(argv[0], "USUARIO INEXISTENTE"); // Enviá sms indicando que usuario no existe
375  }
376  }
377  else
378  { // SI ES EL PRIMER CELULAR
379  send_sms(argv[0], "NO PERMITIDO"); // Enviá sms indicando que no está permitido
380  }
381  }
382 
389 void showUser(unsigned int argc, char** argv)
390  {
391  int i = 0; // Define e inicializa contador auxiliar
392  strcpy(alarm_reply, "USUARIOS: "); // Prepara respuesta con lista de usuarios
393  while(strcmp(users[i].number,"0")) // Recorre lista de usuarios habilitados
394  {
395  strcat(alarm_reply, users[i].number); // Agrega usuario a la respuesta
396  strcat(alarm_reply, " "); // Agrega espacio a la respuesta
397  i++; // Incrementa contador auxiliar
398  }
399  send_sms(argv[0], alarm_reply); // Envia sms al celular que envió el comando con lista de usuarios
400  }