receiving

This commit is contained in:
Wolfgang Hottgenroth 2020-11-02 15:41:07 +01:00
parent 7ec5d0ba35
commit ed02d75f45
Signed by: wn
GPG Key ID: 6C1E5E531E0D5D7F
3 changed files with 40 additions and 5 deletions

View File

@ -6,5 +6,6 @@
void mbusCommRequest(uint8_t cmd, uint8_t addr); void mbusCommRequest(uint8_t cmd, uint8_t addr);
void mbusCommTxCpltCallback(UART_HandleTypeDef *huart); void mbusCommTxCpltCallback(UART_HandleTypeDef *huart);
void mbusCommRxCpltCallback(UART_HandleTypeDef *huart);
#endif // _MBUSCOMM_H_ #endif // _MBUSCOMM_H_

View File

@ -59,7 +59,6 @@ void HAL_GPIO_EXTI_Callback(uint16_t pin) {
} }
} }
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
if (hadc == &frontendAdc) { if (hadc == &frontendAdc) {
frontendAdcCallback(hadc); frontendAdcCallback(hadc);
@ -71,3 +70,10 @@ void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {
mbusCommTxCpltCallback(huart); mbusCommTxCpltCallback(huart);
} }
} }
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
if (huart == &mbusUart) {
mbusCommRxCpltCallback(huart);
}
}

View File

@ -14,6 +14,7 @@ typedef enum {
SEND_CONT, SEND_CONT,
SENDING_DONE, SENDING_DONE,
ENABLE_FRONTEND, ENABLE_FRONTEND,
RECEIVING,
DISABLE_FRONTEND DISABLE_FRONTEND
} e_mbusCommState; } e_mbusCommState;
@ -23,11 +24,21 @@ typedef struct {
uint8_t cmd; uint8_t cmd;
uint8_t addr; uint8_t addr;
uint8_t sendBuf[5]; uint8_t sendBuf[5];
uint8_t receivedOctet;
bool receiving;
} t_mbusCommHandle; } 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) { static void handleRequestEngine(void *handle) {
t_mbusCommHandle *localMbusCommHandle = (t_mbusCommHandle*) handle; t_mbusCommHandle *localMbusCommHandle = (t_mbusCommHandle*) handle;
@ -72,8 +83,15 @@ static void handleRequestEngine(void *handle) {
case ENABLE_FRONTEND: case ENABLE_FRONTEND:
logMsg("hre state ENABLE_FRONTEND"); logMsg("hre state ENABLE_FRONTEND");
frontendEnable(); frontendEnable();
localMbusCommHandle->state = DISABLE_FRONTEND; schAdd(timeoutHandler, handle, 500, 0); // 500ms timeout
schAdd(handleRequestEngine, handle, 500, 0); 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; break;
case DISABLE_FRONTEND: case DISABLE_FRONTEND:
@ -94,6 +112,16 @@ void mbusCommTxCpltCallback(UART_HandleTypeDef *huart) {
schAdd(handleRequestEngine, (void*) &mbusCommHandle, 0, 0); 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) { void mbusCommRequest(uint8_t cmd, uint8_t addr) {
if (mbusCommHandle.state == IDLE) { if (mbusCommHandle.state == IDLE) {
mbusCommHandle.state = SEND; mbusCommHandle.state = SEND;