--- trunk/Embedded/main.c 2007/12/04 17:32:44 149 +++ trunk/Embedded/main.c 2007/12/04 19:07:00 150 @@ -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,16 @@ 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 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 +37,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 +126,7 @@ { int i; + reset_recieve_buffer(); sprintf(global_serial_send,"at+cgsn\r"); serial_send(); DelaySek(1); @@ -123,10 +135,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 +164,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 +183,16 @@ data_byte = RCREG; + if (data_byte == '\n') + 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 { @@ -257,9 +275,52 @@ 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]; + if (global_recieve_done == 0) + return; + + lcd_clear(); + lcd_goto(0x00); + tmp[0] = 0; + strncat(tmp,global_serial_recieve_buffer,16); + lcd_puts(tmp); + if (strncmp(global_serial_recieve_buffer,"+WIND: 11", 3) == 0) + { + global_modem_init = 1; + } + reset_recieve_buffer(); } void main() @@ -279,7 +340,8 @@ eeprom_reader(); /////////////// // Main loop // -send_update(); + + while(1) { // If there happends to be a critical state on the system, we send a sms. @@ -313,5 +375,12 @@ update_lcd(); GODONE = 1; } + + //if (global_recieve_done) + //{ + on_recieve(); + // global_recieve_done = 0; + // global_serial_byte_counter = 0; + //} } }