📄 spidemo.c
字号:
#include <linux/types.h>#include <linux/stat.h>#include <linux/fcntl.h>#include <stdio.h>#include "spi.h"int dev_handle,boot_handle,PacketNum,DotNum;unsigned char bootdata[60*1024],*p;unsigned int filelen;unsigned long temp;void check_packet(){ while(1) { if(ioctl(dev_handle,SPI_CHECK_DATA,&PacketNum)==TestDataTimeOut) { // printf("Test Time out!Reboot dsp\n"); // boot(); break; } if(ioctl(dev_handle,SPI_CHECK_DATA,&PacketNum)==TestDataReady) { printf("Received %d Packet\n",PacketNum); while(PacketNum--) { ioctl(dev_handle,SPI_GET_DATA,bootdata); if(*(unsigned short *)bootdata!=0x55aa) printf("Packet flag error,not 0x55aa\n"); else { printf("Packet Len=%d\n",*(unsigned short *)(bootdata+2)); if(bootdata[4]!=DataPacket) printf("Error packet type\n"); else { printf("Data packet\n"); switch(bootdata[5]){ case SPI_ADSL_PSD: printf("SPI_ADSL_PSD Packet received!\n"); break; case SPI_ADSL_RMS: printf("SPI_ADSL_RMS Packet received!\n"); break; case SPI_ADSL_ATT: printf("SPI_ADSL_ATT Packet received!"); break; case SPI_ADSL_BALANCE: printf("SPI_ADSL_BALANCE Packet received!\n"); break; case SPI_ADSL_FEXT: printf("SPI_ADSL_FEXT Packet received!\n"); break; case SPI_ADSL_NEXT: printf("SPI_ADSL_NEXT Packet received!\n"); break; case SPI_ADSL_VOL: printf("SPI_ADSL_VOL Packet received!\n"); break; case SPI_ADSL_RES: printf("SPI_ADSL_RES Packet received!\n"); break; default: printf("error packet type\n"); break; } p=bootdata+18; switch(bootdata[5]){ case SPI_ADSL_PSD: case SPI_ADSL_ATT: case SPI_ADSL_BALANCE: case SPI_ADSL_FEXT: case SPI_ADSL_NEXT: break; case SPI_ADSL_VOL: case SPI_ADSL_RES: case SPI_ADSL_RMS: temp=((*p)>>4&0xf)*10000000; temp+=((*p)&0xf)*1000000; p++; temp+=((*p)>>4&0xf)*100000; temp+=((*p)&0xf)*10000; p++; temp+=((*p)>>4&0xf)*1000; temp+=((*p)&0xf)*100; p++; temp+=((*p)>>4&0xf)*10; temp+=((*p)&0xf); printf("Value=%d.",temp); p++; temp=((*p)>>4&0xf)*1000; temp+=((*p)&0xf)*100; p++; temp+=((*p)>>4&0xf)*10; temp+=((*p)&0xf); printf("%d\n.",temp); break; default: printf("error packet type\n"); break; } } } } break; } } //while(1) end}int boot(){ boot_handle=open("bootload.bin",O_RDONLY); if(boot_handle==-1) { printf("Boot file not found,reset dsp fauler!\n"); close(dev_handle); return -1; } filelen=lseek(boot_handle,0,SEEK_END); lseek(boot_handle,0,SEEK_SET); read(boot_handle,bootdata,filelen); close(boot_handle); ioctl(dev_handle,SPI_SET_BOOTLEN,filelen); return ioctl(dev_handle,SPI_SEND_BOOTDATA,bootdata);} /*#define SPI_ADSL_PSD 1#define SPI_ADSL_RMS 2#define SPI_ADSL_ATT 3#define SPI_ADSL_BALANCE 4#define SPI_ADSL_FEXT 5#define SPI_ADSL_NEXT 6#define SPI_ADSL_VOL 7#define SPI_ADSL_RES 8#define SPI_ADSL_STOPTEST 9*/int main(){ dev_handle=open("/dev/spi_drv",O_RDWR); if(dev_handle==-1) { printf("Device not exist,check system!\n"); return -1; } while(1) { printf("0:boot dsp 1:PSD 2:RMS 3:ATT 4:BALANCE\n"); printf("5:FEXT 6:NEXT 7:VOL 8:RES 9:end demo\n"); printf("p:Power off r:Modem reset b:BL on o:BL off\n"); bootdata[0]="\0"; fgets(bootdata,100,stdin); if(!strcmp(bootdata,"0\n")) boot(); if(!strcmp(bootdata,"p\n")) ioctl(dev_handle,SPI_POWER_OFF,NULL); if(!strcmp(bootdata,"r\n")) ioctl(dev_handle,SPI_MODEM_RESET,NULL); if(!strcmp(bootdata,"b\n")) ioctl(dev_handle,SPI_BLIGHT_ON,NULL); if(!strcmp(bootdata,"o\n")) ioctl(dev_handle,SPI_BLIGHT_OFF,NULL); if(!strcmp(bootdata,"1\n")) { ioctl(dev_handle,SPI_ADSL_PSD,NULL); check_packet(); // ioctl(dev_handle,SPI_ADSL_STOPTEST,NULL); } if(!strcmp(bootdata,"2\n")) { ioctl(dev_handle,SPI_ADSL_RMS,NULL); check_packet(); // ioctl(dev_handle,SPI_ADSL_STOPTEST,NULL); } if(!strcmp(bootdata,"3\n")) { ioctl(dev_handle,SPI_ADSL_ATT,1); //slave check_packet(); // ioctl(dev_handle,SPI_ADSL_STOPTEST,NULL); } if(!strcmp(bootdata,"4\n")) { ioctl(dev_handle,SPI_ADSL_BALANCE,NULL); check_packet(); // ioctl(dev_handle,SPI_ADSL_STOPTEST,NULL); } if(!strcmp(bootdata,"5\n")) { ioctl(dev_handle,SPI_ADSL_FEXT,1); check_packet(); // ioctl(dev_handle,SPI_ADSL_STOPTEST,NULL); } if(!strcmp(bootdata,"6\n")) { ioctl(dev_handle,SPI_ADSL_NEXT,NULL); check_packet(); // ioctl(dev_handle,SPI_ADSL_STOPTEST,NULL); } if(!strcmp(bootdata,"7\n")) { ioctl(dev_handle,SPI_ADSL_VOL,NULL); check_packet(); // ioctl(dev_handle,SPI_ADSL_STOPTEST,NULL); } if(!strcmp(bootdata,"8\n")) { ioctl(dev_handle,SPI_ADSL_RES,NULL); check_packet(); // ioctl(dev_handle,SPI_ADSL_STOPTEST,NULL); } if(!strcmp(bootdata,"9\n")) break; } close(dev_handle); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -