1*f0687c8aSRaman Tenneti #include <pybind11/pybind11.h>
2*f0687c8aSRaman Tenneti #include <pybind11/stl.h>
3*f0687c8aSRaman Tenneti #include <kms++/kms++.h>
4*f0687c8aSRaman Tenneti #include <kms++util/kms++util.h>
5*f0687c8aSRaman Tenneti
6*f0687c8aSRaman Tenneti namespace py = pybind11;
7*f0687c8aSRaman Tenneti
8*f0687c8aSRaman Tenneti using namespace kms;
9*f0687c8aSRaman Tenneti using namespace std;
10*f0687c8aSRaman Tenneti
init_pykmstest(py::module & m)11*f0687c8aSRaman Tenneti void init_pykmstest(py::module& m)
12*f0687c8aSRaman Tenneti {
13*f0687c8aSRaman Tenneti py::class_<RGB>(m, "RGB")
14*f0687c8aSRaman Tenneti .def(py::init<>())
15*f0687c8aSRaman Tenneti .def(py::init<uint8_t, uint8_t, uint8_t&>())
16*f0687c8aSRaman Tenneti .def(py::init<uint8_t, uint8_t, uint8_t, uint8_t&>())
17*f0687c8aSRaman Tenneti .def_property_readonly("rgb888", &RGB::rgb888)
18*f0687c8aSRaman Tenneti .def_property_readonly("argb8888", &RGB::argb8888)
19*f0687c8aSRaman Tenneti .def_property_readonly("abgr8888", &RGB::abgr8888)
20*f0687c8aSRaman Tenneti .def_property_readonly("rgb565", &RGB::rgb565);
21*f0687c8aSRaman Tenneti
22*f0687c8aSRaman Tenneti py::class_<ResourceManager>(m, "ResourceManager")
23*f0687c8aSRaman Tenneti .def(py::init<Card&>())
24*f0687c8aSRaman Tenneti .def("reset", &ResourceManager::reset)
25*f0687c8aSRaman Tenneti .def("reserve_connector", (Connector * (ResourceManager::*)(const string& name)) & ResourceManager::reserve_connector,
26*f0687c8aSRaman Tenneti py::arg("name") = string())
27*f0687c8aSRaman Tenneti .def("reserve_crtc", (Crtc * (ResourceManager::*)(Connector*)) & ResourceManager::reserve_crtc)
28*f0687c8aSRaman Tenneti .def("reserve_plane", (Plane * (ResourceManager::*)(Crtc*, PlaneType, PixelFormat)) & ResourceManager::reserve_plane,
29*f0687c8aSRaman Tenneti py::arg("crtc"),
30*f0687c8aSRaman Tenneti py::arg("type"),
31*f0687c8aSRaman Tenneti py::arg("format") = PixelFormat::Undefined)
32*f0687c8aSRaman Tenneti .def("reserve_generic_plane", &ResourceManager::reserve_generic_plane,
33*f0687c8aSRaman Tenneti py::arg("crtc"),
34*f0687c8aSRaman Tenneti py::arg("format") = PixelFormat::Undefined)
35*f0687c8aSRaman Tenneti .def("reserve_primary_plane", &ResourceManager::reserve_primary_plane,
36*f0687c8aSRaman Tenneti py::arg("crtc"),
37*f0687c8aSRaman Tenneti py::arg("format") = PixelFormat::Undefined)
38*f0687c8aSRaman Tenneti .def("reserve_overlay_plane", &ResourceManager::reserve_overlay_plane,
39*f0687c8aSRaman Tenneti py::arg("crtc"),
40*f0687c8aSRaman Tenneti py::arg("format") = PixelFormat::Undefined);
41*f0687c8aSRaman Tenneti py::enum_<YUVType>(m, "YUVType")
42*f0687c8aSRaman Tenneti .value("BT601_Lim", YUVType::BT601_Lim)
43*f0687c8aSRaman Tenneti .value("BT601_Full", YUVType::BT601_Full)
44*f0687c8aSRaman Tenneti .value("BT709_Lim", YUVType::BT709_Lim)
45*f0687c8aSRaman Tenneti .value("BT709_Full", YUVType::BT709_Full);
46*f0687c8aSRaman Tenneti
47*f0687c8aSRaman Tenneti // Use lambdas to handle IFramebuffer
48*f0687c8aSRaman Tenneti m.def(
49*f0687c8aSRaman Tenneti "draw_test_pattern", [](Framebuffer& fb, YUVType yuvt) { draw_test_pattern(fb, yuvt); },
50*f0687c8aSRaman Tenneti py::arg("fb"),
51*f0687c8aSRaman Tenneti py::arg("yuvt") = YUVType::BT601_Lim);
52*f0687c8aSRaman Tenneti m.def("draw_color_bar", [](Framebuffer& fb, int old_xpos, int xpos, int width) {
53*f0687c8aSRaman Tenneti draw_color_bar(fb, old_xpos, xpos, width);
54*f0687c8aSRaman Tenneti });
55*f0687c8aSRaman Tenneti m.def("draw_rect", [](Framebuffer& fb, uint32_t x, uint32_t y, uint32_t w, uint32_t h, RGB color) {
56*f0687c8aSRaman Tenneti draw_rect(fb, x, y, w, h, color);
57*f0687c8aSRaman Tenneti });
58*f0687c8aSRaman Tenneti m.def("draw_circle", [](Framebuffer& fb, int32_t xCenter, int32_t yCenter, int32_t radius, RGB color) {
59*f0687c8aSRaman Tenneti draw_circle(fb, xCenter, yCenter, radius, color);
60*f0687c8aSRaman Tenneti });
61*f0687c8aSRaman Tenneti m.def("draw_text", [](Framebuffer& fb, uint32_t x, uint32_t y, const string& str, RGB color) { draw_text(fb, x, y, str, color); });
62*f0687c8aSRaman Tenneti }
63