jack1 codebase
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
2.6KB

  1. #include "alsa_midi.h"
  2. #include <string.h>
  3. static int
  4. alsa_midi_driver_attach ( alsa_midi_driver_t *driver, jack_engine_t *engine )
  5. {
  6. return driver->midi->attach (driver->midi);
  7. }
  8. static int
  9. alsa_midi_driver_detach ( alsa_midi_driver_t *driver, jack_engine_t *engine )
  10. {
  11. return driver->midi->detach (driver->midi);
  12. }
  13. static int
  14. alsa_midi_driver_read ( alsa_midi_driver_t *driver, jack_nframes_t nframes )
  15. {
  16. driver->midi->read (driver->midi, nframes);
  17. return 0;
  18. }
  19. static int
  20. alsa_midi_driver_write ( alsa_midi_driver_t *driver, jack_nframes_t nframes )
  21. {
  22. driver->midi->write (driver->midi, nframes);
  23. return 0;
  24. }
  25. static int
  26. alsa_midi_driver_start ( alsa_midi_driver_t *driver )
  27. {
  28. return driver->midi->start (driver->midi);
  29. }
  30. static int
  31. alsa_midi_driver_stop ( alsa_midi_driver_t *driver )
  32. {
  33. return driver->midi->stop (driver->midi);
  34. }
  35. static void
  36. alsa_midi_driver_delete ( alsa_midi_driver_t *driver )
  37. {
  38. if (driver->midi) {
  39. (driver->midi->destroy)(driver->midi);
  40. }
  41. free (driver);
  42. }
  43. static jack_driver_t *
  44. alsa_midi_driver_new (jack_client_t *client, const char *name)
  45. {
  46. alsa_midi_driver_t *driver;
  47. jack_info ("creating alsa_midi driver ...");
  48. driver = (alsa_midi_driver_t*)calloc (1, sizeof(alsa_midi_driver_t));
  49. jack_driver_init ((jack_driver_t*)driver);
  50. driver->attach = (JackDriverAttachFunction)alsa_midi_driver_attach;
  51. driver->detach = (JackDriverDetachFunction)alsa_midi_driver_detach;
  52. driver->read = (JackDriverReadFunction)alsa_midi_driver_read;
  53. driver->write = (JackDriverWriteFunction)alsa_midi_driver_write;
  54. driver->start = (JackDriverStartFunction)alsa_midi_driver_start;
  55. driver->stop = (JackDriverStartFunction)alsa_midi_driver_stop;
  56. driver->midi = alsa_seqmidi_new (client, NULL);
  57. driver->client = client;
  58. return (jack_driver_t*)driver;
  59. }
  60. /* DRIVER "PLUGIN" INTERFACE */
  61. const char driver_client_name[] = "alsa_midi";
  62. const jack_driver_desc_t *
  63. driver_get_descriptor ()
  64. {
  65. jack_driver_desc_t * desc;
  66. jack_driver_param_desc_t * params;
  67. //unsigned int i;
  68. desc = calloc (1, sizeof(jack_driver_desc_t));
  69. strcpy (desc->name, "alsa_midi");
  70. desc->nparams = 0;
  71. params = calloc (desc->nparams, sizeof(jack_driver_param_desc_t));
  72. desc->params = params;
  73. return desc;
  74. }
  75. jack_driver_t *
  76. driver_initialize (jack_client_t *client, const JSList * params)
  77. {
  78. const JSList * node;
  79. const jack_driver_param_t * param;
  80. for (node = params; node; node = jack_slist_next (node)) {
  81. param = (const jack_driver_param_t*)node->data;
  82. switch (param->character) {
  83. default:
  84. break;
  85. }
  86. }
  87. return alsa_midi_driver_new (client, NULL);
  88. }
  89. void
  90. driver_finish (jack_driver_t *driver)
  91. {
  92. alsa_midi_driver_delete ((alsa_midi_driver_t*)driver);
  93. }