PPD (Packet Property Data)

PPD 값이 16 ~ 254 범위의 값인 경우,현재 패킷은 비스트림임을 의미.

선정의된  PPD 값들.  : 32, 34, 48, 64, 128 은 아래 같은 방식으로만 사용 가능.

  • 32 : 데이터 송신. 상대방에게 결과 요청하지 않는 데이터 송신.
  • 34 : 데이터 송신. 상대방에게 결과 요청하는 데이터 송신.
  • 48 : PPD 34 수신한 기기에서는 PPD 48 로 결과 응답 송신.
  • 64 : 데이터 요청.
  • 128 : PPD 64 수신한 기기에서는 PPD 128 로 응답 데이터 송신.

 

PBS (Packet Byte Size)

현재 송신한 패킷의 바이트 단위의 패킷 사이즈 기록. 패킷 바이트 사이즈는 최대 패킷인덱스 +1 의 값을 갖는다.

 

IID (Information Identification Data)

현재 전송하는 패킷에 탑재된 정보 식별용 고유번호.

 

Code Example

non-stream LXSDF T5A 형식으로 송신된 시리얼 데이터 수신한 측에서 매번의 바이트 마다 함수 Proc_NS_T5A 호출하면, 내부적으로 패킷검출하고 PACKET_NS_T5A[100] 에 LXSDFT5A  1 패킷 저장.

/*
LXSDF T5A Non Stream example codes.
feature : Parsing and After processing for each PPD value. 

inputs
byte_now : One byte per call
*/

uint8_t PACKET_NS_T5A[100]; // array for gathering the received bytes. 

void Proc_NS_T5A(uint8_t byte_data)
{
  int ppd = Parsing_NS_T5A(byte_data);

  if(ppd == -1) return ; // not completed packet

  switch(ppd)
  {
    case 128:  // response from the opposite for this request 64
            //do something
    break;

    case 64:  // request 64 from the opposite, should response 128
            //do something
    break;

    case 34: // request 34 from the opposite, shoulde response 48
            //do something
    break;

    case 32: // request 32 from the opposite. no need to response tx.
            //do something
    break;

  }
}


/*
inputs
byte_now : One byte per call

return
-1 : when packet not complete
PPD : when packet completed
*/
int Parsing_NS_T5A(uint8_t byte_now)
{

  static uint8_t byte_prev8[8]    = {0};   // for accumulateing the byte_now
  static uint8_t sync_after       = 0;	// marking 1 when T5A SyncBytes detected
  static uint32_t PacketIndex_T5A = 0;  // LXSDF T5A Packet Index

  /// fast shifting the byte_prev8 and then put the byte_now.
  memmove(byte_prev8+1, byte_prev8,7); //byte_prev8 array shift  i.e byte_prev8[7] = byte_prev8[6];, [6] = [5], ... [1] = [0]
  byte_prev8[0] = byte_now; //

  ///Check T5A SyncBytes
  if((byte_prev8[7] == 0xFF) && (byte_prev8[6] == 0xFF) && (byte_prev8[5] == 0xFF) && (byte_prev8[4] == 0xFF) && (byte_prev8[3] == 0xFE)   )  // SyncBytes Detected
  {
      sync_after = 1; // mark SyncBytes detected.

      PacketIndex_T5A = 6;

      PACKET_NS_T5A[5] =  byte_prev8[2]; // PPD
      PACKET_NS_T5A[6] =  byte_prev8[1]; // PBS
  }

  if(sync_after == 0) return -1; // not detected SyncBytes.

  PacketIndex_T5A ++;

  //in this point  PacketIndex_T5A is 7

  PACKET_NS_T5A[PacketIndex_T5A] = byte_now;

  ///Check One Packet Completed . when (PacketIndex_T5A+1) is equal to PBS(PACKET_NS_T5A[6]) 
  if((PacketIndex_T5A+1) == PACKET_NS_T5A[6])
  {
      sync_after = 0 ; // init sync_after.

      return PACKET_NS_T5A[5]; // return PPD
  }

  return -1 ;
}