- //**************************************************************************
- #include "includeH.h"
- void FaxRxBufRawdata2Flash(void)
- {
- unsigned char
- ucRxIndex=0,ucGeneralCnt=0,ucFlashSttsOverflowCnt=0,
- ucBlockCnt=0;
- unsigned int wPageCount=0,wRxBufPageRearAddress=0,
- wNextPageAddress=0,wPageAddress=cstFaxRxBufStartPage,
- wEveryFaxHead=0;//wFaxPropertyNo=0;
- wRxBufPageRearAddress=gwPageAddress;//1226;//gwPageAddress;
- ViewCommunicationRX();//read fax time
- for(ucGeneralCnt=0;ucGeneralCnt<255;ucGeneralCnt++)
- {
- aucUartRxBuf[ucGeneralCnt]=0; //clear RX buffer
- }
- gdwRxQueueFrontCnt += 2048;//whole packet length
- //Fax packet head ba 23 ba 23
- ucRxIndex=0; //write Fax Property
- aucUartRxBuf[ucRxIndex++] = 0xba;
- aucUartRxBuf[ucRxIndex++] = 0x23;
- aucUartRxBuf[ucRxIndex++] = 0xba;
- aucUartRxBuf[ucRxIndex++] = 0x23;
- for(ucGeneralCnt=0;ucGeneralCnt<8;ucGeneralCnt++)//interval flag 8 0x55
- {
- aucUartRxBuf[ucRxIndex++] = 0x55;
- }
- //fax Length 4 bytes
- aucUartRxBuf[ucRxIndex++] = (gdwRxQueueFrontCnt & 0xff);
- aucUartRxBuf[ucRxIndex++] = (gdwRxQueueFrontCnt >> 8) & 0xff;
- aucUartRxBuf[ucRxIndex++] = (gdwRxQueueFrontCnt>>16) & 0xff;
- aucUartRxBuf[ucRxIndex++] = (gdwRxQueueFrontCnt>>24) & 0xff;
- for(ucGeneralCnt=0;ucGeneralCnt<8;ucGeneralCnt++)
- {
- aucUartRxBuf[ucRxIndex++] = 0x55;
- }
- //fax time 6 bytes
- aucUartRxBuf[ucRxIndex++] = aucViewData[cstViewSecondIndex];// //second
- aucUartRxBuf[ucRxIndex++] = aucViewData[cstViewMinuteIndex];// //minute
- aucUartRxBuf[ucRxIndex++] = aucViewData[cstViewHourIndex];//hour
- aucUartRxBuf[ucRxIndex++] = aucViewData[cstViewDateIndex];//date
- aucUartRxBuf[ucRxIndex++] = aucViewData[cstViewMonthIndex];//month
- aucUartRxBuf[ucRxIndex++] = aucViewData[cstViewYearIndex];//Year
- //fax Head and Rear Address
- //aucUartRxBuf[ucRxIndex++] = wEveryFaxHead & 0xff;
- //aucUartRxBuf[ucRxIndex++] = (wEveryFaxHead>>8) & 0xff;
- //aucUartRxBuf[ucRxIndex++] = gwPageAddress & 0xff;
- //aucUartRxBuf[ucRxIndex++] = (gwPageAddress>>8) & 0xff;
- for(ucGeneralCnt=0;ucGeneralCnt<8;ucGeneralCnt++)
- {
- aucUartRxBuf[ucRxIndex++] = 0x55;
- }
- //fax Telephone Number TSI 25 bytes
- for (ucGeneralCnt=0; ucGeneralCnt<25; ucGeneralCnt++)
- {
- aucUartRxBuf[ucRxIndex++] = FRHTSI[ucGeneralCnt];
- }
- for(ucGeneralCnt=0;ucGeneralCnt<8;ucGeneralCnt++)
- {
- aucUartRxBuf[ucRxIndex++] = 0x55;
- }
- //wPageAddress = cstFaxRxBufFirstPage;
- ZERO_ADDRESS();
- ROW_ADDRESS_LOW = wPageAddress & 0XFF;
- ROW_ADDRESS_HIGH = (wPageAddress>>8) & 0XFF;
- PROGRAM_256_BYTE();
- //find the rear pointer in the Fax Rear Area
- //wRxBufPageRearAddress=gwPageAddress;//1226;//gwPageAddress;
- ReadLastFaxRearPointer();//return gwPageAddress
- //ReadLast16BytesFromFlashMemoryArea(cstFaxRearPointerTableStartBlockNum, cstFaxRearPointerTableOverBlockNum);//return gwPageAddress
- gwPageAddress++;
- //check the gwPageAddress whether it is a page in bad block
- do{
- wNextPageAddress=gwPageAddress+64;
- gwPageAddress=CalNextPageAddress(gwPageAddress);
- }while(wNextPageAddress==gwPageAddress);
- //erase next block
- if (gwPageAddress%64==0)
- {
- ROW_ADDRESS_LOW=gwPageAddress & 0XFF;
- ROW_ADDRESS_HIGH=(gwPageAddress>>8) & 0XFF;
- ERASE_ONE_BLOCK();
- }
- wEveryFaxHead=gwPageAddress;//Record the Every Fax head for the Every fax table
- for (wPageCount=cstFaxRxBufStartPage;wPageCount<=wRxBufPageRearAddress;wPageCount++)//Block 19-39
- {
- COMMAND_VAL=0x00; //#0X00 //00H READ1 0-2112BYTE
- COMMAND_LATCH_INTO();
- //ADDRESS
- ADDRESS_VALUE=0;//COLUMN_ADDRESS_LOW; //#0X00
- ADDRESS_LATCH_INTO();
- ADDRESS_VALUE=0;//COLUMN_ADDRESS_HIGH; //#0X00
- ADDRESS_LATCH_INTO();
- ADDRESS_VALUE= wPageCount & 0xff ; //#0X00
- ADDRESS_LATCH_INTO();
- ADDRESS_VALUE= (wPageCount>>8) & 0xff; //#0X00
- ADDRESS_LATCH_INTO();
- FLASH_CON_PORT_OUT &=~ ALE;
- COMMAND_VAL=0X35;
- COMMAND_LATCH_INTO();
- //ATcmdDelay();
- while((FLASH_CON_PORT_IN & RB)==0);
- COMMAND_VAL=0x85;
- COMMAND_LATCH_INTO();
- //ADDRESS
- ADDRESS_VALUE=0;//COLUMN_ADDRESS_LOW; //#0X00
- ADDRESS_LATCH_INTO();
- ADDRESS_VALUE=0;//COLUMN_ADDRESS_HIGH; //#0X00
- ADDRESS_LATCH_INTO();
- ADDRESS_VALUE= gwPageAddress & 0xff; //#0X00
- ADDRESS_LATCH_INTO();
- ADDRESS_VALUE=(gwPageAddress>>8) & 0xff; //#0X00
- ADDRESS_LATCH_INTO();
- FLASH_CON_PORT_OUT &=~ ALE;
- COMMAND_VAL=cFlashWriteInitiateCmd; //10H INITIATES PROGRAM
- COMMAND_LATCH_INTO();
- READ_STATUS();
- ucFlashSttsOverflowCnt=0;
- if(FLASH_STATUS==1&&(ucFlashSttsOverflowCnt++)<2)
- {
- ;
- }
- gwPageAddress++;
- if (gwPageAddress==0) gwPageAddress+=cstFaxContentStartPage;
- do{
- wNextPageAddress=gwPageAddress+64;
- gwPageAddress=CalNextPageAddress(gwPageAddress);
- }while(wNextPageAddress==gwPageAddress);
- if (gwPageAddress%64==0)
- {
- ROW_ADDRESS_LOW=gwPageAddress & 0XFF;
- ROW_ADDRESS_HIGH=(gwPageAddress>>8) & 0XFF;
- ERASE_ONE_BLOCK();
- }
- //if ((aucUartRxBuf[ucRxIndex] == 0xfb && aucUartRxBuf[ucRxIndex-1] == 0x13
- //&& aucUartRxBuf[ucRxIndex-2] == 0xff))// || (wRxQueueFrontCnt>gwRxQueueFrontCnt))
- //break;
- }//write 1344 pages over
- /*******************************************
- Write New Fax Rear Pointer
- if (FaxRearPointerTableFull)
- {erase next block in fax rear pointer table}
- else
- write one Fax content
- *******************************************/
- if ((gwGeneralPageAddress>>6) > cstFaxRearPointerTableOverBlockNum)
- {
- for (ucBlockCnt=0;ucBlockCnt<4;ucBlockCnt++)
- {
- wPageAddress=(cstFaxRearPointerTableStartBlockNum+ucBlockCnt)<<6;
- ROW_ADDRESS_LOW=wPageAddress & 0XFF;
- ROW_ADDRESS_HIGH=(wPageAddress>>8) & 0XFF;
- ERASE_ONE_BLOCK();
- }
- gwGeneralPageAddress=cstFaxRearPointerTableStartPage;
- gwColumnAddress=0;
- }
- ucRxIndex=0; //write Fax Rear Pointer
- gwPageAddress--; // get Rear Pointer
- aucUartRxBuf[ucRxIndex++]=gwPageAddress & 0xff;
- aucUartRxBuf[ucRxIndex++]=(gwPageAddress>>8) & 0xff;
- for(ucGeneralCnt=0;ucGeneralCnt<14;ucGeneralCnt++)
- {
- aucUartRxBuf[ucRxIndex++] = 0x55;
- }
- //WriteFaxRearPointerTable();
- Write16Bytes2FlashMemoryArea();
- /*******************************************
- Write Fax Property Table
- if (Fax Property Table Full)
- {erase next block in Fax Property Table}
- else
- write one Fax Property
- *******************************************/
- ReadLastFaxProperty();
- //ReadLast16BytesFromFlashMemoryArea(cstFaxPropertyTableStartBlockNum, cstFaxPropertyTableOverBlockNum);
- if ((gwGeneralPageAddress>>6) > cstFaxPropertyTableOverBlockNum)//>=cstFaxPropertyTableOverBlockNum)
- {
- for (ucBlockCnt=0;ucBlockCnt<10;ucBlockCnt++)
- {
- wPageAddress=(cstFaxPropertyTableStartBlockNum+ucBlockCnt)<<6;
- ROW_ADDRESS_LOW=wPageAddress & 0XFF;
- ROW_ADDRESS_HIGH=(wPageAddress>>8) & 0XFF;
- ERASE_ONE_BLOCK();
- }
- gwGeneralPageAddress=cstFaxPropertyTableStartPage;
- gwColumnAddress=0;
- }
- ucRxIndex=0; //write Fax Property
- aucUartRxBuf[ucRxIndex++] = aucViewData[cstViewSecondIndex];// //second
- aucUartRxBuf[ucRxIndex++] = aucViewData[cstViewMinuteIndex];// //minute
- aucUartRxBuf[ucRxIndex++] = aucViewData[cstViewHourIndex];//hour
- aucUartRxBuf[ucRxIndex++] = aucViewData[cstViewDateIndex];//date
- aucUartRxBuf[ucRxIndex++] = aucViewData[cstViewMonthIndex];//month
- aucUartRxBuf[ucRxIndex++] = aucViewData[cstViewYearIndex];//Year
- aucUartRxBuf[ucRxIndex++] = wEveryFaxHead & 0xff;
- aucUartRxBuf[ucRxIndex++] = (wEveryFaxHead>>8) & 0xff;
- aucUartRxBuf[ucRxIndex++] = gwPageAddress & 0xff;
- aucUartRxBuf[ucRxIndex++] = (gwPageAddress>>8) & 0xff;
- aucUartRxBuf[ucRxIndex++] = (gdwRxQueueFrontCnt & 0xff);
- aucUartRxBuf[ucRxIndex++] = (gdwRxQueueFrontCnt >> 8) & 0xff;
- aucUartRxBuf[ucRxIndex++] = (gdwRxQueueFrontCnt>>16) & 0xff;
- aucUartRxBuf[ucRxIndex++] = (gdwRxQueueFrontCnt>>24) & 0xff;
- aucUartRxBuf[ucRxIndex++]=0x55;
- aucUartRxBuf[ucRxIndex++]=0x55; //15
- //WriteFaxPropertyTable();
- Write16Bytes2FlashMemoryArea();
- }//FaxRXProcess