์๋
ํ์ธ์, arduino-due ๋ณด๋๋ก xbee ๋๋ผ์ด๋ฒ๋ฅผ ํ
์คํธํ๊ณ ์์ต๋๋ค.
xbee์ ํ์ฌ ๋๋ผ์ด๋ฒ๋ ๋ณด๋์์ ์๋ํ์ง ์์ต๋๋ค. ๋๋ผ์ด๋ฒ ์ค์ง๋ xbee.c์ 126 ํ์์ ์คํ๋ฉ๋๋ค.
while (dev->resp_limit != dev->resp_count) {
mutex_lock(&(dev->resp_lock));
}
๋์ผํ ๊ตฌ์ฑ ๋ฐ ๋ณด๋๊ฐ riot ๋ฆด๋ฆฌ์ค 2015.09์์ ์๋ํฉ๋๋ค.
๋ฌธ์ ๋ uart ๋๋ผ์ด๋ฒ์์์ ์ ์์ง๋ง xbee ๋๋ผ์ด๋ฒ์ ์๊ฐ ์ด๊ณผ๊ฐ ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด์ ํญ๋์ด ์ ๊ฒผ๊ณ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ๊ธฐ์ํ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
PR # 4734 ์์ฑ.
๋ค์ ์ปค๋ฐ์ ์ถ๊ฐ ๋๋ฒ๊ทธ ์ถ๋ ฅ์ ์ถ๊ฐํฉ๋๋ค.
https://github.com/Yonezawa-T2/RIOT/commit/0b437f440d114a28bbc63c3c6a7ff9dc4ded4bfd
https://github.com/Yonezawa-T2/RIOT/commit/c16cd9281821aaec8c9dd8260a3a98db659e8ef5
ENABLE_DEBUG
๋ฐ XBEE_ENABLE_DETAILED_DEBUG
๋ฅผ 1๋ก ์ค์ ํฉ๋๋ค.
๋ค๋ฅธ ๋ฌธ์ ๊ฐ์๋ ๊ฒฝ์ฐ # 4445์ ๊ด์ฌ์ด์์ ์๋ ์์ต๋๋ค.
arduino-due๋ก ๋๋ผ์ด๋ฒ๋ฅผ ์๋ํ์ง๋ง ์ฌ์ ํ ์คํจํ์ง๋ง uart์ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฌ๋ xbee ๋๋ผ์ด๋ฒ๋ ์๋ฒฝํ๊ฒ ์๋ํ์ง ์์ต๋๋ค.
_api_at_cmd๊ฐ ์คํจํ๋ฉด xbee_init๊ฐ ์คํจํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด _get_addr_long์ด <0 ๊ฐ์ ๋ฐํํ๋ฉด xbee_init๊ฐ ์คํจํด์ผํฉ๋๋ค.
if(_get_addr_long(dev, dev->addr_long.uint8, 8) < 0) {
DEBUG("xbee: Initialization failed\n");
return -1;
}
๋ง์ง๋ง์ผ๋ก ๋๋ฒ๊ทธ ์ ๋ณด "xbee: response timeout"
๋ฅผ isr_resp_timeout์ ๊ธฐ๋กํ์ง ์๊ณ _api_at_cmd๋ก ์ด๋ํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๊ฒฝ์ฐ์๋ ๋ค๋ฅธ ์ค๋ ๋์์ ์คํ๋๊ณ ํญ์ ๋๋ฒ๊ทธ๋ฅผ ์ธ์ ํ ์๋ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
PR # 4749๋ฅผ ์์ฑํ์ต๋๋ค.
์ข์, ์ ๋๋ผ์ด๋ฒ๋ฅผ ํ
์คํธํ์ผ๋ฉฐ ์ํ๋๋๋ก ์๋ํฉ๋๋ค.
xbee ๋๋ผ์ด๋ฒ์ send ํจ์์์ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
dev->tx_buf[0] = API_START_DELIMITER; dev->tx_buf[4] = 0; /* set to zero to disable response frame */ /* set size, API id and address field depending on dst address length */ if (_is_broadcast(hdr)) { dev->tx_buf[1] = (uint8_t)((size + 5) >> 8); dev->tx_buf[2] = (uint8_t)(size + 5); dev->tx_buf[3] = API_ID_TX_SHORT_ADDR; dev->tx_buf[4] = 0xff; dev->tx_buf[5] = 0xff; } if (hdr->dst_l2addr_len == 2) { dev->tx_buf[1] = (uint8_t)((size + 5) >> 8); dev->tx_buf[2] = (uint8_t)(size + 5); dev->tx_buf[3] = API_ID_TX_SHORT_ADDR; memcpy(dev->tx_buf + 5, gnrc_netif_hdr_get_dst_addr(hdr), 2); pos = 7; } else { dev->tx_buf[1] = (uint8_t)((size + 11) >> 8); dev->tx_buf[2] = (uint8_t)(size + 11); dev->tx_buf[3] = API_ID_TX_LONG_ADDR; memcpy(dev->tx_buf + 5, gnrc_netif_hdr_get_dst_addr(hdr), 8); pos = 13; }
- ์ฒซ ๋ฒ์งธ ๊ฒฝ์ฐ : tx_buf [4]๊ฐ ๋ฎ์ด ์ฐ๊ธฐ์ด๊ณ ๋์ ๋จ์ถ ์ฃผ์๊ฐ ์ธ๋ฑ์ค 5 ๋ฐ 6์ ์์ต๋๋ค.
- ๋ ๋ฒ์งธ๋ก
else if (hdr->dst_l2addr_len == 2)
๋ง์ง๋ง ์ง๋ฌธ : ๋ชฉ์ ์ง ๊ธด ์ฃผ์๋ ์ด๋ป๊ฒ ์ป์ต๋๊น? ๋ด xbee์ ์ผ์นํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ฟก๋ฟก
xbee ๋๋ผ์ด๋ฒ์ send ํจ์์์ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
์. # 4445๋ฅผ ์ฐธ์กฐํ์ญ์์ค.๋ง์ง๋ง ์ง๋ฌธ : ๋ชฉ์ ์ง ๊ธด ์ฃผ์๋ ์ด๋ป๊ฒ ์ป์ต๋๊น? ๋ด xbee์ ์ผ์นํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทํ์ ์ง๋ฌธ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ์ง ๋ชปํ์ต๋๋ค. XBee๋ ์งง์ ์ฃผ์๊ฐ 0xFFFF
๊ตฌ์ฑ๋์ง ์๋ ํ ์งง์ ์ฃผ์๋ฅผ ์์ค ์ฃผ์๋ก ์ฌ์ฉํฉ๋๋ค. ์ด๊ฒ์ ๋ํ # 4445์์ ์์ ๋์์ต๋๋ค.
์ด ๋ฌธ์ ๋ # 4445๊ฐ ๋ณํฉ๋์์ผ๋ฏ๋ก ์ข ๊ฒฐ ๋ ์ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด ๋ฌธ์ ๋ # 4445๊ฐ ๋ณํฉ๋์์ผ๋ฏ๋ก ์ข ๊ฒฐ ๋ ์ ์์ต๋๋ค.