Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
magicrub committed Nov 21, 2023
1 parent 638a812 commit 11cb16e
Show file tree
Hide file tree
Showing 5 changed files with 153 additions and 34 deletions.
4 changes: 2 additions & 2 deletions Tools/AP_Periph/Parameters.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -565,9 +565,9 @@ const AP_Param::Info AP_Periph_FW::var_info[] = {
#endif

#ifdef HAL_PERIPH_ENABLE_NETWORKING
// @Group: NET
// @Group: NET_
// @Path: networking.cpp
GOBJECT(networking_periph, "NET", Networking_Periph),
GOBJECT(networking_periph, "NET_", Networking_Periph),
#endif

#ifdef HAL_PERIPH_ENABLE_RPM
Expand Down
126 changes: 101 additions & 25 deletions Tools/AP_Periph/networking.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,54 +22,128 @@
extern const AP_HAL::HAL &hal;

const AP_Param::GroupInfo Networking_Periph::var_info[] {
// @Group: _
// @Group:
// @Path: ../AP_Networking/AP_Networking.cpp
AP_SUBGROUPINFO(networking, "_", 1, Networking_Periph, AP_Networking),
AP_SUBGROUPINFO(networking, "", 1, Networking_Periph, AP_Networking),

/*
the NET_Pn_ parameters need to be bere as otherwise we
are too deep in the parameter tree
*/

#if AP_NETWORKING_NUM_PORTS > 0
// @Group: _P1_
// @Group: P1_
// @Path: ../libraries/AP_Networking/AP_Networking_port.cpp
AP_SUBGROUPINFO(networking.ports[0], "_P1_", 2, Networking_Periph, AP_Networking::Port),
AP_SUBGROUPINFO(networking.ports[0], "P1_", 2, Networking_Periph, AP_Networking::Port),
#endif

#if AP_NETWORKING_NUM_PORTS > 1
// @Group: _P2_
// @Group: P2_
// @Path: ../libraries/AP_Networking/AP_Networking_port.cpp
AP_SUBGROUPINFO(networking.ports[1], "_P2_", 3, Networking_Periph, AP_Networking::Port),
AP_SUBGROUPINFO(networking.ports[1], "P2_", 3, Networking_Periph, AP_Networking::Port),
#endif

#if AP_NETWORKING_NUM_PORTS > 2
// @Group: _P3_
// @Group: P3_
// @Path: ../libraries/AP_Networking/AP_Networking_port.cpp
AP_SUBGROUPINFO(networking.ports[2], "_P3_", 4, Networking_Periph, AP_Networking::Port),
AP_SUBGROUPINFO(networking.ports[2], "P3_", 4, Networking_Periph, AP_Networking::Port),
#endif

#if AP_NETWORKING_NUM_PORTS > 3
// @Group: _P4_
// @Group: P4_
// @Path: ../libraries/AP_Networking/AP_Networking_port.cpp
AP_SUBGROUPINFO(networking.ports[3], "_P4_", 5, Networking_Periph, AP_Networking::Port),
AP_SUBGROUPINFO(networking.ports[3], "P4_", 5, Networking_Periph, AP_Networking::Port),
#endif

AP_GROUPINFO("PASS1_EP1", 6, Networking_Periph, passthru[0].ep1, -1),
AP_GROUPINFO("PASS1_EP2", 7, Networking_Periph, passthru[0].ep2, -1),
#if AP_NETWORKING_NUM_PORTS > 4
// @Group: P5_
// @Path: ../libraries/AP_Networking/AP_Networking_port.cpp
AP_SUBGROUPINFO(networking.ports[4], "P5_", 6, Networking_Periph, AP_Networking::Port),
#endif

AP_GROUPINFO("PASS2_EP1", 8, Networking_Periph, passthru[1].ep1, -1),
AP_GROUPINFO("PASS2_EP2", 9, Networking_Periph, passthru[1].ep2, -1),
#if AP_NETWORKING_NUM_PORTS > 5
// @Group: P6_
// @Path: ../libraries/AP_Networking/AP_Networking_port.cpp
AP_SUBGROUPINFO(networking.ports[5], "P6_", 7, Networking_Periph, AP_Networking::Port),
#endif

AP_GROUPEND
};
#if AP_NETWORKING_NUM_PORTS > 6
// @Group: P7_
// @Path: ../libraries/AP_Networking/AP_Networking_port.cpp
AP_SUBGROUPINFO(networking.ports[6], "P7_", 8, Networking_Periph, AP_Networking::Port),
#endif

#if AP_NETWORKING_NUM_PORTS > 7
// @Group: P8_
// @Path: ../libraries/AP_Networking/AP_Networking_port.cpp
AP_SUBGROUPINFO(networking.ports[7], "P8_", 9, Networking_Periph, AP_Networking::Port),
#endif

#if AP_NETWORKING_NUM_PORTS > 8
// @Group: P9_
// @Path: ../libraries/AP_Networking/AP_Networking_port.cpp
AP_SUBGROUPINFO(networking.ports[8], "P9_", 10, Networking_Periph, AP_Networking::Port),
#endif

Networking_Periph::Networking_Periph(void)
{
AP_Param::setup_object_defaults(this, var_info);
}


#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 0
// @Group: PASS1_
// @Path: networking_port.cpp
AP_SUBGROUPINFO(passthru[0], "PASS1_", 11, Networking_Periph, Networking_Periph),
#endif

#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 1
// @Group: PASS2_
// @Path: networking_port.cpp
AP_SUBGROUPINFO(passthru[1], "PASS2_", 12, Networking_Periph, Networking_Periph),
#endif

#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 2
// @Group: PASS3_
// @Path: networking_port.cpp
AP_SUBGROUPINFO(passthru[2], "PASS3_", 13, Networking_Periph, Networking_Periph),
#endif

#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 3
// @Group: PASS4_
// @Path: networking_port.cpp
AP_SUBGROUPINFO(passthru[3], "PASS4_", 14, Networking_Periph, Networking_Periph),
#endif

#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 4
// @Group: PASS5_
// @Path: networking_port.cpp
AP_SUBGROUPINFO(passthru[4], "PASS5_", 15, Networking_Periph, Networking_Periph),
#endif

#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 5
// @Group: PASS6_
// @Path: networking_port.cpp
AP_SUBGROUPINFO(passthru[5], "PASS6_", 16, Networking_Periph, Networking_Periph),
#endif

#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 6
// @Group: PASS7_
// @Path: networking_port.cpp
AP_SUBGROUPINFO(passthru[6], "PASS7_", 17, Networking_Periph, Networking_Periph),
#endif

#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 7
// @Group: PASS8_
// @Path: networking_port.cpp
AP_SUBGROUPINFO(passthru[7], "PASS8_", 18, Networking_Periph, Networking_Periph),
#endif

#if HAL_PERIPH_NETWORK_NUM_PASSTHRU > 8
// @Group: PASS9_
// @Path: networking_port.cpp
AP_SUBGROUPINFO(passthru[8], "PASS9_", 19, Networking_Periph, Networking_Periph),
#endif

AP_GROUPEND
};

/*
update UART pass-thru, if enabled
*/
Expand All @@ -86,25 +160,28 @@ void Networking_Periph::update_passthru(void)
p.port1 = serial_manager.get_serial_by_id(p.ep1);
p.port2 = serial_manager.get_serial_by_id(p.ep2);
if (p.port1 != nullptr && p.port2 != nullptr) {
p.port1->begin(115200);
p.port2->begin(115200);
p.port1->set_options(p.options1);
p.port1->begin(p.baud1);

p.port2->begin(p.baud1);
p.port2->set_options(p.options2);
}
}
}

for (auto &p : passthru) {
uint8_t buf[64];
if (p.port1 == nullptr || p.port2 == nullptr) {
continue;
}
uint8_t buf[64];

// read from port1, and write to port2
auto avail = p.port1->available();
if (avail > 0) {
auto space = p.port2->txspace();
const uint32_t n = MIN(space, sizeof(buf));
const auto nbytes = p.port1->read(buf, n);
if (nbytes > 0) {
GCS_SEND_TEXT(MAV_SEVERITY_INFO, "data1 %d", unsigned(nbytes));
p.port2->write(buf, nbytes);
}
}
Expand All @@ -116,7 +193,6 @@ void Networking_Periph::update_passthru(void)
const uint32_t n = MIN(space, sizeof(buf));
const auto nbytes = p.port2->read(buf, n);
if (nbytes > 0) {
GCS_SEND_TEXT(MAV_SEVERITY_INFO, "data2 %d", unsigned(nbytes));
p.port1->write(buf, nbytes);
}
}
Expand Down
25 changes: 19 additions & 6 deletions Tools/AP_Periph/networking.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,41 @@

#ifdef HAL_PERIPH_ENABLE_NETWORKING

#define HAL_PERIPH_NETWORK_NUM_PASSTHRU 2
#ifndef HAL_PERIPH_NETWORK_NUM_PASSTHRU
#define HAL_PERIPH_NETWORK_NUM_PASSTHRU 0
#endif

class Networking_Periph {
public:
friend class AP_Periph_FW;
friend class AP_Netwokring;
Networking_Periph(void);

Networking_Periph() {
AP_Param::setup_object_defaults(this, var_info);
}

static const struct AP_Param::GroupInfo var_info[];

// update uart pass-thru
void update_passthru();

private:
AP_Networking networking;

struct {
class Passthru {
public:

AP_Int8 ep1;
AP_Int8 ep2;
AP_Int32 baud1;
AP_Int32 baud2;
AP_Int32 options1;
AP_Int32 options2;

AP_HAL::UARTDriver *port1;
AP_HAL::UARTDriver *port2;
} passthru[HAL_PERIPH_NETWORK_NUM_PASSTHRU];

private:
AP_Networking networking;

};

#endif // HAL_PERIPH_ENABLE_BATTERY_BALANCE
Expand Down
2 changes: 1 addition & 1 deletion libraries/AP_HAL_ChibiOS/hwdef/kha_eth/hwdef.dat
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ define HAL_GPIO_ETH_ENABLE 113
define BOARD_PHY_ID MII_LAN8742A_ID
define BOARD_PHY_RMII
define HAL_PERIPH_ENABLE_NETWORKING

define HAL_PERIPH_NETWORK_NUM_PASSTHRU 0
###################

#Communications and debug
Expand Down
30 changes: 30 additions & 0 deletions libraries/AP_Vehicle/AP_Vehicle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,36 @@ const AP_Param::GroupInfo AP_Vehicle::var_info[] = {
// @Path: ../AP_Networking/AP_Networking_port.cpp
AP_SUBGROUPINFO(networking.ports[3], "NET_P4_", 25, AP_Vehicle, AP_Networking::Port),
#endif

#if AP_NETWORKING_NUM_PORTS > 4
// @Group: NET_P5_
// @Path: ../AP_Networking/AP_Networking_port.cpp
AP_SUBGROUPINFO(networking.ports[4], "NET_P5_", 26, AP_Vehicle, AP_Networking::Port),
#endif

#if AP_NETWORKING_NUM_PORTS > 5
// @Group: NET_P6_
// @Path: ../AP_Networking/AP_Networking_port.cpp
AP_SUBGROUPINFO(networking.ports[5], "NET_P6_", 27, AP_Vehicle, AP_Networking::Port),
#endif

#if AP_NETWORKING_NUM_PORTS > 6
// @Group: NET_P7_
// @Path: ../AP_Networking/AP_Networking_port.cpp
AP_SUBGROUPINFO(networking.ports[6], "NET_P7_", 28, AP_Vehicle, AP_Networking::Port),
#endif

#if AP_NETWORKING_NUM_PORTS > 7
// @Group: NET_P8_
// @Path: ../AP_Networking/AP_Networking_port.cpp
AP_SUBGROUPINFO(networking.ports[7], "NET_P8_", 29, AP_Vehicle, AP_Networking::Port),
#endif

#if AP_NETWORKING_NUM_PORTS > 8
// @Group: NET_P9_
// @Path: ../AP_Networking/AP_Networking_port.cpp
AP_SUBGROUPINFO(networking.ports[8], "NET_P9_", 30, AP_Vehicle, AP_Networking::Port),
#endif
#endif // AP_NETWORKING_ENABLED

#if AP_FILTER_ENABLED
Expand Down

0 comments on commit 11cb16e

Please sign in to comment.