LMIC debug
10:07:04.276 -> lmic_error 0Packet queued_otmeme
10:07:09.287 -> 5453517: setupRx1 txrxFlags 0x21 (沒有有效的port byte (0x20)+在第一個down slot 收到 (0x01) --> 01 在第一個down slot 收到 (0x01)
10:07:09.287 -> start single rx: now-rxtime: 4 (4=now-LMIC.rxtime,
LMIC.rxtime => busy wait until exact rx time)
10:07:09.287 -> 5454149: RXMODE_SINGLE, freq=924000000, SF=7, BW=125, CR=4/5, IH=0
原代碼
// now instruct the radio to receive
if (rxmode == RXMODE_SINGLE) { // single rx
u4_t nLate = hal_waitUntil(LMIC.rxtime); // busy wait until exact rx time
opmode(OPMODE_RX_SINGLE);
LMICOS_logEventUint32("+Rx LoRa Single", nLate);
rxlate(nLate);
#if LMIC_DEBUG_LEVEL > 0
ostime_t now = os_getTime();
LMIC_DEBUG_PRINTF("start single rx: now-rxtime: %"LMIC_PRId_ostime_t"\n", now - LMIC.rxtime);
#endif
} else { // continous rx (scan or rssi)
LMICOS_logEventUint32("+Rx LoRa Continuous", rxmode);
opmode(OPMODE_RX);
}
#if LMIC_DEBUG_LEVEL > 0
if (rxmode == RXMODE_RSSI) {
LMIC_DEBUG_PRINTF("RXMODE_RSSI\n");
} else {
u1_t sf = getSf(LMIC.rps) + 6; // 1 == SF7
u1_t bw = getBw(LMIC.rps);
u1_t cr = getCr(LMIC.rps);
LMIC_DEBUG_PRINTF("%"LMIC_PRId_ostime_t": %s, freq=%"PRIu32", SF=%d, BW=%d, CR=4/%d, IH=%d\n",
os_getTime(),
rxmode == RXMODE_SINGLE ? "RXMODE_SINGLE" : (rxmode == RXMODE_SCAN ? "RXMODE_SCAN" : "UNKNOWN_RX"),
LMIC.freq, sf,
bw == BW125 ? 125 : (bw == BW250 ? 250 : 500),
cr == CR_4_5 ? 5 : (cr == CR_4_6 ? 6 : (cr == CR_4_7 ? 7 : 8)),
getIh(LMIC.rps)
);
}
#endif
opmode(OPMODE_RX_SINGLE) -> rxlora(rxmode) -> startrx(RXMODE_SINGLE) -> os_radio(RADIO_RX) -> radioRx()
event 是設定成 EV_RXSTART
-> setupRx2() 在windows 2 開始接收 or setupRx1() or startRxPing()
or engineupdate_inner() -> engineupdate() > processpingrx()
,runengineupdate(),reporteventandupdate(ev_t ev), LMIC_disabletracking(void),processDnData_norx(void),
LMIC_clrTxData(), LMIC_setTxData_strict(void),LMIC_sendAlive(void),
LMIC_tryRejoin(void)
Decide what to do next for the MAC layer of a device. Inner part.
Only called from outer part.