receiving
This commit is contained in:
@ -14,6 +14,7 @@ typedef enum {
|
||||
SEND_CONT,
|
||||
SENDING_DONE,
|
||||
ENABLE_FRONTEND,
|
||||
RECEIVING,
|
||||
DISABLE_FRONTEND
|
||||
} e_mbusCommState;
|
||||
|
||||
@ -23,11 +24,21 @@ typedef struct {
|
||||
uint8_t cmd;
|
||||
uint8_t addr;
|
||||
uint8_t sendBuf[5];
|
||||
uint8_t receivedOctet;
|
||||
bool receiving;
|
||||
} t_mbusCommHandle;
|
||||
|
||||
static t_mbusCommHandle mbusCommHandle = { .state = IDLE, .retryCnt = 0, .cmd = 0, .addr = 0 };
|
||||
static t_mbusCommHandle mbusCommHandle = { .state = IDLE, .retryCnt = 0, .cmd = 0, .addr = 0, .receivedOctet = 0, .receiving = false };
|
||||
|
||||
|
||||
static void timeoutHandler(void *handle) {
|
||||
logMsg("mbc timeout");
|
||||
t_mbusCommHandle *localMbusCommHandle = (t_mbusCommHandle*) handle;
|
||||
localMbusCommHandle->state = DISABLE_FRONTEND;
|
||||
localMbusCommHandle->receiving = false;
|
||||
handleRequestEngine(handle);
|
||||
}
|
||||
|
||||
static void handleRequestEngine(void *handle) {
|
||||
t_mbusCommHandle *localMbusCommHandle = (t_mbusCommHandle*) handle;
|
||||
|
||||
@ -72,8 +83,15 @@ static void handleRequestEngine(void *handle) {
|
||||
case ENABLE_FRONTEND:
|
||||
logMsg("hre state ENABLE_FRONTEND");
|
||||
frontendEnable();
|
||||
localMbusCommHandle->state = DISABLE_FRONTEND;
|
||||
schAdd(handleRequestEngine, handle, 500, 0);
|
||||
schAdd(timeoutHandler, handle, 500, 0); // 500ms timeout
|
||||
localMbusCommHandle->state = RECEIVING;
|
||||
localMbusCommHandle->receiving = true;
|
||||
// now waiting for the response, transitions are triggered by interrupt callback
|
||||
break;
|
||||
|
||||
case RECEIVING:
|
||||
logMsg("hre state RECEIVING");
|
||||
logMsg("hre received octet: 0x%02x", localMbusCommHandle->receivedOctet);
|
||||
break;
|
||||
|
||||
case DISABLE_FRONTEND:
|
||||
@ -94,6 +112,16 @@ void mbusCommTxCpltCallback(UART_HandleTypeDef *huart) {
|
||||
schAdd(handleRequestEngine, (void*) &mbusCommHandle, 0, 0);
|
||||
}
|
||||
|
||||
void mbusCommRxCpltCallback(UART_HandleTypeDef *huart) {
|
||||
logMsg("mcrx: mbus received something");
|
||||
HAL_UART_Receive_IT(huart, &(mbusCommHandle.receivedOctet), 1);
|
||||
if (mbusCommHandle.receiving) {
|
||||
schAdd(handleRequestEngine, (void*) &mbusCommHandle, 0, 0);
|
||||
} else {
|
||||
logMsg("mcrx: received 0x%02x but not expected", mbusCommHandle.receivedOctet);
|
||||
}
|
||||
}
|
||||
|
||||
void mbusCommRequest(uint8_t cmd, uint8_t addr) {
|
||||
if (mbusCommHandle.state == IDLE) {
|
||||
mbusCommHandle.state = SEND;
|
||||
|
Reference in New Issue
Block a user