--- trunk/Embedded/main.c 2007/12/04 17:23:27 148 +++ trunk/Embedded/main.c 2007/12/05 07:30:04 151 @@ -9,7 +9,7 @@ #define LCD_LENGTH 16 #define LCD_ROWS 2 -#define SEND_BUFFER 128 +#define BUFFER 128 #define PWRFAIL RB1 #define FIREDET RB2 #define FEEDING RB3 @@ -18,14 +18,18 @@ unsigned char global_Pot_Hi, global_Pot_Lo; unsigned char global_LCD_Buffer[LCD_ROWS][LCD_LENGTH]; -unsigned char global_serial_send[SEND_BUFFER], global_serial_recieve_buffer[SEND_BUFFER]; +unsigned char global_serial_send[BUFFER], global_serial_recieve_buffer[BUFFER]; bit global_recieve_done = 0, global_interval_changed = 0; unsigned int global_serial_byte_counter = 0, global_sms_counter = 1, global_time_counter = 0; unsigned int global_emergency_counter = 600, global_time_interval = 3600; unsigned char global_temp = 0; -unsigned char cell_nr[15] = ""; // = "21681784"; +unsigned char global_lcd_buf[16]; + +unsigned short global_imei_tversum; +unsigned char cell_nr[15] = ""; // = "21681784"; +bit global_modem_init = 0; __EEPROM_DATA( 60, 0, 1, 8, '2', '1', '6', '8'); __EEPROM_DATA( '1', '7', '8', '4',0,0,0,0); @@ -35,9 +39,18 @@ void update_lcd(void); void convertTemp(void); void timer1_interrupt(void); +void on_recieve(void); +void on_initial_recieve(void); + + +void reset_recieve_buffer(void) +{ + global_recieve_done = 0; + global_serial_byte_counter=0; +} + -// Nicked from H7 -void ad_init(void) +void ad_init(void) // Nicked from H7 { // AD Conversion clock ADCS0 = 0; @@ -115,6 +128,7 @@ { int i; + reset_recieve_buffer(); sprintf(global_serial_send,"at+cgsn\r"); serial_send(); DelaySek(1); @@ -123,10 +137,11 @@ sprintf(global_serial_send,"%s", "at+cpin=8043\r"); serial_send(); - DelaySek(30); - update_lcd(); - DelaySek(5); + while(global_modem_init == 0) + { + on_initial_recieve(); + } } @@ -151,11 +166,11 @@ { int i; char data_byte; - for(i = 0; i < SEND_BUFFER; i++) + for(i = 0; i < BUFFER; i++) { data_byte = global_serial_send[i]; if( data_byte == '\r') - i = (SEND_BUFFER - 1); + i = (BUFFER - 1); TXREG = data_byte; while(TRMT==0) ; DelayMs(10); @@ -170,11 +185,19 @@ data_byte = RCREG; + if (data_byte == '\n') + return; + + if (global_serial_byte_counter == 0 && data_byte == '\r') + return; + global_serial_recieve_buffer[global_serial_byte_counter] = data_byte; - if(data_byte == '\r') + + if (data_byte == '\r') { global_recieve_done = 1; - global_serial_byte_counter = 0; + //global_serial_byte_counter = 0; + global_serial_recieve_buffer[global_serial_byte_counter+1] = 0; //zero terminate } else { @@ -196,7 +219,9 @@ { lcd_clear(); lcd_goto(0x00); - lcd_puts(global_temp); + + sprintf(global_lcd_buf, "%d", global_temp); + lcd_puts(global_lcd_buf); } @@ -257,9 +282,57 @@ cell_nr[i] = 0; //zero terminated! } +void on_initial_recieve(void) +{ + char imei[16]; + char* ptr; + char i; + + if (strstr(global_serial_recieve_buffer,"+WIND: 11") != 0) + { + global_modem_init = 1; + + ptr = strstr(global_serial_recieve_buffer,"cgsn"); + ptr +=4; + strncpy(imei, ptr,15); + imei[15] = 0; + + global_imei_tversum = 0; + for (i=0; i<15; ++i) + { + global_imei_tversum += (imei[i] - '0'); + } + + + reset_recieve_buffer(); + } +} + + void on_recieve(void) { + char tmp[17]; + char* ptr; + tmp[0]=0; + + if (global_recieve_done == 0) + return; + + lcd_goto(0x00); + lcd_puts(global_serial_recieve_buffer); + + if (strstr(global_serial_recieve_buffer,"CMTI") == 0) + { + ptr = strstr(global_serial_recieve_buffer,"'"); + strcat(tmp,ptr); + + + lcd_goto(0x40); + lcd_puts(tmp); + + } + reset_recieve_buffer(); } void main() @@ -279,7 +352,10 @@ eeprom_reader(); /////////////// // Main loop // -send_update(); + + DelayMs(50); + reset_recieve_buffer(); + while(1) { // If there happends to be a critical state on the system, we send a sms. @@ -310,8 +386,10 @@ global_Pot_Hi = ADRESH; global_Pot_Lo = ADRESL; convertTemp(); - update_lcd(); + //update_lcd(); GODONE = 1; } + // Handels the recieve sms'es. + on_recieve(); } }