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

📄 qspi.cpp

📁 一个嵌入式linux的驱动程序例子
💻 CPP
字号:
#include "QSpi.h"#include <qmessagebox.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/ioctl.h>#include <fcntl.h>#include <unistd.h>class QMessageBox;QSpi::QSpi(){  buffer=new unsigned char[60*1024];  deviceHandle=open("/dev/spi_drv",O_RDWR);  status=statusIdle;  Cmd=SPI_ADSL_RESERVE;  dataNumber=0;  packetNumber=0;}QSpi::~QSpi(){  if(deviceHandle!=-1)    close(deviceHandle);  delete buffer;}void QSpi::sendCmd(int masterSlave){  ioctl(deviceHandle,Cmd,masterSlave);  status=statusWaittingData;}void QSpi::checkData(){  int ret=ioctl(deviceHandle,SPI_CHECK_DATA,&packetNumber);  switch(ret)    {    case TestDataReady:      ioctl(deviceHandle,SPI_GET_DATA,buffer);      status=statusDataOk;      break;    case TestDataTimeOut:      bootDSP();      status=statusBoottingDSP;      break;    case TestDataNotReady:    default:      break;    }    return ;}void  QSpi::translateData(unsigned char *displayData,float *minLevel,float *maxLevel){  unsigned char *p;  p=buffer+6;  switch(buffer[5])    {    case SPI_ADSL_ATT:    case SPI_ADSL_BALANCE:    case SPI_ADSL_FEXT:    case SPI_ADSL_NEXT:      *maxLevel=toFloat(p);      p+=6;      *minLevel=toFloat(p);      p+=8;                             //skip dotNum,default is 256;      memmove(displayData+1,p,255);      displayData[0]=displayData[1];      break;    case SPI_ADSL_PSD:      *maxLevel=toFloat(p);      p+=6;      *minLevel=toFloat(p);      p+=8;                             //skip dotNum,2 byte default is 256;      for(int i=1;i<256;i++)	displayData[i]=(p[i*2-2]+p[i*2-1])/2;      displayData[0]=displayData[1];      break;    default:                            //error format;      break;    }  return;} float QSpi::toFloat(unsigned char *data){  float f;  f=data[1]*10000+data[2]*100+data[3]+data[4]*0.01+data[5]*0.0001;  if(data[0])    f=-f;  return f;  }float QSpi::getResVolRms(){   return toFloat(buffer+20) ;}void QSpi::bootDSP(){  int filelen;  bootHandle=open("/usr/spi/bootload.bin",O_RDONLY);  if(bootHandle==-1)    {      QMessageBox::information(0,"information","Boot file not found,reset dsp fauler!");      return ;    }    filelen=lseek(bootHandle,0,SEEK_END);  lseek(bootHandle,0,SEEK_SET);  read(bootHandle,buffer,filelen);  close(bootHandle);  ioctl(deviceHandle,SPI_SET_BOOTLEN,filelen);  ioctl(deviceHandle,SPI_SEND_BOOTDATA,buffer);  return;}

⌨️ 快捷键说明

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