2020-10-18 22:02:17 +02:00
|
|
|
#include <string.h>
|
|
|
|
#include <stdint.h>
|
2020-10-24 19:34:30 +02:00
|
|
|
#include <stdbool.h>
|
2020-10-18 22:02:17 +02:00
|
|
|
#include <stdlib.h>
|
2020-10-29 15:44:13 +01:00
|
|
|
|
2020-10-18 22:02:17 +02:00
|
|
|
#include <main.h>
|
|
|
|
#include <usart.h>
|
2020-10-31 21:25:49 +01:00
|
|
|
#include <adc.h>
|
2020-11-05 14:38:10 +01:00
|
|
|
#include <spi.h>
|
2020-10-18 22:02:17 +02:00
|
|
|
|
2020-10-29 15:44:13 +01:00
|
|
|
#include <PontCoopScheduler.h>
|
|
|
|
|
2020-11-03 10:05:45 +01:00
|
|
|
#include <show.h>
|
2020-10-27 15:12:19 +01:00
|
|
|
#include <loopCtrl.h>
|
2020-10-28 19:40:08 +01:00
|
|
|
#include <mbusComm.h>
|
2020-10-29 15:44:13 +01:00
|
|
|
#include <logger.h>
|
2020-10-31 21:25:49 +01:00
|
|
|
#include <frontend.h>
|
2020-11-05 14:38:10 +01:00
|
|
|
#include <eeprom.h>
|
2020-11-08 15:56:14 +01:00
|
|
|
#include <wizHelper.h>
|
2020-11-11 14:19:02 +01:00
|
|
|
#include <tcpTest.h>
|
2020-11-13 12:38:08 +01:00
|
|
|
#include <mqttTest.h>
|
|
|
|
|
2020-11-10 15:56:07 +01:00
|
|
|
|
2020-10-18 22:02:17 +02:00
|
|
|
void my_setup_1() {
|
2020-10-27 15:12:19 +01:00
|
|
|
schInit();
|
2020-10-29 15:44:13 +01:00
|
|
|
logInit();
|
2020-10-18 22:02:17 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void my_errorHandler() {
|
2020-11-03 10:05:45 +01:00
|
|
|
show(LED_RED, ON);
|
2020-10-18 22:02:17 +02:00
|
|
|
}
|
|
|
|
|
2020-11-03 14:31:59 +01:00
|
|
|
|
|
|
|
static uint8_t numOfDevices = 8;
|
|
|
|
static t_mbusDevice devices[] = {
|
|
|
|
{
|
2020-11-03 14:00:54 +01:00
|
|
|
.deviceName = "Total Power",
|
|
|
|
.address = 80,
|
|
|
|
.consideredField = {
|
|
|
|
{ .label = "energy", .index = 0 },
|
2020-11-03 14:10:09 +01:00
|
|
|
{ .label = "power", .index = 17 },
|
|
|
|
{ .label = "", .index = 0 },
|
|
|
|
{ .label = "", .index = 0 }
|
2020-11-03 14:37:58 +01:00
|
|
|
},
|
|
|
|
.requests = 0,
|
2020-11-03 15:08:04 +01:00
|
|
|
.failures = 0,
|
|
|
|
.period = 60,
|
|
|
|
.delay = 0,
|
|
|
|
.waiting = false
|
2020-11-03 14:31:59 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.deviceName = "Computer Power",
|
|
|
|
.address = 85,
|
|
|
|
.consideredField = {
|
|
|
|
{ .label = "energy", .index = 0 },
|
|
|
|
{ .label = "power", .index = 4 },
|
|
|
|
{ .label = "voltage", .index = 2 },
|
|
|
|
{ .label = "current", .index = 3 }
|
2020-11-03 14:37:58 +01:00
|
|
|
},
|
|
|
|
.requests = 0,
|
2020-11-03 15:08:04 +01:00
|
|
|
.failures = 0,
|
|
|
|
.period = 60,
|
|
|
|
.delay = 0,
|
|
|
|
.waiting = false
|
2020-11-03 14:31:59 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.deviceName = "Dryer Power",
|
|
|
|
.address = 81,
|
|
|
|
.consideredField = {
|
|
|
|
{ .label = "energy", .index = 0 },
|
|
|
|
{ .label = "power", .index = 4 },
|
|
|
|
{ .label = "voltage", .index = 2 },
|
|
|
|
{ .label = "current", .index = 3 }
|
2020-11-03 14:37:58 +01:00
|
|
|
},
|
|
|
|
.requests = 0,
|
2020-11-03 15:08:04 +01:00
|
|
|
.failures = 0,
|
|
|
|
.period = 60,
|
|
|
|
.delay = 0,
|
|
|
|
.waiting = false
|
2020-11-03 14:31:59 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.deviceName = "Laundry Power",
|
|
|
|
.address = 82,
|
|
|
|
.consideredField = {
|
|
|
|
{ .label = "energy", .index = 0 },
|
|
|
|
{ .label = "power", .index = 4 },
|
|
|
|
{ .label = "voltage", .index = 2 },
|
|
|
|
{ .label = "current", .index = 3 }
|
2020-11-03 14:37:58 +01:00
|
|
|
},
|
|
|
|
.requests = 0,
|
2020-11-03 15:08:04 +01:00
|
|
|
.failures = 0,
|
|
|
|
.period = 60,
|
|
|
|
.delay = 0,
|
|
|
|
.waiting = false
|
2020-11-03 14:31:59 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.deviceName = "Dishwasher Power",
|
|
|
|
.address = 83,
|
|
|
|
.consideredField = {
|
|
|
|
{ .label = "energy", .index = 0 },
|
|
|
|
{ .label = "power", .index = 4 },
|
|
|
|
{ .label = "voltage", .index = 2 },
|
|
|
|
{ .label = "current", .index = 3 }
|
2020-11-03 14:37:58 +01:00
|
|
|
},
|
|
|
|
.requests = 0,
|
2020-11-03 15:08:04 +01:00
|
|
|
.failures = 0,
|
|
|
|
.period = 60,
|
|
|
|
.delay = 0,
|
|
|
|
.waiting = false
|
2020-11-03 14:31:59 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.deviceName = "Light Power",
|
|
|
|
.address = 84,
|
|
|
|
.consideredField = {
|
|
|
|
{ .label = "energy", .index = 0 },
|
|
|
|
{ .label = "power", .index = 4 },
|
|
|
|
{ .label = "voltage", .index = 2 },
|
|
|
|
{ .label = "current", .index = 3 }
|
2020-11-03 14:37:58 +01:00
|
|
|
},
|
|
|
|
.requests = 0,
|
2020-11-03 15:08:04 +01:00
|
|
|
.failures = 0,
|
|
|
|
.period = 15,
|
|
|
|
.delay = 0,
|
|
|
|
.waiting = false
|
2020-11-03 14:31:59 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.deviceName = "Freezer Power",
|
|
|
|
.address = 86,
|
|
|
|
.consideredField = {
|
|
|
|
{ .label = "energy", .index = 0 },
|
|
|
|
{ .label = "power", .index = 4 },
|
|
|
|
{ .label = "voltage", .index = 2 },
|
|
|
|
{ .label = "current", .index = 3 }
|
2020-11-03 14:37:58 +01:00
|
|
|
},
|
|
|
|
.requests = 0,
|
2020-11-03 15:08:04 +01:00
|
|
|
.failures = 0,
|
|
|
|
.period = 60,
|
|
|
|
.delay = 0,
|
|
|
|
.waiting = false
|
2020-11-03 14:31:59 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.deviceName = "Fridge Power",
|
|
|
|
.address = 87,
|
|
|
|
.consideredField = {
|
|
|
|
{ .label = "energy", .index = 0 },
|
|
|
|
{ .label = "power", .index = 4 },
|
|
|
|
{ .label = "voltage", .index = 2 },
|
|
|
|
{ .label = "current", .index = 3 }
|
2020-11-03 14:37:58 +01:00
|
|
|
},
|
|
|
|
.requests = 0,
|
2020-11-03 15:08:04 +01:00
|
|
|
.failures = 0,
|
|
|
|
.period = 60,
|
|
|
|
.delay = 0,
|
|
|
|
.waiting = false
|
2020-11-03 14:31:59 +01:00
|
|
|
}
|
|
|
|
};
|
2020-11-03 14:00:54 +01:00
|
|
|
|
2020-11-03 14:31:59 +01:00
|
|
|
|
|
|
|
void triggerMBusRequest(void *handle) {
|
|
|
|
static uint8_t deviceIndex = 0;
|
2020-11-03 14:43:56 +01:00
|
|
|
|
2020-11-03 15:08:04 +01:00
|
|
|
if (devices[deviceIndex].waiting) {
|
|
|
|
e_mbusCommRequestResult r = mbusCommRequest(&(devices[deviceIndex]));
|
|
|
|
if (r == MBCRR_TRIGGERED) {
|
|
|
|
devices[deviceIndex].waiting = false;
|
|
|
|
deviceIndex++;
|
2020-11-03 14:43:56 +01:00
|
|
|
}
|
2020-11-03 15:08:04 +01:00
|
|
|
} else {
|
|
|
|
deviceIndex++;
|
|
|
|
}
|
|
|
|
if (deviceIndex >= numOfDevices) {
|
|
|
|
deviceIndex = 0;
|
2020-11-03 14:31:59 +01:00
|
|
|
}
|
2020-10-24 19:27:40 +02:00
|
|
|
}
|
|
|
|
|
2020-11-03 15:08:04 +01:00
|
|
|
void scheduleMBusRequest(void *handle) {
|
|
|
|
for (uint8_t i = 0; i < numOfDevices; i++) {
|
2020-11-03 15:10:28 +01:00
|
|
|
devices[i].delay -= 1;
|
2020-11-03 15:08:04 +01:00
|
|
|
if (devices[i].delay <= 0) {
|
|
|
|
devices[i].delay = devices[i].period;
|
|
|
|
devices[i].waiting = true;
|
2020-11-03 17:57:03 +01:00
|
|
|
coloredMsg(LOG_GREEN, "*** Scheduled: %s", devices[i].deviceName);
|
2020-11-03 15:08:04 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-10-24 19:34:30 +02:00
|
|
|
|
2020-10-18 22:02:17 +02:00
|
|
|
void my_setup_2() {
|
2020-11-03 10:05:45 +01:00
|
|
|
show(LED_RED, OFF);
|
|
|
|
show(LED_GREEN, ON);
|
2020-11-05 22:39:24 +01:00
|
|
|
coloredMsg(LOG_BLUE, "Application starting");
|
2020-10-27 15:12:19 +01:00
|
|
|
|
2020-11-05 14:38:10 +01:00
|
|
|
eepromInit();
|
|
|
|
|
2020-11-08 15:56:14 +01:00
|
|
|
wizInit();
|
2020-10-31 22:19:48 +01:00
|
|
|
|
2020-11-13 12:38:08 +01:00
|
|
|
mqttTestInit();
|
2020-11-11 14:19:02 +01:00
|
|
|
|
2020-11-10 15:56:07 +01:00
|
|
|
|
2020-11-10 14:26:01 +01:00
|
|
|
// frontendInit();
|
|
|
|
// frontendSetThreshold(240);
|
2020-11-08 15:56:14 +01:00
|
|
|
|
2020-11-10 14:26:01 +01:00
|
|
|
// schAdd(scheduleMBusRequest, NULL, 0, 1000);
|
|
|
|
// schAdd(triggerMBusRequest, NULL, 0, 100);
|
2020-10-18 22:02:17 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void my_loop() {
|
2020-11-03 10:05:45 +01:00
|
|
|
show(DEBUG_1, TOGGLE);
|
2020-11-01 13:22:57 +01:00
|
|
|
|
2020-10-27 15:12:19 +01:00
|
|
|
schExec();
|
2020-10-18 22:02:17 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void SYSTICK_Callback() {
|
2020-11-10 15:56:07 +01:00
|
|
|
// Pont Scheduler
|
2020-10-27 15:12:19 +01:00
|
|
|
schUpdate();
|
2020-10-18 22:02:17 +02:00
|
|
|
}
|
2020-10-27 22:28:03 +01:00
|
|
|
|
|
|
|
void HAL_GPIO_EXTI_Callback(uint16_t pin) {
|
|
|
|
if (pin == Loop_Status_Pin) {
|
|
|
|
loopStatusCallback();
|
|
|
|
}
|
2020-10-29 15:44:13 +01:00
|
|
|
}
|
2020-10-31 21:25:49 +01:00
|
|
|
|
|
|
|
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
|
|
|
|
if (hadc == &frontendAdc) {
|
|
|
|
frontendAdcCallback(hadc);
|
|
|
|
}
|
|
|
|
}
|
2020-11-02 15:02:39 +01:00
|
|
|
|
|
|
|
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {
|
|
|
|
if (huart == &mbusUart) {
|
|
|
|
mbusCommTxCpltCallback(huart);
|
2020-11-10 22:18:51 +01:00
|
|
|
} else if (huart == &debugUart) {
|
2020-11-10 16:30:26 +01:00
|
|
|
debugTxCpltCallback(huart);
|
2020-11-02 15:02:39 +01:00
|
|
|
}
|
2020-11-02 15:41:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
|
|
|
|
if (huart == &mbusUart) {
|
|
|
|
mbusCommRxCpltCallback(huart);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-11-05 14:38:10 +01:00
|
|
|
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi) {
|
|
|
|
if (hspi == &eepromSpi) {
|
|
|
|
eepromSpiTxCpltCallback(hspi);
|
|
|
|
}
|
|
|
|
}
|