#include #include // 支持 std::vector, std::map 等 #include #include #include #include #include #include #include #include "msg_handler.hpp" #include "native_logger.hpp" #include "decrypt_ota_file.hpp" #include "utils.hpp" namespace py = pybind11; using json = nlohmann::json; namespace { // 配置项 const std::string _cfg_server_ip = "www.shelingxingqiu.com"; const int _cfg_server_port = 50005; const std::string _cfg_device_id_file = "/device_key"; } // 定义获取配置的函数 py::dict get_config() { py::dict config; config["SERVER_IP"] = _cfg_server_ip; config["SERVER_PORT"] = _cfg_server_port; return config; } PYBIND11_MODULE(archery_netcore, m) { m.doc() = "Archery net core (native, pybind11)."; // Optional: configure native logger from Python. // Default log file: /maixapp/apps/t11/netcore.log m.def("set_log_file", [](const std::string& path) { netcore::set_log_file(path); }, py::arg("path")); m.def("set_log_level", [](int level) { if (level < 0) level = 0; if (level > 3) level = 3; netcore::set_log_level(static_cast(level)); }, py::arg("level")); m.def("log_test", [](const std::string& msg) { netcore::log_info(std::string("log_test: ") + msg); }, py::arg("msg")); m.def("make_packet", &netcore::make_packet, "Pack TCP packet: header (len+type+checksum) + JSON body", py::arg("msg_type"), py::arg("body_dict")); m.def("parse_packet", &netcore::parse_packet, "Parse TCP packet, return (msg_type, body_dict)"); m.def("get_config", &get_config, "Get system configuration"); m.def( "decrypt_ota_file", [](const std::string& input_path, const std::string& output_zip_path) { netcore::log_info(std::string("decrypt_ota_file in=") + input_path + " out=" + output_zip_path); return netcore::decrypt_ota_file_impl(input_path, output_zip_path); }, py::arg("input_path"), py::arg("output_zip_path"), "Decrypt OTA encrypted file (MAGIC|nonce|ciphertext|tag) to plaintext zip." ); // Minimal demo: return actions for inner_cmd=41 (manual trigger + ack) m.def("actions_for_inner_cmd", [](int inner_cmd) { py::list actions; if (inner_cmd == 41) { // 1) set manual trigger flag { py::dict a; a["type"] = "SET_FLAG"; py::dict args; args["name"] = "manual_trigger_flag"; args["value"] = true; a["args"] = args; actions.append(a); } // 2) enqueue trigger_ack { py::dict a; a["type"] = "ENQUEUE"; py::dict args; args["msg_type"] = 2; args["high"] = false; py::dict body; body["result"] = "trigger_ack"; args["body"] = body; a["args"] = args; actions.append(a); } } return actions; }); }