Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Reading the data from GSM_USART in the interuppt routine
- void GSM_Handler(uint8_t c) {
- char tmp=c;
- #ifdef GSM_DEBUG
- TM_USART_Putc(DEBUG_USART,tmp);
- #endif
- switch (gsm_state) {
- case 0: {
- response = -1; // Clear response
- if (tmp == 'O') // We have 'O', it could be "OK" or "On" or "Off"
- gsm_state = 1; // Expecting 'K'
- if (tmp == '>') // We have '>', it could be "> "
- gsm_state = 10; // Expecting ' '
- if (tmp == 'E') // We have 'E', it could be "ERROR"
- gsm_state = 30; // Expecting 'R'
- if (tmp == 'U') // We have 'U', it could be "UNREAD"
- gsm_state = 50; // Expecting 'N'
- if (tmp == 'C') // We have 'C', it could be "CREG" or "CMTI"
- gsm_state = 60; // Expecting 'R' or "M"
- if (tmp == 'N') // We have 'N', it could be "NO CARRIER"
- gsm_state = 80; // Expecting 'O'
- if (tmp == 'M')
- gsm_state = 210;
- break;
- }
- case 1: {
- if (tmp == 'K') { // We have 'K' ->
- response = GSM_OK; // We have "OK" response
- gsm_state = 20; // Expecting CR+LF
- }
- else
- if (tmp == 'n') // We have 't', it could be "Onx"
- gsm_state = 41; // Expecting 'x' with value between 0-9
- else
- if (tmp == 'f') // We have 'e'. it could be "Set"
- gsm_state = 42;
- else
- gsm_state = 0; // Reset state machine
- break;
- }
- case 10: {
- if (tmp == ' ') {
- response_rcvd = 1; // We have "> " response
- response = GSM_Ready_To_Receive_Message; // Set reception flag
- responseID = response; // Set response ID
- }
- gsm_state = 0; // Reset state machine
- break;
- }
- case 20: {
- if (tmp == 13) // We have 13, it could be CR+LF
- gsm_state = 21; // Expecting LF
- else
- gsm_state = 0; // Reset state machine
- break;
- }
- case 21: {
- if (tmp == 10) { // We have LF, response is complete
- response_rcvd = 1; // Set reception flag
- responseID = response; // Set response ID
- }
- gsm_state = 0; // Reset state machine
- break;
- }
- case 30: {
- if (tmp == 'R') // We have 'R', it could be "ERROR"
- gsm_state = 31; // Expecting 'R'
- else
- gsm_state = 0; // Reset state machine
- break;
- }
- case 31: {
- if (tmp == 'R') // We have 'R', it could be "ERROR"
- gsm_state = 32; // Expecting 'O'
- else
- gsm_state = 0; // Reset state machine
- break;
- }
- case 32: {
- if (tmp == 'O') // We have 'O', it could be "ERROR"
- gsm_state = 33; // Expecting 'R'
- else
- gsm_state = 0; // Reset state machine
- break;
- }
- case 33: {
- if (tmp == 'R'){ // We have 'R'
- response_rcvd = 1; // We have "ERROR" response
- response = GSM_ERROR; // Set reception flag
- responseID = response; // Set response ID
- }
- gsm_state = 0; // Reset state machine
- break;
- }
- //________________________________________________ "On" or "Off" ____________________________________________________________________________________
- //_________________________________________________ "On" ____________________________________________________________________________________________
- case 41: {
- if (tmp >= '0' && tmp <= '9') { // We have pin number, enable Laser x
- TM_BKPSRAM_Write8(tmp-0x30,0xAC);
- Laser_Control(tmp-0x30,LD_ON);
- delete_messages = 1;
- gsm_state = 0;
- }
- else
- gsm_state = 0; // Reset state machine
- break;
- }
- //_________________________________________________ "Off" ___________________________________________________________________________________________
- case 42: {
- if (tmp == 'f') // We have 'f', it could be "Off"
- gsm_state = 43; // Expecting 'x' with value between 0-9
- else
- gsm_state = 0; // Reset state machine
- break;
- }
- case 43: {
- if (tmp >= '0' && tmp <= '9') { // We have pin number, disable Laser x
- TM_BKPSRAM_Write8(tmp-0x30,0x00);
- Laser_Control(tmp-0x30,LD_OFF);
- delete_messages = 1;
- gsm_state = 0;
- }
- else
- gsm_state = 0; // Reset state machine
- break;
- }
- //________________________________________________ "UNREAD" _________________________________________________________________________________________
- case 50: {
- if (tmp == 'N')
- gsm_state = 51;
- else
- gsm_state = 0;
- break;
- }
- case 51: {
- if (tmp == 'R')
- gsm_state = 52;
- else
- gsm_state = 0;
- break;
- }
- case 52: {
- if (tmp == 'E')
- gsm_state = 53;
- else
- gsm_state = 0;
- break;
- }
- case 53: {
- if (tmp == 'A')
- gsm_state = 54;
- else
- gsm_state = 0;
- break;
- }
- case 54: {
- if (tmp == 'D'){
- response_rcvd = 1; // We have "UNREAD" response
- response = GSM_UNREAD; // Set reception flag
- responseID = response; // Set response ID
- Unread_flag = 1;
- }
- gsm_state = 0;
- break;
- }
- //_________________________________________"CREG" or "CMTI"__________________________________________________________________________________________
- case 60: {
- if (tmp == 'R') { // We have 'R', it could be "CREG"
- gsm_state = 61;
- }
- else if (tmp == 'M')
- gsm_state = 70;
- else
- gsm_state = 0;
- break;
- }
- //_____________________________________________________"CREG: 1,1" or "CREG 0,1"_____________________________________________________________________
- case 61: {
- if (tmp == 'E')
- gsm_state=62;
- else
- gsm_state=0;
- break;
- }
- case 62: {
- if (tmp == 'G')
- gsm_state=63;
- else
- gsm_state=0;
- break;
- }
- case 63: {
- if (tmp == ':')
- gsm_state=64;
- else
- gsm_state=0;
- break;
- }
- case 64: {
- if (tmp == ' ')
- gsm_state=65;
- else
- gsm_state=0;
- break;
- }
- case 65: {
- if (tmp == '0' || tmp == '1') {
- gsm_state=66;
- gsm_reg_stat = 0;
- }
- else
- gsm_state=0;
- break;
- }
- case 66: {
- if (tmp == ',') {
- gsm_state=67;
- }
- else
- gsm_state=0;
- break;
- }
- case 67: {
- if (tmp == '1') {
- response_rcvd = 1; // We have "CREG: 1,1" - NETWORK REGISTERED response
- response = GSM_REGISTERED;
- gsm_reg_stat = 1;
- responseID = response; // Set response ID
- }
- else if (tmp == '2') {
- response_rcvd = 1; // We have "CREG: 1,1" - ME is searching for GSM provider
- response = GSM_ERROR;
- gsm_reg_stat = 2;
- responseID = response; // Set response ID
- }
- else if (tmp == '3') {
- response_rcvd = 1; // We have "CREG: 1,3" - REGISTRATION DENIEDe
- response = GSM_ERROR;
- gsm_reg_stat = 3;
- responseID = response; // Set response ID
- }
- if (tmp == '5') {
- response_rcvd = 1; // We have "CREG: 1,1" - NETWORK REGISTERED in ROAMING response
- response = GSM_REGISTERED;
- gsm_reg_stat = 5;
- responseID = response; // Set response ID
- }
- else {
- gsm_state=0;
- //gsm_reg_stat = 0;
- }
- break;
- }
- //_____________________________________________________"CMTI: "SM", x" ______________________________________________________________________________
- case 70: {
- if (tmp == 'T') {
- gsm_state=71;
- }
- else
- gsm_state=0;
- break;
- }
- case 71: {
- if (tmp == 'I')
- gsm_state=72;
- else
- gsm_state=0;
- break;
- }
- case 72: {
- if (tmp == ':')
- gsm_state=73;
- else
- gsm_state=0;
- break;
- }
- case 73: {
- if (tmp == ' ') {
- gsm_state=74;
- }
- else
- gsm_state=0;
- break;
- }
- case 74: {
- if (tmp == '"')
- gsm_state=75;
- else
- gsm_state=0;
- break;
- }
- case 75: {
- if (tmp == 'S')
- gsm_state=76;
- else
- gsm_state=0;
- break;
- }
- case 76: {
- if (tmp == 'M')
- gsm_state=77;
- else
- gsm_state=0;
- break;
- }
- case 77: {
- if (tmp == '"')
- gsm_state=78;
- else
- gsm_state=0;
- break;
- }
- case 78: {
- if (tmp == ',')
- gsm_state=79;
- else
- gsm_state=0;
- break;
- }
- case 79: {
- if (tmp >= '0' && tmp <= '9') {
- laser_update_flag=1;
- response_rcvd = 1; // We have "CMTI: "SM", x" - new message received
- response = NEW_MESSAGE;
- responseID = response; // Set response ID
- }
- else
- gsm_state=0;
- break;
- }
- //_____________________________________________________"NO CARRIRER" ________________________________________________________________________________
- case 80: {
- if (tmp == 'O')
- gsm_state=81;
- else
- gsm_state=0;
- break;
- }
- case 81: {
- if (tmp == ' ')
- gsm_state=82;
- else
- gsm_state=0;
- break;
- }
- case 82: {
- if (tmp == 'C')
- gsm_state=83;
- else
- gsm_state=0;
- break;
- }
- case 83: {
- if (tmp == 'A')
- gsm_state=84;
- else
- gsm_state=0;
- break;
- }
- case 84: {
- if (tmp == 'R')
- gsm_state=85;
- else
- gsm_state=0;
- break;
- }
- case 85: {
- if (tmp == 'R')
- gsm_state=86;
- else
- gsm_state=0;
- break;
- }
- case 86: {
- if (tmp == 'I')
- gsm_state=87;
- else
- gsm_state=0;
- break;
- }
- case 87: {
- if (tmp == 'E')
- gsm_state=88;
- else
- gsm_state=0;
- break;
- }
- case 88: {
- if (tmp == 'R') {
- response_rcvd = 1; // We have "CREG: 1,1" - NETWORK REGISTERED response
- response = NO_CARRIER;
- responseID = response; // Set response ID
- }
- else
- gsm_state=0;
- break;
- }
- default: { // Unwanted character
- gsm_state = 0; // Reset state machine
- }
- }
- }
- // custom handler for USART2 (GSM USART)
- void TM_USART2_ReceiveHandler(uint8_t c) {
- GSM_Handler(c);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement