CarApp
Notificaciones a celulares al detectar la alarma del auto activada.
 Todo Estructuras de Datos Archivos Funciones Variables Enumeraciones Valores de enumeraciones 'defines'
control_alarma.c
Ir a la documentación de este archivo.
1 //******************************************************************************
2 // Nombre: control_alarma.c
3 // Versión: 1.0
4 // Descripción: Módulo encargado de controlar las notificaciones a los celulares
5 // predefinidos. Controla las notificaciones mediante una máquina
6 // de estados, la cual envía los mensajes, o realiza la llamada
7 // correspondiente a partir de eventos externos como activación
8 // de la alarma, o expiración del tiempo entre avisos. Tambíen
9 // incluye un proceso para configurar el puerto de interrupción
10 // y la rutina de atención al mismo.
11 // Autores: Juan Martín Ortega, Ramiro Barrón, Andrea Cukerman
12 // IIE, Facultad de Ingeniería, UdelaR
13 // Uruguay
14 // Fecha: Junio 2012
15 //******************************************************************************
16 
29 #include "control_alarma.h"
30 #include "gsm.h"
31 #include "uart.h"
32 #include "timer.h"
33 #include <io430x22x4.h>
34 #include "car-app.h"
35 #include <string.h>
36 
37 
38 /*
39  * Definición de constantes privadas
40  */
41 
47 
54 
55 
65  {
66  char reply[100]; // Define cadena donde se va a cargar respuesta al usuario
67  switch (alarm_control_state)
68  {
69  case ENVIAR1: send_sms(get_first_phone(), "ALERTA!! ALARMA ACTIVADA."); // Envía sms a primer celular con el texto "ALERTA!! ALARMA ACTIVADA."
70  init_control_timer(); // Empieza a contar tiempo entre notificaciones
71  alarm_control_state = LLAMAR1; // Define LLAMAR1 como estado de la máquina de estados alarm_control()
72  P1OUT ^= 0x02; // Apaga luz verde
73  break;
74  case LLAMAR1: call(); // Llama al primer celular
75  alarm_control_state = ENVIAR2; // Define ENVIAR2 como estado de la máquina de estados alarm_control()
76  P1OUT ^= 0x02; // Apaga luz verde
77  break;
78  case ENVIAR2: strcpy(reply, "ALERTA!! ALARMA ACTIVADA. "); // Copia "ALERTA!! ALARMA ACTIVADA." en cadena definida anteriormente
79  strcat(reply, get_first_phone()); // Agrega a la cadena el primer celular
80  strcat(reply, " NO RESPONDE."); // Agrega a la cadena "NO RESPONDE."
81  send_sms(get_second_phone(), reply); // Envia sms a segundo celular con la cadena definida anteriormente como texto
82  alarm_control_state = ENVIAR1; // Define ENVIAR1 como estado de la máquina de estados alarm_control()
83  P1OUT ^= 0x02; // Apaga luz verde
84  P2IE |= 0x10; // Habilita interrupciones de P2.4
85  break;
86  default: break;
87  }//end switch
88  }//end alarm_control
89 
97  {
98  P1DIR |= 0x02; // Configura P1.1 como dirección de salida
99  P1DIR &= 0xFD; // Apaga luz verde
100  P2IE |= 0x10; // Habilita interrupciones de P2.4
101  P2IES &= 0xEF; // Configura flanco de subida en P2.4
102  P2IFG &= ~0x10; // Borra bandera de interrupcion de P2.4
103  }//end conf_alarm_control
104 
112 // Port 2 interrupt service routine
113 #pragma vector=PORT2_VECTOR
114 __interrupt void Port_1(void)
115  {
116  alarm_control_state = ENVIAR1; // Define ENVIAR1 como estado de la máquina de estados alarm_control()
117  if(get_status_flag()) // Verifica si las notificaciones están activadas
118  { // ACTIVADAS
119  set_control_flag(); // Prende bandera de control
120  P1OUT ^= 0x02; // Prende luz verde
121  P2IFG &= ~0x10; // Borra bandera de interrupcion de P2.4
122  P2IE &= ~0x10; // Deshabilita interrupciones de P2.4
123  }//end if
124  else
125  { // DESACTIVADAS
126  P2IFG &= ~0x10; // Borra bandera de interrupcion de P2.4
127  P2IE |= 0x10; // Habilita interrupciones de P2.4
128  }//end else
129  }//end ISR