diff --git a/cube/User/Src/mbusComm.c b/cube/User/Src/mbusComm.c index 2580320..57f25be 100644 --- a/cube/User/Src/mbusComm.c +++ b/cube/User/Src/mbusComm.c @@ -270,12 +270,13 @@ static void handleRequestEngine(void *handle) { if (localMbusCommHandle->receivedOctet == 0x68) { localMbusCommHandle->frame.start1 = localMbusCommHandle->receivedOctet; localMbusCommHandle->state = MBCS_LENGTH1; + receiveNext(localMbusCommHandle); } else { coloredMsg(LOG_RED, true, "mbc hre [%d] err: invalid start1 symbol %02x", localMbusCommHandle->requestId, localMbusCommHandle->receivedOctet); localMbusCommHandle->result = MBCR_ERROR_STATE_ENGINE__START1; localMbusCommHandle->state = MBCS_ERROR; + schAdd(handleRequestEngine, handle, 0, 0); } - receiveNext(localMbusCommHandle); break; case MBCS_LENGTH1: @@ -283,6 +284,7 @@ static void handleRequestEngine(void *handle) { coloredMsg(LOG_RED, true, "mbc hre [%d] err: length to small %02x", localMbusCommHandle->requestId, localMbusCommHandle->receivedOctet); localMbusCommHandle->result = MBCR_ERROR_STATE_ENGINE__LENGTH1; localMbusCommHandle->state = MBCS_ERROR; + schAdd(handleRequestEngine, handle, 0, 0); } else { localMbusCommHandle->frame.length1 = localMbusCommHandle->receivedOctet; localMbusCommHandle->frame.userdata = (uint8_t*) malloc(localMbusCommHandle->frame.length1 - 3); @@ -290,11 +292,12 @@ static void handleRequestEngine(void *handle) { coloredMsg(LOG_RED, true, "mbc hre [%d] err: unable to allocate memory for userdata", localMbusCommHandle->requestId); localMbusCommHandle->result = MBCR_ERROR_OUT_OF_MEMORY__USERDATA; localMbusCommHandle->state = MBCS_ERROR; + schAdd(handleRequestEngine, handle, 0, 0); } else { localMbusCommHandle->state = MBCS_LENGTH2; + receiveNext(localMbusCommHandle); } } - receiveNext(localMbusCommHandle); break; case MBCS_LENGTH2: @@ -303,24 +306,26 @@ static void handleRequestEngine(void *handle) { localMbusCommHandle->requestId, localMbusCommHandle->frame.length1, localMbusCommHandle->receivedOctet); localMbusCommHandle->result = MBCR_ERROR_STATE_ENGINE__LENGTH2; localMbusCommHandle->state = MBCS_ERROR; + schAdd(handleRequestEngine, handle, 0, 0); } else { localMbusCommHandle->frame.length2 = localMbusCommHandle->receivedOctet; localMbusCommHandle->state = MBCS_START2; + receiveNext(localMbusCommHandle); } - receiveNext(localMbusCommHandle); break; case MBCS_START2: if (localMbusCommHandle->receivedOctet == 0x68) { localMbusCommHandle->frame.start2 = localMbusCommHandle->receivedOctet; localMbusCommHandle->state = MBCS_C_FIELD; + receiveNext(localMbusCommHandle); } else { coloredMsg(LOG_RED, true, "mbc hre [%d] err: invalid start2 symbol %02x", localMbusCommHandle->requestId, localMbusCommHandle->receivedOctet); localMbusCommHandle->result = MBCR_ERROR_STATE_ENGINE__START2; localMbusCommHandle->state = MBCS_ERROR; + schAdd(handleRequestEngine, handle, 0, 0); } - receiveNext(localMbusCommHandle); break; case MBCS_C_FIELD: @@ -360,11 +365,12 @@ static void handleRequestEngine(void *handle) { localMbusCommHandle->requestId, calculatedChksum, localMbusCommHandle->receivedOctet); localMbusCommHandle->result = MBCR_ERROR_STATE_ENGINE__INVALID_CHKSUM; localMbusCommHandle->state = MBCS_ERROR; + schAdd(handleRequestEngine, handle, 0, 0); } else { localMbusCommHandle->frame.chksum = localMbusCommHandle->receivedOctet; localMbusCommHandle->state = MBCS_STOP; + receiveNext(localMbusCommHandle); } - receiveNext(localMbusCommHandle); break; case MBCS_STOP: @@ -377,7 +383,7 @@ static void handleRequestEngine(void *handle) { localMbusCommHandle->requestId, localMbusCommHandle->receivedOctet); localMbusCommHandle->result = MBCR_ERROR_STATE_ENGINE__STOP; localMbusCommHandle->state = MBCS_ERROR; - receiveNext(localMbusCommHandle); + schAdd(handleRequestEngine, handle, 0, 0); } break;