⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stream.c

📁 可以对北京汽车所产生的故障进行诊断的电脑解码器
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************************
 *  目的:数据流功能模块
 *  功能:实现读取数据流功能
 *  模块依赖:Systemint.h
 ******************************************************************************************/
#include "Systemint.h"
#include "Stream.h"
#include "main.h"

#define STRRECIVELEN     256  //数据流最大接收长度
struct StrDig
{
     unsigned char strsend[20];                 //数据流发送命令
     unsigned char strread[STRRECIVELEN];       //数据流接收数组
}    TagStr;
/*
**-------------------------------------------------------------------------------------
** 数据流显示函数
**-------------------------------------------------------------------------------------
*/
char Stream()
{
#ifdef DEBUGMODE
     DebugString( "Stream()" );
#endif
     //添加显示信息
     unsigned char *Read[]=
     {
          "读取数据流",
          "请等待...",
     };
     unsigned char RMaxl = 2;
     unsigned char *Fail[]=
     {
          "读取数据流失败",
          "[ NO ] 返回"
     };
     unsigned char Startline = 0;
     unsigned char Userline = 0;
     unsigned char FMaxl = 2;
     //显示正在读取
     ScreenInit( W_STAT );
     AddMenu( Read, RMaxl );
     ScreenAct( &Startline, &Userline );
     //显示数据流
     if( !Strdata() )
     {
          ScreenInit( W_STAT );
          AddMenu( Fail, FMaxl );
          while( ScreenAct( &Startline, &Userline ) != W_RETURN );
          return FAIL;
     }
     else
     {
          //NULL
     }
     return SUCCESS;
}
/*
**-------------------------------------------------------------------------------------
** 数据流命令发送函数
** Line:表示当前发送的是第几项数据流命令
**-------------------------------------------------------------------------------------
*/
char StrCom(unsigned char Line,unsigned char StartL)
{
     //在此处添加各系统的发送命令
     if( SysID == ENGISO )    //北京吉普 -> 引擎系统
     {
          //03H 31H 52H 86H
          if( Line != StartL )     return SUCCESS;
          TagStr.strsend[0] = 0x03;
          TagStr.strsend[1] = 0x31;
          TagStr.strsend[2] = 0x52;
          TagStr.strsend[3] = 0x86;
          //开始发送
          KW_Send( TagStr.strsend, 10 );
          if( !KW_Read( TagStr.strread, 800, 255 ) )
          {
               return FAIL;
          }
          else
          {
               //delay( 50 );   //Delay For Smoop
               return SUCCESS;
          }
     }
     return FAIL;
}
/*
**-------------------------------------------------------------------------------------
* 数据流显示函数
**-------------------------------------------------------------------------------------
*/
char Strdata()
{
     //此处添加各系统的数据流文本信息
     unsigned char *streamENGISO[] =    //长安汽车 -> M797电控系统
     {
          "ENGLOAD ..",
          "ENG.S ....",
          "TP .......",
          "IPW ......",
          "ESA ......",
          "ACT ......",
          "IAT ......",
          "B.VOL ....",

          "O2S ......",
          "ISC AD ...",
          "NORIS ....",
          "NORTPS ...",
          "BARO .....",
          "ISA AD ...",
          "A/F RL ...",
          "C/LCT(MUL)",

          "C/LCT(ADD)",
          "SD.1CYL ..",
          "SD.2CYL ..",
          "SD.3CYL ..",
          "SD.4CYL ..",
          "A/CCSW ...",
          "Copoton ..",
          "CKPS .....",

          "TT .......",
          "IC .......",
          "A/C TSW .."
     };
     unsigned char SMaxl = 0;     //数据流项目数
     unsigned char Rep = W_NULL;   // 用户选定项
     unsigned char Line = 0;       //当前处理行
     unsigned char Userline = 0;
     unsigned char StartL = 0;     //当前起始行
     ScreenInit( W_STREAM );
     //在此处添加各系统的数据流菜单装载代码
     if( SysID == ENGISO )    //北京吉普 -> 引擎系统
     {
          SMaxl = 27;
          AddMenu( streamENGISO, SMaxl );
     }
     Line = 0;
     while( Rep != W_RETURN )
     {
          //正在发送
          if( !StrCom( Line, StartL ) )
          {
               return FAIL;
          }
          else
          {
               //NULL
          }
          //显示文本
          Rep = ScreenAct( &StartL, &Userline );
          //显示数据
          if( Rep  == W_OK )   //用户选定数据流帮助
          {
               Rep = UserRep();
               StreamHelp( Rep );  //数据流帮助
               ScreenInit( W_STREAM );
               //在此处添加各系统的数据流菜单装载代码
               if( SysID == ENGISO )    //北京吉普 -> 引擎系统
               {
                    SMaxl = 27;
                    AddMenu( streamENGISO, SMaxl );
               }
               Line = StartL;
          }
          else if( Rep == W_UP || Rep == W_DOWN ) //翻页
          {
               Line = StartL;
          }
          else //显示数据流
          {
               StrDis( Line, (unsigned char)(Line-StartL) );
               Line++;
               if( Line==(StartL+8) )     Line = StartL;
          }
     }
     return SUCCESS;
}
/*
**-------------------------------------------------------------------------------------
* 数据流数值显示函数
**-------------------------------------------------------------------------------------
*/
void StrDis( unsigned char strnum, unsigned char line )
{
#ifdef DEBUGMODE
     DebugString( "StrDis()" );
#endif
     char tmpstr[20];
     float Sum;
     //在这里添加各系统的计算公式
     if( SysID == ENGISO )    //北京吉普 -> 引擎系统
     {
          switch(strnum)
          {
               case 0  : //Engine  load               937*x/255+103	4[mb] Byte1
                         Sum = 937*(float)TagStr.strread[3]/255+103;
                         sprintf(tmpstr,"%4.0fmb",Sum);
                         break;
               case 1  : //Engine  speed            If  x>9999 then x=9999;1831*4096/x	4[rpm] Byte2~byte3
                         Sum = 1831.0*4096.0/(float)TagStr.strread[4];
                         if( Sum > 9999 )    Sum = 9999;
                         sprintf(tmpstr,"%4.0frpm",Sum);
                         break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -