Attempting to add the controls, not working as well. Need to fix ultimatic keyer, possibly semaphore related?

This commit is contained in:
Rob French 2020-02-24 00:21:43 -06:00
parent 4b1207c31f
commit 924dce5426
3 changed files with 126 additions and 1 deletions

View File

@ -479,4 +479,35 @@ int is_key_down_gpiokeyer(void)
return retval;
}
void quisk_set_gpio_keyer_mode(int mode)
{
if ((mode > -1) && (mode < NUM_KEYER_MODES))
cw_keyer_mode = mode;
}
void quisk_set_gpio_keyer_speed(int wpm)
{
cw_keyer_speed = wpm;
keyer_update();
}
void quisk_set_gpio_keyer_weight(int weight)
{
if ((weight > 32) && (weight < 67))
cw_keyer_weight = weight;
keyer_update();
}
void quisk_set_gpio_keyer_reversed(int flag)
{
cw_keys_reversed = (flag == 0 ? 0 : 1);
keyer_update();
}
void quisk_set_gpio_keyer_strict(int flag)
{
cw_keyer_spacing = (flag == 0 ? 0 : 1);
}
#endif

64
quisk.c
View File

@ -5176,6 +5176,63 @@ static PyObject * set_sample_bytes(PyObject * self, PyObject * args)
return Py_None;
}
#if defined(ENABLE_GPIO_KEYER)
static PyObject * set_gpio_keyer_mode(PyObject * self, PyObject * args)
{
int mode;
if (!PyArg_ParseTuple (args, "i", &mode))
return NULL;
quisk_set_gpio_keyer_mode(mode);
Py_INCREF (Py_None);
return Py_None;
}
static PyObject * set_gpio_keyer_speed(PyObject * self, PyObject * args)
{
int wpm;
if (!PyArg_ParseTuple (args, "i", &wpm))
return NULL;
quisk_set_gpio_keyer_speed(wpm);
Py_INCREF (Py_None);
return Py_None;
}
static PyObject * set_gpio_keyer_weight(PyObject * self, PyObject * args)
{
int weight;
if (!PyArg_ParseTuple (args, "i", &weight))
return NULL;
quisk_set_gpio_keyer_weight(weight);
Py_INCREF (Py_None);
return Py_None;
}
static PyObject * set_gpio_keyer_reversed(PyObject * self, PyObject * args)
{
int rev;
if (!PyArg_ParseTuple (args, "i", &rev))
return NULL;
quisk_set_gpio_keyer_reversed(rev);
Py_INCREF (Py_None);
return Py_None;
}
static PyObject * set_gpio_keyer_strict(PyObject * self, PyObject * args)
{
int strict;
if (!PyArg_ParseTuple (args, "i", &strict))
return NULL;
quisk_set_gpio_keyer_strict(strict);
Py_INCREF (Py_None);
return Py_None;
}
#endif
static PyMethodDef QuiskMethods[] = {
{"add_tone", add_tone, METH_VARARGS, "Add a test tone to the data."},
{"dft", dft, METH_VARARGS, "Calculate the discrete Fourier transform."},
@ -5276,6 +5333,13 @@ static PyMethodDef QuiskMethods[] = {
{"freedv_get_version", quisk_freedv_get_version, METH_VARARGS, "Return the codec2 API version."},
{"freedv_get_rx_char", quisk_freedv_get_rx_char, METH_VARARGS, "Get text characters received from freedv."},
{"freedv_set_options", (PyCFunction)quisk_freedv_set_options, METH_VARARGS|METH_KEYWORDS, "Set the freedv parameters."},
#if defined(ENABLE_GPIO_KEYER)
{"set_gpio_keyer_mode", set_gpio_keyer_mode, METH_VARARGS, "Change the CW keyer mode."},
{"set_gpio_keyer_speed", set_gpio_keyer_mode, METH_VARARGS, "Change the CW keyer speed."},
{"set_gpio_keyer_weight", set_gpio_keyer_mode, METH_VARARGS, "Change the CW keyer symbol weight."},
{"set_gpio_keyer_reversed", set_gpio_keyer_mode, METH_VARARGS, "Enabled/disable reversed paddles."},
{"set_gpio_keyer_strict", set_gpio_keyer_mode, METH_VARARGS, "Enable/disable strict character spacing."},
#endif
{NULL, NULL, 0, NULL} /* Sentinel */
};

32
quisk.h
View File

@ -282,6 +282,13 @@ void quisk_udp_mic_error(char *);
void quisk_check_freedv_mode(void);
void quisk_calc_audio_graph(double, complex double *, double *, int, int);
int QuiskDeltaMsec(int);
#if defined(ENABLE_GPIO_KEYER)
void quisk_set_gpio_keyer_mode(int);
void quisk_set_gpio_keyer_speed(int);
void quisk_set_gpio_keyer_weight(int);
void quisk_set_gpio_keyer_reversed(int);
void quisk_set_gpio_keyer_strict(int);
#endif
// Functions supporting digital voice codecs
typedef int (* ty_dvoice_codec_rx)(complex double *, double *, int, int);
@ -334,6 +341,13 @@ int import_quisk_api(void); // used to initialize Quisk_API
#define quisk_dvoice_freedv (*( void (*) (ty_dvoice_codec_rx, ty_dvoice_codec_tx) )Quisk_API[8])
#define quisk_is_key_down (*( int (*) (void) )Quisk_API[9])
#define quisk_sample_source4 (*( void (*) (ty_sample_start, ty_sample_stop, ty_sample_read, ty_sample_write) )Quisk_API[10])
//#if defined(ENABLE_GPIO_KEYER)
//#define quisk_set_gpio_keyer_mode (*( void (*) (int) )Quisk_API[11])
//#define quisk_set_gpio_keyer_speed (*( void (*) (int) )Quisk_API[12])
//#define quisk_set_gpio_keyer_weight (*( void (*) (int) )Quisk_API[13])
//#define quisk_set_gpio_keyer_reversed (*( void (*) (int) )Quisk_API[14])
//#define quisk_set_gpio_keyer_strict (*( void (*) (int) )Quisk_API[15])
//#endif
#else
// Used to export symbols from _quisk in quisk.c
@ -346,14 +360,30 @@ void QuiskSleepMicrosec(int);
void QuiskPrintTime(const char *, int);
void quisk_sample_source(ty_sample_start, ty_sample_stop, ty_sample_read);
void quisk_dvoice_freedv(ty_dvoice_codec_rx, ty_dvoice_codec_tx);
int quisk_is_key_down(void);
int quisk_is_key_down(void);
void quisk_sample_source4(ty_sample_start, ty_sample_stop, ty_sample_read, ty_sample_write);
//#if defined(ENABLE_GPIO_KEYER)
//void quisk_set_gpio_keyer_mode(int);
//void quisk_set_gpio_keyer_speed(int);
//void quisk_set_gpio_keyer_weight(int);
//void quisk_set_gpio_keyer_reversed(int);
//void quisk_set_gpio_keyer_strict(int);
//#endif
//#if defined(ENABLE_GPIO_KEYER)
//#define QUISK_API_INIT { \
// &quisk_sound_state, &QuiskGetConfigInt, &QuiskGetConfigDouble, &QuiskGetConfigString, &QuiskTimeSec, \
// &QuiskSleepMicrosec, &QuiskPrintTime, &quisk_sample_source, &quisk_dvoice_freedv, &quisk_is_key_down, \
// &quisk_sample_source4, &quisk_set_gpio_keyer_mode, &quisk_set_gpio_keyer_speed, \
// &quisk_set_gpio_keyer_weight, &quisk_set_gpio_keyer_reversed, &quisk_set_gpio_keyer_strict \
// }
//#else
#define QUISK_API_INIT { \
&quisk_sound_state, &QuiskGetConfigInt, &QuiskGetConfigDouble, &QuiskGetConfigString, &QuiskTimeSec, \
&QuiskSleepMicrosec, &QuiskPrintTime, &quisk_sample_source, &quisk_dvoice_freedv, &quisk_is_key_down, \
&quisk_sample_source4 \
}
//#endif
#endif