5 Mart 2014 Çarşamba

Link16 ve İz Numarası

İz Numarası
Link16 izleri 5 karakterden oluşur ve 19 bitlik uzunluğundadır. Aşağıda iz numarasının örüntüsü var.
AAXXX
    A = 0-7 veya A-Z (I ve O hariç) arasında bir değer ve 5 bit uzunluğunda
    X=1-7 arasında bir değer ve 3 bit uzunluğunda

İlk iki karakter alfanümerik oktal, geriye kalan 3 karakter ise oktal değerler alırlar. Örnek AB112 gibi.

Link16'da 77777 Network Manager'ın numarası olarak kullanılıyor. Yani bir sanal numara gibi. Network Manager'ın numarasını bilmeyen bir birim 77777 adresine de mesaj gönderebilir.

177 numaralı adres broadcast için kullanılır.
176 numaralı adres L16'dan L11'e veri aktarımı (data forwarding) yaparken kullanılır. Bu yüzden özel bir adrestir.

İz Numarasını String'e Çevirmek
static char charMap [] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y','Z',}
uint32_t trackNo = ...
int part1 = (trackNo) 0X7 ; // 3 bits
int part2 = (trackNo >> 3) 0X7 ; // 3 bits
int part3 = (trackNo >> 6) 0X7 ; // 3 bits
int part4 = (trackNo >> 9) 0X1F ; // 5 bits
int part5 = (trackNo >> 14) 0X1F ; // 5 bits

char tnString [6] = {0};
tnString [0] = charMap [part5];
tnString [1] = charMap [part4];
tnString [2] = charMap [part3];
tnString [3] = charMap [part2];
tnString [4] = charMap [part1];

15 Bitten 19 bite Çevirmek
19 bitlik gösterimde A örüntüsü oktal 0-7 arasında bir değer alırsa bazı bitler her zaman 0 olur. Yani 18. , 17. , 13. ve 12. bitler her 0'dır.
7 için bit gösterimi 00111'dir
77 için bit gösterimi 00111 00111'dir. Yani

00111 00111 111111111 (9 dolu bit haline gelir)
                               
                         
Bu bitleri boş göndermek yerine 15 bit olarak sıkıştırmak ta mümkün. Bu yüzden link katılımcılarının iz numarası 15 bit uzunluğundadır. 15 biti 19 bit formata dönüştürmek için aşağıdaki kod kullanılabilir.

int Convert15BitTo19Bit (short fifteenbits) {
   //Yukarıda mavi ile belirtilen 12 biti oku
  short twelvebits = fifteenbits & 0x00000FFF;
  //Kırmızı ile belirtilen 3 biti oku. 
   //Bu bitleri 2 defa kaydırarak başa ve sona yukarıda yeşil ile belirtilen 0'ları ekle
  int nineteenbits = ( fifteenbits & 0x 00007000) << 2) | twelvebits;
  return nineteenbits;
}

19 Bitten 15 Bite Çevirme
short Convert19BitTo15Bit  (int nineteenbits) {
  short twelvebits = nineteenbits & 0x00000FFF;
  short threebits = nineteenbit & 0x0001C000) >> 14;
  short fifteenbits = ( threebits << 12 ) | twelvebits;
  return fifteenbits;
}

Hiç yorum yok:

Yorum Gönder