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

传真(Fax)编程

开发平台:

C/C++

  1. /************************************************
  2. Description: 
  3.       Send the received fax raw data to PC via MAX232
  4.       3G 2-dimensional Data Format Recommendation T.4
  5. Input:
  6.       none
  7. Output:
  8.       none
  9. Update:
  10.       2006.11.02  Bryan      function header     create
  11. ************************************************/
  12. #include "includeH.h"
  13. void  FaxData2PCFromSoftUart(void) // send the received fax data to PC via MAX232
  14. {     
  15.       unsigned char ucFlashColumnAddCnt=0,
  16.                     ucRxIndex=0,ucBlockCnt=0;
  17.       unsigned char ucGeneralCnt=0;
  18.       unsigned int wNewFaxHead=0, wNewFaxRear=0,
  19.                    wNextPageAddress=0,wPageAddress=0,
  20.                    wGeneralCnt=0;
  21.       //ucGeneralCnt=2;
  22.       //ZERO_ADDRESS();
  23.       //read rear pointer and read front pointer
  24.       //if RearAddress-FrontAddress!=0
  25.       //   transfer and front++
  26.       //else
  27.       //   transfer over
  28.       MODEM_BUS_CON_PORT |= SOFT_UART_2_PC;
  29.       ReadLastFaxRearPointer();//get gwRearPointerAddress and gwPageAddress
  30.       //ReadLast16BytesFromFlashMemoryArea(cstFaxRearPointerTableStartBlockNum,cstFaxRearPointerTableOverBlockNum);
  31.       wNewFaxRear=gwPageAddress;
  32.       ReadLastFaxFrontPointer();//get gwFrontPointerAddress, gwPageAddress, 
  33.                                 //gwFrontPointerAddress and gwColumnAddress
  34.       gwPageAddress++;           //add Dec.19, 2006
  35.       do{
  36.    wNextPageAddress=gwPageAddress+64;
  37.    wPageAddress=CalNextPageAddress(wPageAddress);
  38. }while(wNextPageAddress==wPageAddress);
  39.       wNewFaxHead=gwPageAddress;
  40.       if (wNewFaxHead<wNewFaxRear)//(wNewFaxHead!=wNewFaxRear)//modify Dec.20,2006
  41.       {
  42.          
  43.       for (wPageAddress=wNewFaxHead;wPageAddress<=wNewFaxRear;)//wNewFaxHead
  44.       {
  45.         
  46.         ROW_ADDRESS_LOW = wPageAddress & 0xff;
  47.         ROW_ADDRESS_HIGH = (wPageAddress>>8) & 0xff;
  48.         for (ucFlashColumnAddCnt = 0;ucFlashColumnAddCnt < 8;ucFlashColumnAddCnt++)//8*256=2048
  49.         {
  50.     //8 * 256 == 2048 Bytes 2^4*2^8 12bit column address HighColumnAddr:0~8
  51.             //total 8*256B+64B=2K+64B
  52.     COLUMN_ADDRESS_HIGH=ucFlashColumnAddCnt;
  53.     READ_256_BYTE();//read 256 Byte to aucUartRxBuf[256]
  54.     for (wGeneralCnt=0;wGeneralCnt<256;wGeneralCnt++)//
  55.     {
  56. SoftUartTxOneFrame(aucUartRxBuf[wGeneralCnt]);
  57. if (aucUartRxBuf[wGeneralCnt-1] == 0xfb && aucUartRxBuf[wGeneralCnt-2] == 0x13 && aucUartRxBuf[wGeneralCnt-3] == 0xff)
  58.   {_NOP();break;}             
  59.     }//third for
  60.     if (aucUartRxBuf[wGeneralCnt-1] == 0xfb && aucUartRxBuf[wGeneralCnt-2] == 0x13 && aucUartRxBuf[wGeneralCnt-3] == 0xff)
  61.   break;        
  62.         }//second for
  63.         
  64.        if (aucUartRxBuf[wGeneralCnt-1] == 0xfb && aucUartRxBuf[wGeneralCnt-2] == 0x13 && aucUartRxBuf[wGeneralCnt-3] == 0xff)//pageimage over
  65.           {                                                 
  66.             ATcmdDelay();// a bug of Dec.23,2006 FF 10 00 0E // receive data delay(if not, can't receive 0x10 0x03)
  67.             if ((gwGeneralPageAddress>>6) >=cstFaxFrontPointerTableOverBlockNum)
  68.            {
  69.             for (ucBlockCnt=0;ucBlockCnt<4;ucBlockCnt++)
  70.             {
  71.                  wPageAddress=(cstFaxFrontPointerTableStartBlockNum+ucBlockCnt)<<6;
  72.           ROW_ADDRESS_LOW=wPageAddress & 0XFF;
  73.           ROW_ADDRESS_HIGH=(wPageAddress>>8) & 0XFF; 
  74.           ERASE_ONE_BLOCK();
  75.             }
  76.             gwGeneralPageAddress=cstFaxFrontPointerTableStartPage;
  77.             gwColumnAddress=0;
  78.            }
  79.            
  80.             
  81.                 
  82.             ucRxIndex=0; //write Fax Rear Pointer
  83.             aucUartRxBuf[ucRxIndex++]=wPageAddress & 0xff;
  84.             aucUartRxBuf[ucRxIndex++]=(wPageAddress>>8) & 0xff;
  85.             for(ucGeneralCnt=0;ucGeneralCnt<14;ucGeneralCnt++)
  86.             {
  87.               aucUartRxBuf[ucRxIndex++] = 0x55;
  88.             }
  89.             Write16Bytes2FlashMemoryArea();
  90.             if (gwColumnAddress<2096)
  91.             {
  92.             if (gwColumnAddress<2048)
  93.  gwColumnAddress+=512;
  94.             else
  95.  gwColumnAddress+=16;
  96.             }
  97.             else
  98.                 {
  99.                  gwColumnAddress=0;
  100.                  if (gwGeneralPageAddress<=959)gwGeneralPageAddress++;
  101.                  else
  102.                    gwGeneralPageAddress=704;
  103.                 }
  104.             wPageAddress++;
  105.             if(wPageAddress==0)
  106.                wPageAddress+=2560;//Mar. 1, 20007
  107.             do{
  108.       wNextPageAddress=wPageAddress+64;
  109.       wPageAddress=CalNextPageAddress(wPageAddress);
  110.       }while(wNextPageAddress==wPageAddress);
  111.              //ReadLastFaxFrontPointer();//read next write fax front pointer addr    //delete at Jan. 19, 2007
  112.             continue;//break; a bug of Dec. 12,2006
  113.           }
  114.           wPageAddress++;
  115.           if(wPageAddress==0)
  116.                wPageAddress+=2560;//Mar. 1, 20007
  117.             do{
  118.       wNextPageAddress=wPageAddress+64;//wNextPageAddress=gwPageAddress+64;
  119.       wPageAddress=CalNextPageAddress(wPageAddress);
  120.       }while(wNextPageAddress==wPageAddress);             
  121.        }//third for ----> next page
  122.        
  123.        }//if wNewFaxHead<wNewFaxRear
  124.        MODEM_BUS_CON_PORT &= ~SOFT_UART_2_PC;
  125. }//function over  
  126. /*
  127. void  FaxData2PCFromUart(void) // send the received fax data to PC via MAX232
  128. {     
  129.       unsigned char ucFlashColumnAddCnt=0,ucRxIndex=0,
  130.                     ucGeneralCnt=0;
  131.       unsigned int wNewFaxHead=0, wNewFaxRear=0,
  132.                    wNextPageAddress=0,wPageAddress=0;
  133.       //ucGeneralCnt=2;
  134.       //ZERO_ADDRESS();
  135.       //read rear pointer and read front pointer
  136.       //if RearAddress-FrontAddress!=0
  137.       //   transfer and front++
  138.       //else
  139.       //   transfer over
  140.       ReadLastFaxRearPointer();//get gwRearPointerAddress and gwPageAddress
  141.       wNewFaxRear=gwPageAddress;
  142.       ReadLastFaxFrontPointer();//get gwFrontPointerAddress, gwPageAddress, 
  143.                                 //gwFrontPointerAddress and gwColumnAddress
  144.       gwPageAddress++;           //add Dec.19, 2006
  145.       do{
  146.    wNextPageAddress=gwPageAddress+64;
  147.    wPageAddress=CalNextPageAddress(wPageAddress);
  148. }while(wNextPageAddress==wPageAddress);
  149.       wNewFaxHead=gwPageAddress;
  150.       if (wNewFaxHead<wNewFaxRear)//(wNewFaxHead!=wNewFaxRear)//modify Dec.20,2006
  151.       {
  152.          
  153.       for (wPageAddress=wNewFaxHead;wPageAddress<=wNewFaxRear;)//wNewFaxHead
  154.       {
  155.         
  156.         ROW_ADDRESS_LOW = wPageAddress & 0xff;
  157.         ROW_ADDRESS_HIGH = (wPageAddress>>8) & 0xff;
  158.         for (ucFlashColumnAddCnt = 0;ucFlashColumnAddCnt < 8;ucFlashColumnAddCnt++)//8*256=2048
  159.         {
  160.         //8 * 256 == 2048 Bytes 2^4*2^8 12bit column address HighColumnAddr:0~8
  161.             //total 8*256B+64B=2K+64B
  162.         COLUMN_ADDRESS_HIGH=ucFlashColumnAddCnt;
  163.         READ_256_BYTE();//read 256 Byte to aucUartRxBuf[256]
  164.         for (ucGeneralCnt=0;ucGeneralCnt<4;ucGeneralCnt++)//16*16Bytes send 16Bytes one time
  165.                                                           //modify Dec.28,2006 4*64Bytes one time
  166.         {
  167.             Send64BytePageImageData(64,ucGeneralCnt);
  168.             while(gucTxBufCnt!=0)//send over, gucTxBufCnt == 0
  169.             { 
  170.               ;
  171.             }
  172.             //ATcmdDelay();
  173.             if (gwTxNum != 64 && TXBUF0==0xfb)
  174.                 break;
  175.         }//third for
  176.         if (gwTxNum != 64)
  177.             break;
  178.         }//second for
  179.         
  180.         if ((gwTxNum != 64) 
  181.             || (aucUartTxBuf[gwTxNum-1] == 0xfb && aucUartTxBuf[gwTxNum-2] == 0x13 && aucUartTxBuf[gwTxNum-3] == 0xff)
  182.             //(aucUartTxBuf[gwTxNum] == 0xfb && aucUartTxBuf[gwTxNum-1] == 0x13 && aucUartTxBuf[gwTxNum-2] == 0xff)//a bug of Jan.24, 2007 
  183.             )//gwTxNum!=16, pageimage over
  184.           {                                                 //(gwTxNum != 16) modify Dec.20,2006 
  185.             ATcmdDelay();// a bug of Dec.23,2006 FF 10 00 0E // receive data delay(if not, can't receive 0x10 0x03)
  186.             ucRxIndex=0; //write Fax Rear Pointer
  187.             aucUartRxBuf[ucRxIndex++]=wPageAddress & 0xff;
  188.             aucUartRxBuf[ucRxIndex++]=(wPageAddress>>8) & 0xff;
  189.             aucUartRxBuf[ucRxIndex++]=0x55;
  190.             aucUartRxBuf[ucRxIndex++]=0x55;
  191.             WriteFaxFrontPointerTable();
  192.             wPageAddress++;
  193.             do{
  194.       wNextPageAddress=wPageAddress+64;
  195.       wPageAddress=CalNextPageAddress(wPageAddress);
  196.       }while(wNextPageAddress==wPageAddress);
  197.              //ReadLastFaxFrontPointer();//read next write fax front pointer addr    //delete at Jan. 19, 2007
  198.             continue;//break; a bug of Dec. 12,2006
  199.          }
  200.           wPageAddress++;
  201.             do{
  202.       wNextPageAddress=wPageAddress+64;//wNextPageAddress=gwPageAddress+64;
  203.       wPageAddress=CalNextPageAddress(wPageAddress);
  204.       }while(wNextPageAddress==wPageAddress);             
  205.        }//for ----> next page
  206.        
  207.        //ATcmdDelay();     // receive data delay(if not, can't receive 0x10 0x03)
  208.        
  209.        
  210.        }//if RearPointer!=FrontPointer
  211.        //gucRxTxFlag = DTETX;  // Del at Dec.25,2006
  212. }   
  213. */
  214. /*
  215. void Send64BytePageImageData(unsigned char ucTxDataNum,unsigned char ucGeneralCnt)
  216. {   
  217.     unsigned char ucDataCnt = 0;
  218.                               
  219.     gwTxNum=ucTxDataNum;
  220.     gpucTxBufPnt = 0;
  221.     for(ucDataCnt=0;ucDataCnt<64;ucDataCnt++) //ready data to TxdataBuf[]
  222.       {
  223.         aucUartTxBuf[ucDataCnt]=aucUartRxBuf[64*ucGeneralCnt+ucDataCnt];
  224.         gdwRxQueueFrontCnt++;
  225.         //There is a bug. when a[255]==10 && a[0]==03 && a[1]==fb, it will be error. it should add Length Judge
  226.         if (aucUartTxBuf[ucDataCnt] == 0xfb && aucUartTxBuf[ucDataCnt-1] == 0x13 && aucUartTxBuf[ucDataCnt-2] == 0xff)
  227.         {
  228.           gwTxNum = ucDataCnt+1;
  229.           break;
  230.         }       
  231.       }            
  232.     TXBUF0=aucUartTxBuf[0];    //start sent
  233.     gucTxBufCnt=1;             //aucUartTxBuf[0] is the first byte, next TX is the second.
  234. */