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.

141 lines
4.8KB

  1. /*
  2. Copyright (C) 2004-2008 Grame
  3. This program is free software; you can redistribute it and/or modify
  4. it under the terms of the GNU Lesser General Public License as published by
  5. the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
  11. You should have received a copy of the GNU Lesser General Public License
  12. along with this program; if not, write to the Free Software
  13. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  14. */
  15. #ifndef __JackDebugClient__
  16. #define __JackDebugClient__
  17. #define MAX_PORT_HISTORY 2048
  18. #include "JackClient.h"
  19. #include <list>
  20. #include <fstream>
  21. namespace Jack
  22. {
  23. /*!
  24. \brief Follow a single port.
  25. */
  26. typedef struct
  27. {
  28. jack_port_id_t idport;
  29. char name[JACK_PORT_NAME_SIZE]; //portname
  30. int IsConnected;
  31. int IsUnregistrated;
  32. }
  33. PortFollower;
  34. /*!
  35. \brief A "decorator" debug client to validate API use.
  36. */
  37. class JackDebugClient : public JackClient
  38. {
  39. protected:
  40. JackClient* fClient;
  41. std::ofstream* fStream;
  42. PortFollower fPortList[MAX_PORT_HISTORY]; // Arbitrary value... To be tuned...
  43. int fTotalPortNumber; // The total number of port opened and maybe closed. Historical view.
  44. int fOpenPortNumber; // The current number of opened port.
  45. int fIsActivated;
  46. int fIsDeactivated;
  47. int fIsClosed;
  48. char fClientName[JACK_CLIENT_NAME_SIZE + 1];
  49. JackProcessCallback fProcessTimeCallback;
  50. void* fProcessTimeCallbackArg;
  51. public:
  52. JackDebugClient(JackClient* fTheClient);
  53. virtual ~JackDebugClient();
  54. virtual int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status);
  55. int Close();
  56. virtual JackGraphManager* GetGraphManager() const;
  57. virtual JackEngineControl* GetEngineControl() const;
  58. // Notifications
  59. int ClientNotify(int refnum, const char* name, int notify, int sync, int value1, int value2);
  60. int Activate();
  61. int Deactivate();
  62. // Context
  63. int SetBufferSize(jack_nframes_t buffer_size);
  64. int SetFreeWheel(int onoff);
  65. void ShutDown();
  66. pthread_t GetThreadID();
  67. // Port management
  68. int PortRegister(const char* port_name, const char* port_type, unsigned long flags, unsigned long buffer_size);
  69. int PortUnRegister(jack_port_id_t port);
  70. int PortConnect(const char* src, const char* dst);
  71. int PortDisconnect(const char* src, const char* dst);
  72. int PortDisconnect(jack_port_id_t src);
  73. int PortIsMine(jack_port_id_t port_index);
  74. // Transport
  75. int ReleaseTimebase();
  76. int SetSyncCallback(JackSyncCallback sync_callback, void* arg);
  77. int SetSyncTimeout(jack_time_t timeout);
  78. int SetTimebaseCallback(int conditional, JackTimebaseCallback timebase_callback, void* arg);
  79. int TransportLocate(jack_nframes_t frame);
  80. jack_transport_state_t TransportQuery(jack_position_t* pos);
  81. jack_nframes_t GetCurrentTransportFrame();
  82. int TransportReposition(jack_position_t* pos);
  83. void TransportStart();
  84. void TransportStop();
  85. // Callbacks
  86. void OnShutdown(JackShutdownCallback callback, void *arg);
  87. int SetProcessCallback(JackProcessCallback callback, void* arg);
  88. int SetXRunCallback(JackXRunCallback callback, void* arg);
  89. int SetInitCallback(JackThreadInitCallback callback, void* arg);
  90. int SetGraphOrderCallback(JackGraphOrderCallback callback, void* arg);
  91. int SetBufferSizeCallback(JackBufferSizeCallback callback, void* arg);
  92. int SetClientRegistrationCallback(JackClientRegistrationCallback callback, void* arg);
  93. int SetFreewheelCallback(JackFreewheelCallback callback, void* arg);
  94. int SetPortRegistrationCallback(JackPortRegistrationCallback callback, void* arg);
  95. int SetPortConnectCallback(JackPortConnectCallback callback, void *arg);
  96. // Internal clients
  97. char* GetInternalClientName(int ref);
  98. int InternalClientHandle(const char* client_name, jack_status_t* status);
  99. int InternalClientLoad(const char* client_name, jack_options_t options, jack_status_t* status, jack_varargs_t* va);
  100. void InternalClientUnload(int ref, jack_status_t* status);
  101. // Fons Adriaensen thread model
  102. jack_nframes_t Wait(int status);
  103. JackClientControl* GetClientControl() const;
  104. void CheckClient() const;
  105. static int TimeCallback(jack_nframes_t nframes, void *arg);
  106. };
  107. } // end of namespace
  108. #endif