📄 video_oper.c
字号:
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 + -