#ifndef SWITCHBOARD_CONTROL_H
#define SWITCHBOARD_CONTROL_H
  //The driver manages the power of the RF circuit
  #include <stdint.h>
  #include <stdbool.h>

  // SPI2_KEEP_NSS_PULLEDUP
  // if enabled (=1) keeps NSS pin pulled up when deinitialized
  #define SPI2_KEEP_NSS_PULLEDUP_SB   1

  //============================================================================
  // Команды работы по SPI с коммутатором
  //============================================================================
  // 16 bit MSB  [0:3] - подключение первого порта; [4:7] - подключение порта 2; [8:15] - команда
  typedef struct{
      uint8_t cmd;
      uint8_t addr;
      uint8_t responce_2;
      uint8_t responce_1;
  }SB_command_t;
  //============================================================================
  // Команды для работы с таблицей измерений
  //============================================================================
  #define SWB_TABLE_NEW_RECORD          (uint8_t) 0x01  // Запись нового значения в таблицу переключений
  #define SWB_TABLE_GET_RECORD          (uint8_t) 0x02  // Чтение записи под номером
  #define SWB_TABLE_TABLE_COUNT         (uint8_t) 0x03  // Чтение числа записей в таблице
  #define SWB_TABLE_START_MEASURING     (uint8_t) 0x05  // Старт измерений с нуля!
  #define SWB_TABLE_STOP_MEASURING      (uint8_t) 0x04  // Стоп измерений на текущем измерении
  #define SWB_TABLE_CONTINUE_MEASURING  (uint8_t) 0x06  // Продолжить измерения с последней измеренной коммутации
  #define SWB_TABLE_CLEAR               (uint8_t) 0xFF  // Очистка плана измерений
  //============================================================================
  // Команды для работы с прибором без табличного управления
  //============================================================================
  #define SWB_CONTROL_PORT              (uint8_t) 0x07  // Коммутация портов в соответствии со значениями
  #define SWB_CONTROL_READ              (uint8_t) 0x08  // Чтение коммутации портов
  #define SWB_CONTROL_SET_TRIGGER_MODE  (uint8_t) 0x09  // Установить режим триггера
  #define SWB_CONTROL_GET_TRIGGER_MODE  (uint8_t) 0x0A  // Получить режим триггера
  #define SWB_CONTROL_GET_TRIGGER_COUN  (uint8_t) 0x0B  // Запросить число приходов импульсов во время измерения
  #define SWB_CONTROL_MEASURING_MODE    (uint8_t) 0x0C  // Запросить режим работы коммутатора
  //============================================================================

  typedef struct
  { 
      bool (*Init)( );
      void (*DeInit)();
      void (*SetNSS)();
      void (*ClrNSS)();
      void (*Transmit)( uint8_t * pTxBuf, size_t size );
      bool (*Receive)( uint8_t * pRxBuf, size_t size );
      void (*TransmitReceive)( uint8_t * pTxBuf, uint8_t * pRxBuf, size_t size );
  }
  SB_Handle_t;

  extern const SB_Handle_t SBHandle;
#endif