2016-06-14 6 views
0

PW-MAC 프로토콜을 사용하여 contiki에서 내 자신의 RDC 계층을 코딩하려고합니다. 네트워크가없고 전송 계층이 없으므로이 계층에서 브로드 캐스트를 보내는 방법을 궁금합니다. 내가이있는 경우 매우 귀찮을 수 있도록 소스의 예는 방송 UDP를 사용하여 ...Contiki의 RDC 계층에서 브로드 캐스트 패킷을 보내는 방법은 무엇입니까?

NETSTACK_RDC.send(mac_callback_t sent, void *ptr) 

하지만 난 정말 무엇을 mac_callback_t 및 PTR은 모르는 : 내가 사용해야하는 기능이있을 것 전송 계층을 구현한다. 답

+0

상당히 혼란 스럽습니다. 유니 캐스트 패킷을 보내고 브로드 캐스트 패킷을 보내도록 코드를 수정하거나 패킷을 보내려는 방법을 알고 있습니까? 방송 대 유니 캐스트 패킷을 갖는 RDC 계층은 큰 차이를 내지 않을 수 있습니다. – kfx

답변

0

에 대한

덕분에 당신은 조금 당신에게 많은 도움이 될 수있는 문서와 코드를 확인해야합니다. ptr은 데이터 포인터 (void*)입니다. 그래서 보낼 데이터입니다. mac_call_back_t이 맑음 : mac 계층에 대한 콜백을 트리거합니다. (함수 포인터)
브로드 캐스트를 보내려면 FFF 주소로 보내면됩니다. (당신은 packetbuf의 문서를 확인, packetbuf으로 주소를 변경해야합니다 (packet_buf에 대한 좋은 링크 :.. http://anrg.usc.edu/contiki/index.php/Packetbuffer_Basics)
방송이 수행되는 방식을 이해하기위한 서리의 broadcast_conn을 확인하고 예를 가질를

+0

'ptr'은 확실히 보낼 데이터가 아닙니다. – kfx

+0

@kfx 그럼 ptr의 목적은 무엇입니까? Contiki의 모든 응용 프로그램은 ptr을 데이터로 사용합니다. 어쩌면 내가 잘못 했겠지만 원래의 목적을 말해줘. –

+0

나는 이것을 위해 Contiki 코드를 썼다.Rime이 채널을 지정하는 데만 사용되는 것처럼 보입니다. https://github.com/contiki-os/contiki/blob/master/core/net/rime/rime.c#L183 다른 전송 코드는'NULL '을''ptr ''로 사용했다. – kfx

0

RDC가 약자 . "라디오 듀티 사이클"은 RDC 층 직접 무선 기능을 사용하기 때문에, 패킷을 전송하는 NETSTACK_RADIO.send(packetbuf_hdrptr(), packetbuf_totlen()) 호출처럼 간단 할 수

컨티키 네트워크 스택이 레이어 구조를 갖는다 :.

NETWORK layer -> MAC layer -> RDC layer -> RADIO layer. 

(RECE하여 nt 버전에는 네트워크와 MAC 레이어 사이에 추가적인 LLSEC 레이어가 있습니다.)

따라서 RDC 레이어 API 구현은 RADIO 레이어 API를 사용하며 MAC 레이어 API에 의해/reports에 의해 호출됩니다. core/net/mac/nullrdc.c에서 간단한 RDC 드라이버를 구현하는 방법을 볼 수 있습니다.

언급 한대로 NETSTACK_RDC.send(mac_callback_t sent, void *ptr)에는 두 개의 매개 변수가 사용됩니다. 첫 번째는 전송 완료 후 호출해야하는 콜백 유형이고 두 번째는 콜백에 전달해야하는 사용자 데이터입니다.

typedef void (* mac_callback_t)(void *ptr, int status, int transmissions); 
  • ptrNETSTACK_RDC.send로 전달 된 유저 데이터 포인터이다 :

    콜백에 형식 정의 net/mac/mac.h 같다

  • status은 과 같은 MAC 상태 코드입니다 ( 전송 결과).
  • transmissions은 전송 횟수입니다.