📄 datasol.c
字号:
/******************************************************************************************
* 目的:文本及资料查询模块
* 功能:提供基本 资料库 提取接口
* 模块依赖:FlashCI.h
******************************************************************************************/
#include "compiler.h"
#include "FlashIC.h"
#ifdef DEBUGDATASOL
#include <stdio.h>
#include "Display.h"
#include "Keyboard.h"
#endif
/*
**-----------------------------------------------------------------------------------------
** 根据不同的系统读入故障码
** libbaddr:码库起始地址
** sys:系统号
** mcode:待提取的文本号
** TempBuf:输出字符串
**-----------------------------------------------------------------------------------------
*/
char GetOneMessage( long libbaddr,char sys,unsigned int mcode,unsigned char *TempBuf )
{
#ifdef DEBUGMODE
DebugString( "GetOneMessage()" );
#endif
int i,j,m;
int sysmcode_n;
unsigned char page;
unsigned char Temp,Temp1;
long addr;
long address;
#ifdef DEBUGDATASOL
unsigned char Debug[ 20 ];
#endif
SPSeek( BEGIN, libbaddr );
sysmcode_n = 0;
while ( 1 )
{
//获取该故障码库的系统ID -> systemID 库所需的页面大小 ->
//pagesize 库起始地址 -> addr 鼓掌码的数量 sysmcode_n
//systemID(1BYTE)+pagesize(1BYTE)+addr(2BTYE)+sysmcode_n(2BTYE)
Temp = SPGetCH();
if ( Temp == 0xff )
{
return FAIL;
}
if ( Temp == (sys&0xff) ) //判断系统号.
{
page = SPGetCH(); //系统起始页面
addr = SPGetCH(); //页内偏移地址高字节
addr <<= 8;
addr |= SPGetCH(); //页内偏移地址低字节
Temp = (unsigned char)SPGetCH(); //故障码数量高字节.
Temp1 = (unsigned char)SPGetCH(); //故障码数量低字节.
sysmcode_n = (int)Temp*256 + (int)Temp1;
address = addr+(long)page*PAGESIZE+libbaddr;
SPSeek( BEGIN, address ); // 加上起始偏移量
break;
}
else
{
SPSeek(CURRENT,5);
}
}
#ifdef DEBUGDATASOL
sprintf( Debug, " %lx" ,address );
LcdStr86( 1, 8, Debug, BLACK );
GetAKey( 0 );
#endif
// 查询故障码
//xxXXX?xxXXX?xxXXX 形式:码号(2BTYE) + 地址(3BTYE=1BTYE页+2BTYE页内偏移) + 间隔(1BTYE)
for ( i = 0,m = 0; i < sysmcode_n; i++ )
{
//提取码号
j = SPGetCH();
j <<= 8;
j |= SPGetCH();
if ( j == mcode ) //如果故障码相同.
{
#ifdef DEBUGDATASOL
sprintf( Debug, "j=%x" , j );
LcdStr86( 1, 16, Debug, BLACK );
#endif
// 确定故障码内容起始地址
m = (int)SPGetCH();
j = SPGetCH();
j <<= 8;
j |= SPGetCH();
addr = j;
addr += (long)m*PAGESIZE;
#ifdef DEBUGDATASOL
sprintf( Debug, "addr=%lx" , addr );
LcdStr86( 1, 24, Debug, BLACK );
#endif
address = addr+libbaddr;
SPSeek( BEGIN, address );
#ifdef DEBUGDATASOL
sprintf( Debug, "address=%lx" , address );
LcdStr86( 1, 32, Debug, BLACK );
GetAKey( 0 );
#endif
break;
}
else //否则,查找下一条.
{
SPSeek( CURRENT,3 );
}
}
//未找到
if ( i == sysmcode_n )
{
return FAIL;
}
else
{
//NULL
}
//提取故障码内容
for ( i = 0; i < 1200; i++ ) //复制故障码内容到缓存中
{
TempBuf[i] = SPGetCH();
if( TempBuf[i] == 0 ) //两个0代表结束 1个0代表换行
{
TempBuf[i] = SPGetCH();
if( TempBuf[i] == 0 )
{
i=5000;
}
else
{
TempBuf[i] = '\0';
i=0;
}
}
}
return SUCCESS;
}
//----------------------------------------------------------------- End Of File --------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -