📄 qspi.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 + -