#include "AP_Periph.h"
#if AP_PERIPH_NETWORKING_ENABLED
const AP_Param::GroupInfo Networking_Periph::var_info[] {
AP_SUBGROUPINFO(networking_lib, "", 1, Networking_Periph, AP_Networking),
#if AP_NETWORKING_NUM_PORTS > 0
AP_SUBGROUPINFO(networking_lib.ports[0], "P1_", 2, Networking_Periph, AP_Networking::Port),
#endif
#if AP_NETWORKING_NUM_PORTS > 1
AP_SUBGROUPINFO(networking_lib.ports[1], "P2_", 3, Networking_Periph, AP_Networking::Port),
#endif
#if AP_NETWORKING_NUM_PORTS > 2
AP_SUBGROUPINFO(networking_lib.ports[2], "P3_", 4, Networking_Periph, AP_Networking::Port),
#endif
#if AP_NETWORKING_NUM_PORTS > 3
AP_SUBGROUPINFO(networking_lib.ports[3], "P4_", 5, Networking_Periph, AP_Networking::Port),
#endif
#if AP_NETWORKING_NUM_PORTS > 4
AP_SUBGROUPINFO(networking_lib.ports[4], "P5_", 6, Networking_Periph, AP_Networking::Port),
#endif
#if AP_NETWORKING_NUM_PORTS > 5
AP_SUBGROUPINFO(networking_lib.ports[5], "P6_", 7, Networking_Periph, AP_Networking::Port),
#endif
#if AP_NETWORKING_NUM_PORTS > 6
AP_SUBGROUPINFO(networking_lib.ports[6], "P7_", 8, Networking_Periph, AP_Networking::Port),
#endif
#if AP_NETWORKING_NUM_PORTS > 7
AP_SUBGROUPINFO(networking_lib.ports[7], "P8_", 9, Networking_Periph, AP_Networking::Port),
#endif
#if AP_NETWORKING_NUM_PORTS > 8
AP_SUBGROUPINFO(networking_lib.ports[8], "P9_", 10, Networking_Periph, AP_Networking::Port),
#endif
#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 0
AP_SUBGROUPINFO(passthru[0], "PASS1_", 11, Networking_Periph, Passthru),
#endif
#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 1
AP_SUBGROUPINFO(passthru[1], "PASS2_", 12, Networking_Periph, Passthru),
#endif
#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 2
AP_SUBGROUPINFO(passthru[2], "PASS3_", 13, Networking_Periph, Passthru),
#endif
#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 3
AP_SUBGROUPINFO(passthru[3], "PASS4_", 14, Networking_Periph, Passthru),
#endif
#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 4
AP_SUBGROUPINFO(passthru[4], "PASS5_", 15, Networking_Periph, Passthru),
#endif
#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 5
AP_SUBGROUPINFO(passthru[5], "PASS6_", 16, Networking_Periph, Passthru),
#endif
#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 6
AP_SUBGROUPINFO(passthru[6], "PASS7_", 17, Networking_Periph, Passthru),
#endif
#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 7
AP_SUBGROUPINFO(passthru[7], "PASS8_", 18, Networking_Periph, Passthru),
#endif
#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 8
AP_SUBGROUPINFO(passthru[8], "PASS9_", 19, Networking_Periph, Passthru),
#endif
#if AP_NETWORKING_BACKEND_PPP
AP_GROUPINFO("PPP_PORT", 20, Networking_Periph, ppp_port, AP_PERIPH_NET_PPP_PORT_DEFAULT),
AP_GROUPINFO("PPP_BAUD", 21, Networking_Periph, ppp_baud, AP_PERIPH_NET_PPP_BAUD_DEFAULT),
#endif
AP_GROUPEND
};
void Networking_Periph::init(void)
{
#if AP_NETWORKING_BACKEND_PPP
if (ppp_port >= 0) {
AP::serialmanager().set_protocol_and_baud(ppp_port, AP_SerialManager::SerialProtocol_PPP, ppp_baud.get());
}
#endif
networking_lib.init();
#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 0
for (auto &p : passthru) {
p.init();
}
#endif
}
void Networking_Periph::update(void)
{
networking_lib.update();
#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 0
for (auto &p : passthru) {
p.update();
}
#endif
#if HAL_RAM_RESERVE_START >= 256
if (!got_addresses && networking_lib.get_ip_active() != 0) {
got_addresses = true;
auto *comms = (struct app_bootloader_comms *)HAL_RAM0_START;
if (comms->magic != APP_BOOTLOADER_COMMS_MAGIC) {
memset(comms, 0, sizeof(*comms));
}
comms->magic = APP_BOOTLOADER_COMMS_MAGIC;
comms->ip = networking_lib.get_ip_active();
comms->netmask = networking_lib.get_netmask_active();
comms->gateway = networking_lib.get_gateway_active();
}
#endif
}
#endif