0 firmware: add num_points parameter to CMD_START_LSV protocol
This commit is contained in:
parent
8e1153585b
commit
a21b014d89
12
main/eis4.c
12
main/eis4.c
|
|
@ -125,12 +125,16 @@ void app_main(void)
|
|||
lsv_cfg.v_stop = cmd.lsv.v_stop;
|
||||
lsv_cfg.scan_rate = cmd.lsv.scan_rate;
|
||||
lsv_cfg.lp_rtia = cmd.lsv.lp_rtia;
|
||||
printf("LSV: %.0f-%.0f mV, %.0f mV/s, rtia=%u\n",
|
||||
lsv_cfg.v_start, lsv_cfg.v_stop, lsv_cfg.scan_rate, lsv_cfg.lp_rtia);
|
||||
uint32_t max_pts = ECHEM_MAX_POINTS;
|
||||
if (cmd.lsv.num_points > 0 && cmd.lsv.num_points < ECHEM_MAX_POINTS)
|
||||
max_pts = cmd.lsv.num_points;
|
||||
printf("LSV: %.0f-%.0f mV, %.0f mV/s, rtia=%u, max_pts=%lu\n",
|
||||
lsv_cfg.v_start, lsv_cfg.v_stop, lsv_cfg.scan_rate, lsv_cfg.lp_rtia,
|
||||
(unsigned long)max_pts);
|
||||
|
||||
uint32_t n = echem_lsv_calc_steps(&lsv_cfg, ECHEM_MAX_POINTS);
|
||||
uint32_t n = echem_lsv_calc_steps(&lsv_cfg, max_pts);
|
||||
send_lsv_start(n, lsv_cfg.v_start, lsv_cfg.v_stop);
|
||||
int got = echem_lsv(&lsv_cfg, lsv_results, ECHEM_MAX_POINTS, send_lsv_point);
|
||||
int got = echem_lsv(&lsv_cfg, lsv_results, max_pts, send_lsv_point);
|
||||
printf("LSV complete: %d points\n", got);
|
||||
send_lsv_end();
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ typedef struct {
|
|||
uint8_t rtia;
|
||||
uint8_t rcal;
|
||||
uint8_t electrode;
|
||||
struct { float v_start, v_stop, scan_rate; uint8_t lp_rtia; } lsv;
|
||||
struct { float v_start, v_stop, scan_rate; uint8_t lp_rtia; uint16_t num_points; } lsv;
|
||||
struct { float v_hold, interval_ms, duration_s; uint8_t lp_rtia; } amp;
|
||||
struct { float v_cond, t_cond_ms, v_free, v_total, t_dep_ms, t_meas_ms; uint8_t lp_rtia; } cl;
|
||||
struct { float stabilize_s; } ph;
|
||||
|
|
|
|||
|
|
@ -19,14 +19,11 @@
|
|||
#define UDP_PORT 5941
|
||||
#define UDP_BUF_SIZE 128
|
||||
#define MAX_UDP_CLIENTS 10
|
||||
#define CLIENT_TIMEOUT_MS 30000
|
||||
|
||||
static int udp_sock = -1;
|
||||
static esp_netif_t *ap_netif;
|
||||
|
||||
static struct {
|
||||
struct sockaddr_in addr;
|
||||
TickType_t last_seen;
|
||||
uint8_t mac[6];
|
||||
bool active;
|
||||
} clients[MAX_UDP_CLIENTS];
|
||||
|
|
@ -35,19 +32,14 @@ static int client_count;
|
|||
|
||||
static void client_touch(const struct sockaddr_in *addr)
|
||||
{
|
||||
TickType_t now = xTaskGetTickCount();
|
||||
|
||||
for (int i = 0; i < client_count; i++) {
|
||||
if (clients[i].addr.sin_addr.s_addr == addr->sin_addr.s_addr &&
|
||||
clients[i].addr.sin_port == addr->sin_port) {
|
||||
clients[i].last_seen = now;
|
||||
clients[i].addr.sin_port == addr->sin_port)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (client_count < MAX_UDP_CLIENTS) {
|
||||
clients[client_count].addr = *addr;
|
||||
clients[client_count].last_seen = now;
|
||||
clients[client_count].active = true;
|
||||
memset(clients[client_count].mac, 0, 6);
|
||||
|
||||
|
|
@ -68,21 +60,6 @@ static void client_touch(const struct sockaddr_in *addr)
|
|||
}
|
||||
}
|
||||
|
||||
static void clients_expire(void)
|
||||
{
|
||||
TickType_t now = xTaskGetTickCount();
|
||||
TickType_t timeout = pdMS_TO_TICKS(CLIENT_TIMEOUT_MS);
|
||||
|
||||
for (int i = 0; i < client_count; ) {
|
||||
if ((now - clients[i].last_seen) > timeout) {
|
||||
clients[i] = clients[--client_count];
|
||||
printf("UDP: client expired (%d/%d)\n", client_count, MAX_UDP_CLIENTS);
|
||||
} else {
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void client_remove_by_mac(const uint8_t *mac)
|
||||
{
|
||||
for (int i = 0; i < client_count; ) {
|
||||
|
|
@ -135,6 +112,8 @@ static void parse_udp_sysex(const uint8_t *data, uint16_t len)
|
|||
cmd.lsv.v_stop = decode_float(&data[8]);
|
||||
cmd.lsv.scan_rate = decode_float(&data[13]);
|
||||
cmd.lsv.lp_rtia = data[18];
|
||||
if (len >= 22)
|
||||
cmd.lsv.num_points = decode_u16(&data[19]);
|
||||
break;
|
||||
case CMD_START_AMP:
|
||||
if (len < 19) return;
|
||||
|
|
@ -231,7 +210,6 @@ static void udp_rx_task(void *param)
|
|||
if (n <= 0) continue;
|
||||
|
||||
client_touch(&src);
|
||||
clients_expire();
|
||||
parse_udp_sysex(buf, (uint16_t)n);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue