[Freeswitch-svn] [commit] r13757 - in freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/commons: . include

FreeSWITCH SVN jmesquita at freeswitch.org
Thu Jun 11 09:10:52 PDT 2009


Author: jmesquita
Date: Thu Jun 11 11:10:52 2009
New Revision: 13757

Log:
Forgot to add a few things b4 commit

Added:
   freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/commons/
   freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/commons/include/
   freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/commons/include/k3lapi.hpp
   freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/commons/k3lapi.cpp

Added: freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/commons/include/k3lapi.hpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/commons/include/k3lapi.hpp	Thu Jun 11 11:10:52 2009
@@ -0,0 +1,201 @@
+#include <string>
+
+#include <k3l.h>
+
+#ifndef KHOMP_COMMONS_WITH_CHANNEL
+# include <k3lVersion.h>
+#endif
+
+#ifdef __GNUC_PREREQ
+#if __GNUC_PREREQ(4,3)
+#include <cstring>
+#endif
+#endif
+
+#ifndef INCLUDED_K3LAPI_HPP
+#define INCLUDED_K3LAPI_HPP
+
+struct K3LAPI
+{
+	/* exceptions */
+
+	struct start_failed
+	{
+		start_failed(const char * _msg) : msg(_msg) {};
+		std::string msg;
+	};
+	
+	struct failed_command
+	{
+		failed_command(int32 _code, unsigned int _dev, unsigned int _obj, int32 _rc)
+		: code(_code), dev(_dev), obj(_obj), rc(_rc) {};
+		
+		int32         code;
+		unsigned int  dev;
+		unsigned int  obj;
+		int32         rc;
+	};
+
+	struct failed_raw_command
+	{
+		failed_raw_command(unsigned int _dev, unsigned int _dsp, int32 _rc)
+		: dev(_dev), dsp(_dsp), rc(_rc) {};
+		
+		unsigned int  dev;
+		unsigned int  dsp;
+		int32         rc;
+	};
+
+	struct invalid_device
+	{
+		invalid_device(unsigned int _device)
+		: device(_device) {};
+		
+		unsigned int device;
+	};
+
+	struct invalid_channel
+	{
+		invalid_channel(unsigned int _device, unsigned int _channel)
+		: device(_device), channel(_channel) {};
+
+		unsigned int device, channel;
+	};
+
+	struct invalid_link
+	{
+		invalid_link(unsigned int _device, unsigned int _link)
+		: device(_device), link(_link) {};
+
+		unsigned int device, link;
+	};
+
+	struct get_param_failed
+	{
+		get_param_failed(std::string _name, int32 _rc)
+		: name(_name), rc((KLibraryStatus)_rc) {};
+
+		std::string name;
+		KLibraryStatus rc;
+	};
+	
+	typedef K3L_DEVICE_CONFIG          device_conf_type;
+	typedef K3L_CHANNEL_CONFIG        channel_conf_type;
+	typedef K3L_CHANNEL_CONFIG *  channel_ptr_conf_type;
+	typedef K3L_LINK_CONFIG              link_conf_type;
+	typedef K3L_LINK_CONFIG *        link_ptr_conf_type;
+
+	/* constructors/destructors */
+	
+	K3LAPI();
+	~K3LAPI();
+
+	/* (init|final)ialize the whole thing! */
+	
+	void start(void);
+	void stop(void);
+
+	/* verificacao de intervalos */
+	
+	inline bool valid_device( unsigned int dev )
+	{
+    	return (dev < _device_count);
+	}
+
+	inline bool valid_channel( unsigned int dev, unsigned int obj )
+	{
+	    return (valid_device(dev) && obj < _channel_count[dev]);
+	}
+
+	inline bool valid_link( unsigned int dev, unsigned int obj )
+	{
+	    return (valid_device(dev) && obj < _link_count[dev]);
+	}
+
+	/* envio de comandos para placa */
+	
+	void mixer(int32 dev, int32 obj, byte track, KMixerSource src, int32 index);
+	void mixerCTbus(int32 dev, int32 obj, byte track, KMixerSource src, int32 index);
+	void command (int32 dev, int32 obj, int32 code, std::string & str);
+	void command (int32 dev, int32 obj, int32 code, const char * parms = NULL);
+	void raw_command(int32 dev, int32 dsp, std::string & str);
+	void raw_command(int32 dev, int32 dsp, const char * cmds, int32 size);
+
+	/* obter dados 'cacheados' */
+	
+	inline unsigned int device_count(void)
+	{
+		return _device_count;
+	}
+
+	inline unsigned int channel_count(unsigned int dev)
+	{
+		if (!valid_device(dev))
+			throw invalid_device(dev);
+
+		return _channel_count[dev];
+	}
+
+	inline unsigned int link_count(unsigned int dev)
+	{
+		if (!valid_device(dev))
+			throw invalid_device(dev);
+
+		return _link_count[dev];
+	}
+
+	KDeviceType device_type(unsigned int dev)
+	{
+		if (!valid_device(dev))
+			throw invalid_device(dev);
+		
+		return _device_type[dev];
+	}
+	
+
+	K3L_DEVICE_CONFIG & device_config(unsigned int dev)
+	{
+		if (!valid_device(dev))
+			throw invalid_device(dev);
+
+		return _device_config[dev];
+	}
+
+	K3L_CHANNEL_CONFIG & channel_config(unsigned int dev, unsigned int obj)
+	{
+		if (!valid_channel(dev, obj))
+			throw invalid_channel(dev, obj);
+
+		return _channel_config[dev][obj];
+	}
+
+	K3L_LINK_CONFIG & link_config(unsigned int dev, unsigned int obj)
+	{
+		if (!valid_channel(dev, obj))
+			throw invalid_channel(dev, obj);
+
+		return _link_config[dev][obj];
+	}
+
+	/* pega valores em strings de eventos */
+
+	KLibraryStatus get_param(K3L_EVENT *ev, const char *name, std::string &res);
+	std::string get_param(K3L_EVENT *ev, const char *name);
+
+	/* inicializa valores em cache */
+
+	void init(void);
+
+ protected:
+
+	unsigned int           _device_count;
+	unsigned int *        _channel_count;
+	unsigned int *           _link_count;
+	
+	     device_conf_type *   _device_config;
+	channel_ptr_conf_type *  _channel_config;
+	   link_ptr_conf_type *     _link_config;
+	          KDeviceType *     _device_type;
+};
+
+#endif /* INCLUDED_K3LAPI_HPP */

Added: freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/commons/k3lapi.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/commons/k3lapi.cpp	Thu Jun 11 11:10:52 2009
@@ -0,0 +1,171 @@
+#include <k3lapi.hpp>
+
+K3LAPI::K3LAPI()
+: _device_count(0),  _channel_count(0),  _link_count(0),
+  _device_config(0), _channel_config(0), _link_config(0)
+{}
+
+K3LAPI::~K3LAPI()
+{
+	_device_count = 0;
+		
+	if (_device_type)    { delete[] _device_type;       _device_type = NULL; }
+	if (_device_config)  { delete[] _device_config;   _device_config = NULL; }
+	if (_channel_config) { delete[] _channel_config; _channel_config = NULL; }
+	if (_link_config)    { delete[] _link_config;       _link_config = NULL; }
+	if (_channel_count)  { delete[] _channel_count;   _channel_count = NULL; }
+	if (_link_count)     { delete[] _link_count;         _link_count = NULL; }
+}
+
+/* initialize the whole thing! */
+	
+void K3LAPI::start(void)
+{
+	/* tie the used k3l to the compiled k3l version */
+	char *ret = k3lStart(k3lApiMajorVersion, k3lApiMinorVersion, 0); //k3lApiBuildVersion);
+	
+	if (ret && *ret)
+		throw start_failed(ret);
+			
+	/* call init automagically */
+	init();
+}
+
+void K3LAPI::stop(void)
+{
+	k3lStop();
+}
+
+/* envio de comandos para placa */
+	
+void K3LAPI::mixer(int32 dev, int32 obj, byte track, KMixerSource src, int32 index)
+{
+   	KMixerCommand mix;
+
+    mix.Track = track;
+   	mix.Source = src;
+    mix.SourceIndex = index;
+
+   	command(dev, obj, CM_MIXER, (const char *) &mix);
+}
+
+void K3LAPI::mixerCTbus(int32 dev, int32 obj, byte track, KMixerSource src, int32 index)
+{
+   	KMixerCommand mix;
+
+    mix.Track = track;
+   	mix.Source = src;
+    mix.SourceIndex = index;
+
+   	command(dev, obj, CM_MIXER_CTBUS, (const char *) &mix);
+}
+
+void K3LAPI::command(int32 dev, int32 obj, int32 code, std::string & str)
+{
+	command(dev, obj, code, str.c_str());
+}
+
+void K3LAPI::command (int32 dev, int32 obj, int32 code, const char * parms)
+{
+    K3L_COMMAND cmd;
+
+   	cmd.Cmd = code;
+    cmd.Object = obj;
+   	cmd.Params = (byte *)parms;
+
+	int32 rc = k3lSendCommand(dev, &cmd);
+		
+	if (rc != ksSuccess)
+		throw failed_command(code, dev, obj, rc);
+}
+
+void K3LAPI::raw_command(int32 dev, int32 dsp, std::string & str)
+{
+	raw_command(dev, dsp, str.data(), str.size());
+}
+
+void K3LAPI::raw_command(int32 dev, int32 dsp, const char * cmds, int32 size)
+{
+    std::string str(cmds, size);
+
+	int32 rc = k3lSendRawCommand(dev, dsp, (void *)cmds, size);
+
+	if (rc != ksSuccess)
+		throw failed_raw_command(dev, dsp, rc);
+}
+
+KLibraryStatus K3LAPI::get_param(K3L_EVENT *ev, const char *name, std::string &res)
+{
+	char tmp_param[256];
+	memset((void*)tmp_param, 0, sizeof(tmp_param));
+
+	int32 rc = k3lGetEventParam (ev, (sbyte *)name, (sbyte *)tmp_param, sizeof(tmp_param)-1);
+		
+	if (rc != ksSuccess)
+		return (KLibraryStatus)rc;
+
+	res.append(tmp_param, strlen(tmp_param));
+	return ksSuccess;
+}
+	
+std::string K3LAPI::get_param(K3L_EVENT *ev, const char *name)
+{
+	std::string res;
+
+	KLibraryStatus rc = get_param(ev, name, res);
+
+	if (rc != ksSuccess)
+		throw get_param_failed(name, rc);
+			
+	return res;
+}
+
+void K3LAPI::init(void)
+{
+	if (_device_count != 0) return;
+
+	_device_count = k3lGetDeviceCount();
+
+	_device_type	= new KDeviceType[_device_count];
+	_device_config  = new device_conf_type[_device_count];
+	_channel_config = new channel_ptr_conf_type[_device_count];
+	_link_config    = new link_ptr_conf_type[_device_count];
+	_channel_count	= new unsigned int[_device_count];
+	_link_count		= new unsigned int[_device_count];
+		
+	for (unsigned int dev = 0; dev < _device_count; dev++)
+	{
+		_device_type[dev] = (KDeviceType) k3lGetDeviceType(dev);
+			
+		/* caches each device config */
+		if (k3lGetDeviceConfig(dev, ksoDevice + dev, &(_device_config[dev]), sizeof(_device_config[dev])) != ksSuccess)
+			throw start_failed("k3lGetDeviceConfig(device)");
+
+		/* adjust channel/link count for device */
+		_channel_count[dev] = _device_config[dev].ChannelCount;
+		_link_count[dev] = _device_config[dev].LinkCount;
+			
+		/* caches each channel config */
+		_channel_config[dev] = new channel_conf_type[_channel_count[dev]];
+
+		for (unsigned int obj = 0; obj < _channel_count[dev]; obj++)
+		{
+			if (k3lGetDeviceConfig(dev, ksoChannel + obj, &(_channel_config[dev][obj]), 
+									sizeof(_channel_config[dev][obj])) != ksSuccess)
+				throw start_failed("k3lGetDeviceConfig(channel)");
+		}
+
+		/* adjust link count for device */
+		_link_count[dev] = _device_config[dev].LinkCount;
+			
+		/* caches each link config */
+		_link_config[dev] = new link_conf_type[_link_count[dev]];
+
+		for (unsigned int obj = 0; obj < _link_count[dev]; obj++)
+		{
+			if (k3lGetDeviceConfig(dev, ksoLink + obj, &(_link_config[dev][obj]), 
+									sizeof(_link_config[dev][obj])) != ksSuccess)
+				throw start_failed("k3lGetDeviceConfig(link)");
+		}
+	}
+}



More information about the Freeswitch-svn mailing list