Hallo zusammen, ich brauche mal Hilfe, um eine Ausgabefunktion zu konstruieren.
Also folgendes ich habe einen Microkontroller (Coordinator) und dazu 4 weitere sogenannter Sensor Boards.
Jedes dieser Dinger hat 3 Sensoren (Licht, Temp, Luftfeuchtigkeit). diese werden alle über die Funktion vProcessIncomingData gesteuert.
Wobei soweit ich dann gesehen habe die u8Node für die einzelnen SensorBoards sind und die u8Count für die jeweiligen Sensoren.
Und wenn ich das richtig verstanden habe speichert die Funktion psNodeData->asNodeElementData[u8Count].u8NowValue die genauen Werte.
Ich habe jetzt schon eine Ausgabefuktion geschrieben die auch so weit funktionert mit dem Aufruf und alles: vUtils_DisplayMsg("The value is: ", u32Value);
Die ist für die Ausgabe an dem seriellen Port gedacht. Und mein Problem ist jetzt wie bekomme ich das hin, dass die Funktion mir die
richtigen Werte ausgibt für die einzelnen Boards irgendwie hänge ich da gerade oder habe nen Brett vor dem Kopf
Hat einer von euch einen Tip für mich?
Vielen Dank!
Hier die Funktion:
****************************************************************************
*
* NAME: vProcessIncomingData
*
* DESCRIPTION:
* Deals with any incoming MCPS data events. If the event is an indication
* from a device with a short address matching a demo endpoint, the data in
* the payload is stored for display the next time that the LCD is updated.
*
* PARAMETERS: Name RW Usage
* psMcpsInd R Pointer to structure containing MCPS event
*
* RETURNS:
* void
*
****************************************************************************/
PRIVATE void vProcessIncomingData(MAC_McpsDcfmInd_s *psMcpsInd)
{
MAC_RxFrameData_s *psFrame;
MAC_Addr_s *psAddr;
tsNodeData *psNodeData;
uint16 u16NodeAddr;
uint8 u8Node;
uint8 u8Count;
psFrame = &psMcpsInd->uParam.sIndData.sFrame;
/* Check that MCPS frame is a valid sensor one */
if ((psMcpsInd->u8Type != MAC_MCPS_IND_DATA)
|| (psFrame->u8SduLength != 8)
|| (psFrame->au8Sdu[0] != DEMO_ENDPOINT_IDENTIFIER))
{
return;
}
/* Use address to determine node */
psAddr = &psFrame->sSrcAddr;
if (psAddr->u8AddrMode != 2)
{
return;
}
u16NodeAddr = psAddr->uAddr.u16Short;
if ((u16NodeAddr = (DEMO_ENDPOINT_ADDR_BASE + DEMO_ENDPOINTS)))
{
return;
}
/* Store data for node */
u8Node = (uint8)(u16NodeAddr - DEMO_ENDPOINT_ADDR_BASE);
psNodeData = &sDemoData.sNode.asNodeData[u8Node];
psNodeData->u8FramesMissed = 0;
psNodeData->u8SwitchOn = psFrame->au8Sdu[2];
vLedControl(u8Node, psNodeData->u8SwitchOn);
for (u8Count = 0; u8Count asNodeElementData[u8Count].u8NowValue = psFrame->au8Sdu[u8Count + 3];
}
psNodeData->u8Rssi = psFrame->u8LinkQuality;
}