📄 do_handle.c
字号:
SRAM_Write(PHONE_AT_2+0,VAILD_2);
SRAM_Write(PHONE_AT_2+1,H_DIAL);
SRAM_Write(PHONE_AT_2+2,nTemp-4);
for(i=3;i<nTemp-1;i++)
{
SRAM_Write(PHONE_AT_2+i,gHandle_Buffer[i]);
}
//将拨出电话记录存储在相应的Flash中
//while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
//Init_Buffer2();
Write_Dail_Record(nTemp);
gDelay_Flash_Timer=0;
gHandle_Buffer_Point=0;
gTimer=0;Clear_Exter_WatchDog();
while(gTimer<500){}
Clear_Exter_WatchDog();
OperateSPIEnd();
//Init_Buffer2();
}
}
/********************************************************\
* 函数名:Handle_Answer
作用域:本地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Handle_Answer(void)
{
unsigned char nFlag=0;
//1,如果设备处于呼入禁止状态下,判断是否有允许此号码呼入的标志
if( (gON_OFF_Temp0&PHONE_IN_ON)==0 )
{
if(gPublic_Flag&ALLOW_PHONE_IN_F_1) nFlag=1;
else nFlag=0;
}
//2,设备没有处于呼入禁止的状态
else nFlag=1;
if(nFlag==1)
{
SRAM_Init();
SRAM_Write(PHONE_AT_2+0,VAILD_2);
SRAM_Write(PHONE_AT_2+1,H_ANSWER);
SRAM_Write(PHONE_AT_2+2,0);
}
else
{
Send_COM3_Load(4,MAIN_RETURN_NO_CALLIN,0);
SRAM_Init();
SRAM_Write(PHONE_AT_2+0,VAILD_2);
SRAM_Write(PHONE_AT_2+1,H_HUNGUP);
SRAM_Write(PHONE_AT_2+2,0);
}
}
/********************************************************\
* 函数名:Move_Right_Item()
作用域:本地文件调用
* 功能: 针对gGeneral_Buffer[]中存储的号码有重复的地方,则如何消除重复号码那一条
* 参数: Start_Item:
End_Item:
Move_Count:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Move_Right_Item(unsigned char Start_Item,unsigned char End_Item,unsigned char Move_Count)
{
unsigned int i=0,j=0;
if(Move_Count==1)
{
for( i=End_Item;i>Start_Item;i=i-1 )
{
for(j=0;j<16;j++)
{
gGeneral_Buffer[i*16+j]=gGeneral_Buffer[(i-1)*16+j];
}
}
}
else if(Move_Count==2)
{
for( i=7;i>0;i-- )
{
for(j=0;j<32;j++)
{
gGeneral_Buffer[i*32+j]=gGeneral_Buffer[(i-1)*32+j];
}
}
}
}
/********************************************************\
* 函数名:Write_Dail_Record
作用域:本地文件调用
* 功能: 用来在每次拨出电话号码后,存储拨出电话号码的记录
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
补充说明:这个子程序是将拨出的电话号码存储在缓冲区中。
先判断已经存储的缓冲区中是否有相同的拨好记录
如果有,则先将此记录删除,然后重新排列,将
整个缓冲向左移动一个存储记录,则将第一个存储
记录的空间留下来,则将最新的拨出电话记录存储在
位置上。
\********************************************************/
void Write_Dail_Record(unsigned char nPhone_Length)
{
unsigned char nItem=0xff;
unsigned int i,j,k;
i=nPhone_Length;
Clear_Exter_WatchDog();
OperateSPIEnd();
ReadOnePageToBuffer2(FLASH_DIAL_PHONE); //读第3个扇区的数据到buffer2中
OperateSPIEnd();
//将buffer2中的数据转移到gGeneral_Buffer中
gGeneral_Buffer[0]=ReadByteFromBuffer2(0);
for(i=1;i<264;i++) gGeneral_Buffer[i]=ReadNextFromBuffer2();
OperateSPIEnd();
//判断gHandle_Buffer[]中的号码是否与gGeneral_Buffer[]中有重复的号码
i=0;
k=0;
while(i<16)
{
j=0;
while(j<nPhone_Length-4)
{
if( gGeneral_Buffer[i*16+j]!=gHandle_Buffer[3+j] )
{
i++;j=0;k=0;break;
}
j++;
if(j>=nPhone_Length-4)
{
k=1;break;
}
}
if(k==1) break;
}
//说明有重复的号码,则将这一条的重复号码给覆盖住
if(k==1)
{
nItem=i;
if(nItem>0) Move_Right_Item(0,nItem,1);
}
//没有重复号码,则将整个号码向后移动一条。
else
{
Move_Right_Item(0,15,1);
}
//将最新号码写在第一条号码的位置
for(i=0;i<16;i++)
{
gGeneral_Buffer[i]=0x20;
}
for(i=0;i<nPhone_Length-4;i++)
{
gGeneral_Buffer[i]=gHandle_Buffer[3+i];
}
//将gGeneral_Buffer[]中的数写入buffer2中
OperateSPIEnd();
WriteOneByteToBuffer2(0,gGeneral_Buffer[0]);
for(i=1;i<264;i++)
{
WriteNextByteToBuffer2( gGeneral_Buffer[i] );
}
OperateSPIEnd();
//4,将已经写入了新的拨号记录的buffer2写到flash 相应的区域中
Clear_Exter_WatchDog();
P6OUT|=SPI45DB041_WP;
WriteBuffer2ToPage(FLASH_DIAL_PHONE);
P6OUT&=~SPI45DB041_WP;
gTimer=0;Clear_Exter_WatchDog();
OperateSPIEnd();
}
/********************************************************\
* 函数名:Read_Dail_Record
作用域:本地文件调用
* 功能: 读取记录拨出电话记录的FLASH中的相应位置的数据
* 参数: nItem:表示当前所指向的记录号,其值有如下0-----15
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Read_Dail_Record(unsigned char nItem)
{
unsigned char nTemp,Record_Flag;
unsigned int i;
Clear_Exter_WatchDog();
OperateSPIEnd();
//读第3个扇区的数据到buffer2中
ReadOnePageToBuffer2(FLASH_DIAL_PHONE);
OperateSPIEnd();
nTemp = ReadByteFromBuffer2(nItem*0x10);
OperateSPIEnd();
Record_Flag=0;
//判断当前电话记录是否为空
if( (nTemp>'9')||(nTemp<'0') ) Record_Flag=1;
else Record_Flag=0;
//将所指向的拨出电话号码记录发送出去
SRAM_Init();
SRAM_Write(SHANDLE_DATA_VAILD+0,VAILD_2);
SRAM_Write(SHANDLE_DATA_VAILD+1,0x24);
SRAM_Write(SHANDLE_DATA_VAILD+2,0x15);
SRAM_Write(SHANDLE_DATA_VAILD+3,MAIN_DIALRECORD);
SRAM_Write(SHANDLE_DATA_VAILD+4,nItem);
if(Record_Flag==0)
{
OperateSPIEnd();
nTemp=ReadByteFromBuffer2(nItem*0x10);
SRAM_Write(SHANDLE_DATA_VAILD+5,nTemp);
for(i=1;i<16;i++)
{
SRAM_Write(SHANDLE_DATA_VAILD+5+i,ReadNextFromBuffer2());
}
OperateSPIEnd();
}
else
{
for(i=0;i<16;i++)
{
SRAM_Write(SHANDLE_DATA_VAILD+5+i,0x20);
}
}
SRAM_Write(SHANDLE_DATA_VAILD+5+16,0x0d);
}
/********************************************************\
* 函数名:Read_Phone_Note_Record
作用域:本地文件调用
* 功能: 读取电话号码
* 参数: nItem:表示当前所指向的记录号,其值有如下1-----20
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Read_Phone_Note_Record(unsigned char nItem)
{
unsigned int i=0,j=0,k=0;
unsigned char Phone_Page=0;
unsigned char Phone_Item=0;
unsigned int Phone_Address=0;
unsigned char Phone_Num=0;
unsigned char nTemp=0;
if( nItem<10 ) Phone_Page=1;
else if( (nItem>=10)&&(nItem<20) ) Phone_Page=2;
else {Phone_Page=0;return;}
OperateSPIEnd();
if(Phone_Page==1)
{
ReadOnePageToBuffer2(FLASH_PHONE_INFO_ONE_2);
Phone_Item=nItem;
}
else if(Phone_Page==2)
{
ReadOnePageToBuffer2(FLASH_PHONE_INFO_TWO_2);
Phone_Item=nItem-10;
}
OperateSPIEnd();
Phone_Num=ReadByteFromBuffer2(PHONE_NUM_2);
OperateSPIEnd();
if( (Phone_Num>0)&&(Phone_Num<=10)&&(Phone_Item<=Phone_Num) ) j=1;
else j=0;
Phone_Address=Phone_Item*21+ONE_1_FRAME_2;
OperateSPIEnd();
nTemp=ReadByteFromBuffer2(Phone_Address);
OperateSPIEnd();
if(nTemp==0x20) j=0;
SRAM_Init();
SRAM_Write(SHANDLE_DATA_VAILD+0,VAILD_2);
SRAM_Write(SHANDLE_DATA_VAILD+1,0x24);
SRAM_Write(SHANDLE_DATA_VAILD+2,0x1A);
SRAM_Write(SHANDLE_DATA_VAILD+3,MAIN_RETURN_PHONE_NOTE);
SRAM_Write(SHANDLE_DATA_VAILD+4,nItem);
if(j==1)
{
SRAM_Write(SHANDLE_DATA_VAILD+5,ReadByteFromBuffer2(Phone_Address));
for(i=1;i<8+13;i++)
{
SRAM_Write(SHANDLE_DATA_VAILD+5+i,ReadNextFromBuffer2());
}
}
else
{
for(i=0;i<8+13;i++)
{
SRAM_Write(SHANDLE_DATA_VAILD+5+i,0x20);
}
}
SRAM_Write(SHANDLE_DATA_VAILD+5+8+13,0x0d);
}
/********************************************************\
* 函数名:Write_Talk_Record
作用域:本地文件调用
* 功能: 用来每次通话结束后,存储通话记录(此记录均是用手柄发送过来的数据包)
参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
/*
void Write_Talk_Record(unsigned char nPhone_Length)
{
unsigned int i;
OperateSPIEnd();
Clear_Exter_WatchDog();
//1,读第4个扇区的数据到buffer2中
ReadOnePageToBuffer2(FLASH_RECORD_PHONE_2);
OperateSPIEnd();
//将buffer2中的数据转移到gGeneral_Buffer中
gGeneral_Buffer[0]=ReadByteFromBuffer2(0);
for(i=1;i<264;i++) gGeneral_Buffer[i]=ReadNextFromBuffer2();
OperateSPIEnd();
//2,平移动buffer2中的通话记录
Move_Right_Item(0,14,2);
for(i=0;i<32;i++)
{
gGeneral_Buffer[i]=0x20;
}
//3,将新的通话记录的数据写入第一个记录区
for(i=0;i<nPhone_Length-4;i++)
{
gGeneral_Buffer[i]=gHandle_Buffer[3+i];
}
//将gGeneral_Buffer[]中的数写入buffer2中
OperateSPIEnd();
WriteOneByteToBuffer2(0,gGeneral_Buffer[0]);
for(i=1;i<264;i++)
{
WriteNextByteToBuffer2( gGeneral_Buffer[i] );
}
OperateSPIEnd();
//4,将更新完毕的buffer2中的数据写入第4扇区
Clear_Exter_WatchDog();
P6OUT|=SPI45DB041_WP;
WriteBuffer2ToPage(FLASH_RECORD_PHONE_2);
P6OUT&=~SPI45DB041_WP;
gTimer=0;Clear_Exter_WatchDog();
OperateSPIEnd();
}
*/
/********************************************************\
* 函数名:Read_Talk_Record
作用域:本地文件调用
* 功能:
* 参数: nItem:表示当前所指向的记录,其值有如下0-----7
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Read_Talk_Record(unsigned char nItem)
{
unsigned char nTemp,Record_Flag;
unsigned int i;
Record_Flag=0;
if( nItem>7 ) return;
//读第4个扇区的数据到buffer2中
ReadOnePageToBuffer2(FLASH_RECORD_PHONE_2);
OperateSPIEnd();
nTemp = ReadByteFromBuffer2( nItem*0x10 );
OperateSPIEnd();
ReadOnePageToBuffer2(FLASH_RECORD_PHONE_2);
nTemp = ReadByteFromBuffer2( (2*nItem)*0x10 );
OperateSPIEnd();
if( (nTemp>'9')||(nTemp<'0') ) Record_Flag=1;
else Record_Flag=0;
SRAM_Init();
SRAM_Write(SHANDLE_DATA_VAILD+0,VAILD_2);
SRAM_Write(SHANDLE_DATA_VAILD+1,0x24);
SRAM_Write(SHANDLE_DATA_VAILD+2,0x1e);
SRAM_Write(SHANDLE_DATA_VAILD+3,MAIN_TALKRECORD);
SRAM_Write(SHANDLE_DATA_VAILD+4,nItem);
if(Record_Flag==0)
{
OperateSPIEnd();
ReadOnePageToBuffer2(FLASH_RECORD_PHONE_2);
OperateSPIEnd();
nTemp=ReadByteFromBuffer2( (2*nItem)*0x10 );
SRAM_Write(SHANDLE_DATA_VAILD+5,nTemp);
for(i=1;i<25;i++)
{
SRAM_Write(SHANDLE_DATA_VAILD+5+i,ReadNextFromBuffer2());
}
OperateSPIEnd();
}
else
{
for(i=0;i<25;i++)
{
SRAM_Write(SHANDLE_DATA_VAILD+5+i,0x20);
}
}
SRAM_Write(SHANDLE_DATA_VAILD+5+25,0x0d);
}
/********************************************************\
* 函数名:Handle_ReadOnePage_Data
作用域:本地文件调用
* 功能:
* 参数:
* 参数:
* 返回值:
* 创建人:
* 修改历史:(每条详述)
\********************************************************/
void Handle_ReadOnePage_Data(unsigned char Page_H,unsigned char Page_L)
{
unsigned int Page_Address=0,i=0;
unsigned char Length=0;
Page_Address = Page_H;
Page_Address <<=8;
Page_Address += Page_L;
if(Page_Address<2048)
{
OperateSPIEnd();
ReadOnePageToBuffer2(Page_Address);
OperateSPIEnd();
gGeneral_Buffer[0]=ReadByteFromBuffer2(0);
for(i=1;i<256;i++) gGeneral_Buffer[i]=ReadNextFromBuffer2();
OperateSPIEnd();
Length=4+256;
Waiting_Allow_Send();
Send_COM3_Byte(0x24);Send_COM3_Byte(Length);
Send_COM3_Byte(MAIN_READPAGE_ECHO);
for(i=0;i<256;i++)
{
Send_COM3_Byte(gGeneral_Buffer[i]);
Clear_Exter_WatchDog();
}
Send_COM3_Byte(0x0d);
RX3_Ready();
}
}
/********************************************************\
* 函数名:Handle_EraseOnePage_Data
作用域:本地文件调用
* 功能:
* 参数:
* 参数:
* 返回值:
* 创建人:
* 修改历史:(每条详述)
\********************************************************/
/*
void Handle_EraseOnePage_Data(unsigned char Page_H,unsigned char Page_L)
{
unsigned int Page_Address=0;
Page_Address = Page_H;
Page_Address <<=8;
Page_Address += Page_L;
if(Page_Address<2048)
{
OperateSPIEnd();EraseOnePage(Page_Address);OperateSPIEnd();
}
Send_COM3_Load(5,MAIN_ERASEPAGE_ECHO,COMMAND_OK);
}
*/
/********************************************************\
* 函数名:Send_COM3_SubProgram
作用域:本地文件调用
* 功能:
* 参数:
* 参数:
* 返回值:
* 创建人:
* 修改历史:(每条详述)
\********************************************************/
void Send_COM3_SubProgram(unsigned char DataLength,unsigned char nCommand,unsigned char DataTemp)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -