Home AMX User Forum NetLinx Modules & Duet Modules

Issue with ClearOne Converge 880T Module Phonebook

I've tried controlling two ClearOne Converge 880Ts with the module provided on the AMX site. Everything works except the phonebook part of the module. For some reason, it doesn't allow updating of the records or an actual refresh of the records stored on the Converge. Also, you cannot create a new record. All of these functions have proper button codes and the code seems to send to the virtual device fine, but the virtual device doesn't seem to do anything with the commands sent to it.
Has anyone else used this module and had the phonebook working? I can't open the duet file to see what the virtual device is doing wrong, but the NetLinx code seems mostly fine.
Here's hoping someone has a fix as the client would really like the phonebook!
Thanks for your time.

Comments

  • I recently worked with a similar system, a Converge880 with a TH20 connected via the link. Instead of using the phone book on the device, I created one that was stored on the NI processor itself using a structure. It only held 16 entries and allowed display of 8 at a time on the touchpanel, but it could be easily modified to hold and display more. If you're interested, I'll package the code into a include and post it here...

    Andrew
  • Andrew,

    Thanks for the reply. I would really appreciate the code if you have the time to upload it.

    I kept looking into the AMX provided comm module's problem with the phone book and haven't found anything. The command used to update the phone book is "PHONEBOOKUPDATE-string" but there's no documentation anywhere on that command and it doesn't work, so it looks like it was a work in progress that never finished.
  • Here you go. Let me know if you have any questions/suggestions.
    PROGRAM_NAME='Phone Book'
    DEFINE_TYPE
    structure _phone_book_entry
    {
        integer nIndexNumber
        char phone_number[25]
        char name[50]
    }
    
    DEFINE_VARIABLE
    persistent _phone_book_entry uPhoneBook[16]
    persistent integer nPBStartIndex = 1
    persistent integer nPBEndIndex = 8
    persistent integer nPBCurrentDisplay[8]
    volatile integer nCurrentPBEntry
    volatile integer nCurrentPBIndex
    
    
    
    DEFINE_EVENT
    button_event[dvTPAudioConf,nTPAudioConfPBScroll]
    {
        push:
        {
    	stack_var integer i
    	stack_var integer j
    	
    	j = 8
    	switch(get_last(nTPAudioConfPBScroll))
    	{
    	    case 1:
    	    {
    		if(nPBStartIndex > 1 && nPBEndIndex > 8)
    		{
    		    nPBStartIndex--
    		    nPBEndIndex--
    		}
    		
    		for(i = nPBEndIndex; i>=nPBStartIndex; i--)
    		{
    		    send_command dvTPAudioConf,"'^TXT-',itoa(nTPAudioConfPBIndexNumberBtns[j]),',0,',itoa(uPhoneBook[i].nIndexNumber)"
    		    send_command dvTPAudioConf,"'^TXT-',itoa(ntpaudioconfPBNameBtns[j]),',0,',uPhoneBook[i].name"
    		    send_command dvTPAudioConf,"'^TXT-',itoa(nTPaudioconfPBPhoneNumberBtns[j]),',0,',uPhoneBook[i].phone_number";
    		    nPBCurrentDisplay[j]=i
    		    j--
    		}
    	    }
    	    case 2:
    	    {
    		if(nPBStartIndex <= 8 && nPBEndIndex <= 16)
    		{
    		    nPBStartIndex++
    		    nPBEndIndex++
    		}
    		
    		for(i = nPBEndIndex; i>=nPBStartIndex; i--)
    		{
    		    send_command dvTPAudioConf,"'^TXT-',itoa(nTPAudioConfPBIndexNumberBtns[j]),',0,',itoa(uPhoneBook[i].nIndexNumber)"
    		    send_command dvTPAudioConf,"'^TXT-',itoa(ntpaudioconfPBNameBtns[j]),',0,',uPhoneBook[i].name"
    		    send_command dvTPAudioConf,"'^TXT-',itoa(nTPaudioconfPBPhoneNumberBtns[j]),',0,',uPhoneBook[i].phone_number";
    		    nPBCurrentDisplay[j]=i
    		    j--
    		}
    	    }
    	}
        }
    }
    button_event[dvTPAudioConf,nTPAudioConfPBNameBtns]
    {
        hold[5]:
        {
    	nButtonHoldStatus = 1
    	send_command dvTPMain,"'@PPN-pb_keyboard'"
    	
    	nCurrentPBIndex = get_last(nTPAudioConfPBNameBtns)
    	nCurrentPBEntry = nPBCurrentDisplay[nCurrentPBIndex]
        }
        release:
        {
    	stack_var integer nLastPushed
    	
    	if(nButtonHoldStatus = 0)
    	{
    	    nLastPushed = get_last(nTPAudioConfPBNameBtns)
    	    send_command vdvConvergeVH20,"'DIALNUMBER-',uPhoneBook[nPBCurrentDisplay[nLastPushed]].phone_number"
    	    send_command dvTPAudioConf,"'^TXT-1,0,',uPhoneBook[nPBCurrentDisplay[nLastPushed]].phone_number"
    	}
    	else
    	{
    	    nButtonHoldStatus = 0
    	}
        }
    }
    button_event[dvTPAudioConf,nTPAudioConfPBPhoneNumberBtns]
    {
        hold[5]:
        {
    	send_command dvTPMain,"'@PPN-pb_keypad'"
    	nButtonHoldStatus = 1
    	nCurrentPBIndex = get_last(nTPAudioConfPBPhoneNumberBtns)
    	nCurrentPBEntry = nPBCurrentDisplay[nCurrentPBIndex]
        }
        release:
        {
    	stack_var integer nLastPushed
    	
    	if(nButtonHoldStatus = 0)
    	{
    	    nLastPushed = get_last(nTPAudioConfPBPhoneNumberBtns)
    	    send_command vdvConvergeVH20,"'DIALNUMBER-',uPhoneBook[nPBCurrentDisplay[nLastPushed]].phone_number"
    	    send_command dvTPAudioConf,"'^TXT-1,0,',uPhoneBook[nPBCurrentDisplay[nLastPushed]].phone_number"
    	}
    	else
    	    nButtonHoldStatus = 0
        }
    }
    data_event[dvTPMain]
    {
        string:
        {
    	stack_var char cTemp[255]
    	stack_var char nTempNum[5]
    	stack_var integer i
    	stack_var integer j
    	
    	j=8
    
    	while(find_string(data.text,'-',1))
    	{
    	    cTemp = remove_string(data.text,'-',1)
    	    
    	    select
    	    {
    		active(find_string(cTemp,'Phonebook-',1)):
    		{
    		    for(i = nPBEndIndex; i>=nPBStartIndex; i--)
    		    {
    			send_command dvTPAudioConf,"'^TXT-',itoa(nTPAudioConfPBIndexNumberBtns[j]),',0,',itoa(uPhoneBook[i].nIndexNumber)"
    			send_command dvTPAudioConf,"'^TXT-',itoa(ntpaudioconfPBNameBtns[j]),',0,',uPhoneBook[i].name"
    			send_command dvTPAudioConf,"'^TXT-',itoa(nTPaudioconfPBPhoneNumberBtns[j]),',0,',uPhoneBook[i].phone_number";
    			j--
    		    }
    		}
    		active(find_string(cTemp,'NAME-',1)):
    		{
    		    uPhoneBook[nCurrentPBEntry].name = data.text
    		    send_command dvTPAudioConf,"'^TXT-',itoa(nTPAudioConfPBNameBtns[nCurrentPBIndex]),',0,',uPhoneBook[nCurrentPBEntry].name"
    		}
    		active(find_string(data.text,'NUMBER-',1)):
    		{
    		    uPhoneBook[nCurrentPBEntry].phone_number = data.text
    		    send_command dvTPAudioConf,"'^TXT-',itoa(nTPAudioConfPBPhoneNumberBtns[nCurrentPBIndex]),',0,',uPhoneBook[nCurrentPBEntry].phone_number"
    		}
    	    }
    	}
        }
    }
    
  • Thanks, Andrew! This is great.

    As someone in a position a lot of people here started out in (company programmer quit and I'm left to do all the AMX without training), this is a great help. Thanks again!
  • Glad I could help.
  • Converge 880T Module

    Someone can tell me how control Rx Telco Gain?
  • One way is put the telco rx through its own process and send that process to your outputs instead of directly sending the rx to the outputs. You can then adjust gain in the process.
  • That's about the only way I can see to do it too. They don't include a way to do that in the module (silly of them to leave that out in my opinion). The other options would be to either use a macro or use the passthru/passback option on the module.
Sign In or Register to comment.