Advertisement
dashko

not working handler

Dec 15th, 2015
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 15.54 KB | None | 0 0
  1. // Reading the data from GSM_USART in the interuppt routine
  2. void GSM_Handler(uint8_t c) {
  3.   char tmp=c;
  4.  
  5.   #ifdef GSM_DEBUG
  6.        TM_USART_Putc(DEBUG_USART,tmp);
  7.   #endif
  8.  
  9.  
  10.     switch (gsm_state) {
  11.       case  0: {
  12.                 response = -1;                   // Clear response
  13.                 if (tmp == 'O')                  // We have 'O', it could be "OK" or "On" or "Off"
  14.                   gsm_state = 1;                 // Expecting 'K'
  15.                 if (tmp == '>')                  // We have '>', it could be "> "
  16.                   gsm_state = 10;                // Expecting ' '
  17.                 if (tmp == 'E')                  // We have 'E', it could be "ERROR"
  18.                   gsm_state = 30;                // Expecting 'R'
  19.                 if (tmp == 'U')                  // We have 'U', it could be "UNREAD"
  20.                   gsm_state = 50;                // Expecting 'N'
  21.                 if (tmp == 'C')                  // We have 'C', it could be "CREG" or "CMTI"
  22.                   gsm_state = 60;                // Expecting 'R' or "M"
  23.                 if (tmp == 'N')                  // We have 'N', it could be "NO CARRIER"
  24.                   gsm_state = 80;                // Expecting 'O'
  25.                 if (tmp == 'M')
  26.                   gsm_state = 210;
  27.                 break;
  28.                }
  29.       case  1: {
  30.                 if (tmp == 'K') {                // We have 'K' ->
  31.                   response = GSM_OK;             // We have "OK" response
  32.                   gsm_state = 20;                // Expecting CR+LF
  33.                 }
  34.                 else
  35.                   if (tmp == 'n')                  // We have 't', it could be "Onx"
  36.                     gsm_state = 41;                // Expecting 'x' with value between 0-9
  37.                 else
  38.                   if (tmp == 'f')                // We have 'e'. it could be "Set"
  39.                     gsm_state = 42;
  40.                 else
  41.                   gsm_state = 0;                 // Reset state machine
  42.                 break;
  43.                }
  44.       case 10: {
  45.                 if (tmp == ' ') {
  46.                   response_rcvd = 1;             // We have "> " response
  47.                   response = GSM_Ready_To_Receive_Message; // Set reception flag
  48.                   responseID = response;         // Set response ID
  49.                 }
  50.                 gsm_state = 0;                   // Reset state machine
  51.                 break;
  52.                 }
  53.  
  54.       case 20: {
  55.                 if (tmp == 13)                   // We have 13, it could be CR+LF
  56.                   gsm_state = 21;                // Expecting LF
  57.                 else
  58.                   gsm_state = 0;                 // Reset state machine
  59.                 break;
  60.                }
  61.       case 21: {
  62.                 if (tmp == 10) {                 // We have LF, response is complete
  63.                   response_rcvd = 1;             // Set reception flag
  64.                   responseID = response;         // Set response ID
  65.                 }
  66.                 gsm_state = 0;                   // Reset state machine
  67.                 break;
  68.                }
  69.  
  70.       case 30: {
  71.                 if (tmp == 'R')                  // We have 'R', it could be "ERROR"
  72.                   gsm_state = 31;                // Expecting 'R'
  73.                 else
  74.                   gsm_state = 0;                 // Reset state machine
  75.                 break;
  76.                }
  77.       case 31: {
  78.                 if (tmp == 'R')                  // We have 'R', it could be "ERROR"
  79.                   gsm_state = 32;                // Expecting 'O'
  80.                 else
  81.                   gsm_state = 0;                 // Reset state machine
  82.                 break;
  83.                }
  84.       case 32: {
  85.                 if (tmp == 'O')                  // We have 'O', it could be "ERROR"
  86.                   gsm_state = 33;                // Expecting 'R'
  87.                 else
  88.                   gsm_state = 0;                 // Reset state machine
  89.                 break;
  90.                }
  91.       case 33: {
  92.                 if (tmp == 'R'){                 // We have 'R'
  93.                   response_rcvd = 1;             // We have "ERROR" response
  94.                   response = GSM_ERROR;          // Set reception flag
  95.                   responseID = response;         // Set response ID
  96.                 }
  97.                 gsm_state = 0;                   // Reset state machine
  98.                 break;
  99.                 }
  100. //________________________________________________ "On" or "Off" ____________________________________________________________________________________
  101.  
  102. //_________________________________________________ "On" ____________________________________________________________________________________________
  103.       case 41: {
  104.                 if (tmp >= '0' && tmp <= '9') {   // We have pin number, enable Laser x
  105.                   TM_BKPSRAM_Write8(tmp-0x30,0xAC);
  106.                   Laser_Control(tmp-0x30,LD_ON);
  107.                   delete_messages = 1;
  108.                   gsm_state = 0;
  109.                 }
  110.                 else
  111.                   gsm_state = 0;                 // Reset state machine
  112.                 break;
  113.                }
  114. //_________________________________________________ "Off" ___________________________________________________________________________________________
  115.       case 42: {
  116.                 if (tmp == 'f')                  // We have 'f', it could be "Off"
  117.                   gsm_state = 43;                // Expecting 'x' with value between 0-9
  118.                 else
  119.                   gsm_state = 0;                 // Reset state machine
  120.                 break;
  121.                }
  122.  
  123.        case 43: {
  124.                  if (tmp >= '0' && tmp <= '9')  { // We have pin number, disable Laser x
  125.                   TM_BKPSRAM_Write8(tmp-0x30,0x00);
  126.                   Laser_Control(tmp-0x30,LD_OFF);
  127.                   delete_messages = 1;
  128.                   gsm_state = 0;
  129.                  }
  130.                 else
  131.                   gsm_state = 0;                 // Reset state machine
  132.                 break;
  133.                }
  134. //________________________________________________ "UNREAD" _________________________________________________________________________________________
  135.        case 50: {
  136.                   if (tmp == 'N')
  137.                     gsm_state = 51;
  138.                   else
  139.                     gsm_state = 0;
  140.                   break;
  141.                  }
  142.        case 51: {
  143.                   if (tmp == 'R')
  144.                     gsm_state = 52;
  145.                   else
  146.                     gsm_state = 0;
  147.                   break;
  148.                  }
  149.        case 52: {
  150.                   if (tmp == 'E')
  151.                     gsm_state = 53;
  152.                   else
  153.                     gsm_state = 0;
  154.                   break;
  155.                  }
  156.        case 53: {
  157.                   if (tmp == 'A')
  158.                     gsm_state = 54;
  159.                   else
  160.                     gsm_state = 0;
  161.                   break;
  162.                  }
  163.        case 54: {
  164.                   if (tmp == 'D'){
  165.                     response_rcvd = 1;             // We have "UNREAD" response
  166.                     response = GSM_UNREAD;         // Set reception flag
  167.                     responseID = response;         // Set response ID
  168.                     Unread_flag = 1;
  169.                   }
  170.                   gsm_state = 0;
  171.                   break;
  172.                  }
  173. //_________________________________________"CREG" or "CMTI"__________________________________________________________________________________________
  174.         case 60: {
  175.                   if (tmp == 'R') {             // We have 'R', it could be "CREG"
  176.                      gsm_state = 61;
  177.                    }
  178.                    else if (tmp == 'M')
  179.                      gsm_state = 70;
  180.                    else
  181.                      gsm_state = 0;
  182.                    break;
  183.                  }
  184.  
  185.  
  186. //_____________________________________________________"CREG: 1,1" or "CREG 0,1"_____________________________________________________________________
  187.        case 61: {
  188.                   if (tmp == 'E')
  189.                     gsm_state=62;
  190.                   else
  191.                     gsm_state=0;
  192.                   break;
  193.                   }
  194.        case 62: {
  195.                   if (tmp == 'G')
  196.                     gsm_state=63;
  197.                   else
  198.                     gsm_state=0;
  199.                   break;
  200.                   }
  201.         case 63: {
  202.                    if (tmp == ':')
  203.                      gsm_state=64;
  204.                    else
  205.                     gsm_state=0;
  206.                    break;
  207.                   }
  208.         case 64: {
  209.                    if (tmp == ' ')
  210.                     gsm_state=65;
  211.                    else
  212.                     gsm_state=0;
  213.                    break;
  214.                   }
  215.         case 65: {
  216.                   if (tmp == '0' || tmp == '1') {
  217.                     gsm_state=66;
  218.                     gsm_reg_stat = 0;
  219.                   }
  220.                    else
  221.                     gsm_state=0;
  222.                    break;
  223.                   }
  224.         case 66: {
  225.                    if (tmp == ',') {
  226.                      gsm_state=67;
  227.                    }
  228.                    else
  229.                     gsm_state=0;
  230.                    break;
  231.                   }
  232.         case 67: {
  233.                    if (tmp == '1') {
  234.                     response_rcvd = 1;             // We have "CREG: 1,1" - NETWORK REGISTERED response
  235.                     response = GSM_REGISTERED;
  236.                     gsm_reg_stat = 1;
  237.                     responseID = response;         // Set response ID
  238.                    }
  239.                    else if (tmp == '2') {
  240.                     response_rcvd = 1;             // We have "CREG: 1,1" - ME is searching for GSM provider
  241.                     response = GSM_ERROR;
  242.                     gsm_reg_stat = 2;
  243.                     responseID = response;         // Set response ID
  244.                    }
  245.                    else if (tmp == '3') {
  246.                     response_rcvd = 1;             // We have "CREG: 1,3" - REGISTRATION DENIEDe
  247.                     response = GSM_ERROR;
  248.                     gsm_reg_stat = 3;
  249.                     responseID = response;         // Set response ID
  250.                    }
  251.                    if (tmp == '5') {
  252.                     response_rcvd = 1;             // We have "CREG: 1,1" - NETWORK REGISTERED in ROAMING response
  253.                     response = GSM_REGISTERED;
  254.                     gsm_reg_stat = 5;
  255.                     responseID = response;         // Set response ID
  256.                    }
  257.                    else {
  258.                     gsm_state=0;
  259.                     //gsm_reg_stat = 0;
  260.                    }
  261.                     break;
  262.                   }
  263. //_____________________________________________________"CMTI: "SM", x" ______________________________________________________________________________
  264.         case 70: {
  265.                    if (tmp == 'T') {
  266.                     gsm_state=71;
  267.                    }
  268.                    else
  269.                      gsm_state=0;
  270.                    break;
  271.                   }
  272.         case 71: {
  273.                    if (tmp == 'I')
  274.                     gsm_state=72;
  275.                    else
  276.                      gsm_state=0;
  277.                    break;
  278.                   }
  279.         case 72: {
  280.                    if (tmp == ':')
  281.                     gsm_state=73;
  282.                    else
  283.                      gsm_state=0;
  284.                    break;
  285.                   }
  286.         case 73: {
  287.                    if (tmp == ' ') {
  288.  
  289.                     gsm_state=74;
  290.                    }
  291.                    else
  292.                      gsm_state=0;
  293.                    break;
  294.                   }
  295.         case 74: {
  296.                    if (tmp == '"')
  297.                     gsm_state=75;
  298.                    else
  299.                      gsm_state=0;
  300.                    break;
  301.                   }
  302.         case 75: {
  303.                    if (tmp == 'S')
  304.                     gsm_state=76;
  305.                    else
  306.                      gsm_state=0;
  307.                    break;
  308.                   }
  309.         case 76: {
  310.                    if (tmp == 'M')
  311.                     gsm_state=77;
  312.                    else
  313.                      gsm_state=0;
  314.                    break;
  315.                   }
  316.         case 77: {
  317.                    if (tmp == '"')
  318.                     gsm_state=78;
  319.                    else
  320.                      gsm_state=0;
  321.                    break;
  322.                   }
  323.         case 78: {
  324.                    if (tmp == ',')
  325.                     gsm_state=79;
  326.                    else
  327.                      gsm_state=0;
  328.                    break;
  329.                   }
  330.         case 79: {
  331.                    if (tmp >= '0' && tmp <= '9') {
  332.                     laser_update_flag=1;
  333.                     response_rcvd = 1;             // We have "CMTI: "SM", x" - new message received
  334.                     response = NEW_MESSAGE;
  335.                     responseID = response;         // Set response ID
  336.                    }
  337.                    else
  338.                      gsm_state=0;
  339.                    break;
  340.                   }
  341. //_____________________________________________________"NO CARRIRER" ________________________________________________________________________________
  342.         case 80: {
  343.                    if (tmp == 'O')
  344.                      gsm_state=81;
  345.                    else
  346.                      gsm_state=0;
  347.                    break;
  348.                   }
  349.         case 81: {
  350.                    if (tmp == ' ')
  351.                      gsm_state=82;
  352.                    else
  353.                      gsm_state=0;
  354.                    break;
  355.                   }
  356.         case 82: {
  357.                    if (tmp == 'C')
  358.                      gsm_state=83;
  359.                    else
  360.                      gsm_state=0;
  361.                    break;
  362.                   }
  363.         case 83: {
  364.                    if (tmp == 'A')
  365.                      gsm_state=84;
  366.                    else
  367.                      gsm_state=0;
  368.                    break;
  369.                   }
  370.         case 84: {
  371.                    if (tmp == 'R')
  372.                      gsm_state=85;
  373.                    else
  374.                      gsm_state=0;
  375.                    break;
  376.                   }
  377.         case 85: {
  378.                    if (tmp == 'R')
  379.                      gsm_state=86;
  380.                    else
  381.                      gsm_state=0;
  382.                    break;
  383.                   }
  384.         case 86: {
  385.                    if (tmp == 'I')
  386.                      gsm_state=87;
  387.                    else
  388.                      gsm_state=0;
  389.                    break;
  390.                   }
  391.         case 87: {
  392.                    if (tmp == 'E')
  393.                      gsm_state=88;
  394.                    else
  395.                      gsm_state=0;
  396.                    break;
  397.                   }
  398.         case 88: {
  399.                   if (tmp == 'R') {
  400.                     response_rcvd = 1;             // We have "CREG: 1,1" - NETWORK REGISTERED response
  401.                     response = NO_CARRIER;
  402.                     responseID = response;         // Set response ID
  403.                   }
  404.                    else
  405.                      gsm_state=0;
  406.                    break;
  407.                   }
  408.  
  409.         default: {                                 // Unwanted character
  410.                 gsm_state = 0;                   // Reset state machine
  411.                }
  412.     }
  413. }
  414.  
  415. // custom handler for USART2 (GSM USART)
  416. void TM_USART2_ReceiveHandler(uint8_t c) {
  417.   GSM_Handler(c);
  418. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement