void monitor_acc(int intval) { struct gpio *gpio; int value = 0; int duration = 0; #ifdef HI_UNF_GPIO gpio = getgpio_byname(NAME_ACC_MONITOR); if (NULL != gpio) { value = get_gpio_bit(gpio->number); if (ACC_OPEN == value) { acc_monitor = 0; } else if (ACC_CLOSE == value) { acc_monitor ++; } else { printf("warning: %s, str:%s, gpio:%d, value:%d\n", __func__, NAME_ACC_MONITOR, gpio->number, value); } } duration = acc_monitor * intval; if (duration >= off_time) { system("/usr/sbin/pre_offdelay &"); sleep(OFF_DELAY); set_offdelay_shutdown(); } report_acc(value, duration); #endif return ; }
/*升级FPGA程序*/ static int updateFpgaProgram(const char *fpgafile, int fd,int fpgaNo) { int r_cnt1=0,r_cnt2=0; int ret = 0; char spidata[PER_READ_LEN]; int spifd = -1; FILE *fpgafd = NULL; int readlen = 0; int writelen = 0; int totalwritelen = 0; int flshEnableBit,fpgaProBit,fpgaDoneBit; //升级FPGA1 if(0 == fpgaNo) { flshEnableBit = FLASH_ENABLE_1; fpgaProBit = FPGA_PRO_1; fpgaDoneBit = FPGA_DONE_1; } else { flshEnableBit = FLASH_ENABLE_2; fpgaProBit = FPGA_PRO_2; fpgaDoneBit = FPGA_DONE_2; } printf("Enter into update FPGA Program \n"); ret = clear_gpio_bit(flshEnableBit, fd); printf("FLASH_ENABLE ret=%x \n", ret); clear_gpio_bit(fpgaProBit, fd); while(1){ usleep(100); ret = get_gpio_bit(fpgaDoneBit, fd); if( ret != 0 ){ printf("fpga Done is Not 0!ret:%d\n",ret); }else{ printf("fpga Done is 0!\n"); break; } r_cnt1++; if( r_cnt1>10){ break; } } if(0 == fpgaNo) { ret = system("flash_eraseall /dev/mtd0"); printf(" flash_eraseall /dev/mtd0 ret=%x \n", ret); spifd = open("/dev/mtd0", O_RDWR, 0); if(spifd < 0) { printf("open the SPI flash 0 Failed \n"); ret = -1; goto cleanup; } } else { ret = system("flash_eraseall /dev/mtd1"); printf(" flash_eraseall /dev/mtd1 ret=%x \n", ret); spifd = open("/dev/mtd1", O_RDWR, 0); if(spifd < 0) { printf("open the SPI flash 1 Failed \n"); ret = -1; goto cleanup; } } fpgafd = fopen(fpgafile, "r+b"); if(fpgafd == NULL) { printf("open the FPGA bin Failed \n"); ret = -1; goto cleanup; } rewind(fpgafd); while(1) { readlen = fread(spidata, 1, PER_READ_LEN, fpgafd); if(readlen < 1) { printf("file read end \n"); break; } writelen = write(spifd, spidata, readlen); totalwritelen += writelen; if(feof(fpgafd)) { printf("writelen = %d \n", writelen); writelen = write(spifd, spidata, readlen); break; } } close(spifd); spifd = -1; printf("totalwritelen = %d \n", totalwritelen); cleanup: printf("002 flash_eraseall updateFpgaProgram \n"); ret = set_gpio_bit(flshEnableBit, fd); printf("FLASH_ENABLE ret=%x \n", ret); if(spifd > 0) { close(spifd); } if(fpgafd) { fclose(fpgafd); } ret = set_gpio_bit(fpgaProBit, fd); printf("========set_gpio_bit:ret:%d\n",ret); usleep(300); while( 1 ) { ret = get_gpio_bit(fpgaDoneBit, fd); printf("========get_gpio_bit:ret:%d\n",ret); if( ret == 0){//正在写,允许写3s r_cnt1++; r_cnt2=0; }else if(1 == ret ){ //写完成,确保5次 r_cnt2++; r_cnt1=0; }else{ break; } if(r_cnt1 >10 || r_cnt2 >5){ break; } usleep(300); } return ret; }