Exemplo n.º 1
0
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 ;
}
Exemplo n.º 2
0
/*升级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;
}