chore: debloat (remove platformio), onewire improvements
Squashed commit of the following: commit 5f16309f629b9928d2134b85ae64af69bc3ebbcd Author: kuwoyuki <kuwoyuki@cock.li> Date: Sun Nov 24 22:55:15 2024 +0600 fix: Makefile, improve onewire retries commit 55496a3bda941b52ff349dc75c9c06eb5a37c07d Author: kuwoyuki <kuwoyuki@cock.li> Date: Mon Nov 18 00:41:18 2024 +0600 fix: make onewire validity less strict commit 3428a9bc9792508972ce3e7e4e35a64f047bca10 Author: kuwoyuki <kuwoyuki@cock.li> Date: Sun Nov 17 23:57:55 2024 +0600 chore: rm bins commit 1594e5ed430522b15466c8afa62ff7fb1b28947c Author: kuwoyuki <kuwoyuki@cock.li> Date: Sun Nov 17 23:32:01 2024 +0600 chore: unplatformiofy
This commit is contained in:
88
ch32_node.c
Normal file
88
ch32_node.c
Normal file
@@ -0,0 +1,88 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "ch32v003fun.h"
|
||||
#include "config.h"
|
||||
#include "debug.h"
|
||||
#include "gpio.h"
|
||||
#include "modbus.h"
|
||||
#include "mqtt_handler.h"
|
||||
#include "network.h"
|
||||
#include "onewire_temp.h"
|
||||
#include "spi_dma.h"
|
||||
#include "systick.h"
|
||||
#include "timer.h"
|
||||
#include "uart.h"
|
||||
|
||||
#define W5500_INIT_DELAY_MS 55
|
||||
|
||||
static mqtt_state_t mqtt_state;
|
||||
|
||||
void sysinit(void) {
|
||||
SystemInit();
|
||||
gpio_init();
|
||||
systick_init();
|
||||
tim2_init();
|
||||
spidma_init();
|
||||
uart2_init(UART_BRR_APB1);
|
||||
rs485_init(UART_BRR_APB2);
|
||||
}
|
||||
|
||||
// Callback for modbus values
|
||||
static void on_modbus_value(uint8_t device_idx, const char* property,
|
||||
uint16_t value) {
|
||||
if (mqtt_state.is_connected) {
|
||||
modbus_publish_value(&mqtt_state.client, RS485_DEVICES[device_idx].name,
|
||||
property, value);
|
||||
}
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
sysinit();
|
||||
Delay_Ms(W5500_INIT_DELAY_MS);
|
||||
|
||||
configure_network();
|
||||
network_init();
|
||||
// block forever until dhcp resolves
|
||||
while (dhcp_get_state() != DHCP_STATE_LEASED) {
|
||||
dhcp_process();
|
||||
}
|
||||
|
||||
// init handlers
|
||||
// init sensors before mqtt so we can add them to discovery
|
||||
onewire_temp_init();
|
||||
onewire_temp_set_parallel(true);
|
||||
mqtt_init(&mqtt_state);
|
||||
modbus_handler_init(on_modbus_value);
|
||||
|
||||
uint32_t last_temp_publish = 0;
|
||||
uint32_t last_temp_conversion = 0;
|
||||
const uint32_t TEMP_PUBLISH_INTERVAL = 10000; // 10 seconds
|
||||
const uint32_t CONVERSION_INTERVAL = 1000; // 1 second
|
||||
|
||||
while (1) {
|
||||
uint32_t current_time = millis();
|
||||
|
||||
led_status_process();
|
||||
dhcp_process();
|
||||
mqtt_process(&mqtt_state);
|
||||
modbus_handler_process();
|
||||
|
||||
// TODO: doesn't make sense to convert every 1s, should be the same interval
|
||||
// as publish
|
||||
if (current_time - last_temp_conversion >= CONVERSION_INTERVAL) {
|
||||
onewire_temp_start_parallel();
|
||||
last_temp_conversion = current_time;
|
||||
}
|
||||
|
||||
onewire_temp_process(); // process all sensors
|
||||
|
||||
if (current_time - last_temp_publish >= TEMP_PUBLISH_INTERVAL) {
|
||||
if (mqtt_state.is_connected) {
|
||||
onewire_temp_publish_values(&mqtt_state.client, NODE_CONFIG.id);
|
||||
}
|
||||
last_temp_publish = current_time;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user