diff --git a/gpiokeyer.c b/gpiokeyer.c index 9075073..9fe592f 100644 --- a/gpiokeyer.c +++ b/gpiokeyer.c @@ -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 diff --git a/quisk.c b/quisk.c index abfb9b9..790ddad 100755 --- a/quisk.c +++ b/quisk.c @@ -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 */ }; diff --git a/quisk.h b/quisk.h index ae9eead..972064c 100755 --- a/quisk.h +++ b/quisk.h @@ -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