#ifndef ZDISTA_WRAPPER_H #define ZDISTA_WRAPPER_H // Na systemach Windows, musimy jawnie eksportować symbole, aby były widoczne w DLL. #if defined(_WIN32) || defined(_WIN64) #define DLL_EXPORT __declspec(dllexport) #else #define DLL_EXPORT #endif // Deklaracja nieprzezroczystej struktury (opaque struct). // Dzięki temu, wewnętrzna budowa naszego "uchwytu" jest ukryta przed kodem Python. struct ZDistA_handle; typedef struct ZDistA_handle ZDistA_handle; /** * @brief Inicjalizuje logikę przekaźnika i wszystkie wewnętrzne struktury. * * @param z1_r Rezystancja nastawcza strefy 1. * @param z1_x Reaktancja nastawcza strefy 1. * @param line_angle_deg Kąt linii w stopniach. * @param kierunek Kierunkowość (0: bezkierunkowy, 1: do linii, 2: do szyn). * @return Wskaźnik do "uchwytu" (handle) przechowującego stan przekaźnika, lub NULL w przypadku błędu. */ DLL_EXPORT ZDistA_handle* ZDistA_init(double z1_r, double z1_x, double line_angle_deg, int kierunek); /** * @brief Wykonuje jeden krok obliczeniowy algorytmu. * * @param handle Uchwyt zwrócony przez ZDistA_init. * @param u_re Tablica 3 floatów (U1, U2, U3 - części rzeczywiste). * @param u_im Tablica 3 floatów (U1, U2, U3 - części urojone). * @param i_re Tablica 3 floatów (I1, I2, I3 - części rzeczywiste). * @param i_im Tablica 3 floatów (I1, I2, I3 - części urojone). * @return Wartość > 0, jeśli nastąpiło zadziałanie (trip), 0 w przeciwnym razie. */ DLL_EXPORT int ZDistA_step( ZDistA_handle* handle, const float u_re[3], const float u_im[3], const float i_re[3], const float i_im[3] ); /** * @brief Zwalnia pamięć zaalokowaną dla uchwytu. * * @param handle Uchwyt do zwolnienia. */ DLL_EXPORT void ZDistA_cleanup(ZDistA_handle* handle); #endif // ZDISTA_WRAPPER_H