message control multicast translator 葉俊克. 系統架構 communication interface(rs232) pc...
TRANSCRIPT
Message Control Multicast Translator
葉俊克
系統架構
Communication Interface(RS232)
PC
ZigBee
Server-PC
ZigBeeNode
Mapping address
EthernetRF
Translator
ZigBeeNode
系統模組架構
3
IEEE 802.3
IPv6
Protocol TranslatorIPv6 <-> ZigBee
Address Mapping Table
RS232
UDP
raw socket
PC
libpcap
ZigBee
IEEE 802.3
IPv6
UDP
Server
socket
ZigBeeNode
UART
UART
ZigBeeNode
MCMT
Terminal
• Open terminal– int open(const char *path, int oflag, option )
• Read/Write data from terminal RX/TX– ssize_t read(int fildes, void *buf, size_t nbyte)– ssize_t write(int fildes, const void *buf, size_t nbyte)
• flush non-transmitted output data, non-read input data, or both– int tcflush(int fildes, int queue_selector)
Socket Setting
• Open socket (raw模式、 raw協定 )– int socket(int domain, int type, int protocol)– socket(PF_INET6, SOCK_RAW,IPPROTO_RAW )
• Set socket(不自動建立 ip header)– int setsockopt(int socket, int level,
int option_name, const void *option_value, socklen_t option_len)
– setsockopt(sockfd, IPPROTO_RAW, IP_HDRINCL, &optval, sizeof(int))
Socket• Send data with a dst addr
– ssize_t sendto(int socket, const void *message, size_t length, int flags, const struct sockaddr *dest_addr, socklen_t dest_len)
• Receive data– ssize_t recvfrom(int socket, void *restrict buffer,
size_t length, int flags, struct sockaddr *restrict address, socklen_t *restrict address_len
• Udp check sum– unsigned int Checksum(unsigned int cksum, void *pBuffer,
unsigned int size)
Pcap
• Find all NIC– int pcap_findalldevs(pcap_if_t **alldevsp, char
*ebuf)
• Open a NIC to capture packet– int pcap_open_live(char *dev, int snaplen, int
promisc, int ms, char *ebuf)
• Check the NIC can be used– int pcap_datalink(pcap_t *p)
Pcap
• Compile the Filter Expressions– int pcap_compile(pcap_t *p, struct bpf_program
*fp, char *str, int optimize, bpf_u_int32 netmask)
• Associate a Filter to a Capture– int pcap_setfilter(pcap_t *p, struct bpf_program
*fp)
• Capture Packets – int pcap_loop(pcap_t *p, int cnt, pcap_handler
callback, u_char *user)
thread
• int pthread_create(pthread_t *pthread, pthread_attr_t *attr, void *(*start_routine) (void *), void *asg);–簡單說明
Tech. Doc.
• Socket– Sock raw– Udp checksum
• Pcap– Winpcap• UNIX® Network Programming Volume 1, Third Edition: The
Sockets Networking API• Linux程式設計教學手冊 (Beginning Linux Programming)• 線上 linux api查詢工具• http://www.digipedia.pl/man/• http://swoolley.org/man.cgi
Install and Compile• Libpcap
– Install Libpcap LibPCAP-Devel• yum install libpcap libpcap-devel
– Compile• gcc expcap.c –l pcap
• Pthread– Compile
• gcc exthread.c –lpthread• Gcc –D_REENTRANT –I/usr/include/nptl ex.c –L/usr/lin/nptl –
lpthread (舊版方式, 2003年以前。在 /usr/inlcude/phtrad.h檔可看日期 )
API-ZigBee-Setting
• Set channel and PANID at tool/8wConfig.cfg– -DDEFAULT_CHANLIST=0x00001000 // 12 - 0x0C– -DZDAPP_CONFIG_PAN_ID=0xABCD
• Set Multicast/Groupcast at nwk_globals.c– _NIB.nwkUseMultiCast = TRUE // Multicast– _NIB.nwkUseMultiCast = FALSE // Groupcast
API-ZigBee-UART
• Set UART parameter at hal_uart.c– uint8 HalUARTOpen(uint8 port, halUARTCfg_t
*config)
• UART read/write– uint16 HalUARTRead(uint8 port, uint8 *buf, uint16
len)– uint16 HalUARTWrite(uint8 port, uint8 *buf,
uint16 len)
API-ZigBee-Group
• Add group for an endpoint at aps_group.h– ZStatus_t aps_AddGroup( uint8 endpoint,
aps_Group_t *group )
• Find a group with endpoint and groupID– aps_Group_t *aps_FindGroup( uint8 endpoint,
uint16 groupID )
• Remove a group with endpoint and groupID– uint8 aps_RemoveGroup( uint8 endpoint, uint16
groupID );
API-ZigBee
• Send RF Data at AF.h– AF_DataRequest( afAddrType_t *dstAddr,
endPointDesc_t *srcEP, uint16 cID, uint16 len, uint8 *buf, uint8 *transID, uint8 options, uint8 radius )
• Data message processor callback– void
SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
ZigBee Tech. doc.
• In Z-Stack Documents– Z-Stack User's Guide - CC2530DB(read it first)– Z-Stack Developer's Guide (read it before
programming)– Z-Stack Sample Applications (description of
sample)– Z-Stack API – HAL Driver API (UART,LCD,LED,Switch)
ZigBee Tools
• Z-Stack - ZigBee Protocol Stack – last: ZStack-CC2530-2.4.0-1.4.0(swrc126d.zip)
• SmartRF Protocol Packet Sniffer – last: Packet Sniffer 2.15.1 (Rev. S)
• SmartRF Flash Programmer– last: Flash Programmer 1.11.1 (Rev. M)
• IAR Embedded Workbench® for 8051– Version: 7.60– Last: 8.10
IAR Open Workspace
• “File”->”Open”->”Workspace”• C:\Texas Instruments\ZStack-CC2530-2.4.0-1.4.0\Projects\
zstack\Samples\SampleApp\CC2530DB
IAR Build Setting
• For generating a .hex file
IAR Build Setting
• “Project”->”Options…”
IAR Build Setting
Generating a .hex File
• Make: link to a .hex file• Rebuild All: build a new .hex file
Download a File to Device• C:\Texas Instruments\ZStack-CC2530-2.4.0-1.4.0\Projects\zstack\
Samples\SampleApp\CC2530DB\CoordinatorEB\Exe\CoordinatorEB.hex
Demo• Translators-PC:
2001:0e10:6840:21:21e:90ff:fe18:4cc // 10.21.10.103• Translators-RF:
MAC: 00124B00010A2A83• Node A:
MAC: 00124B00010A2A75• Node B:
MAC: 00124B00010A2A5C• Server:
0x00a12001:e10:6840:21:4687:fcff:fe41:6c0b // 10.10.21.59
• Prefix: 2001:e10:6840:409
• 設定路由表– route –A inet6 add ZigBee_Prefix gw Translator_IP [dev
ethx]
• 增加 IP– ip -6 addr add ip dev ethx
• 啟動MCMT– ./MCMT
• 啟動 server– ./Recv
• 啟動 ZigBee Device• 按五向鍵的”下”
–發送加入maping table的封包– 00 saddr MAC
Join Translator
Communication Interface(RS232)
PC
ZigBee
Node B
Translator
Node A Send data: 00(MT) + aa aa (short address) + 00 12 4b 00 01 0a 2a 75(MAC)
Send data: 00(MT) + bb bb (short address) + 00 12 4b 00 01 0a 2a 5c(MAC)
Address Mapping Table
Src + Dst + Data
aa aa + 00 00 + 00(MT) + aa aa + 00 12 4b 00 01 0a 2a 5c
bb bb + 00 00 + 00(MT) + bb bb + 00 12 4b 00 01 0a 2a 5c
00 00(因為不需轉發,所以此欄在此功能不重要,但為了一致性仍保留 )
Send data to server
Communication Interface(RS232)
PC
ZigBee
Server-PC
Node B
Translator
Node A
Q & A
• 目前無法將 End device 的rxonwhenidle==ture啟用。