174 lines
3.9 KiB
C

#include <string.h>
#include <stdint.h>
#include <stdbool.h>
#include <stdlib.h>
#include <main.h>
#include <usart.h>
#include <adc.h>
#include <PontCoopScheduler.h>
#include <show.h>
#include <loopCtrl.h>
#include <mbusComm.h>
#include <logger.h>
#include <frontend.h>
void my_setup_1() {
schInit();
logInit();
}
void my_errorHandler() {
show(LED_RED, ON);
}
static uint8_t numOfDevices = 8;
static t_mbusDevice devices[] = {
{
.deviceName = "Total Power",
.address = 80,
.consideredField = {
{ .label = "energy", .index = 0 },
{ .label = "power", .index = 17 },
{ .label = "", .index = 0 },
{ .label = "", .index = 0 }
}
},
{
.deviceName = "Computer Power",
.address = 85,
.consideredField = {
{ .label = "energy", .index = 0 },
{ .label = "power", .index = 4 },
{ .label = "voltage", .index = 2 },
{ .label = "current", .index = 3 }
}
},
{
.deviceName = "Dryer Power",
.address = 81,
.consideredField = {
{ .label = "energy", .index = 0 },
{ .label = "power", .index = 4 },
{ .label = "voltage", .index = 2 },
{ .label = "current", .index = 3 }
}
},
{
.deviceName = "Laundry Power",
.address = 82,
.consideredField = {
{ .label = "energy", .index = 0 },
{ .label = "power", .index = 4 },
{ .label = "voltage", .index = 2 },
{ .label = "current", .index = 3 }
}
},
{
.deviceName = "Dishwasher Power",
.address = 83,
.consideredField = {
{ .label = "energy", .index = 0 },
{ .label = "power", .index = 4 },
{ .label = "voltage", .index = 2 },
{ .label = "current", .index = 3 }
}
},
{
.deviceName = "Light Power",
.address = 84,
.consideredField = {
{ .label = "energy", .index = 0 },
{ .label = "power", .index = 4 },
{ .label = "voltage", .index = 2 },
{ .label = "current", .index = 3 }
}
},
{
.deviceName = "Freezer Power",
.address = 86,
.consideredField = {
{ .label = "energy", .index = 0 },
{ .label = "power", .index = 4 },
{ .label = "voltage", .index = 2 },
{ .label = "current", .index = 3 }
}
},
{
.deviceName = "Fridge Power",
.address = 87,
.consideredField = {
{ .label = "energy", .index = 0 },
{ .label = "power", .index = 4 },
{ .label = "voltage", .index = 2 },
{ .label = "current", .index = 3 }
}
}
};
void triggerMBusRequest(void *handle) {
static uint8_t deviceIndex = 0;
static uint32_t cnt = 0;
logMsg("");
logMsg("*** NEW REQUEST %s %d %d ***", devices[deviceIndex].deviceName, deviceIndex, cnt);
mbusCommRequest(&(devices[deviceIndex]));
cnt++;
deviceIndex++;
if (deviceIndex >= numOfDevices) {
deviceIndex = 0;
}
}
void my_setup_2() {
show(LED_RED, OFF);
show(LED_GREEN, ON);
frontendInit();
frontendSetThreshold(240);
schAdd(triggerMBusRequest, NULL, 0, 10000);
}
void my_loop() {
show(DEBUG_1, TOGGLE);
schExec();
logExec();
}
void SYSTICK_Callback() {
schUpdate();
}
void HAL_GPIO_EXTI_Callback(uint16_t pin) {
if (pin == Loop_Status_Pin) {
loopStatusCallback();
}
}
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
if (hadc == &frontendAdc) {
frontendAdcCallback(hadc);
}
}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {
if (huart == &mbusUart) {
mbusCommTxCpltCallback(huart);
}
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
if (huart == &mbusUart) {
mbusCommRxCpltCallback(huart);
}
}