/** * ハードウェアイベント(遅延実行) * @param u32DeviceId * @param u32ItemBitmap */ static void cbAppToCoNet_vHwEvent(uint32 u32DeviceId, uint32 u32ItemBitmap) { switch (u32DeviceId) { case E_AHI_DEVICE_TICK_TIMER: vProcessLIS3DH(E_EVENT_TICK_TIMER); break; case E_AHI_DEVICE_ANALOGUE: /* * ADC完了割り込み */ V_PUTCHAR('@'); vSnsObj_Process(&sAppData.sADC, E_ORDER_KICK); if (bSnsObj_isComplete(&sAppData.sADC)) { u8sns_cmplt |= E_SNS_ADC_CMP_MASK; vStoreSensorValue(); } break; case E_AHI_DEVICE_SYSCTRL: break; case E_AHI_DEVICE_TIMER0: break; default: break; } }
/** * ハードウェアイベント(遅延実行) * @param u32DeviceId * @param u32ItemBitmap */ static void cbAppToCoNet_vHwEvent(uint32 u32DeviceId, uint32 u32ItemBitmap) { switch (u32DeviceId) { case E_AHI_DEVICE_TICK_TIMER: break; case E_AHI_DEVICE_ANALOGUE: /* * ADC完了割り込み */ V_PUTCHAR('@'); vSnsObj_Process(&sAppData.sADC, E_ORDER_KICK); if (bSnsObj_isComplete(&sAppData.sADC)) { // 全チャネルの処理が終わったら、次の処理を呼び起こす vStoreSensorValue(); ToCoNet_Event_Process(E_ORDER_KICK, 0, vProcessEvCore); } break; case E_AHI_DEVICE_SYSCTRL: break; case E_AHI_DEVICE_TIMER0: break; default: break; } }
/**************************************************************************** * * NAME: cbvMcRxHandler * * DESCRIPTION: * * RETURNS: * ****************************************************************************/ PUBLIC void cbToCoNet_vRxEvent(tsRxDataApp *pRx) { int i; // print coming payload V_PRINTF( "\n\r[PKT Ad:%04x,Ln:%03d,Seq:%03d,Lq:%03d,Tms:%05d \"", pRx->u32SrcAddr, pRx->u8Len, // Actual payload byte: the network layer uses additional 4 bytes. pRx->u8Seq, pRx->u8Lqi, pRx->u32Tick & 0xFFFF); for (i = 0; i < pRx->u8Len; i++) { if (i < 32) { V_PUTCHAR((pRx->auData[i] >= 0x20 && pRx->auData[i] <= 0x7f) ? pRx->auData[i] : '.'); } else { V_PRINTF( ".."); break; } } V_PRINTF( "\"]"); // 直接受信したパケットを上位へ転送する if (pRx->auData[0] == 'T') { tsTxDataApp sTx; memset(&sTx, 0, sizeof(sTx)); sTx.u32DstAddr = TOCONET_NWK_ADDR_PARENT; sTx.u32SrcAddr = ToCoNet_u32GetSerial(); // Transmit using Long address sTx.u8Cmd = 0; // data packet. sTx.u8Seq = pRx->u8Seq; sTx.u8CbId = pRx->u8Seq; sTx.u16DelayMax = 300; // 送信開始の遅延を大きめに設定する memcpy(sTx.auData, pRx->auData, pRx->u8Len); sTx.auData[0] = 'R'; sTx.u8Len = pRx->u8Len; #ifdef USE_AES sTx.bSecurePacket = TRUE; #endif SPRINTF_vRewind(); vfPrintf(SPRINTF_Stream, ":%03d", pRx->u8Lqi); memcpy(sTx.auData + sTx.u8Len, SPRINTF_pu8GetBuff(), SPRINTF_u16Length()); sTx.u8Len += SPRINTF_u16Length(); ToCoNet_Nwk_bTx(sAppData.pContextNwk, &sTx); } }
/**************************************************************************** * * NAME: cbvMcRxHandler * * DESCRIPTION: * * RETURNS: * ****************************************************************************/ PUBLIC void cbToCoNet_vRxEvent(tsRxDataApp *pRx) { int i; // print coming payload V_PRINTF( LB "[PKT Ad:%04x,Ln:%03d,Seq:%03d,Lq:%03d,Tms:%05d %s\"", pRx->u32SrcAddr, pRx->u8Len, // Actual payload byte: the network layer uses additional 4 bytes. pRx->u8Seq, pRx->u8Lqi, pRx->u32Tick & 0xFFFF, pRx->bSecurePkt ? "Enc " : ""); for (i = 0; i < pRx->u8Len; i++) { if (i < 32) { V_PUTCHAR((pRx->auData[i] >= 0x20 && pRx->auData[i] <= 0x7f) ? pRx->auData[i] : '.'); } else { V_PRINTF( ".."); break; } } V_PRINTF( "\"]"); // 暗号化対応時に平文パケットは受信しない if (IS_APPCONF_OPT_SECURE()) { if (!pRx->bSecurePkt) { V_PRINTF( ".. skipped plain packet."); return; } } // 直接受信したパケットを上位へ転送する // // 直接親機宛(TOCONET_NWK_ADDR_PARENT指定で送信)に向けたパケットはここでは処理されない。 // 本処理はアドレス指定がTOCONET_NWK_ADDR_NEIGHBOUR_ABOVEの場合で、一端中継機が受け取り // その中継機のアドレス、受信時のLQIを含めて親機に伝達する方式である。 if (pRx->auData[0] == 'T') { tsTxDataApp sTx; memset(&sTx, 0, sizeof(sTx)); uint8 *q = sTx.auData; S_OCTET('R'); // 1バイト目に中継機フラグを立てる S_BE_DWORD(pRx->u32SrcAddr); // 子機のアドレスを S_OCTET(pRx->u8Lqi); // 受信したLQI を保存する memcpy(sTx.auData + 6, pRx->auData + 1, pRx->u8Len - 1); // 先頭の1バイトを除いて5バイト先にコピーする q += pRx->u8Len - 1; sTx.u8Len = q - sTx.auData; sTx.u32DstAddr = TOCONET_NWK_ADDR_PARENT; sTx.u32SrcAddr = ToCoNet_u32GetSerial(); // Transmit using Long address sTx.u8Cmd = 0; // data packet. sTx.u8Seq = pRx->u8Seq; sTx.u8CbId = pRx->u8Seq; sTx.u16DelayMax = 300; // 送信開始の遅延を大きめに設定する if (IS_APPCONF_OPT_SECURE()) { sTx.bSecurePacket = TRUE; } ToCoNet_Nwk_bTx(sAppData.pContextNwk, &sTx); } }