FaxProcess.c
上传用户:xhjmsc
上传日期:2019-09-13
资源大小:389k
文件大小:25k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1. #include "includeH.h"
  2. //**************************************************************************
  3. void  FaxRXProcess(void)
  4. {     
  5.       unsigned char ucFlashSttsOverflowCnt = 0;
  6.       unsigned char ucGeneralCount = 0;
  7.       unsigned char ucGeneralCnt = 0;
  8.       unsigned char ucRxIndex3 = 0;
  9.       unsigned char ucRxIndex2 = 0;
  10.       unsigned char ucRxIndex1 = 0;
  11.       unsigned char ucRxIndex0 = 0;
  12.       
  13.       unsigned int  wNextPageAddress = 0;
  14.       unsigned int  wPageAddress = 0;
  15.       unsigned int  wGeneralCount = 0;
  16.       unsigned int  wDataRearCount = 0;
  17.       FaxRxInit();
  18. /***************************************************************************/      
  19. //ATA     
  20.       
  21.       SendATcmdATA();                 //Connect
  22.       while (1)  //CONNECT(54) 0D 0A
  23.       {
  24.        ucRxIndex1 = gucUartRxCnt-3;//get array index
  25.         ucRxIndex0 = gucUartRxCnt-2;//get array index
  26.         if ((0x0d == aucUartRxBuf[ucRxIndex0]) && (0x54 == aucUartRxBuf[ucRxIndex1]))
  27.           break;
  28.         //if check time>min. 5S, Receive Fax error, program should be quit  
  29.         RxFaxTimeOverflowErrorQuit();
  30.       }
  31.       
  32.       Delay1500ms();  // delay 1.5S minimun 1 second
  33.       
  34.       SendATdataFTHCSI();    //If the final bit is 0, the modem will generates CONNECT message.
  35.       while (1)  //CONNECT(54) 0D 0A
  36.       {
  37.         ucRxIndex1 = gucUartRxCnt-3;
  38.         ucRxIndex0 = gucUartRxCnt-2;
  39.         if ((0x0d == aucUartRxBuf[ucRxIndex0]) && (0x54 == aucUartRxBuf[ucRxIndex1]))
  40.           break;
  41.         //if check time>min. 5S, Receive Fax error, progra should be quit  
  42.         RxFaxTimeOverflowErrorQuit();
  43.       }
  44.       
  45.       for (ucGeneralCount = 0; ucGeneralCount < 50; ucGeneralCount++)// delay 1.5S minimun 1 second
  46.       {
  47.          ATcmdDelay();  //50ms
  48.       }
  49.       SendATdataFTHDIS();//SendATdataFTHTSI(sizeof (FTHDIS)); a bug of Sep.18
  50.       
  51.       while (1)    //O K 0D 0A
  52.       {
  53.         ucRxIndex1 = gucUartRxCnt-3;
  54.         ucRxIndex0 = gucUartRxCnt-2;
  55.         if ((0x0d == aucUartRxBuf[ucRxIndex0]) && (0x4B == aucUartRxBuf[ucRxIndex1])) //K ==0x4b
  56.           break;
  57.         //if check time>min. 5S, Receive Fax error, progra should be quit  
  58.         RxFaxTimeOverflowErrorQuit();
  59.       }
  60.           
  61. //*
  62. //FRH  TSI (transmitting subscriber identification)        
  63.       SendATcmdFRH();  
  64.       while (1)    //Connect data.....OK 0D 0A
  65.       {
  66.         ucRxIndex1 = gucUartRxCnt-3;
  67.         ucRxIndex0 = gucUartRxCnt-2;
  68.         if ((0x0d == aucUartRxBuf[ucRxIndex0]) && (0x54 == aucUartRxBuf[ucRxIndex1])) //Connect
  69.           break;
  70.         if ((0x0d == aucUartRxBuf[ucRxIndex0]) && (0x52 == aucUartRxBuf[ucRxIndex1])) //No Carrier
  71.           break;
  72.         //if ((0x0d==aucUartRxBuf[ucRxIndex0])&&(0x4b==aucUartRxBuf[ucRxIndex1]))
  73.           //{ucFrhErrorStatus=0x03;break;}
  74.         //if check time>min. 5S, Receive Fax error, progra should be quit  
  75.         RxFaxTimeOverflowErrorQuit();
  76.       }//while
  77.       
  78.       for (ucGeneralCnt = 0;ucGeneralCnt < 5;ucGeneralCnt++)
  79.       {
  80.         if (gucFrhErrorStatus == 0x03 || (0x0d == aucUartRxBuf[ucRxIndex0]) && (0x52 == aucUartRxBuf[ucRxIndex1]))
  81.         {
  82.          SendATcmdSuffix();
  83.          ATcmdDelay();
  84.          ATcmdDelay();
  85.          ATcmdDelay();
  86.          SendATcmdPrefix();
  87.          ATcmdDelay();
  88.          SendATcmdSuffix();
  89.          ATcmdDelay();
  90.          ATcmdDelay();
  91.          ATcmdDelay();
  92.          Delay2000ms();//add at Jan. 16, 2007
  93.          FthCsiDis();
  94.          SendATcmdFRH();  
  95.          while (1)    //Connect data.....OK 0D 0A
  96.          {
  97.           ucRxIndex1 = gucUartRxCnt-3;
  98.           ucRxIndex0 = gucUartRxCnt-2;
  99.           if ((0x0d == aucUartRxBuf[ucRxIndex0]) && (0x54 == aucUartRxBuf[ucRxIndex1]))
  100.             break;
  101.           if ((0x0d == aucUartRxBuf[ucRxIndex0]) && (0x52 == aucUartRxBuf[ucRxIndex1]))
  102.             break;
  103.           //if check time>min. 5S, Receive Fax error, progra should be quit  
  104.           RxFaxTimeOverflowErrorQuit();
  105.          }//while
  106.         }//if
  107.         if ((0x0d == aucUartRxBuf[ucRxIndex0]) && (0x54 == aucUartRxBuf[ucRxIndex1]))
  108.         {
  109.           while (1)    
  110.           {
  111.            ucRxIndex1 = gucUartRxCnt-3;
  112.             ucRxIndex0 = gucUartRxCnt-2;
  113.             if ((0x0d == aucUartRxBuf[ucRxIndex0]) && (0x4B == aucUartRxBuf[ucRxIndex1]))
  114.               break;
  115.             if ((0x0d == aucUartRxBuf[ucRxIndex0]) && (0x52 == aucUartRxBuf[ucRxIndex1]))
  116.               break;
  117.             if ((0x13 == aucUartRxBuf[ucRxIndex0]) && (0xff == aucUartRxBuf[ucRxIndex1]))
  118.               {gucFrhErrorStatus=CNGFthOnlySendOneNSF;}
  119.             //if check time>min. 5S, Receive Fax error, progra should be quit  
  120.             RxFaxTimeOverflowErrorQuit();
  121.           }//while
  122.           if ((0x0d == aucUartRxBuf[ucRxIndex0]) && (0x52 == aucUartRxBuf[ucRxIndex1]))
  123.               continue;//Response is not OK, but NO Carrier. should Re FTH CSI and DIS
  124.           else
  125.               break;//break for cycle
  126.         }//if
  127.       }//for
  128.       ucRxIndex0 = gucUartRxCnt-25;
  129.       for (ucGeneralCnt = 0;ucGeneralCnt < 25;ucGeneralCnt++)
  130.       {FRHTSI[ucRxIndex1++] = aucUartRxBuf[ucRxIndex0++];}
  131.       
  132. //FRH DCS (digital command signal)
  133.       if (gucFrhErrorStatus != CNGFthOnlySendOneNSF)
  134.       {          
  135.         SendATcmdFRH(); 
  136.         while (1)    
  137.         {
  138.          ucRxIndex1 = gucUartRxCnt-3;
  139.           ucRxIndex0 = gucUartRxCnt-2;
  140.           if ((0x0d == aucUartRxBuf[ucRxIndex0]) && (0x54 == aucUartRxBuf[ucRxIndex1]))
  141.             break;
  142.           //if check time>min. 5S, Receive Fax error, progra should be quit  
  143.           RxFaxTimeOverflowErrorQuit();
  144.         }//while
  145.         if (gucFrhErrorStatus == 0x03) return; //add at Mar. 16, 2007.
  146.       
  147.         while (1)    
  148.         {
  149.          ucRxIndex1 = gucUartRxCnt-3;
  150.           ucRxIndex0 = gucUartRxCnt-2;
  151.           if ((0x0d == aucUartRxBuf[ucRxIndex0]) && (0x4B == aucUartRxBuf[ucRxIndex1]))
  152.             break;
  153.           //if check time>min. 5S, Receive Fax error, progra should be quit  
  154.           RxFaxTimeOverflowErrorQuit();
  155.         }//while 
  156.         if (gucFrhErrorStatus == 0x03) return; //add at Mar. 16, 2007.     
  157.       }//if
  158.       
  159.       //if (ucFrhErrorStatus==03) return; //add at Mar. 16, 2007.
  160. //*/
  161. //FRM TCF (training check)
  162.       SendATcmdFRM();
  163.       while (1)    
  164.       {
  165.        ucRxIndex1 = gucUartRxCnt-3;
  166.         ucRxIndex0 = gucUartRxCnt-2;
  167.         if ((0x0d == aucUartRxBuf[ucRxIndex0]) && (0x54 == aucUartRxBuf[ucRxIndex1]))
  168.           break;
  169.         //if check time>min. 5S, Receive Fax error, progra should be quit  
  170.         RxFaxTimeOverflowErrorQuit();
  171.       }
  172.       if (gucFrhErrorStatus == 0x03) return;
  173.       //Carrier==Training check     
  174. ///* //add the No carrier check a bug of Dec.25,2006     
  175.       while (1)    
  176.       {
  177.         ucRxIndex1 = gucUartRxCnt-3;
  178.         ucRxIndex0 = gucUartRxCnt-2;
  179.         if ((aucUartRxBuf[ucRxIndex0] == 0x0d)&&(aucUartRxBuf[ucRxIndex1] == 0x52))//4B Result code is not OK, but No carrier
  180.           break;
  181.         //if check time>min. 5S, Receive Fax error, progra should be quit  
  182.         RxFaxTimeOverflowErrorQuit();
  183.       }
  184.       if (gucFrhErrorStatus == 0x03) return;      
  185. //*/   
  186. //Training check over   
  187. //FTHCFR  (confirmation to receive)
  188.       SendATcmdFTH();
  189.       while (1)    //Connect
  190.       {
  191.        ucRxIndex1=gucUartRxCnt-3;
  192.         ucRxIndex0=gucUartRxCnt-2;
  193.         if ((0x0d==aucUartRxBuf[ucRxIndex0])&&(0x54==aucUartRxBuf[ucRxIndex1]))
  194.           break;
  195.         //if check time>min. 5S, Receive Fax error, progra should be quit  
  196.         RxFaxTimeOverflowErrorQuit();
  197.       }
  198.       if (gucFrhErrorStatus==0x03) return;
  199.       
  200.       for (ucGeneralCount=0; ucGeneralCount<30; ucGeneralCount++)// delay 1.5S minimun 1 second
  201.       {
  202.          ATcmdDelay();  //50ms
  203.       }
  204.       
  205.       SendATdataFTHCFR();
  206.       while (1)    
  207.       {
  208.        ucRxIndex1=gucUartRxCnt-3;
  209.         ucRxIndex0=gucUartRxCnt-2;
  210.         if ((0x0d==aucUartRxBuf[ucRxIndex0])&&(0x4B==aucUartRxBuf[ucRxIndex1]))
  211.           break;
  212.         //if check time>min. 5S, Receive Fax error, progra should be quit  
  213.         RxFaxTimeOverflowErrorQuit();
  214.       }  
  215.       if (gucFrhErrorStatus==0x03) return;
  216.       
  217. //FRM pageimage
  218.       //SendATcmdFRM146();
  219.       SendATcmdFRM();
  220.            
  221.       wGeneralCount=0;//63;
  222.       ucGeneralCnt=0;//28;
  223.       //wPageAddress=0;
  224.       gucFrhErrorStatus=0;
  225.       gucUartRxCnt=0;
  226.       gpucQueueRear=0;
  227.       gpucQueueFront=0;
  228.       gdwRxQueueRearCnt=0;
  229.       gdwRxQueueFrontCnt=0;
  230.       //ZERO_ADDRESS();
  231.       wPageAddress=cstFaxRxBufStartPage;//+1;//Block 19 Modify at Jan. 6, 2007
  232.      
  233.       do{
  234.  wNextPageAddress=wPageAddress+64;
  235.  wPageAddress=CalNextPageAddress(wPageAddress);
  236. }while(wNextPageAddress==wPageAddress);
  237.            //erase next block
  238.       if (wPageAddress%64==0)
  239.       {
  240.          ROW_ADDRESS_LOW=wPageAddress & 0XFF;
  241.          ROW_ADDRESS_HIGH=(wPageAddress>>8) & 0XFF; 
  242.          ERASE_ONE_BLOCK();
  243.       }
  244.       wPageAddress=cstFaxRxBufStartPage+1;
  245. //COMMAND
  246.               //Flash_Reset();
  247.               COMMAND_VAL=0X80;
  248.           COMMAND_LATCH_INTO();
  249. //ADDRESS
  250.           ADDRESS_VALUE=0;//COLUMN_ADDRESS_HIGH; //#0X00
  251.           ADDRESS_LATCH_INTO();
  252.           ADDRESS_VALUE=0;//COLUMN_ADDRESS_HIGH; //#0X00
  253.           ADDRESS_LATCH_INTO();
  254.           ADDRESS_VALUE=wPageAddress & 0xff; //#0X00
  255.           ADDRESS_LATCH_INTO();
  256.           ADDRESS_VALUE=(wPageAddress>>8) & 0xff; //#0X00
  257.           ADDRESS_LATCH_INTO();
  258.           FLASH_CON_PORT_OUT &=~ ALE;
  259.           //CALL DELAY_100US
  260.           //for(i=0;i<0xff;i++);
  261.           DATA_PORT_OUT_INITIAL; //MCU OUTPUT,MCU WRITE A DATA TO FLASH
  262. //Pageimage     
  263.       while (1)    
  264.       {
  265.        //if ((0x10 == aucUartRxBuf[ucRxIndex1]) && (0x03 == aucUartRxBuf[ucRxIndex0]))//terminate stream 10 03
  266.        //if ((0x10 == aucUartRxBuf[gucUartRxCnt-1]) && (0x03 == aucUartRxBuf[gucUartRxCnt]))//terminate stream 10 03
  267.              //break;
  268.           //if check time>min. 5S, Receive Fax error, progra should be quit  
  269.           RxFaxTimeOverflowErrorQuit();
  270.           ucRxIndex1=gucUartRxCnt-3;
  271.           ucRxIndex0=gucUartRxCnt-2;
  272.           if ((aucUartRxBuf[ucRxIndex0]==0x0d)&&(aucUartRxBuf[ucRxIndex1]==0x52))//4B  Result code is not OK, but No carrier
  273.              {
  274.                   
  275.                  PageImageEndProcess();
  276.                  
  277.                  if (gucFrhErrorStatus==0x03) break; //add at Mar. 16, 2007.
  278.                  
  279.                  //More than two pages process //add at Dec.27,2006
  280.                  ucRxIndex3=gucUartRxCnt-38;
  281.                  ucRxIndex2=gucUartRxCnt-37;
  282.                  ucRxIndex1=gucUartRxCnt-36;
  283.                  ucRxIndex0=gucUartRxCnt-35;
  284.                  if ((aucUartRxBuf[ucRxIndex0]==0x05)&&(aucUartRxBuf[ucRxIndex1]==0x35)&&
  285.                      (aucUartRxBuf[ucRxIndex2]==0x4f)&&(aucUartRxBuf[ucRxIndex3]==0x13))
  286.                   {
  287.                     SendATcmdFRM();
  288.                   }
  289. // multi pages over flag                 
  290.                  if ((aucUartRxBuf[ucRxIndex0]==0x66)&&(aucUartRxBuf[ucRxIndex1]==0x33)&&
  291.                      (aucUartRxBuf[ucRxIndex2]==0x2f)&&(aucUartRxBuf[ucRxIndex3]==0x13))
  292.                   {  
  293.                     break;
  294.                   }
  295. // one page over flag                 
  296.                  if ((aucUartRxBuf[ucRxIndex0]==0x2f)&&(aucUartRxBuf[ucRxIndex1]==0x13))
  297.                     { 
  298.                       break;
  299.                     }
  300.              }
  301.           if (gdwRxQueueRearCnt-gdwRxQueueFrontCnt>32)
  302.           {
  303.               if (gdwRxQueueRearCnt-gdwRxQueueFrontCnt>254)   // if data num is more than the buffer space, error happan.
  304.                 {
  305.                   while (1);//gucGeneralStatus |= FAXRXERROR;
  306.                 }
  307.               if (wGeneralCount++<64) // 32*64=2048
  308.               {
  309.                 for (ucGeneralCnt=0;ucGeneralCnt<32;ucGeneralCnt++)
  310.                 {
  311.                  FLASH_CON_PORT_OUT&=~WE;
  312.                DATA_PORT_OUT=aucUartRxBuf[gpucQueueFront++];
  313.                gdwRxQueueFrontCnt++;               //The total num that is writed to flash
  314.                FLASH_CON_PORT_OUT |= WE;
  315.               }
  316.         //ucGeneralCnt=0;
  317.               }
  318.               else
  319.               { 
  320.                 wGeneralCount=0;
  321.                 
  322.                 COMMAND_VAL=0X10; //10H INITIATES PROGRAM
  323.             COMMAND_LATCH_INTO();
  324.             READ_STATUS();
  325.                 ucFlashSttsOverflowCnt=0;
  326.             while (FLASH_STATUS==1&&(ucFlashSttsOverflowCnt++)<2)
  327.           {
  328.            ;//ERASE_ONE_BLOCK();
  329.            //PROGRAM_ONE_PAGE();
  330.           }
  331.                 if (wPageAddress<2559) wPageAddress++; //add at Jan. 18, 2007
  332.              do{
  333.              wNextPageAddress=wPageAddress+64;
  334.              wPageAddress=CalNextPageAddress(wPageAddress);
  335.              }while(wNextPageAddress==wPageAddress);
  336.            if (wPageAddress%64==0)
  337.                {
  338.                   ROW_ADDRESS_LOW=wPageAddress & 0XFF;
  339.                   ROW_ADDRESS_HIGH=(wPageAddress>>8) & 0XFF; 
  340.                   ERASE_ONE_BLOCK();
  341.                }
  342.               //Flash_Reset();
  343.               COMMAND_VAL=0X80;
  344.           COMMAND_LATCH_INTO();
  345. //ADDRESS
  346.           ADDRESS_VALUE=0;//COLUMN_ADDRESS_HIGH; //#0X00
  347.           ADDRESS_LATCH_INTO();
  348.           ADDRESS_VALUE=0;//COLUMN_ADDRESS_HIGH; //#0X00
  349.           ADDRESS_LATCH_INTO();
  350.           ADDRESS_VALUE=wPageAddress & 0xff; //#0X00
  351.           ADDRESS_LATCH_INTO();
  352.           ADDRESS_VALUE=(wPageAddress>>8) & 0xff; //#0X00
  353.           ADDRESS_LATCH_INTO();
  354.           FLASH_CON_PORT_OUT &=~ ALE;
  355.           //CALL DELAY_100US
  356.           //for(i=0;i<0xff;i++);
  357.           DATA_PORT_OUT_INITIAL; //MCU OUTPUT,MCU WRITE A DATA TO FLASH
  358.             
  359.               }//else
  360.           }//if
  361.       }//while 
  362.       
  363.       if (gucFrhErrorStatus==0x03) return; //add at Mar. 16, 2007.
  364. //FRH DNC (disconnect)   //Modity at Dec. 28,2006. DNC is the over flag
  365.       SendATcmdFRH();           
  366.       
  367.       while (1)    
  368.       {
  369.        ucRxIndex1=gucUartRxCnt-3;
  370.         ucRxIndex0=gucUartRxCnt-2;
  371.         if ((0x0d==aucUartRxBuf[ucRxIndex0])&&(0x54==aucUartRxBuf[ucRxIndex1]))
  372.           break;
  373.         //if check time>min. 5S, Receive Fax error, progra should be quit  
  374.         RxFaxTimeOverflowErrorQuit();
  375.       }
  376.       
  377.       if (gucFrhErrorStatus==0x03) return; //add at Mar. 16, 2007.
  378.       
  379.       while (1)    
  380.       {
  381.        ucRxIndex1=gucUartRxCnt-3;
  382.         ucRxIndex0=gucUartRxCnt-2;
  383.         if ((0x0d==aucUartRxBuf[ucRxIndex0])&&(0x4B==aucUartRxBuf[ucRxIndex1]))
  384.           break;
  385.         //if check time>min. 5S, Receive Fax error, progra should be quit  
  386.         RxFaxTimeOverflowErrorQuit();
  387.       } 
  388.       
  389.       if (gucFrhErrorStatus==0x03) return; //add at Mar. 16, 2007.
  390.       
  391. //FaxRearDataProcess      
  392.         while (gdwRxQueueRearCnt-gdwRxQueueFrontCnt>=32)
  393.           {
  394.               if (gdwRxQueueRearCnt-gdwRxQueueFrontCnt>254)   // if data num is more than the buffer space, error happan.
  395.                 {
  396.                   gucGeneralStatus |= FAXRXERROR;
  397.                 }
  398.               if (wGeneralCount++<64) // 32*64=2048
  399.               {
  400.                 for (ucGeneralCnt=0;ucGeneralCnt<32;ucGeneralCnt++)
  401.                 {
  402.                  FLASH_CON_PORT_OUT&=~WE;
  403.                DATA_PORT_OUT=aucUartRxBuf[gpucQueueFront++];
  404.                gdwRxQueueFrontCnt++;               //The total num that is writed to flash
  405.                FLASH_CON_PORT_OUT |= WE;
  406.               }
  407.               }
  408.               else
  409.               { 
  410.                 wGeneralCount=0;
  411.                 
  412.                 COMMAND_VAL=0X10; //10H INITIATES PROGRAM
  413.             COMMAND_LATCH_INTO();
  414.             READ_STATUS();
  415.                 ucFlashSttsOverflowCnt=0;
  416.             while (FLASH_STATUS==1&&(ucFlashSttsOverflowCnt++)<2)
  417.           {
  418.            ;//ERASE_ONE_BLOCK();
  419.            //PROGRAM_ONE_PAGE();
  420.           }
  421.                 if (wPageAddress<2559) wPageAddress++;//add at Jan. 18, 2007
  422.              do{
  423.              wNextPageAddress=wPageAddress+64;
  424.              wPageAddress=CalNextPageAddress(wPageAddress);
  425.              }while(wNextPageAddress==wPageAddress);
  426.            if (wPageAddress%64==0)
  427.                {
  428.                   ROW_ADDRESS_LOW=wPageAddress & 0XFF;
  429.                   ROW_ADDRESS_HIGH=(wPageAddress>>8) & 0XFF; 
  430.                   ERASE_ONE_BLOCK();
  431.                }
  432.               COMMAND_VAL=0X80;
  433.           COMMAND_LATCH_INTO();
  434. //ADDRESS
  435.           ADDRESS_VALUE=0;//COLUMN_ADDRESS_LOW; //#0X00
  436.           ADDRESS_LATCH_INTO();
  437.           ADDRESS_VALUE=0;//COLUMN_ADDRESS_LOW; //#0X00
  438.           ADDRESS_LATCH_INTO();
  439.           ADDRESS_VALUE=wPageAddress & 0xff; //#0X00
  440.           ADDRESS_LATCH_INTO();
  441.           ADDRESS_VALUE=(wPageAddress>>8) & 0xff; //#0X00
  442.           ADDRESS_LATCH_INTO();
  443.           FLASH_CON_PORT_OUT &=~ ALE;
  444.           //CALL DELAY_100US
  445.           //for(i=0;i<0xff;i++);
  446.           DATA_PORT_OUT_INITIAL; //MCU OUTPUT,MCU WRITE A DATA TO FLASH
  447.             
  448.               }//else
  449.           }//while
  450.  //***************************************     
  451.       wDataRearCount=gdwRxQueueRearCnt-gdwRxQueueFrontCnt;      
  452.       if (wDataRearCount)//wDataRearCount<2048-wGeneralCount*ucGeneralCnt)
  453.       {
  454.          //for (ucGeneralCnt=0;ucGeneralCnt<wGeneralCount;ucGeneralCnt++)
  455.          for (ucGeneralCnt=0;ucGeneralCnt<wDataRearCount;ucGeneralCnt++)
  456.           {
  457.             FLASH_CON_PORT_OUT&=~WE;
  458.          DATA_PORT_OUT=aucUartRxBuf[gpucQueueFront++];
  459.          gdwRxQueueFrontCnt++;
  460.          FLASH_CON_PORT_OUT |= WE;
  461.         }
  462.         
  463.         wGeneralCount=0;
  464.         COMMAND_VAL=0X10; //10H INITIATES PROGRAM
  465.       COMMAND_LATCH_INTO();
  466.       READ_STATUS();
  467.         ucFlashSttsOverflowCnt=0;
  468.       if(FLASH_STATUS==1&&(ucFlashSttsOverflowCnt++)<2)
  469.     {
  470.      ;//ERASE_ONE_BLOCK();
  471.      //PROGRAM_ONE_PAGE();
  472.     }
  473.       }//if  
  474.       
  475.       
  476.       
  477.       
  478.       SendATcmdH0();
  479.      
  480.       while (1)    
  481.       {
  482.        ucRxIndex1=gucUartRxCnt-3;
  483.         ucRxIndex0=gucUartRxCnt-2;
  484.         if ((0x0d==aucUartRxBuf[ucRxIndex0])&&(0x4B==aucUartRxBuf[ucRxIndex1]))
  485.           break;
  486.         //if check time>min. 5S, Receive Fax error, progra should be quit  
  487.         RxFaxTimeOverflowErrorQuit();
  488.       }
  489.       
  490.       if (gucFrhErrorStatus==0x03) return; //add at Mar. 16, 2007.   
  491.       ATcmdDelay();
  492.       ATcmdDelay();
  493.       ATcmdDelay();
  494.       ATcmdDelay();
  495.       
  496.       SendATcmdH0();
  497.       
  498.       while (1)    
  499.       {
  500.        ucRxIndex1=gucUartRxCnt-3;
  501.         ucRxIndex0=gucUartRxCnt-2;
  502.         if ((0x0d==aucUartRxBuf[ucRxIndex0])&&(0x4B==aucUartRxBuf[ucRxIndex1]))
  503.           break;
  504.         //if check time>min. 5S, Receive Fax error, progra should be quit  
  505.         RxFaxTimeOverflowErrorQuit();
  506.       }
  507.       if (gucFrhErrorStatus==0x03) return; //add at Mar. 16, 2007.   
  508.       ATcmdDelay();
  509.       ATcmdDelay();
  510.       ATcmdDelay();
  511.       ATcmdDelay();
  512.       ATcmdDelay();
  513.       ATcmdDelay();
  514.       ATcmdDelay();
  515.       ATcmdDelay();
  516. //AT Fclass0
  517.      
  518.       SendATcmdFCLASS0();
  519.       ATcmdDelay();
  520.       ATcmdDelay();
  521.       ATcmdDelay();
  522.       ATcmdDelay();
  523. //AT      
  524.       SendATcmdPrefix();
  525.       ATcmdDelay();
  526.       SendATcmdSuffix();
  527.       ATcmdDelay();
  528.       ATcmdDelay();
  529.       ATcmdDelay();
  530. //AT     
  531.       SendATcmdPrefix();
  532.       ATcmdDelay();
  533.       SendATcmdSuffix();
  534.       ATcmdDelay();
  535.       ATcmdDelay();
  536.       ATcmdDelay();
  537. //AT    
  538.       SendATcmdPrefix();
  539.       ATcmdDelay();
  540.       SendATcmdSuffix();
  541.       ATcmdDelay();
  542.       ATcmdDelay();
  543.       ATcmdDelay();
  544.       
  545.       SendATconfigFE0EndofRX();
  546.       ATcmdDelay();
  547.       ATcmdDelay();
  548.       ATcmdDelay();
  549.       ATcmdDelay();
  550.       
  551.       SendATconfigS7RX();
  552.       ATcmdDelay();
  553.       ATcmdDelay();
  554.       ATcmdDelay();
  555.       ATcmdDelay();
  556.       
  557.       SendATconfigS0RX();
  558.       ATcmdDelay();
  559.       ATcmdDelay();
  560.       ATcmdDelay();
  561.       ATcmdDelay();
  562.             
  563.       
  564.  
  565. //***************************************/     
  566.       //gucRxTxFlag = DTERX;// set Rx Tx flag
  567.       _NOP();
  568.       gwPageAddress = wPageAddress;
  569. /*      
  570.       while (1)
  571.      {
  572.         SendATcmdModemSoftReset();
  573.         ATcmdDelay();
  574.         ATcmdDelay();
  575.       
  576.       ucRxIndex1=gucUartRxCnt-3;
  577.       ucRxIndex0=gucUartRxCnt-2;
  578.       if ((0x0d==aucUartRxBuf[ucRxIndex0])&&(0x4B==aucUartRxBuf[ucRxIndex1]))
  579.         {break;}
  580.      }//while
  581. */
  582.           
  583. }//FaxRXProcess
  584. void FaxRxInit(void)
  585. {
  586.       SendATconfigFS0();
  587.       ATcmdDelay();
  588.       ATcmdDelay();
  589.       ATcmdDelay();
  590. //AT      
  591.       SendATcmdPrefix();
  592.       ATcmdDelay();
  593.       SendATcmdSuffix();
  594.       ATcmdDelay();
  595.       ATcmdDelay();
  596.       ATcmdDelay();
  597.       
  598.       SendATconfigS7();
  599.       ATcmdDelay();
  600.       ATcmdDelay();
  601.       ATcmdDelay();
  602.       
  603.       SendATconfigX4M1();
  604.       ATcmdDelay();
  605.       ATcmdDelay();
  606.       ATcmdDelay();
  607.       
  608.       SendATcmdFCLASS();
  609.       ATcmdDelay();
  610.       ATcmdDelay();
  611.       ATcmdDelay();
  612. //AT
  613.       SendATcmdPrefix();
  614.       ATcmdDelay();
  615.       SendATcmdSuffix();
  616.       ATcmdDelay();
  617.       ATcmdDelay();
  618.       ATcmdDelay();
  619.       
  620.       SendATcmdFCLASS();
  621.       ATcmdDelay();
  622.       ATcmdDelay();
  623.       ATcmdDelay();
  624. //AT
  625.       SendATcmdPrefix();
  626.       ATcmdDelay();
  627.       SendATcmdSuffix();
  628.       ATcmdDelay();
  629.       ATcmdDelay();
  630.       ATcmdDelay();
  631. void PageImageEndProcess(void)
  632. {   
  633.       unsigned char ucRxIndex1=0,ucRxIndex0=0;
  634. //FRHEOP (end of procedure)
  635.       SendATcmdFRH();
  636.       //ATcmdDelay();
  637.       
  638.       while (1)    
  639.       {
  640.        ucRxIndex1=gucUartRxCnt-3;
  641.         ucRxIndex0=gucUartRxCnt-2;
  642.         if ((0x0d==aucUartRxBuf[ucRxIndex0])&&(0x54==aucUartRxBuf[ucRxIndex1]))
  643.           break;
  644.         //if check time>min. 5S, Receive Fax error, progra should be quit  
  645.         RxFaxTimeOverflowErrorQuit();
  646.       }//while
  647.       
  648.       if (gucFrhErrorStatus==0x03) return; //add at Mar. 16, 2007.
  649.       
  650.       while (1)    
  651.       {
  652.        ucRxIndex1=gucUartRxCnt-3;
  653.         ucRxIndex0=gucUartRxCnt-2;
  654.         if ((0x0d==aucUartRxBuf[ucRxIndex0])&&(0x4B==aucUartRxBuf[ucRxIndex1]))
  655.           break;
  656.         //if check time>min. 5S, Receive Fax error, progra should be quit  
  657.         RxFaxTimeOverflowErrorQuit();
  658.       }
  659.       
  660.       if (gucFrhErrorStatus==0x03) return; //add at Mar. 16, 2007. 
  661.                
  662. //FTHMCF  (message confirmation)
  663.       SendATcmdFTH();
  664.       while (1)    
  665.       {
  666.        ucRxIndex1=gucUartRxCnt-3;
  667.         ucRxIndex0=gucUartRxCnt-2;
  668.         if ((0x0d==aucUartRxBuf[ucRxIndex0])&&(0x54==aucUartRxBuf[ucRxIndex1]))
  669.           break;
  670.         //if check time>min. 5S, Receive Fax error, progra should be quit  
  671.         RxFaxTimeOverflowErrorQuit();
  672.       }
  673.       
  674.       if (gucFrhErrorStatus == 0x03) return; //add at Mar. 16, 2007.
  675.       
  676.       Delay1500ms();  // delay 1.5S minimun 1 second
  677.       SendATdataFTHMCF();
  678.       while (1)    
  679.       {
  680.        ucRxIndex1=gucUartRxCnt-3;
  681.         ucRxIndex0=gucUartRxCnt-2;
  682.         if ((0x0d==aucUartRxBuf[ucRxIndex0])&&(0x4B==aucUartRxBuf[ucRxIndex1]))
  683.           break;
  684.         //if check time>min. 5S, Receive Fax error, progra should be quit  
  685.         RxFaxTimeOverflowErrorQuit();
  686.       } 
  687.       
  688.       if (gucFrhErrorStatus==0x03) return; //add at Mar. 16, 2007.
  689. }
  690. void FRHDncProcess(void)
  691. {
  692.  ;
  693. }
  694. void FthCsiDis(void)
  695. {
  696.       unsigned char ucRxIndex1=0,ucRxIndex0=0,
  697.                     ucGeneralCount=0;
  698. //FTH
  699.       SendATcmdFTH();
  700.       while (1)  //CONNECT(54) 0D 0A
  701.       {
  702.        ucRxIndex1=gucUartRxCnt-3;
  703.         ucRxIndex0=gucUartRxCnt-2;
  704.         if ((0x0d==aucUartRxBuf[ucRxIndex0])&&(0x54==aucUartRxBuf[ucRxIndex1]))
  705.           break;
  706.         //if check time>min. 5S, Receive Fax error, progra should be quit  
  707.         RxFaxTimeOverflowErrorQuit();
  708.       }
  709.       if (gucFrhErrorStatus==0x03) return; //add at Mar. 16, 2007.
  710.       
  711.       Delay1500ms();  // delay 1.5S minimun 1 second
  712.       
  713.       SendATdataFTHCSI();    //The final bit is 0. The modem will generates CONNECT message.
  714.       while (1)  //CONNECT(54) 0D 0A
  715.       {
  716.         ucRxIndex1=gucUartRxCnt-3;
  717.         ucRxIndex0=gucUartRxCnt-2;
  718.         if ((0x0d==aucUartRxBuf[ucRxIndex0])&&(0x54==aucUartRxBuf[ucRxIndex1]))
  719.           break;
  720.         //if check time>min. 5S, Receive Fax error, progra should be quit  
  721.         RxFaxTimeOverflowErrorQuit();
  722.       }
  723.       if (gucFrhErrorStatus==0x03) return; //add at Mar. 16, 2007.
  724.       
  725.       for (ucGeneralCount=0; ucGeneralCount<50; ucGeneralCount++)// delay 1.5S minimun 1 second
  726.       {
  727.          ATcmdDelay();  //50ms
  728.       }
  729.       SendATdataFTHDIS();//SendATdataFTHTSI(sizeof (FTHDIS)); a bug of Sep.18
  730.       
  731.       while (1)    //O K 0D 0A
  732.       {
  733.         ucRxIndex1=gucUartRxCnt-3;
  734.         ucRxIndex0=gucUartRxCnt-2;
  735.         if ((0x0d==aucUartRxBuf[ucRxIndex0])&&(0x4B==aucUartRxBuf[ucRxIndex1])) //K ==0x4b
  736.           break;
  737.         //if check time>min. 5S, Receive Fax error, progra should be quit  
  738.         RxFaxTimeOverflowErrorQuit();
  739.       }
  740.       
  741.       if (gucFrhErrorStatus==0x03) return; //add at Mar. 16, 2007.