Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 64 additions & 16 deletions fsw/src/lc_action.c
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,10 @@ uint8 LC_EvaluateRPN(uint16 APNumber)
** Pick off each piece of the RPN equation and handle
** one at a time
*/
RPNData = LC_OperData.ADTPtr[APNumber].RPNEquation[RPNEquationPtr++];
RPNData = LC_OperData.ADTPtr[APNumber].RPNEquation[RPNEquationPtr];

/* Increment RPNEquationPtr */
RPNEquationPtr++;

/*
** The data is either an RPN operator or a watchpoint number
Expand All @@ -339,19 +342,31 @@ uint8 LC_EvaluateRPN(uint16 APNumber)
Operand1 = POP_RPN_DATA;
if ((Operand1 == LC_WATCH_FALSE) || (Operand2 == LC_WATCH_FALSE))
{
RPNStack[StackPtr++] = LC_WATCH_FALSE;
RPNStack[StackPtr] = LC_WATCH_FALSE;

/* Increment StackPtr */
StackPtr++;
}
else if ((Operand1 == LC_WATCH_ERROR) || (Operand2 == LC_WATCH_ERROR))
{
RPNStack[StackPtr++] = LC_WATCH_ERROR;
RPNStack[StackPtr] = LC_WATCH_ERROR;

/* Increment StackPtr */
StackPtr++;
}
else if ((Operand1 == LC_WATCH_STALE) || (Operand2 == LC_WATCH_STALE))
{
RPNStack[StackPtr++] = LC_WATCH_STALE;
RPNStack[StackPtr] = LC_WATCH_STALE;

/* Increment StackPtr */
StackPtr++;
}
else
{
RPNStack[StackPtr++] = LC_WATCH_TRUE;
RPNStack[StackPtr] = LC_WATCH_TRUE;

/* Increment StackPtr */
StackPtr++;
}
break;

Expand All @@ -360,19 +375,31 @@ uint8 LC_EvaluateRPN(uint16 APNumber)
Operand1 = POP_RPN_DATA;
if ((Operand1 == LC_WATCH_TRUE) || (Operand2 == LC_WATCH_TRUE))
{
RPNStack[StackPtr++] = LC_WATCH_TRUE;
RPNStack[StackPtr] = LC_WATCH_TRUE;

/* Increment StackPtr */
StackPtr++;
}
else if ((Operand1 == LC_WATCH_ERROR) || (Operand2 == LC_WATCH_ERROR))
{
RPNStack[StackPtr++] = LC_WATCH_ERROR;
RPNStack[StackPtr] = LC_WATCH_ERROR;

/* Increment StackPtr */
StackPtr++;
}
else if ((Operand1 == LC_WATCH_STALE) || (Operand2 == LC_WATCH_STALE))
{
RPNStack[StackPtr++] = LC_WATCH_STALE;
RPNStack[StackPtr] = LC_WATCH_STALE;

/* Increment StackPtr */
StackPtr++;
}
else
{
RPNStack[StackPtr++] = LC_WATCH_FALSE;
RPNStack[StackPtr] = LC_WATCH_FALSE;

/* Increment StackPtr */
StackPtr++;
}
break;

Expand All @@ -381,31 +408,49 @@ uint8 LC_EvaluateRPN(uint16 APNumber)
Operand1 = POP_RPN_DATA;
if ((Operand1 == LC_WATCH_ERROR) || (Operand2 == LC_WATCH_ERROR))
{
RPNStack[StackPtr++] = LC_WATCH_ERROR;
RPNStack[StackPtr] = LC_WATCH_ERROR;

/* Increment StackPtr */
StackPtr++;
}
else if ((Operand1 == LC_WATCH_STALE) || (Operand2 == LC_WATCH_STALE))
{
RPNStack[StackPtr++] = LC_WATCH_STALE;
RPNStack[StackPtr] = LC_WATCH_STALE;

/* Increment StackPtr */
StackPtr++;
}
else
{
RPNStack[StackPtr++] = (Operand1 != Operand2);
RPNStack[StackPtr] = (Operand1 != Operand2);

/* Increment StackPtr */
StackPtr++;
}
break;

case LC_RPN_NOT:
Operand1 = POP_RPN_DATA;
if (Operand1 == LC_WATCH_ERROR)
{
RPNStack[StackPtr++] = LC_WATCH_ERROR;
RPNStack[StackPtr] = LC_WATCH_ERROR;

/* Increment StackPtr */
StackPtr++;
}
else if (Operand1 == LC_WATCH_STALE)
{
RPNStack[StackPtr++] = LC_WATCH_STALE;
RPNStack[StackPtr] = LC_WATCH_STALE;

/* Increment StackPtr */
StackPtr++;
}
else
{
RPNStack[StackPtr++] = (Operand1 == LC_WATCH_FALSE);
RPNStack[StackPtr] = (Operand1 == LC_WATCH_FALSE);

/* Increment StackPtr */
StackPtr++;
}
break;

Expand All @@ -432,7 +477,10 @@ uint8 LC_EvaluateRPN(uint16 APNumber)
default:
if (RPNData < LC_MAX_WATCHPOINTS)
{
RPNStack[StackPtr++] = LC_OperData.WRTPtr[RPNData].WatchResult;
RPNStack[StackPtr] = LC_OperData.WRTPtr[RPNData].WatchResult;

/* Increment StackPtr */
StackPtr++;
}
else
{
Expand Down
25 changes: 20 additions & 5 deletions fsw/src/lc_watch.c
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,10 @@ void LC_CreateHashTable(void)
if (CFE_SB_MsgId_Equal(LastMessageID, MessageID) && (WatchPtLink != (LC_WatchPtList_t *)NULL))
{
/* WatchPtLink points to last link in list for this Message ID */
WatchPtLink->Next = &LC_OperData.WatchPtLinks[LC_OperData.WatchpointCount++];
WatchPtLink->Next = &LC_OperData.WatchPtLinks[LC_OperData.WatchpointCount];

/* Increment LC_OperData.WatchpointCount */
LC_OperData.WatchpointCount++;

/* Add new link to end of list, point to new last link */
WatchPtLink = WatchPtLink->Next;
Expand Down Expand Up @@ -180,7 +183,10 @@ LC_WatchPtList_t *LC_AddWatchpoint(CFE_SB_MsgId_t MessageID)
if (LC_OperData.HashTable[HashTableIndex] == (LC_MessageList_t *)NULL)
{
/* Get next unused MessageID linked list entry */
MessageLink = &LC_OperData.MessageLinks[LC_OperData.MessageIDsCount++];
MessageLink = &LC_OperData.MessageLinks[LC_OperData.MessageIDsCount];

/* Increment LC_OperData.MessageIDsCount */
LC_OperData.MessageIDsCount++;

/* Set first (and only) link in this hash table entry linked list */
LC_OperData.HashTable[HashTableIndex] = MessageLink;
Expand All @@ -202,9 +208,12 @@ LC_WatchPtList_t *LC_AddWatchpoint(CFE_SB_MsgId_t MessageID)
if (MessageLink->Next == (LC_MessageList_t *)NULL)
{
/* Reached end of list without finding MessageID */
MessageLink->Next = &LC_OperData.MessageLinks[LC_OperData.MessageIDsCount++];
MessageLink->Next = &LC_OperData.MessageLinks[LC_OperData.MessageIDsCount];
MessageLink = MessageLink->Next;

/* Increment LC_OperData.MessageIDsCount */
LC_OperData.MessageIDsCount++;

/* Add link with this MessageID (will exit loop) */
MessageLink->MessageID = MessageID;

Expand Down Expand Up @@ -237,7 +246,10 @@ LC_WatchPtList_t *LC_AddWatchpoint(CFE_SB_MsgId_t MessageID)
if (MessageLink->WatchPtList == (LC_WatchPtList_t *)NULL)
{
/* Get next unused watchpoint linked list entry */
WatchPtLink = &LC_OperData.WatchPtLinks[LC_OperData.WatchpointCount++];
WatchPtLink = &LC_OperData.WatchPtLinks[LC_OperData.WatchpointCount];

/* Increment LC_OperData.WatchpointCount */
LC_OperData.WatchpointCount++;

/* Set the start (and only) link in the watchpoint link list */
MessageLink->WatchPtList = WatchPtLink;
Expand All @@ -253,8 +265,11 @@ LC_WatchPtList_t *LC_AddWatchpoint(CFE_SB_MsgId_t MessageID)
}

/* Add the new watchpoint link to the end of the list */
WatchPtLink->Next = &LC_OperData.WatchPtLinks[LC_OperData.WatchpointCount++];
WatchPtLink->Next = &LC_OperData.WatchPtLinks[LC_OperData.WatchpointCount];
WatchPtLink = WatchPtLink->Next;

/* Increment LC_OperData.WatchpointCount */
LC_OperData.WatchpointCount++;
}

/* Return pointer to last link in watchpoint linked list */
Expand Down
Loading