driverlogin.c

来自「在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LE」· C语言 代码 · 共 139 行

C
139
字号
/****************************************************************
**                                                              *
**  FILE         : DriverLogin.c                                *
**                                                              *
**  By : Cyb 2007.07.01                                         *
****************************************************************/
#include "includes.h"
#include "hardware.h"
#include "Structs.h"
#include "Public.h"
#include "TimeTask.h"
#include "GpsRecer.h"
#include "Public.h"
#include "uart_drv.h"
#include "tools.h"
#include "DriverLogPage.h"
#include "audio.h"

#define  SINGLE_MAX               10
#define  ERR_INDEX                0xff

static INT8U  CurIndex;
static INT16U CurDriveNum;


static INT8U CheckLoginValue(INT8U* ptr,INT8U len)
{
    INT8U i;
    INT8U lenth;
    
    
    for(i=0;i<MAX_DRIVER;i++)
    {
       if(VehicleDriver.DriverInfo[i].Valid != TRUE) continue;
       lenth = DecodeTellen(VehicleDriver.DriverInfo[i].DriveAsciiNum, DRIVEASCIINUM);
       if(len != lenth) continue;
       if(CmpString(ptr,VehicleDriver.DriverInfo[i].DriveAsciiNum,lenth)==STR_EQUAL){
          return i;
       }
    }
    return ERR_INDEX;
}

void DriverLogingNow(INT8U* ptr,INT8U len)
{
    
    INT8U index;
    
    index = CheckLoginValue(ptr, len);
    CurIndex = index;
    if(CurIndex <MAX_DRIVER) CurDriveNum = VehicleDriver.DriverInfo[CurIndex].DriveNum;
    else CurDriveNum = 0;
    
    if(index == ERR_INDEX)
    {
        InformDriveLogerr();
    }
    else
    {
        PlayerNumbers(CurDriveNum);
        InformDriverLogged();
    }
    
}


BOOLEAN SetDriver(INT8U *DataPtr)
{
    INT8U i;
    INT8U tmplen;
    INT8U setcount;
    INT16U drivenum;
  
  
  if(((*DataPtr++) & 0x01) == 0x01)
  {
     VehicleDriver.TotalNum = 0;
     
     for(i=0;i<MAX_DRIVER;i++)
     {
        VehicleDriver.DriverInfo[i].Valid = FALSE;
     }
  }
  
   setcount = *DataPtr++; // 设置个数
  
   if(setcount > SINGLE_MAX) return FALSE;
   
   while(setcount--)
   {
     
      i=*DataPtr++;         //Get Set Num
      VehicleDriver.DriverInfo[i].Valid = TRUE;
      drivenum=*DataPtr++;
      VehicleDriver.DriverInfo[i].DriveNum = *DataPtr++ | (drivenum<<8);
     
      if(VehicleDriver.DriverInfo[i].DriveNum > 0xfffe) return FALSE;
      tmplen = *DataPtr++;
      memset(VehicleDriver.DriverInfo[i].DriveAsciiNum,0x20,DRIVEASCIINUM);
      memcpy(VehicleDriver.DriverInfo[i].DriveAsciiNum,DataPtr,tmplen);
     
      DataPtr += tmplen;
      
     
      VehicleDriver.TotalNum ++;
  }
  
  StorePubPara(DRIVELOG_);
  
  return TRUE;

}

INT16U GetDriveNum(void)                         //获取司机编号
{
   
   if(VehicleDriver.TotalNum == 0) return  0;
   if(CurIndex == ERR_INDEX) return 0;

   return CurDriveNum;
}

INT8U GetDriverAsciiNumAndLen(INT8U *ptr, INT16U drivenum)
{
   INT8U i;

   if(0 == VehicleDriver.TotalNum) return 0;

   for(i=0;i<MAX_DRIVER; i++){
      if(VehicleDriver.DriverInfo[i].Valid != TRUE) continue;
      if(VehicleDriver.DriverInfo[i].DriveNum != drivenum) continue;
      return DecodeTel(ptr, VehicleDriver.DriverInfo[i].DriveAsciiNum, DRIVEASCIINUM);
   }
   return 0;
}



⌨️ 快捷键说明

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