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.

194 lines
7.0KB

  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_check(mach_port_t private_port, client_name_t name, client_name_t name_res, int options, int* status, int* result)
  26. {
  27. JackLog("rpc_jack_client_check\n");
  28. // TODO
  29. *result = 0;
  30. return KERN_SUCCESS;
  31. }
  32. rpc_type server_rpc_jack_client_open(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)
  33. {
  34. JackLog("rpc_jack_client_new %s\n", name);
  35. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[server_port];
  36. assert(channel);
  37. channel->AddClient((char*)name, private_port, shared_engine, shared_client, shared_graph, result);
  38. return KERN_SUCCESS;
  39. }
  40. rpc_type server_rpc_jack_client_close(mach_port_t private_port, int refnum, int* result)
  41. {
  42. JackLog("rpc_jack_client_close\n");
  43. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  44. assert(channel);
  45. channel->RemoveClient(private_port, refnum);
  46. *result = 0;
  47. return KERN_SUCCESS;
  48. }
  49. rpc_type server_rpc_jack_client_activate(mach_port_t private_port, int refnum, int* result)
  50. {
  51. JackLog("rpc_jack_client_activate\n");
  52. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  53. assert(channel);
  54. *result = channel->GetEngine()->ClientActivate(refnum);
  55. return KERN_SUCCESS;
  56. }
  57. rpc_type server_rpc_jack_client_deactivate(mach_port_t private_port, int refnum, int* result)
  58. {
  59. JackLog("rpc_jack_client_deactivate\n");
  60. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  61. assert(channel);
  62. *result = channel->GetEngine()->ClientDeactivate(refnum);
  63. return KERN_SUCCESS;
  64. }
  65. //-----------------
  66. // Port management
  67. //-----------------
  68. 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)
  69. {
  70. JackLog("rpc_jack_port_register %ld %s\n", refnum, name);
  71. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  72. assert(channel);
  73. *result = channel->GetEngine()->PortRegister(refnum, name, flags, buffer_size, port_index);
  74. return KERN_SUCCESS;
  75. }
  76. rpc_type server_rpc_jack_port_unregister(mach_port_t private_port, int refnum, int port, int* result)
  77. {
  78. JackLog("rpc_jack_port_unregister %ld %ld \n", refnum, port);
  79. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  80. assert(channel);
  81. *result = channel->GetEngine()->PortUnRegister(refnum, port);
  82. return KERN_SUCCESS;
  83. }
  84. 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)
  85. {
  86. JackLog("rpc_jack_port_connect_name\n");
  87. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  88. assert(channel);
  89. *result = channel->GetEngine()->PortConnect(refnum, src, dst);
  90. return KERN_SUCCESS;
  91. }
  92. 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)
  93. {
  94. JackLog("rpc_jack_port_disconnect_name\n");
  95. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  96. assert(channel);
  97. *result = channel->GetEngine()->PortDisconnect(refnum, src, dst);
  98. return KERN_SUCCESS;
  99. }
  100. rpc_type server_rpc_jack_port_connect(mach_port_t private_port, int refnum, int src, int dst, int* result)
  101. {
  102. JackLog("rpc_jack_port_connect\n");
  103. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  104. assert(channel);
  105. *result = channel->GetEngine()->PortConnect(refnum, src, dst);
  106. return KERN_SUCCESS;
  107. }
  108. rpc_type server_rpc_jack_port_disconnect(mach_port_t private_port, int refnum, int src, int dst, int* result)
  109. {
  110. JackLog("rpc_jack_port_disconnect\n");
  111. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  112. assert(channel);
  113. *result = channel->GetEngine()->PortDisconnect(refnum, src, dst);
  114. return KERN_SUCCESS;
  115. }
  116. //------------------------
  117. // Buffer size, freewheel
  118. //------------------------
  119. rpc_type server_rpc_jack_set_buffer_size(mach_port_t private_port, int buffer_size, int* result)
  120. {
  121. JackLog("server_rpc_jack_set_buffer_size\n");
  122. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  123. assert(channel);
  124. *result = channel->GetServer()->SetBufferSize(buffer_size);
  125. return KERN_SUCCESS;
  126. }
  127. rpc_type server_rpc_jack_set_freewheel(mach_port_t private_port, int onoff, int* result)
  128. {
  129. JackLog("server_rpc_jack_set_freewheel\n");
  130. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  131. assert(channel);
  132. *result = channel->GetServer()->SetFreewheel(onoff);
  133. return KERN_SUCCESS;
  134. }
  135. //----------------------
  136. // Transport management
  137. //----------------------
  138. rpc_type server_rpc_jack_release_timebase(mach_port_t private_port, int refnum, int* result)
  139. {
  140. JackLog("server_rpc_jack_release_timebase\n");
  141. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  142. assert(channel);
  143. *result = channel->GetServer()->GetEngine()->ReleaseTimebase(refnum);
  144. return KERN_SUCCESS;
  145. }
  146. rpc_type server_rpc_jack_set_timebase_callback(mach_port_t private_port, int refnum, int conditional, int* result)
  147. {
  148. JackLog("server_rpc_jack_set_timebase_callback\n");
  149. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  150. assert(channel);
  151. *result = channel->GetServer()->GetEngine()->SetTimebaseCallback(refnum, conditional);
  152. return KERN_SUCCESS;
  153. }
  154. //-----------------
  155. // RT notification
  156. //-----------------
  157. rpc_type server_rpc_jack_client_rt_notify(mach_port_t server_port, int refnum, int notify, int value)
  158. {
  159. JackLog("rpc_jack_client_rt_notify ref = %ld notify = %ld value = %ld\n", refnum, notify, value);
  160. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[server_port];
  161. assert(channel);
  162. assert(channel->GetServer());
  163. channel->GetServer()->Notify(refnum, notify, value);
  164. return KERN_SUCCESS;
  165. }