@ -22,6 +22,11 @@ namespace nRTP
@@ -22,6 +22,11 @@ namespace nRTP
private static UInt32 _ Seqcounter = 0 ;
private static UInt16 _ SeqCounter_Hi ;
private static UInt16 _ SeqCounter_Low ;
private static Byte _ rejim_oes ;
private static Byte _ zahvat ;
private static Byte _ color ;
private static Byte _ status ;
public static Byte MH_VerPXCC
{
get = > _ VerPXCC ;
@ -100,6 +105,46 @@ namespace nRTP
@@ -100,6 +105,46 @@ namespace nRTP
public static Int16 SD_Pitch ; // Тангаж БЛА (0,01 град)
public static Int16 SD_FrameId ;
public static UInt16 SD_X ; // координата центра цели в растре изображения по горизонтали
public static UInt16 SD_Y ; //координата центра цели в растре изображения по вертикали
public static Byte SD_lx ; // размер цели в растре эталонного изображения по горизонтали
public static Byte SD_ly ; // размер цели в растре эталонного изображения по вертикали
public static Byte SD_rejim_oes // Режим ОЭС: «0» – Обзор, «1» – АС
{
get = > _ rejim_oes ;
set = > _ rejim_oes = value ;
}
public static Byte SD_zahvat // Захват: «0» – отсутствие захвата, «1» – налачие захвата
{
get = > _ zahvat ;
set = > _ zahvat = value ;
}
public static Byte SD_color // Цвет изображения: «1» – цветное, «0» – монохромное
{
get = > _ color ;
set = > _ color = value ;
}
public static Byte SD_Status
{
get
{
_ status | = ( Byte ) ( _ rejim_oes < < 0 ) ;
_ status | = ( Byte ) ( _ zahvat < < 1 ) ;
_ status | = ( Byte ) ( _ color < < 2 ) ;
return _ status ;
}
set
{
_ status = value ;
_ rejim_oes = ( Byte ) ( ( value > > 0 ) & 0x01 ) ;
_ zahvat = ( Byte ) ( ( value > > 1 ) & 0x01 ) ;
_ color = ( Byte ) ( ( value > > 2 ) & 0x01 ) ;
}
}
public static Byte SD_rezerv ;
//RTPVideoSupplementalDataExtra
public static UInt32 DE_TLV_X ; // Линия визирования цели в растроввых координатах
public static UInt32 DE_TLV_Y ; //
@ -119,101 +164,104 @@ namespace nRTP
@@ -119,101 +164,104 @@ namespace nRTP
}
}
public static Byte [ ] DataH0 = new Byte [ 6 8 ] ;
public static Byte [ ] DataH0 = new Byte [ 7 6 ] ;
public static Byte [ ] DataH1 = new Byte [ 2 0 ] ;
public static void MakeDataH0 ( )
{
Array . Copy ( BitConverter . GetBytes ( RTP . MH_VerPXCC ) , 0 , DataH0 , 0 , 1 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . MH_MPT ) , 0 , DataH0 , 1 , 1 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . MH_SeqCounter_Low ) , 0 , DataH0 , 2 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . MH_Timestamp ) , 0 , DataH0 , 4 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . MH_SSRC ) , 0 , DataH0 , 8 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . MH_SeqCounter_Hi ) , 0 , DataH0 , 1 2 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . MH_DataLen ) , 0 , DataH0 , 1 4 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . MH_RowNumber ) , 0 , DataH0 , 1 6 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . MH_Offset ) , 0 , DataH0 , 1 8 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . SD_Width ) , 0 , DataH0 , 2 0 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . SD_Height ) , 0 , DataH0 , 2 2 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . SD_AzUpr ) , 0 , DataH0 , 2 4 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . SD_ElUpr ) , 0 , DataH0 , 2 8 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . SD_Shirota ) , 0 , DataH0 , 3 2 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . SD_Dolgota ) , 0 , DataH0 , 3 6 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . SD_Vysota ) , 0 , DataH0 , 4 0 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . SD_Course ) , 0 , DataH0 , 4 4 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . SD_Roll ) , 0 , DataH0 , 4 6 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . SD_Pitch ) , 0 , DataH0 , 4 8 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . SD_FrameId ) , 0 , DataH0 , 5 0 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . DE_TLV_X ) , 0 , DataH0 , 5 2 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . DE_TLV_Y ) , 0 , DataH0 , 5 6 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . DE_TLV_dX ) , 0 , DataH0 , 6 0 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . DE_TLV_dY ) , 0 , DataH0 , 6 4 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( MH_VerPXCC ) , 0 , DataH0 , 0 , 1 ) ;
Array . Copy ( BitConverter . GetBytes ( MH_MPT ) , 0 , DataH0 , 1 , 1 ) ;
Array . Copy ( BitConverter . GetBytes ( MH_SeqCounter_Low ) , 0 , DataH0 , 2 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( MH_Timestamp ) , 0 , DataH0 , 4 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( MH_SSRC ) , 0 , DataH0 , 8 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( MH_SeqCounter_Hi ) , 0 , DataH0 , 1 2 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( MH_DataLen ) , 0 , DataH0 , 1 4 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( MH_RowNumber ) , 0 , DataH0 , 1 6 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( MH_Offset ) , 0 , DataH0 , 1 8 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( SD_Width ) , 0 , DataH0 , 2 0 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( SD_Height ) , 0 , DataH0 , 2 2 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( SD_AzUpr ) , 0 , DataH0 , 2 4 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( SD_ElUpr ) , 0 , DataH0 , 2 8 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( SD_Shirota ) , 0 , DataH0 , 3 2 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( SD_Dolgota ) , 0 , DataH0 , 3 6 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( SD_Vysota ) , 0 , DataH0 , 4 0 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( SD_Course ) , 0 , DataH0 , 4 4 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( SD_Roll ) , 0 , DataH0 , 4 6 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( SD_Pitch ) , 0 , DataH0 , 4 8 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( SD_FrameId ) , 0 , DataH0 , 5 0 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( SD_X ) , 0 , DataH0 , 5 2 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( SD_Y ) , 0 , DataH0 , 5 4 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( SD_lx ) , 0 , DataH0 , 5 6 , 1 ) ;
Array . Copy ( BitConverter . GetBytes ( SD_ly ) , 0 , DataH0 , 5 7 , 1 ) ;
Array . Copy ( BitConverter . GetBytes ( SD_Status ) , 0 , DataH0 , 5 8 , 1 ) ;
Array . Copy ( BitConverter . GetBytes ( SD_rezerv ) , 0 , DataH0 , 5 9 , 1 ) ;
Array . Copy ( BitConverter . GetBytes ( DE_TLV_X ) , 0 , DataH0 , 6 0 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( DE_TLV_Y ) , 0 , DataH0 , 6 4 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( DE_TLV_dX ) , 0 , DataH0 , 6 8 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( DE_TLV_dY ) , 0 , DataH0 , 7 2 , 4 ) ;
}
public static void MakeDataH1 ( )
{
Array . Copy ( BitConverter . GetBytes ( RTP . MH_VerPXCC ) , 0 , DataH1 , 0 , 1 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . MH_MPT ) , 0 , DataH1 , 1 , 1 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . MH_SeqCounter_Low ) , 0 , DataH1 , 2 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . MH_Timestamp ) , 0 , DataH1 , 4 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . MH_SSRC ) , 0 , DataH1 , 8 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . MH_SeqCounter_Hi ) , 0 , DataH1 , 1 2 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . MH_DataLen ) , 0 , DataH1 , 1 4 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . MH_RowNumber ) , 0 , DataH1 , 1 6 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( RTP . MH_Offset ) , 0 , DataH1 , 1 8 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( MH_VerPXCC ) , 0 , DataH1 , 0 , 1 ) ;
Array . Copy ( BitConverter . GetBytes ( MH_MPT ) , 0 , DataH1 , 1 , 1 ) ;
Array . Copy ( BitConverter . GetBytes ( MH_SeqCounter_Low ) , 0 , DataH1 , 2 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( MH_Timestamp ) , 0 , DataH1 , 4 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( MH_SSRC ) , 0 , DataH1 , 8 , 4 ) ;
Array . Copy ( BitConverter . GetBytes ( MH_SeqCounter_Hi ) , 0 , DataH1 , 1 2 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( MH_DataLen ) , 0 , DataH1 , 1 4 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( MH_RowNumber ) , 0 , DataH1 , 1 6 , 2 ) ;
Array . Copy ( BitConverter . GetBytes ( MH_Offset ) , 0 , DataH1 , 1 8 , 2 ) ;
}
public static void GetDataH0 ( )
{
MH_VerPXCC = DataH0 [ 0 ] ;
MH_MPT = DataH0 [ 1 ] ;
MH_SeqCounter_Low = BitConverter . ToUInt16 ( DataH0 , 2 ) ;
MH_Timestamp = BitConverter . ToUInt32 ( DataH0 , 4 ) ;
MH_SSRC = BitConverter . ToUInt32 ( DataH0 , 8 ) ;
MH_SeqCounter_Hi = BitConverter . ToUInt16 ( DataH0 , 1 2 ) ;
MH_DataLen = BitConverter . ToUInt16 ( DataH0 , 1 4 ) ;
MH_RowNumber = BitConverter . ToUInt16 ( DataH0 , 1 6 ) ;
MH_Offset = BitConverter . ToUInt16 ( DataH0 , 1 8 ) ;
SD_Width = BitConverter . ToUInt16 ( DataH0 , 2 0 ) ;
SD_Height = BitConverter . ToUInt16 ( DataH0 , 2 2 ) ;
SD_AzUpr = BitConverter . ToUInt16 ( DataH0 , 2 4 ) ;
SD_ElUpr = BitConverter . ToUInt16 ( DataH0 , 2 8 ) ;
SD_Shirota = BitConverter . ToUInt16 ( DataH0 , 3 2 ) ;
SD_Dolgota = BitConverter . ToUInt16 ( DataH0 , 3 6 ) ;
SD_Vysota = BitConverter . ToUInt16 ( DataH0 , 4 0 ) ;
SD_Course = BitConverter . ToInt16 ( DataH0 , 4 4 ) ;
SD_Roll = BitConverter . ToInt16 ( DataH0 , 4 6 ) ;
SD_Pitch = BitConverter . ToInt16 ( DataH0 , 4 8 ) ;
SD_FrameId = BitConverter . ToInt16 ( DataH0 , 5 0 ) ;
SD_X = BitConverter . ToUInt16 ( DataH0 , 5 2 ) ;
SD_Y = BitConverter . ToUInt16 ( DataH0 , 5 4 ) ;
SD_lx = DataH0 [ 5 6 ] ;
SD_ly = DataH0 [ 5 7 ] ;
SD_Status = DataH0 [ 5 8 ] ;
SD_rezerv = DataH0 [ 5 9 ] ;
DE_TLV_X = BitConverter . ToUInt32 ( DataH0 , 6 0 ) ;
DE_TLV_Y = BitConverter . ToUInt32 ( DataH0 , 6 4 ) ;
DE_TLV_dX = BitConverter . ToUInt32 ( DataH0 , 6 8 ) ;
DE_TLV_dY = BitConverter . ToUInt32 ( DataH0 , 7 2 ) ;
}
public static void GetDataH1 ( )
{
MH_VerPXCC = DataH0 [ 0 ] ;
MH_MPT = DataH0 [ 1 ] ;
MH_SeqCounter_Low = BitConverter . ToUInt16 ( DataH0 , 2 ) ;
MH_Timestamp = BitConverter . ToUInt32 ( DataH0 , 4 ) ;
MH_SSRC = BitConverter . ToUInt32 ( DataH0 , 8 ) ;
MH_SeqCounter_Hi = BitConverter . ToUInt16 ( DataH0 , 1 2 ) ;
MH_DataLen = BitConverter . ToUInt16 ( DataH0 , 1 4 ) ;
MH_RowNumber = BitConverter . ToUInt16 ( DataH0 , 1 6 ) ;
MH_Offset = BitConverter . ToUInt16 ( DataH0 , 1 8 ) ;
}
/ *
struct RTPMsgHeader
{
uint8_t Ver : 2 ; // версия протокола (текущая версия 2)
uint8_t P : 1 ; // = 0 (не используется заполнение в конце пакета)
uint8_t X : 1 ; // = 0 (не используются дополнительные заголовки)
uint8_t CC : 4 ; // = 0 (CSRC - идентификаторы не используются);
uint8_t M : 1 ; // маркерный бит. Установка этого бита в 1 свидетельствует о том, что данный UDP – пакет содержит последнюю строку кадра, для всех остальных пакетов задается 0
uint8_t PT : 7 ; // поле идентифицирует формат трафика RTP и определяет его интерпретацию. Задается 99
uint16_t SeqCounter_Low ; // Номер последовательности (младшие 16 бит)
uint32_t Timestamp ; // Метка времени (90 кГц отсчеты), одинакова для всех пакетов кадра
uint32_t SSRC ; // 12345678 (идентификатор источника информации)
uint16_t SeqCounter_Hi ; // Номер последовательности (старшие 16 бит)
uint16_t DataLen ; // Количество байт данных строки, включенной в пакет
uint16_t RowNumber ; // Номер строки
uint16_t Offset ; // Смещение первого пиксела в строке (= 0)
uint32_t get_seqcounter ( ) { return ( ( SeqCounter_Hi < < 1 6 ) | SeqCounter_Low ) ; }
} ;
//------------------------------------------------------------------------------------------------------------
struct RTPVideoSupplementalData
{
uint16_t Width ; // Ширина (пиксели)
uint16_t Height ; // Высота (пиксели)
float AzUpr ; // (град)
float ElUpr ; // (град)
int16_t Course ; // Курс БЛА (0,01 град)
int16_t Roll ; // Крен БЛА (0,01 град)
int16_t Pitch ; // Тангаж БЛА (0,01 град)
int16_t FrameId ;
RTPVideoSupplementalData ( )
{
: : memset ( this , 0 , sizeof ( RTPVideoSupplementalData ) ) ;
}
} ;
//------------------------------------------------------------------------------------------------------------
// Дополнительные данные нулевой строки выходящие за рамки ПИВ
struct RTPVideoSupplementalDataExtra
{
uint32_t TLV_X ; // Линия визирования цели в растроввых координатах
uint32_t TLV_Y ; //
uint32_t TLV_dX ; // поправки для линии визирования цели в растроввых координатах
uint32_t TLV_dY ; //
} ;
* /
}
}