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

📄 main_256.c.bak

📁 用于控制z1510芯片工作的程序代码
💻 BAK
字号:
#define ULONG	unsigned int
#define UCHAR	unsigned char
#define true 	1
#include <time.h>
#include <stdio.h>
#include <dos.h>
#include <dir.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <io.h>

#include <bios.h>
#include <stdlib.h>
#include <mem.h>
#include <fcntl.h>

#include "eny.h"
typedef enum{ModeAV,ModeV,ModeA} Mode;

unsigned short*   BaseAddress;

FILE			*fp;
FILE			*fp2;
void SetRecLED(int n)
{
	char num;
	num=inportb(0x104);
	if(n==0)
		num=num&0xfd;
	else
		num=num|2;
	outportb(0x104,num);
}
void SetTestLED(int n)
{
	char num;
	num=inportb(0x104);
	if(n==0)
		num=num&0xfe;
	else
		num=num|1;
	outportb(0x104,num);
}
void pulse_rec(FILE *fp, int pulse_num,int file_num)
{
	struct time pulse_time;  //used for save the time when pulse coming
	struct date pulse_date;
	if(fp == NULL)
		{
		printf("fp can not be null\n");
		return;
		}
	gettime(&pulse_time);
	getdate(&pulse_date);
	fprintf(fp,"[ShotRecord %d]\n",pulse_num);
	fprintf(fp,"VideoFlagPosition=%03d\n",file_num);
	fprintf(fp,"ShotTime=%04d%03d%02d%02d%02d%02d\n\n",
		pulse_date.da_year,pulse_date.da_mon,pulse_date.da_day,
		pulse_time.ti_hour, pulse_time.ti_min, pulse_time.ti_sec);
	
	fflush(fp);close(dup(fileno(fp)));
}
int get_free_space(void)
{
	long disk_free;
	struct dfree free;
	getdfree(getdisk()+1,&free);
	if(free.df_sclus == 0xffff)
		fprintf(fp2,"get disk free failed\n");
	disk_free =( long)free.df_avail*(long)free.df_sclus*(long)free.df_bsec;
	return disk_free/25600;
}
int get_num(char * str)
{
	int len;
	char num_str[20];
	len = strlen(str)-4;
	strncpy(num_str, str, len);
	num_str[len] = '\0';
	return atoi(num_str);
}
int get_file_min(void)
{
	int i,tmp;
	int file_num_min = 10000;
	struct  ffblk bk;
	i=findfirst("c:\\lve\\video\\*.mpg",&bk,0);
	//fprintf(fp2,"%s\n",bk.ff_name);
	tmp = get_num(bk.ff_name);
	if(file_num_min > tmp)
	  file_num_min = tmp;
	
	while(!i)
	{ 
		//remove(bk.ff_name);
		i=findnext(&bk);
		//fprintf(fp2,"%d,%s\n",i,bk.ff_name);
		tmp = get_num(bk.ff_name);
		if(file_num_min > tmp)
		  file_num_min = tmp;
		
		//fprintf(fp2,"file_num=%d,file_num_min =%d\n",file_num,file_num_min);
		
		
	}
	fprintf(fp2,"file_num_min =%d\n",file_num_min);
	fflush(fp2);
	close(dup(fileno(fp2)));
	return file_num_min;
}
int get_file_max(void)
{
	int i,tmp;
	int file_num = 0;
	struct  ffblk bk;
	i=findfirst("c:\\lve\\video\\*.mpg",&bk,0);
	//fprintf(fp2,"%s\n",bk.ff_name);
	tmp = get_num(bk.ff_name);
		
		if(file_num < tmp)
		  file_num = tmp;
	fflush(fp2);close(dup(fileno(fp2)));
	while(!i)
	{ 
		//remove(bk.ff_name);
		i=findnext(&bk);
		//fprintf(fp2,"%d,%s\n",i,bk.ff_name);
		tmp = get_num(bk.ff_name);
		
		if(file_num < tmp)
		  file_num = tmp;
		//fprintf(fp2,"file_num=%d\n",file_num);
		
		
	}
	fprintf(fp2,"file_num=%d\n",file_num);
	fflush(fp2);
	close(dup(fileno(fp2)));
	return file_num;
}
void main( )
{
	unsigned int iii,file_num, file_num_min;
	int i;
	unsigned long icount,tmp;
	static UCHAR	port_102,IntSource,ImageData[25600];
	unsigned short     bb = 0x100;

	char file1_flag,time_flag=0,pulse_flag,video_write=0,record_flag;
	unsigned char str_header[]={0x00,0x00,0x01,0xb3,0x16,0x01,0x20,0x83,0x00,0xc0,0x20,0xa4};
	char str_1[50],str_2[50],str_tmp[50];
	time_t tt_1,tt_2,tt_tmp;
	
	//FILE *fp2;
	
	int pulse_number = 0;
	int current_pulse_level=0;
	int last_pulse_level=0;
/*	verity();*/
	SetTestLED(0);
	SetRecLED(1);
	getcwd(str_1,49);strcpy(str_tmp,str_1);
	mkdir(strcat(str_1,"\\video"));chdir(str_1);
	
	
	fp2=fopen("pulse.txt","at");
	fseek(fp2, 0, SEEK_END);
	fprintf(fp2,"begin to record\n");
	//fprintf(fp2,"min=%d,max=%d\n",get_file_min(),get_file_max());
	
	chdir(str_tmp);
	strcat(str_1,"\\");
	icount = get_free_space();
	fprintf(fp2, "free space = %d\n", icount);
	BaseAddress = &bb;
	printf(" Start...\n");
	HR_OnPowerUP(BaseAddress);
	if(HR_InitDevice(BaseAddress,ModeAV) == 1)
		HR_InitVCDVA(BaseAddress);
	SetTestLED(1);
	file1_flag=1;
	//file_num=0;
/*printf("waiting...\n");
	while(inportb(0x102)==0xfe);
  */
//	SetLongTimeWDT(0x20);
//	EnableWDT();FeedLongWDT();
	HR_StartCapture(BaseAddress);
	
	fprintf(fp2, "start capture\n");
	fflush(fp2);
	close(dup(fileno(fp2)));
	while(file1_flag!=0)
	{
		
		file_num = get_file_max();
		file_num++;
		fprintf(fp2, "file_max = %d\n", file_num);
		strcpy(str_tmp,str_1);strcat(str_tmp,itoa(file_num,str_2,10));strcat(str_tmp,".mpg");
		fprintf(fp2,"crteat file %s\n",str_tmp);
		
		
		fp=fopen(str_tmp,"wb");
		if(fp==NULL) 
		{
			fprintf(fp2,"file open failed\n");
			fflush(fp2);
			close(dup(fileno(fp2)));
			
		}
		
		if( (port_102& 1)==0)
		{
			tt_1 = time(NULL);record_flag=1;
			SetRecLED(0);
		}
		else
		{
			record_flag=0;
			SetRecLED(1);
		}
			
		tt_1 = time(NULL);
		printf("waiting\n");
		HR_WriteAddress(BaseAddress,0x08,0x08);
		file1_flag=1;iii=0;time_flag=0;pulse_flag=0;video_write=0;
		while(file1_flag==1)
		{
			if(record_flag==1)
			{
				if( HR_ReadAddress(BaseAddress,0x0e)&0x02 )
				{
 //					FeedLongWDT();	
					outportb(0x100,0x00);
					i=0;
					while( i++ < 256 )  ImageData[iii++] = inportb(0x101);
					if(iii>=25600)
					{
						video_write++;
						fwrite(ImageData,256,100,fp);
						fflush(fp);close(dup(fileno(fp)));
						iii=0;
						
						if(icount--<=100)
						{
							//Todo pause 1510
							fprintf(fp2,"no sufficient free space !!!\n");
							//Todo delete file_min
							file_num_min = get_file_min();
							strcpy(str_tmp,str_1);
							strcat(str_tmp,itoa(file_num_min,str_2,10));
							strcat(str_tmp,".mpg");
							fprintf(fp2,"remove file %s\n", str_tmp);
							remove(str_tmp);
							icount = get_free_space();
							//file1_flag = 2;
							//fclose(fp);
							//Todo close fp
							//TODO create new file
							//Todo resume 1510
						}
					}
					
				}

				else if( difftime(time(NULL),tt_1)> 600)
					file1_flag = 2;
				else
				{
					port_102 = inportb(0x102);
					time_flag = (( port_102& 1) == 1) ? (time_flag+1) : 0;
					//pulse_flag = (( port_102& 2) == 0) ?(pulse_flag+1) : 0;//???????
					last_pulse_level = current_pulse_level;
					current_pulse_level = (( port_102& 2) == 2) ? 1 : 0;
					
					if(time_flag>50)//if gpio0 = '1' for 50 cycles then stop record
					{	
						record_flag=0;iii=0;
						//file1_flag=2; 
						SetRecLED(1);
						fprintf(fp2,"close file %d.mpg\n",file_num);
						printf("waiting\n");
					}
					if((current_pulse_level==1)&&(last_pulse_level ==0))
					{	
						//pulse_flag=0;
						pulse_number++;
						pulse_rec(fp2,pulse_number,file_num);
						fflush(fp2);close(dup(fileno(fp2)));
						printf("pulse %d\n",pulse_number);
					}
				}
				
				
			}
			else
			{
				time_flag = (((inportb(0x102) & 1) == 0) ? time_flag+1 : 0);
				if(time_flag>50)
				{	
					tt_1 = time(NULL);
					record_flag=1;
					file_num++;
					strcpy(str_tmp,str_1);strcat(str_tmp,itoa(file_num,str_2,10));strcat(str_tmp,".mpg");
					fprintf(fp2,"crteat file %s\n",str_tmp);
					fp=fopen(str_tmp,"wb");
					if(fp==NULL)
						fprintf(fp2,"crteat file %s error\n",str_tmp);
					HR_WriteAddress(BaseAddress,0x08,0x08);
					SetRecLED(0);
					printf("recording\n");
				}
				if( HR_ReadAddress(BaseAddress,0x0e)&0x02 )
				{
 //					FeedLongWDT();
					outportb(0x100,0x00);
					i=0;
					while( i++ < 256 )  inportb(0x101);
				}
			}
		}
		fclose(fp);
	}
	HR_StopCapture(BaseAddress);
}

⌨️ 快捷键说明

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