67 lines
2.4 KiB
C
67 lines
2.4 KiB
C
|
/* -*- mode: c; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4; coding: utf-8 -*- */
|
||
|
/************************************************************************************
|
||
|
** **
|
||
|
** UHSDR **
|
||
|
** a powerful firmware for STM32 based SDR transceivers **
|
||
|
** **
|
||
|
**---------------------------------------------------------------------------------**
|
||
|
** **
|
||
|
** File name: **
|
||
|
** Description: **
|
||
|
** Last Modified: **
|
||
|
** Licence: GNU GPLv3 **
|
||
|
************************************************************************************/
|
||
|
|
||
|
#ifndef __OSC_INTERFACE
|
||
|
#define __OSC_INTERFACE
|
||
|
|
||
|
#include "uhsdr_types.h"
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
OSC_OK = 0, // tuning ok
|
||
|
OSC_TUNE_LIMITED, // tuning to freq close to desired freq, still ok
|
||
|
OSC_TUNE_IMPOSSIBLE, // did not tune, tune freq unknown
|
||
|
OSC_COMM_ERROR, // could not talk to Si570, tune freq unknown
|
||
|
OSC_ERROR_VERIFY, // register do not match, tune freq unknown
|
||
|
OSC_LARGE_STEP, // did not tune, just checking
|
||
|
|
||
|
} Oscillator_ResultCodes_t;
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
OSC_UNKNOWN,
|
||
|
OSC_DUMMY,
|
||
|
OSC_SI570,
|
||
|
OSC_SI5351A,
|
||
|
} Oscillator_Type_t;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
// startup handling
|
||
|
void (*init)();
|
||
|
|
||
|
// presence information
|
||
|
bool (*isPresent)();
|
||
|
// startup/runtime reconfiguration
|
||
|
void (*setPPM)(float32_t ppm);
|
||
|
|
||
|
// normal operations interface
|
||
|
// freq is given in Hz, is QSD mixing frequency,
|
||
|
// internally multiplied by 4 for Johnson Counter clock counters if needed by circuit
|
||
|
Oscillator_ResultCodes_t (*prepareNextFrequency)(ulong freq, int temp_factor);
|
||
|
Oscillator_ResultCodes_t (*changeToNextFrequency)();
|
||
|
bool (*isNextStepLarge)();
|
||
|
bool (*readyForIrqCall)();
|
||
|
uint32_t (*getMinFrequency)();
|
||
|
uint32_t (*getMaxFrequency)();
|
||
|
const char* name;
|
||
|
const Oscillator_Type_t type;
|
||
|
|
||
|
} OscillatorInterface_t;
|
||
|
|
||
|
extern const OscillatorInterface_t *osc;
|
||
|
|
||
|
void Osc_Init();
|
||
|
#endif
|