receiving
This commit is contained in:
parent
7ec5d0ba35
commit
ed02d75f45
@ -6,5 +6,6 @@
|
||||
|
||||
void mbusCommRequest(uint8_t cmd, uint8_t addr);
|
||||
void mbusCommTxCpltCallback(UART_HandleTypeDef *huart);
|
||||
void mbusCommRxCpltCallback(UART_HandleTypeDef *huart);
|
||||
|
||||
#endif // _MBUSCOMM_H_
|
||||
|
@ -59,7 +59,6 @@ void HAL_GPIO_EXTI_Callback(uint16_t pin) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
|
||||
if (hadc == &frontendAdc) {
|
||||
frontendAdcCallback(hadc);
|
||||
@ -70,4 +69,11 @@ void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {
|
||||
if (huart == &mbusUart) {
|
||||
mbusCommTxCpltCallback(huart);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
|
||||
if (huart == &mbusUart) {
|
||||
mbusCommRxCpltCallback(huart);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user