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

📄 video_oper.c

📁 在LPC2132的ARM处理器上
💻 C
📖 第 1 页 / 共 3 页
字号:
		
	UART0Putch(index);						//发送数据包索引		
	
	UART0Putch((uint8)temp);
	UART0Putch((uint8)(temp >> 8));			//发送数据包大小  2 bytes
	
	for (i = 0x0000; i < list_p -> pic_size; i++)
		UART0Putch(list_p -> pic_buf[i]);

	UART0Putch(check_code);						// 从$开始所有数据的异或和
	
	if (flag == 0x01){
	
		UART0Putch(0xff);	
		UART0Putch(0xff);	
		UART0Putch(0xff);	
		UART0Putch(0xff);
		UART0Putch(0xff);
			
		UART0Putch(0xff);
		UART0Putch(0xff);	
		UART0Putch(0xff);
		UART0Putch(0xff);	
		UART0Putch(0xff);	
		
		OSTimeDly (OS_TICKS_PER_SEC);		//延时1秒
	}
	
	//NodeDel();
	
}

/********************************************************************************************************/
void Send_Login_Order(void)
{
	uint8  err, i, check_code = 0x00;
	
	for (i = 0x0000; i < 9; i++)
		check_code ^= Start_Code[i];
	
	check_code ^= LOGIN_CODE;
	
	check_code ^= Flash_Index_Data.net_config_size + 27;
	
	check_code ^= 0x00;
	
	for (i = 0x00; i < 6; i++)
		check_code ^= Flash_Index_Data.dev_code[i];
	
	check_code ^= ',';
		
	for (i = 0x00; i < 11; i++)
		check_code ^= Flash_Index_Data.local_tel_num[i];
	
	check_code ^= ',';	
	
	for (i = 0x00; i < 8; i++)
		check_code ^= Flash_Index_Data.tag_num[i];
	
	for (i = 0x0000; i < Flash_Index_Data.net_config_size; i++)
		check_code ^= Flash_Index_Data.net_config[i];
			
	OSSemPend(Uart0_Sem, 0, &err);	
		
	UART0Write((uint8 *)Start_Code, 9);		//引导码 9 bytes
	UART0Putch(LOGIN_CODE);					//命令码 1 byte   0xa0 表示校验数据包
	UART0Putch(Flash_Index_Data.net_config_size + 27);	//2字节长度,低位	
	UART0Putch(0x00);								//2字节长度,高位
	
	UART0Write((uint8 *)(&Flash_Index_Data.dev_code[0]), 6);		//设备编码 6 bytes
		
	UART0Putch(',');
		
	UART0Write((uint8 *)(&Flash_Index_Data.local_tel_num[0]), 11);	//本机电话号 11 bytes
		
	UART0Putch(',');
		
	UART0Write((uint8 *)(&Flash_Index_Data.tag_num[0]), 8);			//车牌号 8 bytes
			
	UART0Write((uint8 *)&(Flash_Index_Data.net_config[0]), Flash_Index_Data.net_config_size);
	
	UART0Putch(check_code);
	
	OSTimeDly (OS_TICKS_PER_SEC);		//延时1秒
			
	OSSemPost(Uart0_Sem);
}

/********************************************************************************************************/
uint8 Send_Pic_Order(void)
{
	PIC_STR 	pic_buf;
	PIC_FLASH 	flash_buf;
	uint8 err, i, *value, flag, num, index;
	uint16 j, k, begin_page, end_page, page_num, page_addr;
	
	if (Flash_Index_Data.flash_pic_num == 0x00)
		return 	NOPIC_ERROR;
		
	for (i = 0x00; i < Flash_Index_Data.flash_pic_num; i++){
	
		begin_page = Flash_Index_Data.pic_str_arry[i].pic_flash_begin_page;
		end_page = Flash_Index_Data.pic_str_arry[i].pic_flash_end_page;
		
		if (end_page > begin_page)
			page_num = end_page - begin_page + 0x01;
		else 
			page_num = MAX_FLASH_PAGE - end_page + begin_page + 0x01;
		
		for (j = 0x00; j < page_num; j++){
			
			if (j + begin_page >= MAX_FLASH_PAGE)
				page_addr = j + begin_page - MAX_FLASH_PAGE;
			else page_addr = j + begin_page;
				
			Read_Flash_Page((uint8 *)&flash_buf, page_addr);
		
			pic_buf.pic_index = flash_buf.package_index;
			pic_buf.pic_type = VIDEO_CH1;
			pic_buf.package_num = flash_buf.package_num;
			pic_buf.pic_size = flash_buf.pic_size;
		
			for (k = 0x00; k < SAVE_SIZE; k++)
				pic_buf.pic_buf[k] = flash_buf.pic_buf[k];
			
			if (j == (page_num - 1))
				flag = 0x01;		// 图片最后一页
			else flag = 0x00;	
			
			OSSemPend(Uart0_Sem, 0, &err);		
			SendPicData(&pic_buf, PIC_CODE, flag);
			OSSemPost(Uart0_Sem);
		
			OSTimeDly (OS_TICKS_PER_SEC / 10);		//延时0.1秒
			
		}// for (j = 0x00; j < page_num; j++) 
		
		EchoMbox -> OSEventPtr = 0x00;
	
		value = (uint8 *)OSMboxPend(EchoMbox, (OS_TICKS_PER_SEC * 15), &err);
	
		if (err != OS_NO_ERR)
			return 	ERROR;
		
		if (*value != 0x00){
		
			num = *value++;			// 坏数据包的个数
			
			for (j = 0x00; j < num; j++){
				
				index = *value++;
				 
				if (index + begin_page >= MAX_FLASH_PAGE)
					page_addr = index + begin_page - MAX_FLASH_PAGE;
				else page_addr = index + begin_page;
			
				Read_Flash_Page((uint8 *)&flash_buf, page_addr);
		
				pic_buf.pic_index = flash_buf.package_index;
				pic_buf.pic_type = VIDEO_CH1;
				pic_buf.package_num = flash_buf.package_num;
				pic_buf.pic_size = flash_buf.pic_size;
		
				for (k = 0x00; k < SAVE_SIZE; k++)
					pic_buf.pic_buf[k] = flash_buf.pic_buf[k];
			
				if (j == (page_num - 1))
					flag = 0x01;		// 图片最后一页
				else flag = 0x00;	
			
				OSSemPend(Uart0_Sem, 0, &err);		
				SendPicData(&pic_buf, RE_PIC_CODE, flag);
				OSSemPost(Uart0_Sem);
		
				OSTimeDly (OS_TICKS_PER_SEC / 10);		//延时0.1秒
			
			}// for (j = 0x00; j < page_num; j++) 
			
		}//if (*value != 0x00) 
				
		IOCLR |= PIC_COMU_LED;					/* 设置P0.10输出为0 D22 亮*/		
		OSTimeDly (OS_TICKS_PER_SEC / 2);		//延时0.5秒
		IO0SET |= PIC_COMU_LED;					/* 设置P0.10输出为1 D22 灭*/
		
	}// for (i = 0x00; i < Flash_Index_Data.flash_pic_num; i++)
	
	Flash_Index_Data.flash_pic_num = 0x00;
	
	return 	SUCCESS;
	 		
}

/********************************************************************************************************/
uint8 GPS_Package_Oper(GPS_DATA *gps_data, uint8 *buf)
{
	uint8 size, i;
	
	size = gps_data -> Latitude_Size + 	gps_data -> Longitude_Size
			+ gps_data -> Velocity_Size + gps_data -> Angle_Size + 19;			
		
	*buf++ = '#';
	*buf++ = 'G';
	*buf++ = 'P';
	*buf++ = 'S';
	*buf++ = ',';
	
	for (i = 0x00; i < 6; i++)
		*buf++ = gps_data -> Time_Buf[i];
	
	*buf++ = ',';
	
	for (i = 0x00; i < gps_data -> Latitude_Size; i++)
		*buf++ = gps_data -> Latitude_Buf[i];
		
	*buf++ = ',';
	*buf++ = 'N';
	*buf++ = ',';
		
	for (i = 0x00; i < gps_data -> Longitude_Size; i++)
		*buf++ = gps_data -> Longitude_Buf[i];
		
	*buf++ = ',';
	*buf++ = 'E';
	*buf++ = ',';
	
	for (i = 0x00; i < gps_data -> Velocity_Size; i++)
		*buf++ = gps_data -> Velocity_Buf[i];
	
	*buf++ = ',';
	
	for (i = 0x00; i < gps_data -> Angle_Size; i++)
		*buf++ = gps_data -> Angle_Buf[i];
		
	return size;
			
}

/********************************************************************************************************/
void Send_GPS_Order(void)
{
	uint8	i, j, index, buf[64], check_code = 0x00;
	uint16 	size;
	
	if (GPS_Data_Size < GPS_DATA_NUM)
		index = 0x00;
	else index = GPS_Data_Index;
		
	for (i = 0x00; i < GPS_Data_Size; i++){
	
		size = GPS_Package_Oper(&History_GPS_Data[index], buf);
		
		if (index < (GPS_Data_Size - 0x01))
			index += 0x01;
		else index = 0x00;
		
		for (j = 0x00; j < 9; j++)
			check_code ^= Start_Code[j];
	
		check_code ^= GPS_CODE;
	
		for (j = 0x00; j < 6; j++)
			check_code ^= Flash_Index_Data.dev_code[j];
	
		check_code ^= ',';
		
		for (j = 0x00; j < 11; j++)
			check_code ^= Flash_Index_Data.local_tel_num[j];
	
		check_code ^= ',';	
	
		for (j = 0x00; j < 8; j++)
			check_code ^= Flash_Index_Data.tag_num[j];
			
		check_code ^= Flash_Index_Data.mode_type;
		check_code ^= GPS_Send_Index;	
		check_code ^= (uint8)size;
		check_code ^= (uint8)(size >> 8);
		
		for (j = 0x00; j < size; j++)
			check_code ^= buf[j];
		
		UART0Write((uint8 *)Start_Code, 9);		//引导码 9 bytes
	
		UART0Putch(GPS_CODE);					//命令码 1 byte   0xa5 表示GPS数据
	
		UART0Write((uint8 *)(&Flash_Index_Data.dev_code[0]), 6);		//设备编码 6 bytes
		
		UART0Putch(',');
		
		UART0Write((uint8 *)(&Flash_Index_Data.local_tel_num[0]), 11);	//本机电话号 11 bytes
		
		UART0Putch(',');
		
		UART0Write((uint8 *)(&Flash_Index_Data.tag_num[0]), 8);			//车牌号 8 bytes
		
		UART0Putch(Flash_Index_Data.mode_type);							//模块类型
	
		UART0Putch(GPS_Send_Index++);									//数据包索引
		
		UART0Putch((uint8)size);
		UART0Putch((uint8)(size >> 8));		//发送数据包大小  2 bytes
		
		UART0Write(buf, size);
		
		UART0Putch(check_code);
		
		OSTimeDly(OS_TICKS_PER_SEC / 2);  
	}
	
}

/********************************************************************************************************/
uint8 	CalCheckCode(uint8 *Buf, uint8 CheckCode, uint8 Size)     
{
	uint8	i, Value = 0;
		
	for(i = 0; i < Size; i++)
	{
		Value ^= *Buf++;
	}
	
	if (Value == CheckCode)
		return SUCCESS;
	else 	return CHECK_ERROR;
}
/********************************************************************************************************/
//$GPRMC,005301.000,A,3905.1699,N,11707.1074,E,4.82,301.04,140808,,,A*6E
/********************************************************************************************************/
uint8	Get_GPRMC_Data(GPS_DATA *gps_data)
{
	uint8 i, value, buf[8];
	
	for (i = 0x00; i < 0x06; i++)	
		gps_data -> Time_Buf[i] = UART1Getch();
	
	if (UART1Getch() != '.'){
		gps_data -> Gps_Flag = 0x00;
		return ERROR;
	}
		
	buf[0] = UART1Getch();		// 0
	buf[1] = UART1Getch();		// 0
	buf[2] = UART1Getch();		// 0
		
	if ((UART1Getch() != ',')
		|| (UART1Getch() != 'A')
		|| (UART1Getch() != ',')){
		gps_data -> Gps_Flag = 0x00;
		return ERROR;
	}
			
	for (i = 0x00; i < 12; i++){
		 
		value = UART1Getch();
		if (value == ',')
			break; 
		gps_data -> Latitude_Buf[i] = value;
	}
	
	if (value == 12){
		gps_data -> Gps_Flag = 0x00;
		return ERROR;
	}
			
	gps_data -> Latitude_Size = i;	
		
	if ((UART1Getch() != 'N')
		|| (UART1Getch() != ',')){
		gps_data -> Gps_Flag = 0x00;
		return ERROR;
	}
			
	for (i = 0x00; i < 12; i++){
		 
		value = UART1Getch();
		if (value == ',')
			break; 
		gps_data -> Longitude_Buf[i] = value;
	}
	if (value == 12){
		gps_data -> Gps_Flag = 0x00;
		return ERROR;
	}
			
	gps_data -> Longitude_Size = i;	
		
	if ((UART1Getch() != 'E')
		|| (UART1Getch() != ',')){
		gps_data -> Gps_Flag = 0x00;
		return ERROR;
	}
	
	gps_data -> Gps_Flag = 0x01;
		
	return SUCCESS;	

⌨️ 快捷键说明

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