Téléverser les fichiers vers "include"

This commit is contained in:
Xavier 2026-10-04 19:28:52 +02:00
parent 391a3b3a15
commit 956de0cb44
5 changed files with 498 additions and 0 deletions

150
include/cibi.h Normal file
View File

@ -0,0 +1,150 @@
/*
* Copyright (c) 2019, Vincent Hervieux vincent.hervieux@gmail.com
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the author Vincent Hervieux, nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef CIBI_H
#define CIBI_H
#include "cibidisplay.h"
#include "config.h"
#include "input.h"
#include "dds.h"
class Cibi
{
public:
/* Cibi application requires:
- the config
- the inputs
- the display
- the dds
*/
Cibi(Config& _config, Input& _input, U8G2& _display, DDS& _dds);
Cibi(const Cibi &_cibi);
~Cibi();
/* main application loop called when the application has the focus */
void loop(bool _update_display = false);
/* getter on current frequency */
const uint32_t& getCurrentFreq();
protected:
friend class CibiDisplay;
/* Cibi band enum */
enum {
CIBI_BAND_UNKNOWN = -1,
CIBI_BAND_3_INF = 0x0,
CIBI_BAND_2_INF = 0x1,
CIBI_BAND_1_INF = 0x2,
CIBI_BAND_NORMAL = 0x3,
CIBI_BAND_1_SUP = 0x4,
CIBI_BAND_2_SUP = 0x5,
CIBI_BAND_3_SUP = 0x6,
CIBI_BAND_MAX = CIBI_BAND_3_SUP
};
private:
/* defining a structure to store names of Cibi channels */
typedef struct {
int8_t channel;
int8_t band;
bool bis;
} cibi_channel_t;
/* make a bis for cibi channels 3,7,11,15,19 */
const static int8_t cibi_channels[45];
const static bool cibi_channels_bis[45];
/* RF ranges enum */
enum {
RANGE_RF_UNKNOWN = -1,
RANGE_RF_LF = 0,
RANGE_RF_MF,
RANGE_RF_HF,
RANGE_RF_VHF,
RANGE_RF_MAX = RANGE_RF_VHF
};
/* HAM band enum */
// enum {
// BAND_UNKNOWN = -1,
// BAND_2200 = 0,
// BAND_1750,
// BAND_630,
// BAND_160,
// BAND_80,
// BAND_60,
// BAND_40,
// BAND_30,
// BAND_20,
// BAND_17,
// BAND_15,
// BAND_12,
// BAND_11,
// BAND_10,
// BAND_6,
// BAND_2,
// BAND_MAX = BAND_2
// };
/*
* @brief init Cibi context
*/
void init();
/* @brief get cibi channel
* @param: frequency
* @return -1 if none matching, 0 if successful */
int getCibiChannel(uint32_t _frequency, cibi_channel_t* _channel);
/* @brief get band index
* @param: frequency
* @return RF range index in -1 if none matching */
int getBand(uint32_t _frequency);
/* Update info on display and in our context */
void updateDisplay(uint32_t _frequency, int _position, int _modulation, bool _tx, int _smeter);
/* Update DDS values according to modulation and frequency in our context */
void updateDDS(uint32_t _frequency, int _modulation, bool _tx);
/* Update the frequency step according to the given cursor position */
void updateFreqStep(int cursor_pos);
/* references */
Config &config_;
Input &input_;
DDS &dds_;
/* context */
/* current displayed values */
cibi_channel_t current_cibi_channel_;
uint32_t current_freq_;
uint64_t freq_change_time_;
int current_clarifier_;
uint32_t freq_step_; /* up/down frequency step */
int current_cursor_pos_;
int current_modulation_;
int current_smeter_;
bool current_tx_;
bool scanning_;
CibiDisplay *view_;
};
#endif /* CIBI_H */

86
include/cibidisplay.h Normal file
View File

@ -0,0 +1,86 @@
/*
* Copyright (c) 2019, Vincent Hervieux vincent.hervieux@gmail.com
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the author Vincent Hervieux, nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef CIBIDISPLAY_H
#define CIBIDISPLAY_H
#include "display.h"
class CibiDisplay
{
public:
/* Constructor and initiliaze Cibi display */
CibiDisplay(U8G2&_display);
CibiDisplay(const CibiDisplay &_cibidisplay);
/* De-initiliaze and release display */
~CibiDisplay();
/* Display initialisation */
void init();
/* clean screen */
void clear();
/* refresh display */
void display();
/* Update displayed frequency */
void setFreq(uint32_t _frequency, uint16_t _color);
/* Update displayed cursor position */
void setCursorPos(int _position, uint16_t _color);
/* Update displayed RF band */
void setBand(uint32_t _freq, uint16_t _color);
/* Update displayed modulation */
void setModulation(int _modulation, uint16_t _color);
/* update cibi channel display */
void setCibiChannel(int _channel, uint16_t _color);
void setCibiChannelBis(bool _bis, uint16_t _color);
void setCibiBand(int _band, uint16_t _color);
void setTx(bool _tx);
#ifdef SMETER_DISPLAY
/* Update s-meter over a 1024 scale (analog input)*/
void setSMeter(int _signal);
#endif
private:
/**
* CONNEXIONS
* GND GND
* VDD +5V
* SCLK pin A5
* SDA pin A4
*/
/* definning a structure to store RF ranges and bands */
typedef struct {
uint32_t low_bound; /* low boundary frequency range */
uint32_t high_bound; /* high boundary frequency range */
int index; /* range or band index */
} range_t;
const static int16_t FREQ_DECIMAL_TEXT_POS_X PROGMEM = 2;
const static int16_t FREQ_FRACTIONNAL_TEXT_POS_X PROGMEM = 35;
const static int16_t FREQ_TEXT_POS_Y PROGMEM = 36;
// OLED module
U8G2 &display_;
};
#endif /* CIBIDISPLAY_H */

116
include/config.h Normal file
View File

@ -0,0 +1,116 @@
/*
* Copyright (c) 2019, Vincent Hervieux vincent.hervieux@gmail.com
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the author Vincent Hervieux, nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef CONFIG_H
#define CONFIG_H
#include "configdisplay.h"
#include "input.h"
#include "dds.h"
class Config
{
public:
/* Config application requires:
- the inputs
- the display
- the DDS
*/
Config(Input& _input, U8G2& _display, DDS& _dds);
Config(const Config& _config);
~Config();
/* main application loop called when the application has the focus */
void loop(bool _update_display = false);
/* retrieve config from EEPROM */
int open();
/* save config to EEPROM */
int save();
/* getters */
/* cibi frequency on power on */
const uint32_t& getCibiFreq();
/* cibi allowed freq min */
const uint32_t& getCibiMinFreq();
/* cibi allowed freq max */
const uint32_t& getCibiMaxFreq();
/* freq step increment */
const uint32_t& getFreqStepIncrement();
/* intermediate frequency mixer AM/FM/CW */
const uint32_t& getFiAm();
/* intermediate frequency mixer USB */
const uint32_t& getFiUsb();
/* intermediate frequency mixer LSB */
const uint32_t& getFiLsb();
/* VFO adjustment (replace trim pot) */
const int32_t& getVFOAdj();
/* Clarifier adjustment (replace trim pot) */
const int32_t& getClarifierAdj();
/* S-meter adjustment */
const int32_t& getSMeterAdj();
/* setters */
/* cibi frequency on power on */
void setCibiFreq(const uint32_t& _freq);
private:
enum
{
CONFIG_CIBI_FREQ = 0,
CONFIG_CIBI_MIN_FREQ, // 1
CONFIG_CIBI_MAX_FREQ, // 2
CONFIG_FREQ_STEP, // 3
CONFIG_FI_AM, // 4
CONFIG_FI_USB, // 5
CONFIG_FI_LSB, // 6
CONFIG_VFO_ADJ, // 7
CONFIG_CLARIFIER_ADJ, // 8
CONFIG_SMETER_ADJ, // 9
CONFIG_MAX // 10
};
/* context stored in EEPROM */
struct context_t {
uint32_t eeprom_header; /* EEPROM flag to detect if we've already set values */
uint32_t cibi_frequency; /* cibi default frequency on startup */
uint32_t cibi_min_freq; /* cibi minimum frequency */
uint32_t cibi_max_freq; /* cibi maximum frequency */
uint32_t freq_step_inc; /* frequency step, in increment mode STEP */
uint32_t fi_am; /* FI AM/FM/CW */
uint32_t fi_usb; /* FI USB */
uint32_t fi_lsb; /* FI LSB */
int32_t vfo_adj; /* VFO frequency adjustment */
int32_t clarifier_adj; /* Clarifier frequency adjustment */
int32_t smeter_adj; /* S-Meter adjustment to fill S-meter */
} context_;
/* references */
Input& input_;
DDS& dds_;
ConfigDisplay *view_;
/* context */
int current_cursor_pos_;
int current_menu_index_;
uint32_t* current_value_;
};
#endif /* CONFIG_H */

66
include/configdisplay.h Normal file
View File

@ -0,0 +1,66 @@
/*
* Copyright (c) 2019, Vincent Hervieux vincent.hervieux@gmail.com
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the author Vincent Hervieux, nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef CONFIGDISPLAY_H
#define CONFIGDISPLAY_H
#include "display.h"
class ConfigDisplay
{
public:
ConfigDisplay(U8G2&_display);
/* De-initiliaze and release display */
~ConfigDisplay();
/* Display initialisation */
void init();
/* clean screen */
void clear();
/* refresh display */
void display();
/* erase display */
void clearDisplay();
/* Update displayed config menu title */
void setTitle(int _title_index, uint16_t _color);
/* Highlight title */
void highlightTitle(uint16_t _color);
/* Update displayed config menu value */
void setValueUint(uint32_t _value, uint16_t _color);
void setValueInt(int32_t _value, uint16_t _color);
/* Update displayed cursor position */
void setCursorPos(int _position, uint16_t _color);
private:
// OLED module
U8G2 &display_;
// Some common constants
const static int16_t VALUE_POS_X PROGMEM = 20;
const static int16_t VALUE_POS_Y PROGMEM = 55;
const static int16_t MAX_STR_LENGTH PROGMEM = 20;
};
#endif /* CONFIGDISPLAY_H */

80
include/dds.h Normal file
View File

@ -0,0 +1,80 @@
/*
* Copyright (c) 2019, Vincent Hervieux vincent.hervieux@gmail.com
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the author Vincent Hervieux, nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef DDS_H
#define DDS_H
#include <si5351mcu.h>
class DDS
{
public:
/* valid output list */
typedef enum {
OUTPUT_FI = 0,
OUTPUT_UNUSED, // 1
OUTPUT_VFO, // 2
OUTPUT_MAX
} output_t;
/* Constructor */
DDS();
/* De-initiliaze and release DDS */
~DDS();
/* Update generator output frequency */
void setOutputFreq(output_t _output, uint32_t _frequency);
/* Set output frequency correction */
void setOutputCorrection(int32_t _correction);
/* get current generator output frequency */
const uint32_t& getOutputFreq(output_t _output);
/* enable/disable FI, FI is required while transmitting */
void enableOutput(output_t _output, bool _enable);
/* initiliaze DDS */
void init();
private:
/**
* CONNEXIONS
* GND GND
* VDD +5V
* SCLK pin A5
* SDA pin A4
*/
/* xtal on my si5351 is 25Mhz */
const static uint32_t XTALFREQ PROGMEM = 25000000L;
/* delayed initialisation */
boolean initialized_;
/* internal storage for frequencies outputs */
uint32_t current_freq_[OUTPUT_MAX];
/* store output state */
bool enabled_[OUTPUT_MAX];
/* clock module */
Si5351mcu clockgen_;
};
#endif /* DDS_H */