2014-02-11 4 views
0

다음과 같은 간단한 프로토콜 프레임이 있습니다. 테스트를 위해 고정 CRC 필드를 가정했지만 이제 프레임의 이전 바이트에서 계산 된 실제 CRC를 추가해야합니다. 그것을하는 방법? 어쩌면 중첩 구조체로?구문 파이썬 라이브러리를 사용하여 CRC 필드 추가

MyFrame = Struct("MyFrame", 
       ULInt8("type"), 
       ULInt8("IDMsg"), 
       ULInt8("totalPackets"), 
       ULInt8("numPacket"), 
       ULInt8("day"), 
       ULInt8("month"), 
       ULInt8("year"), 
       ULInt8("hour"), 
       ULInt8("minute"), 
       ULInt8("second"), 
       ULInt16("length"), 
       Bytes("payload", lambda ctx: (ctx.length - 14)), 
       ULInt16("crc") 
      ) 

답변

0

CRC 필드가 올바른지 확인하려면 유효성 검사기 어댑터를 확인하십시오. 같은과 _validate 오버라이드 (override) : CRC이 CRC 기능입니다

_validate(self, obj, context): 
    return obj.crc == crc(context.type, context.idmsg, . . .) 

당신은 컨텍스트를 사용하여 인수의 나머지 부분에서 피드.

최종 컨테이너에 다른 필드를 추가하려면 값을 사용하십시오.

Value('calculated_crc', lambda ctx: crc(ctx.type, ctx.idmsg, . . .))