Home AMX User Forum NetLinx Modules & Duet Modules

Cisco SX80 codec control

Has anyone had much luck with a Cisco SX80.
I am using the AMX module and getting no feedback at all.
Using IP it just doesn't work and using RS232 it works but feedback isn't working.
The 'xcommand' strings work (so baud rate and login details are correct) but the response strings from the codec are all hex strings that don't look anything like the standard responses from a Cisco codec.

The real problem is that the SX80 doesn't have an on screen menu so I can't use it for the addressbook and the addressbook doesn't work so the client is pretty unimpressed with having to manually type in the address for every phone call.

Any tips would be appreciated.

Comments

  • NZRobNZRob Posts: 70
    I have used the SX80 a bit lately - IP and Serial - and had no problem with feedback on either using the AMX module.
    That said the phonebook example is crap and doesn't really work until you rewrite.

    Just checking the normal stuff - have you looked in telnet of the AMX processor and compared to telnet of the SX80 to see where its stopping at?

    For IP have you checked you entered the IP/user/password info?
  • champchamp Posts: 261
    I got it working with IP, telnet was disabled.
    I gave up on serial control, it just sends back garbage.

    The addressbook works after you do a lot of massage to the demo.

    'DIALID-' doesn't work so you have to do this command instead:
    send_command vdvCodecs[nCurrentZone], "'DIALNUMBER-' ,tPBData[nCurrentZone].sListNumber[nSelectedRecord],';Sip'";
    

    'DIALNUMBER-' doesn't work without adding the call type and 'Auto' doesn't work.
    The only call type that worked was 'Sip' so I hard coded all the calls to:
    send_command vdvCodecs[nCurrentZone], "'DIALNUMBER-',sPhoneNumber,';Sip'";
    

    To get the phone book to populate you need to:
    1. Select the address book type (ie. nCurrentZone = 1 for local or 2 for global).
    2. Search the address book:
    send_command vdvCodecs[nCurrentZone], "'PHONEBOOKSEARCH-1001,ID=*"
    

    The demo makes you do this by adding another step where you pop up a keypad and enter a search string.

    At least I managed to get away without having to re-write the whole module for once but I still lost a day and a half on what should have taken an hour or two.
  • Baud?

    My first guess would be the baud rate the module is using did not match the baud rate set in the codec. I also had issues with the serial communication dropping characters at the "suggested" data rate, and have settled in at 19200 for the time being.

    SEND_COMMAND vdvVTC,"'PROPERTY-Baud_Rate,19200'"

    IP hasn't had many issues, but due to site network and security issues, the client has preferred sticking with 232.
  • tdewildtdewild Posts: 49
    FYI

    New driver Cisco_SX80_v1_0_4_dr1_0_0 found in InConcert Resource Center (Mar 12 2015 ).

    Duet Module Interface Specification document

    1/27/15 Revision v1.0.4
    RPM Phonebook implantation
    Added support for channels 330,331 (feedback input/presentation and graphics/presentation as mutually exclusive channels)

    On page 25 Device notes:
    Default baudrate is 38400, recommended for stable RS232 control.
    Default baudrate is 115200 recommended for new masters.

    SEND_COMMAND vdvCiscoSX80,"'PROPERTY-Baud_Rate,115200'"
  • I have been working with Latest Module to control SX80 with SSH and its working . The only issue I have is when the SX80 get rebooted the module never re-establishes communications. I've tried Telnet and it works perfectly. TC7.3.1 is the firmware of SX80. Any suggestion would be greatly appreciated.
  • tdewildtdewild Posts: 49
    Is the addressbook working when using AMX driver Cisco_SX80_v1_0_4_dr1_0_0 and included demo touchpanelfile?
    When I did load the addressbook more than once the result was never the same, It was alway`s missing some contacts.
  • BBosBBos Posts: 1
    tdewild wrote: »
    Is the addressbook working when using AMX driver Cisco_SX80_v1_0_4_dr1_0_0 and included demo touchpanelfile?
    When I did load the addressbook more than once the result was never the same, It was alway`s missing some contacts.

    Any update to this? I am about to implement this using Cisco_SX80_v1_0_7_dr1_0_0. Can anyone advise if they had luck with the Corporate directory?

    Thanks
  • Basic buffer processing for Cisco SX80 using Netlinx.....doesn't support folders.



    DEFINE_TYPE


    STRUCTURE PHONEBOOK
    {
    INTEGER iParentFolder
    INTEGER iFirstChild
    CHAR sEntryName[100]
    CHAR sFolderID[100]
    INTEGER iChildCount
    }

    STRUCTURE ContactMethod
    {
    CHAR sContactNumber[100]
    CHAR sCallRate[20]
    CHAR sCallProtocol[10]
    }


    DEFINE_CONSTANT

    ciPHONEBOOKMAXENTRIES=150
    ciPHONEBOOKMAXMETHODS=300


    DEFINE_VARIABLE

    VOLATILE CHAR CODEC_BUFFER[50000]

    VOLATILE PHONEBOOK pbEntries[ciPHONEBOOKMAXENTRIES]
    VOLATILE ContactMethod cmMethods[ciPHONEBOOKMAXMETHODS]


    //VOLATILE PHONEBOOK pbEntries[150]
    //VOLATILE ContactMethod cmMethods[300]

    VOLATILE INTEGER iReceivingPhoneBook
    VOLATILE INTEGER iPhoneBookDownloadBusy



    DEFINE_CALL 'fClearPhonebook' //CLEAR ENTRIES IN PHONEBOOK
    {
    INTEGER fiA

    for(fiA = 0; fiA<(ciPHONEBOOKMAXENTRIES);fiA++)
    {
    pbEntries[fiA].iParentFolder = 0
    pbEntries[fiA].iFirstChild = 0
    SET_LENGTH_STRING ((pbEntries[fiA].sEntryName),0)

    SET_LENGTH_STRING ((pbEntries[fiA].sFolderId),0)
    pbEntries[fiA].iChildCount = 0
    }
    for(fiA = 0; fiA<(ciPHONEBOOKMAXMETHODS);fiA++)
    {
    SET_LENGTH_STRING ((cmMethods[fiA].sContactNumber),0)
    SET_LENGTH_STRING ((cmMethods[fiA].sCallRate),0)
    SET_LENGTH_STRING ((cmMethods[fiA].sCallProtocol),0)
    }
    }




    DEFINE_CALL 'PROCESSPHONEBOOK' //LOAD PHONEBOOK ENTRIES FROM CODEC USING BUFFER
    {
    CODEC_POLL=0 //TURN OFF POLLING

    CALL 'fClearPhonebook' //DELETE ANY EXISTING ENTRIES

    WAIT 10 'BUFFER1'
    {
    SET_LENGTH_STRING(CODEC_BUFFER,0) //EMPTY THE BUFFER
    }
    WAIT 50 'BUFFER5'
    {
    SET_LENGTH_STRING(CODEC_BUFFER,0) //EMPTY THE BUFFER
    iReceivingPhoneBook = 1 //NOT PROCESSING
    iPhoneBookDownloadBusy = 1 //FLAG - DOWNLOAD ACTIVE
    SEND_STRING CODEC,"'xCommand Phonebook Search',$0D,$0A" //SEARCH PHONEBOOK
    }
    WAIT 150 'BUFFER15'
    {
    iPhoneBookDownloadBusy = 0 //FLAG - DOWNLOAD NOW INACTIVE
    iReceivingPhoneBook = 1 //NOT PROCESSING

    CODEC_POLL=1 //START POLLING CODEC AGAIN
    SET_LENGTH_STRING(CODEC_BUFFER,0)

    CALL 'LOADPHONEBOOK' //DISPLAYS THE STARTING PHONEBOOK ENTRIES ON VTC CONF PAGE
    }
    }





    DATA_EVENT[CODEC]
    {
    STRING:
    {
    //LOCAL_VAR CHAR TEMP_BUFFER[15999]
    //LOCAL_VAR CHAR TRASH_BUFFER[15999]

    LOCAL_VAR CHAR TEMP_BUFFER[50000]
    LOCAL_VAR CHAR TRASH_BUFFER[50000]


    LOCAL_VAR INTEGER ROW
    LOCAL_VAR INTEGER TRASH_LEN

    IF(FIND_STRING(CODEC_BUFFER,"'Status: Connected',$0D,$0A",1)&& !START)
    {
    CODEC_CALL_STATUS=1 //CONNECTED
    TEMP_BUFFER=REMOVE_STRING(CODEC_BUFFER,'Status:',1)
    TRASH_BUFFER=REMOVE_STRING(TEMP_BUFFER, 'CALL ',1)
    SET_LENGTH_STRING(TEMP_BUFFER,LENGTH_STRING(TEMP_BUFFER)-8)
    CODEC_CALL_ID=ATOI(TEMP_BUFFER) //CODEC CALL ID

    }
    IF(FIND_STRING(CODEC_BUFFER,"'** end',$0D,$0A",1))
    {
    if(iPhoneBookDownloadBusy = 1) //WERE WE DOWNLOADING PHONEBOOK?
    {
    iReceivingPhoneBook = 0 //START PROCESSING
    ROW=1 //INITIAL NUMBER OF ROWS
    SET_LENGTH_STRING(TEMP_BUFFER,0)
    SET_LENGTH_STRING(TRASH_BUFFER,0)
    }
    }
    WHILE(FIND_STRING(CODEC_BUFFER,'*r ResultSet',1) && iPhoneBookDownloadBusy && !iReceivingPhoneBook)
    {
    TEMP_BUFFER = REMOVE_STRING(CODEC_BUFFER,'*r ResultSet',1)
    SELECT
    {
    ACTIVE(FIND_STRING(CODEC_BUFFER,' ResultInfo Offset: ',1)) :
    {
    TEMP_BUFFER = REMOVE_STRING(CODEC_BUFFER,'ResultInfo Offset: ',1)
    SET_LENGTH_STRING(TEMP_BUFFER,0)
    }
    ACTIVE(FIND_STRING(CODEC_BUFFER,' ResultInfo Limit: ',1)) :
    {
    TEMP_BUFFER = REMOVE_STRING(CODEC_BUFFER,'ResultInfo Limit: ',1)
    SET_LENGTH_STRING(TEMP_BUFFER,0)
    }
    ACTIVE(FIND_STRING(CODEC_BUFFER,' ResultInfo TotalRows:',1)) :
    {
    TEMP_BUFFER = REMOVE_STRING(CODEC_BUFFER,'TotalRows: ',1)
    }
    ACTIVE(FIND_STRING(CODEC_BUFFER,' Contact ',1)) : //CONTACT INFO STARTS HERE
    {

    TEMP_BUFFER = REMOVE_STRING(CODEC_BUFFER,'Contact ',1)

    IF(FIND_STRING(CODEC_BUFFER,'Name: ',1))
    {

    TEMP_BUFFER = REMOVE_STRING(CODEC_BUFFER,'Name: ',1) //REMOVE UP TO FIRST QUOTE

    TRASH_BUFFER= REMOVE_STRING(CODEC_BUFFER,"$0D",1) //CAPTURE THE NAME
    TRASH_LEN=LENGTH_STRING(TRASH_BUFFER)

    TEMP_BUFFER=LEFT_STRING(TRASH_BUFFER,(TRASH_LEN-1)) //GET RID OF END $0D

    TRASH_LEN=LENGTH_STRING(TEMP_BUFFER)
    TRASH_BUFFER=LEFT_STRING(TEMP_BUFFER,(TRASH_LEN-1)) //GET RID OF END "

    TRASH_LEN=LENGTH_STRING(TRASH_BUFFER)
    pbEntries[ROW].sEntryName=RIGHT_STRING(TRASH_BUFFER,(TRASH_LEN-1)) //REMOVE FRONT "


    }
    IF(FIND_STRING(CODEC_BUFFER,'ContactId: ',1))
    {
    TEMP_BUFFER = REMOVE_STRING(CODEC_BUFFER,'ContactId: ',1) //REMOVE UP TO FIRST QUOTE

    }
    IF(FIND_STRING(CODEC_BUFFER,'Number: ',1))
    {
    TEMP_BUFFER = REMOVE_STRING(CODEC_BUFFER,'Number: ',1) //REMOVE UP TO FIRST QUOTE

    TRASH_BUFFER= REMOVE_STRING(CODEC_BUFFER,"$0D",1) //CAPTURE THE CALL RATE
    TRASH_LEN=LENGTH_STRING(TRASH_BUFFER)

    TEMP_BUFFER=LEFT_STRING(TRASH_BUFFER,(TRASH_LEN-1)) //GET RID OF END $0D
    TRASH_LEN=LENGTH_STRING(TEMP_BUFFER)

    TRASH_BUFFER=LEFT_STRING(TEMP_BUFFER,(TRASH_LEN-1)) //GET RID OF END "

    TRASH_LEN=LENGTH_STRING(TRASH_BUFFER)

    cmMethods[ROW].sContactNumber=RIGHT_STRING(TRASH_BUFFER,(TRASH_LEN-1)) //REMOE FIRST "

    }
    IF(FIND_STRING(CODEC_BUFFER,'Protocol: ',1))
    {
    TEMP_BUFFER = REMOVE_STRING(CODEC_BUFFER,'Protocol: ',1)

    TRASH_BUFFER= REMOVE_STRING(CODEC_BUFFER,"$0D",1) //CAPTURE THE CALL RATE
    TRASH_LEN=LENGTH_STRING(TRASH_BUFFER)

    cmMethods[ROW].sCallProtocol=LEFT_STRING(TRASH_BUFFER,(TRASH_LEN-1))


    }
    IF(FIND_STRING(CODEC_BUFFER,'Device: ',1))
    {
    TEMP_BUFFER = REMOVE_STRING(CODEC_BUFFER,'Device: ',1)
    //DONE
    }
    IF(FIND_STRING(CODEC_BUFFER,'CallRate: ',1))
    {
    TEMP_BUFFER = REMOVE_STRING(CODEC_BUFFER,'CallRate: ',1)

    TRASH_BUFFER= REMOVE_STRING(CODEC_BUFFER,"$0D",1) //CAPTURE THE CALL RATE
    TRASH_LEN=LENGTH_STRING(TRASH_BUFFER)

    cmMethods[ROW].sCallRate=LEFT_STRING(TRASH_BUFFER,(TRASH_LEN-1))
    }
    IF(FIND_STRING(CODEC_BUFFER,'CallType: ',1))
    {
    TEMP_BUFFER = REMOVE_STRING(CODEC_BUFFER,'CallType: ',1)

    ROW=ROW+1 //INCREASE THE ROW COUNTER

    //DONE
    }
    }
    }
    }

    }
    }

  • I am using the 1.0.9 module and am having a problem controlling the speed of the cameras. I send values to the various levels, but the speed of the camera on the pan/tilt/zoom functions never changes. Pan and Zoom aren't too bad with what I am doing but the Tilt is terrible. I am setting them in the 1-255 range but even setting them down to 0 or 1 doesn't make any difference. I can see the levels changing in diagnostics for the module but the same value is always being sent to the codec.
Sign In or Register to comment.