Hi Bert,
Just in case you haven't seen it, the Spokes 3.0 Beta SDK, feature Native Library SDK, is now available.
Thanks,
Lewis.
Hi Bert,
Just in case you haven't seen it, the Spokes 3.0 Beta SDK, feature Native Library SDK, is now available.
Thanks,
Lewis.
Hi Lewis,
Any news regarding Spokes SDK for Mac ?
Thank you.
Hi Vincent,
I will try to find out for you current status of Spokes SDK for Mac, and get back to you shortly...
Thanks,
Lewis.
Hi,
I am integrating Plantronics headset into a Windows application that uses WPF (Windows Presentation Foundation).
WPF initializes internally COM in the STA threading model.
On the other hand all Plantronics C++ samples show COM initialization by ::CoInitializeEx(NULL, COINIT_MULTITHREADED).
Is it mandatory to initalize COM for Spokes with COINIT_MULTITHREADED ? Or can I use COINIT_APARTMENTTHREADED ?
Could there be bad consequences of that ?
Best Regards.
Not a question about the SDK, but I was directed here to pose my question.
Audio works perfectly on the Voyager Legend, but I can't use the pick-up function (off/on hook) with the Innovaphone software phone. This softwarephone uses a mapping table to map headset activity to it's own functions. We can manually add maps to this list. However, I need to get some info from the developers in order to do this. Below you can find a working map for the previous Voyager headset, the PRO v2. Below is a second map, for the Voyager Legend (check the id, it equals the hardwareid). Adjusting the mapping with the correct values should allow me to answer calls with the Voyager Legend. Can someone provide me with the correct values for this? Thanks!
[Plantronics - Voyager PRO UC v2 (USB/bluetooth)]
id = 0x0x047f0415
len = 0x02
map = 0x01, 0x01: 0x93 # offhook
map = 0x05, 0x01: 0xf5 # offhook response
map = 0x01, 0x00: 0x94 # onhook
map = 0x05, 0x00: 0xf6 # onhook response
[Plantronics - Voyager Legend (USB/bluetooth)]
id = 0x0x047f0416
len = 0x02
map = 0x01, 0x01: 0x93 # offhook
map = 0x05, 0x01: 0xf5 # offhook response
map = 0x01, 0x00: 0x94 # onhook
map = 0x05, 0x00: 0xf6 # onhook response
Hi Julio,
I posted your question to our COM development team. The initial response was that you should be able to initialize COM for Spokes with COINIT_APARTMENTTHREADED setting. They would however, research further to confirm. I will let you know if they discover anything otherwise.
Wei Chu
Hi Lewis,
Any news on the subject ?
Dear Vincent Juge, Tanner Ezell, and PDC devs,
We have a Mac SDK (Spokes 3.0 Native Library .SO) internally. I am trying to sort out early access to it via PDC!
As soon as I get the green light I will let you know.
Thanks for your patience,
Lewis.
Hi Paul,
I have tried to reproduce the conditions you report. These were the steps I took:
After each install of Spokes_RT.msi I verified the PlantronicsURE.exe process was running.
I have not reproduced the error pop ups your reported following these steps.
Could you confirm the following for me?
Once you have advised me on these points I will see if I can get further identifying the issue/conflict you are facing.
Thanks for your patience,
Lewis.
Hi Lewis,
Thanks for the help. Our customer's have not been mixing our software with the full spokes software. We install the software using the PlantronicsURE-SDK.msm merge module that comes with the SDK. If we try to install the run-time after our software is installed, the run-time software properly complains that we can only have one version of Spokes installed and prevents us from installing the run-time.
My development system started the day with the full spokes software (installed over a year ago to upgrade the firmware in a Savi 740). Prior to that, I'm sure I had the SDK (2.7.1) installed. I then uninstalled that full run-time and installed the PlantronicsURE-SDK.msi that I downloaded yesterday.
I un-installed the SDK, and then installed the Spokes_RT.msi (receiving the pop-up).
This has the feel of a timing issue. It doesn't happen on every customer machine, and it doesn't happen every time they reboot. We have machines in our call-center that experience the problem, and we re-booted a number of times yesterday without an error, but prior reboots had given us the error.
I have manually launched PlantronicsURE.exe from a command line a number of times without any errors.
We've been using the same (2.7.1) version for a long time, and this problem just started a handful of weeks ago, so I'm also thinking it might have started with a Windows update to the .Net Framework. My machine has .Net Compact Framework 3.5 (3.5.7283).
I'll keep trying to get it to crash on my desktop and I'll attach a debugger this time.
Is there any logging that I can turn on as well?
-Paul
We use COM Integration from a Native C++ application.
For example:
// SPOKES Interface definitions
CComPtr<ISessionCOMManager> sessMgr;
CComPtr<IComSession> session;
CComPtr<IHostCommand> hostCommand;
CComPtr<IDeviceListener> deviceListener;
CComPtr<IDeviceEvents> deviceEvents;
CComPtr<IDevice> activeDevice;
CComPtr<ICallCommand> callcommand;
CComPtr<ICallEvents> callEvents;
//Encapsulates event sink defined in SpokesEvents.h
CComObject<SessionManagerEventSync> *sessionMgrEventsSink = NULL;
CComObject<SessionEventSync> *sessionEventSink = NULL;
CComObject<DeviceEventSink> *deviceEventSink = NULL;
CComObject<DeviceListenerEventSink> *deviceListenerSink = NULL;
...
::CoInitialize(NULL);
HRESULT hr = S_OK;
if (SUCCEEDED(hr = ::CoCreateInstance(CLSID_SessionComManager, NULL,CLSCTX_LOCAL_SERVER, IID_ISessionCOMManager, (LPVOID*)&sessMgr )))
{
// hook to session manager events
CComObject<SessionManagerEventSync>::CreateInstance(&sessionMgrEventsSink);
AtlAdvise(sessMgr, sessionMgrEventsSink, __uuidof(ISessionCOMManagerEvents), &_pSinkCookie);
// set function pointers to attach/detach to device when we recieve Device events
sessionMgrEventsSink->DeviceStateHandlers( AttachDevice, DetachDevice );
// register new plugin with Spokes
if (SUCCEEDED(hr = sessMgr->Register(_bstr_t("COM Plugin"), &session )))
{
// hook to Session call events
session->get_CallEvents(&callEvents);
if( callEvents != NULL )
{
CComObject<SessionEventSync>::CreateInstance(&sessionEventSink);
AtlAdvise(callEvents , sessionEventSink, IID_ICOMCallEvents , &_pSinkSessionCookie);
}
}
else
{
TraceName(ME, TRE_API, -1, "InternalStartup1 - Error - 0x%08x", hr);
}
}
Hi Paul,
To enable debugging you need to install the full spokes software, at least while you turn the feature on.
Once the logging is enabled you can swap full spokes for SDK runtime only, and it will continue to log stuff from the SDK runtime as well.
Here is the guide of how to turn logging on.
Thanks,
Lewis.
OK, I installed the Full App from the above post and changed the logging level to "Very High".
I have not yet changed back to the cut-down run-time, instead I am continuing to use the Full Spokes Software.
I rebooted 3 or 4 times, and this latest reboot popped up a message dialog:
===============
PlantronicsURE
Object reference not set to an instance of an object.
OK
===============
(Unlike the earlier post with a similar message, this one had no stack trace, merely the "Object reference..." sentence.
I have attached a debugger.
The PlantronicsURE.log.1 file contains the following:
ALWAYS 2014-04-03 12:30:56,520 Program:[1] - ------------------- Starting PURE 2.8.38701.2 ------------------------
DEBUG 2014-04-03 12:30:58,282 SessionManager:[1] - Initialize Session Manager
DEBUG 2014-04-03 12:31:04,381 DeviceNotification:[1] - DeviceNotification.RegisterNotification
VERBOSE 2014-04-03 12:31:04,381 DeviceUtil:[1] - GetInstalledDevices
INFO 2014-04-03 12:31:04,381 DeviceManager:[1] - DeviceManager.FindDevices
DEBUG 2014-04-03 12:31:04,381 DeviceManager:[1] - GetDevices(47F)
VERBOSE 2014-04-03 12:31:04,397 DeviceSetup:[1] - SetupDiDestroyDeviceInfoList
DEBUG 2014-04-03 12:31:04,397 DeviceManager:[1] - GetDevices(47F)=
DEBUG 2014-04-03 12:31:04,397 SessionManager:[1] - Skip Module Load: False
DEBUG 2014-04-03 12:31:04,397 SessionManager:[1] - Reading config file C:\ProgramData\Plantronics\PlantronicsURE\PURE.xml
DEBUG 2014-04-03 12:31:04,428 SessionManager:[1] - Entering LoadSpartaModules
DEBUG 2014-04-03 12:31:17,283 SessionManager:[1] - Writing config file C:\ProgramData\Plantronics\PlantronicsURE\PURE.xml
DEBUG 2014-04-03 12:31:17,283 SessionManager:[1] - Leaving LoadSpartaModules
DEBUG 2014-04-03 12:31:17,283 SessionManager:[1] - Entering InitModules
DEBUG 2014-04-03 12:31:17,283 SessionManager:[1] - Calling Init for module Logging
INFO 2014-04-03 12:31:17,283 Logging:[1] - Logging.Init
WARN 2014-04-03 12:31:17,283 Logging:[1] - Bad value provided for file location, using file path as C:\Users\Paul Wysocki\AppData\Local\Plantronics\logs\
WARN 2014-04-03 12:31:17,283 Logging:[1] - Bad value provided for file name, using file name as SpokesLog.xml
INFO 2014-04-03 12:31:17,283 Logging:[1] - Log Path = C:\Users\Paul Wysocki\AppData\Local\Plantronics\logs\; Log File size = 1048576; Queue interval = 3000
DEBUG 2014-04-03 12:31:18,032 SessionManager:[1] - Writing config file C:\ProgramData\Plantronics\PlantronicsURE\PURE.xml
INFO 2014-04-03 12:31:18,032 Logging:[11] - Thread for writing the XML started
DEBUG 2014-04-03 12:31:18,032 SessionManager:[1] - Calling Init for module Rest
DEBUG 2014-04-03 12:31:18,032 PluginInterface:[1] - Enter Init True
DEBUG 2014-04-03 12:31:18,032 SessionManager:[1] - Writing config file C:\ProgramData\Plantronics\PlantronicsURE\PURE.xml
DEBUG 2014-04-03 12:31:18,032 ProgramMain:[1] - Enter spokesInstance:
DEBUG 2014-04-03 12:31:18,032 ProgramMain:[1] - Enter ProgramMain
DEBUG 2014-04-03 12:31:18,032 ProgramMain:[1] - Exit ProgramMain
DEBUG 2014-04-03 12:31:18,032 ProgramMain:[1] - Exit spokesInstance: Plantronics.UC.Rest.ProgramMain
DEBUG 2014-04-03 12:31:18,032 ProgramMain:[1] - enter startServer: False
DEBUG 2014-04-03 12:31:19,093 ConfigSafeServiceHost:[1] - Enter ApplyConfiguration
DEBUG 2014-04-03 12:31:19,935 ConfigSafeServiceHost:[1] - Exit getConfigFilename C:\Program Files (x86)\Plantronics\PlantronicsURE\Rest.config
DEBUG 2014-04-03 12:31:19,951 ConfigSafeServiceHost:[1] - Storing to config file: C:\Program Files (x86)\Plantronics\PlantronicsURE\Rest.config
DEBUG 2014-04-03 12:31:19,951 ConfigSafeServiceHost:[1] - Enter LoadConfigFromCustomLocation C:\Program Files (x86)\Plantronics\PlantronicsURE\Rest.config
DEBUG 2014-04-03 12:31:20,544 ConfigSafeServiceHost:[1] - Loading config Plantronics.UC.Rest.WcfRest
DEBUG 2014-04-03 12:31:20,731 SessionManager:[3] - Config file changed, reloading ...
DEBUG 2014-04-03 12:31:20,731 SessionManager:[3] - In ExitModules
DEBUG 2014-04-03 12:31:20,731 SessionManager:[3] - Calling Exit for module Logging
INFO 2014-04-03 12:31:20,731 Logging:[3] - Exiting SDK Logging
INFO 2014-04-03 12:31:20,731 SingleThreadedContext:[LoggingSingleThreadedContext] - Exiting LoggingSingleThreadedContext
DEBUG 2014-04-03 12:31:20,731 SessionManager:[3] - Calling Exit for module Rest
DEBUG 2014-04-03 12:31:20,731 PluginInterface:[3] - Enter Exit
DEBUG 2014-04-03 12:31:20,731 ProgramMain:[3] - Enter spokesInstance: Plantronics.UC.Rest.ProgramMain
DEBUG 2014-04-03 12:31:20,731 ProgramMain:[3] - Exit spokesInstance: Plantronics.UC.Rest.ProgramMain
DEBUG 2014-04-03 12:31:20,731 ProgramMain:[3] - enter stopServer: False
DEBUG 2014-04-03 12:31:20,731 PluginInterface:[3] - Exit Exit
DEBUG 2014-04-03 12:31:20,731 SessionManager:[3] - Calling Exit for module Avaya one-X Communicator
INFO 2014-04-03 12:31:21,495 CAvaya:[3] - AvayaPlugin detached from Avaya OneX
DEBUG 2014-04-03 12:31:21,495 SessionManager:[3] - Calling Exit for module Avaya one-X Agent
INFO 2014-04-03 12:31:21,495 CAvaya:[3] - AvayaPlugin detached from Avaya OneX
DEBUG 2014-04-03 12:31:21,495 SessionManager:[3] - Calling Exit for module Avaya IP Softphone
DEBUG 2014-04-03 12:31:21,511 ConfigSafeServiceHost:[1] - Exit LoadConfigFromCustomLocation
DEBUG 2014-04-03 12:31:21,511 ConfigSafeServiceHost:[1] - Exit ApplyConfiguration
DEBUG 2014-04-03 12:31:21,917 SessionManager:[3] - Calling Exit for module Avaya IP Agent
DEBUG 2014-04-03 12:31:21,917 SessionManager:[3] - Calling Exit for module Avaya Aura Agent Desktop
INFO 2014-04-03 12:31:21,917 CAvaya:[3] - AvayaPlugin detached from Avaya OneX
DEBUG 2014-04-03 12:31:21,917 SessionManager:[3] - Calling Exit for module Cisco UC Clients (CSF)
DEBUG 2014-04-03 12:31:21,917 CSF:[3] - Exit
DEBUG 2014-04-03 12:31:21,917 CSF:[3] - detach
DEBUG 2014-04-03 12:31:21,917 SessionManager:[3] - Calling Exit for module NEC SP350
DEBUG 2014-04-03 12:31:21,917 CNEC:[3] - In DetachFromNECSp
DEBUG 2014-04-03 12:31:21,917 CNEC:[3] - Leaving DetachFromNECSp
DEBUG 2014-04-03 12:31:21,917 SessionManager:[3] - Calling Exit for module Plantronics XML Service
DEBUG 2014-04-03 12:31:21,917 SessionManager:[3] - Calling Exit for module Cisco WebEx Connect
ERROR 2014-04-03 12:31:21,917 FileChangeWatcher:[3] - Unable to open file 'C:\ProgramData\Plantronics\PlantronicsURE\PURE.xml'
System.NullReferenceException: Object reference not set to an instance of an object.
at Plantronics.UC.WebexConnect.CWebex.detach()
at Plantronics.UC.WebexConnect.CWebex.Exit()
at Plantronics.UC.Common.SessionManager.ExitModules()
at Plantronics.UC.Common.SessionManager.spartaXmlChangesHandler()
at Plantronics.UC.Common.SessionManager.OnConfigChanged(Object sender, FileSystemEventArgs e)
at Plantronics.Utility.FileChangeWatcher.1(Object , FileSystemEventArgs )
DEBUG 2014-04-03 12:31:22,119 Singleton:[1] - Enter init
DEBUG 2014-04-03 12:31:22,119 Singleton:[1] - Enter PopulateDevices
FATAL 2014-04-03 12:31:22,119 Sparta:[1] - Plantronics URE init failed
System.NullReferenceException: Object reference not set to an instance of an object.
at Plantronics.UC.Rest.Singleton.PopulateDevices()
at Plantronics.UC.Rest.Singleton.init()
at Plantronics.UC.Rest.ProgramMain.startServer()
at Plantronics.UC.Rest.PluginInterface.Init(Boolean auto_start)
at Plantronics.UC.Rest.PluginInterface.Init()
at Plantronics.UC.Common.SessionManager.InitModules()
at PlantronicsURE.Sparta.Sparta_Load(Object sender, EventArgs e)
VERBOSE 2014-04-03 12:31:24,132 Singleton:[10] - Enter timer_Elapsed System.Timers.ElapsedEventArgs
VERBOSE 2014-04-03 12:31:24,132 Singleton:[10] - Exit timer_Elapsed
The rest of the .1 log file and the PlantronicsURE.log file contain nothing but the "Enter timer_Elapsed" and "Exit timer_Elapsed" messages.
The following code:
::CoInitialize(NULL);
HRESULT hr = S_OK;
if (SUCCEEDED(hr = ::CoCreateInstance(CLSID_SessionComManager, NULL,CLSCTX_LOCAL_SERVER, IID_ISessionCOMManager, (LPVOID*)&sessMgr )))
{
...
is returning an hr value of 0x800700a4 on one of my call center machines. We looked in task manager and saw that PlantronicsURE had over 1200 threads.
The machine with this error is running the 2.7.1 version of PlantronicsURE (installed via the SDK Merge Module).
I'll attach a dump file and whatever logs are in AppData shortly.
This may be related to PlantronicsURE error message box - "Collection was modified; enumeration operation may not execute.", but only insofar as we have been troubleshooting the PlantronicsURE messagebox error on this machine yesterday.
Attached are logs from a system that is experiencing All three of the mentioned issues. Collection was modified, IChannelListener, and Object reference not set.
The logs show these errors (and more).
Sorry, this is the same log as the other thread that I started, but I thought I'd keep the threads pure in hopes that they are useful for future generations.
Here's the dmp file.
We stopped and started PlantronicsURE.exe on this system (and a second one with a CS50 headset that also had OutOfMemoryExceptions in it's log), and both systems are now working.
The Windows 7 system that produced the dump and logs for this thread was rebooted a number of times yesterday afternoon (4:30PM Central or so), so it doesn't seem like this is an accumulation of a slow thread leak over time.
Attached is the log from this system. I notice System.OutOfMemoryExceptions starting around 18:38:43 on April 2nd.
There are other exceptions earlier in the log that also seem to indicate OutOfMemory.
Hi,
We are integrating the Voyager Legend UC to our communication software and noticed that (unlike for example the Blackwire C310) i cannot have the audio of a call and play the headset ringtone at the same time.
In other words: calling IHostCommand::Ring(true) is not effective after having called IHostCommand::put_AudioState(AudioType_MonoOn).
Is there, for Legend UC, a workaround for, while inside an active call, playing the headset ringtone, allowing the user to notice the incoming second call and then picking it up if he/she wills ?
I am using Spokes 2.8.2 and my application is Windows / native C++ using COM.
Best Regards.
Hi Julio,
This is really a firmware question whether the Legend UC device (bbluetooth device) is designed to allow to support the behavior you mentioned. I have to check with our firmware team for the correct answer.
Wei Chu