jack2 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.

188 lines
6.9KB

  1. /*
  2. Copyright (C) 2004-2006 Grame
  3. This program is free software; you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation; either version 2 of the License, or
  6. (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program; if not, write to the Free Software
  13. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  14. */
  15. #include "JackServer.h"
  16. #include "JackEngine.h"
  17. #include "JackRPCEngine.h"
  18. #include "JackMachServerChannel.h"
  19. #include <assert.h>
  20. using namespace Jack;
  21. //-------------------
  22. // Client management
  23. //-------------------
  24. #define rpc_type kern_return_t // for astyle
  25. rpc_type server_rpc_jack_client_new(mach_port_t server_port, client_name_t name, mach_port_t* private_port, int* shared_engine, int* shared_client, int* shared_graph, int* result)
  26. {
  27. JackLog("rpc_jack_client_new %s\n", name);
  28. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[server_port];
  29. assert(channel);
  30. channel->AddClient((char*)name, private_port, shared_engine, shared_client, shared_graph, result);
  31. return KERN_SUCCESS;
  32. }
  33. rpc_type server_rpc_jack_client_close(mach_port_t private_port, int refnum, int* result)
  34. {
  35. JackLog("rpc_jack_client_close\n");
  36. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  37. assert(channel);
  38. channel->RemoveClient(private_port, refnum);
  39. *result = 0;
  40. return KERN_SUCCESS;
  41. }
  42. rpc_type server_rpc_jack_client_activate(mach_port_t private_port, int refnum, int* result)
  43. {
  44. JackLog("rpc_jack_client_activate\n");
  45. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  46. assert(channel);
  47. //*result = channel->GetServer()->Activate(refnum);
  48. *result = channel->GetEngine()->ClientActivate(refnum);
  49. return KERN_SUCCESS;
  50. }
  51. rpc_type server_rpc_jack_client_deactivate(mach_port_t private_port, int refnum, int* result)
  52. {
  53. JackLog("rpc_jack_client_deactivate\n");
  54. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  55. assert(channel);
  56. //*result = channel->GetServer()->Deactivate(refnum);
  57. *result = channel->GetEngine()->ClientDeactivate(refnum);
  58. return KERN_SUCCESS;
  59. }
  60. //-----------------
  61. // Port management
  62. //-----------------
  63. rpc_type server_rpc_jack_port_register(mach_port_t private_port, int refnum, client_port_name_t name, unsigned int flags, unsigned int buffer_size, jack_port_id_t* port_index, int* result)
  64. {
  65. JackLog("rpc_jack_port_register %ld %s\n", refnum, name);
  66. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  67. assert(channel);
  68. *result = channel->GetEngine()->PortRegister(refnum, name, flags, buffer_size, port_index);
  69. return KERN_SUCCESS;
  70. }
  71. rpc_type server_rpc_jack_port_unregister(mach_port_t private_port, int refnum, int port, int* result)
  72. {
  73. JackLog("rpc_jack_port_unregister %ld %ld \n", refnum, port);
  74. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  75. assert(channel);
  76. *result = channel->GetEngine()->PortUnRegister(refnum, port);
  77. return KERN_SUCCESS;
  78. }
  79. rpc_type server_rpc_jack_port_connect_name(mach_port_t private_port, int refnum, client_port_name_t src, client_port_name_t dst, int* result)
  80. {
  81. JackLog("rpc_jack_port_connect_name\n");
  82. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  83. assert(channel);
  84. *result = channel->GetEngine()->PortConnect(refnum, src, dst);
  85. return KERN_SUCCESS;
  86. }
  87. rpc_type server_rpc_jack_port_disconnect_name(mach_port_t private_port, int refnum, client_port_name_t src, client_port_name_t dst, int* result)
  88. {
  89. JackLog("rpc_jack_port_disconnect_name\n");
  90. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  91. assert(channel);
  92. *result = channel->GetEngine()->PortDisconnect(refnum, src, dst);
  93. return KERN_SUCCESS;
  94. }
  95. rpc_type server_rpc_jack_port_connect(mach_port_t private_port, int refnum, int src, int dst, int* result)
  96. {
  97. JackLog("rpc_jack_port_connect\n");
  98. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  99. assert(channel);
  100. *result = channel->GetEngine()->PortConnect(refnum, src, dst);
  101. return KERN_SUCCESS;
  102. }
  103. rpc_type server_rpc_jack_port_disconnect(mach_port_t private_port, int refnum, int src, int dst, int* result)
  104. {
  105. JackLog("rpc_jack_port_disconnect\n");
  106. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  107. assert(channel);
  108. *result = channel->GetEngine()->PortDisconnect(refnum, src, dst);
  109. return KERN_SUCCESS;
  110. }
  111. //------------------------
  112. // Buffer size, freewheel
  113. //------------------------
  114. rpc_type server_rpc_jack_set_buffer_size(mach_port_t private_port, int buffer_size, int* result)
  115. {
  116. JackLog("server_rpc_jack_set_buffer_size\n");
  117. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  118. assert(channel);
  119. *result = channel->GetServer()->SetBufferSize(buffer_size);
  120. return KERN_SUCCESS;
  121. }
  122. rpc_type server_rpc_jack_set_freewheel(mach_port_t private_port, int onoff, int* result)
  123. {
  124. JackLog("server_rpc_jack_set_freewheel\n");
  125. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  126. assert(channel);
  127. *result = channel->GetServer()->SetFreewheel(onoff);
  128. return KERN_SUCCESS;
  129. }
  130. //----------------------
  131. // Transport management
  132. //----------------------
  133. rpc_type server_rpc_jack_release_timebase(mach_port_t private_port, int refnum, int* result)
  134. {
  135. JackLog("server_rpc_jack_release_timebase\n");
  136. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  137. assert(channel);
  138. *result = channel->GetServer()->GetEngine()->ReleaseTimebase(refnum);
  139. return KERN_SUCCESS;
  140. }
  141. rpc_type server_rpc_jack_set_timebase_callback(mach_port_t private_port, int refnum, int conditional, int* result)
  142. {
  143. JackLog("server_rpc_jack_set_timebase_callback\n");
  144. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  145. assert(channel);
  146. *result = channel->GetServer()->GetEngine()->SetTimebaseCallback(refnum, conditional);
  147. return KERN_SUCCESS;
  148. }
  149. //-----------------
  150. // RT notification
  151. //-----------------
  152. rpc_type server_rpc_jack_client_rt_notify(mach_port_t server_port, int refnum, int notify, int value)
  153. {
  154. JackLog("rpc_jack_client_rt_notify ref = %ld notify = %ld value = %ld\n", refnum, notify, value);
  155. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[server_port];
  156. assert(channel);
  157. assert(channel->GetServer());
  158. channel->GetServer()->Notify(refnum, notify, value);
  159. return KERN_SUCCESS;
  160. }