/*
 * mocks_extra.h
 * Dodatkowe definicje potrzebne do kompilacji
 * Uwaga: musi być dołączony PRZED helper.h i analog_in.h
 */

#ifndef MOCKS_EXTRA_H_
#define MOCKS_EXTRA_H_

#include <stdint.h>

// Mock for Semaphore_Handle (z TI-RTOS)
typedef void* Semaphore_Handle;

// Mock for Swi_Handle (z TI-RTOS)
typedef void* Swi_Handle;

// Mock for Task_Handle
typedef void* Task_Handle;

// Zmienna globalna dla stanu urządzenia
extern uint32_t dev_ctrl_state;

// Flagi stanu urządzenia
#define DEV_CTRL_STATE_TEST_LOG  0x01

// Atrapa funkcji czy_test_R - definicja w mocks.h

// Funkcja do ustawiania bitu przez wskaźnik
static inline int set_bit_ptr(uint32_t io, void *bit_ptr, uint8_t *bit_no) {
    if (io && bit_ptr && bit_no) {
        uint8_t mask = 1 << (*bit_no);
        uint8_t *byte_ptr = (uint8_t *)bit_ptr;
        *byte_ptr = mask;
        return 1;
    }
    return 0;
}

// Funkcja do ustawiania bitu przez maskę
static inline int set_bit_ptr_mask(uint32_t io, void *bit_ptr, uint8_t *mask) {
    if (io && bit_ptr && mask) {
        uint8_t *byte_ptr = (uint8_t *)bit_ptr;
        *byte_ptr = *mask;
        return 1;
    }
    return 0;
}

// Funkcja do ustawiania wartości float
static inline int set_float_ptr(uint32_t io, void *float_ptr) {
    if (io && float_ptr) {
        float *fptr = (float *)float_ptr;
        *fptr = (float)io;
        return 1;
    }
    return 0;
}

// Funkcja do ustawiania wskaźnika w wskaźniku
static inline int set_pointer_in_ptr(uint32_t io, uint32_t *pointer_ptr) {
    if (pointer_ptr) {
        *pointer_ptr = io;
        return 1;
    }
    return 0;
}

// Funkcja do pobierania wskaźnika
static inline int set_pointer_out_ptr(uint32_t io, uint32_t *pointer_ptr) {
    (void)io;
    if (pointer_ptr) {
        *pointer_ptr = 0;
        return 1;
    }
    return 0;
}

#endif /* MOCKS_EXTRA_H_ */
