BSS BLU-XXX Control Module by Code EM - With VoIP Dialer

http://www.drivehq.com/file/df.aspx/publish/emmp_band/CodeEM_BSS_Module_V101

Okay,
Here's a control module I wrote to work with the BSS BLU-XXX. A few notes about it.

Firstly - I did NOT include the source code for the comm module. It took me forever to write it and I'm not in a mood to share it. Therefore, it comes with no warranty and is free for you to use. It's worth every penny.

Sone programming notes -
I wrote this mainly testing on a BSS BLU-103. I did have a chance to see it also work on a BLU-102, BLU-50 and one other that escapes me at the moment.

I do have a working VoiP Dialer in this module. It has been tested but there are some quirks that have to do with the BLU and some odd flakiness with the Hook button. But, mostly it works well.

The module is somewhat DUET-esque in that it uses virtual devices and channels/levels/commands to work. However, I broke away from SNAPI in a few key respects. I have had several projects where I was unable to use the AMX DUET module due to its limitation on how many processing objects it can control. (Limited to the port count limit) I chose to use channels to delineate between one PO and another. Since there are way more channels available than device ports, I can control quite a bit more volume level/mutes (current module set to 200 but in theory can go up to 3999) Same with Source Matrices and Source Selectors.

There is a raw UI module and file with a working VoIP dialer section for both lines. The GUI is basic and meant for you to test all functions and copy/paste into your layout for prettying up.

There's much more to say but you'll have to read the Pulitzer Prize winning novel I wrote called Instruction Manual.

Lastly: I did NOT do code for a POTS Dialer as I didn't have a BLU-102 to test with. The POTS dialer and VoIP dailer are similar but not the same in key respects. I will be happy to finish that part of the module for anyone who would care to loan me a BLU-102 for a little while. I will also be happy to share the source for the comm module with that person if they promise to keep it under their hat.

It is not my intention to support this module. Please don't pepper me with complaints about it not doing such-n-so. I will try to help as much as I can. it's free and worth every penny.

Enjoy!
Yours truly,
E

Comments

  • ericmedleyericmedley Senior Member - 3709 Posts Posts: 4,111
    One side note to add before you look at this. Volume on a BSS is an odd thing. The range of levels top and bottom depend upon one PO vs. another. The way I went about the volume control is that it will work with most any level. The thing is though, some faders have a shorter range from top to bottom. To keep from going mad I just let them all ride on the full range. So, if the fader happens to be a shorter range one, you just need to adjust in main code and/or the TP files. For example, Pre-Gains only go from 0-15. (not 0-255) The ramping is still smooth no matter what the fader rande. You just need to run the level up and down to see where the bottom and top are and adjust your code accordingly.
  • feddxfeddx Junior Member Posts: 137
    But.....

    Never mind.

    ;)
  • ericmedleyericmedley Senior Member - 3709 Posts Posts: 4,111
    feddx wrote: »
    But.....

    Never mind.

    ;)

    ??? (and some stuff to make this post long enough)
  • feddxfeddx Junior Member Posts: 137
    ericmedley wrote: »
    http://www.drivehq.com/file/df.aspx/publish/emmp_band/CodeEM_BSS_Module_V101

    Please don't pepper me with complaints about it not doing such-n-so. I will try to help as much as I can. it's free and worth every penny.

    Enjoy!
    Yours truly,
    E

    In response to this... And there was supposed to be an emoticon (or an Emoji as they are now known apparently)

    :/

  • gokugoku Junior Member Posts: 1
    Could you re-post this? I'm onsite and the official module from Harman is pants!

  • ericmedleyericmedley Senior Member - 3709 Posts Posts: 4,111
    goku wrote: »
    Could you re-post this? I'm onsite and the official module from Harman is pants!

    the link is right in the first post.

  • JULLYJULLY Junior Member Posts: 4
    How do you handle the source feedback of the source matrix , im using matrix instead of selector?

    I have some feedback problem here.
  • ericmedleyericmedley Senior Member - 3709 Posts Posts: 4,111
    JULLY wrote: »
    How do you handle the source feedback of the source matrix , im using matrix instead of selector?

    I have some feedback problem here.

    If you're referring to me - I believe the source router is meant to behave like a regular "stand alone" matrix switch in that it just sends back a "This switch just happened" type command. I think it's reference by the instance number. So, something along the lines of <instance number>I<Input number>O<output number> This is from memory - mind you. Feedback issues. I can tell you that feeback in general on the BSS is a touchy thing. Their understanding of the the "Subscribe" command is way different from - say Biamp. In the other DSPs, Subscribe means that I want to know about everything that happens with that particular Processing Object's parameters I subscribed to, no matter who or what did the change.

    In BSS land, you can almost thing of Subscribe as Get. When and how the BSS sends you feedback on a give Processing Object and it's parameters is sketchy at best.

    I've not ran itno any Router FB problems on any of my installs. but, I never say my code is not to blame. what kind of issues are you finding?
  • JULLYJULLY Junior Member Posts: 4
    Hi Eric,

    Thanks for the reply, first off all this module is awesome ,its not difficult to understand and use it.

    in the source feedback, when using source selector, we only handle the input id that return from bss.

    when using source matrix, I compare input id and output id to have the correct feedback.

    Im using mid_string for my output id but when my matrix grows to 2 digits number I have issues comparing it.

    how do you compare the input id and output id for source matrix feedback?

  • ericmedleyericmedley Senior Member - 3709 Posts Posts: 4,111
    JULLY wrote: »
    Hi Eric,

    Thanks for the reply, first off all this module is awesome ,its not difficult to understand and use it.

    in the source feedback, when using source selector, we only handle the input id that return from bss.

    when using source matrix, I compare input id and output id to have the correct feedback.

    Im using mid_string for my output id but when my matrix grows to 2 digits number I have issues comparing it.

    how do you compare the input id and output id for source matrix feedback?

    Thanks for the kind words. I'm glad it was helpful.

    If you are referring to the module's return for switcher status, I tend to do 'old-skool' string chopping. basically do a serious of remove strings to chop out the beginning delimiters (Router ID, Input, Output) then using ATOI to grab the value.

    However, if you're referring to the internal workings of the BSS's API - (i'm not in front of my computer at the moment to double-check) but the data that comes back is that nasty hex string that contains the Object ID, the parameter ID and then the data. The data is actually pretty simple HextoI conversion.

    The real trick is putting togetehr the proper string to search for the Proc Object and Parameter Object IDs.

    I don't know if that answer's your question or not. Hit me up again if not.
    E
  • JULLYJULLY Junior Member Posts: 4
    The return string in the data event was

    "sourcematrix:3,I0o1-Taken"
    You use remove_string '3,I'
    to get the input id then atoi it.

    if we have multiple output, o2 ,o3,o12 return for example
    how do I use the remove_string to handle output and compare with input to get correct feedback ?

    this is how my touchpanel button looks like i need to get correct fb of input button on correct row

    i1 i2 i3 >>>o1
    i1 i2 i3 >>>o2
    i1 i2 i3>>>o3







    J
  • ericmedleyericmedley Senior Member - 3709 Posts Posts: 4,111
    JULLY wrote: »
    The return string in the data event was

    "sourcematrix:3,I0o1-Taken"
    You use remove_string '3,I'
    to get the input id then atoi it.

    if we have multiple output, o2 ,o3,o12 return for example
    how do I use the remove_string to handle output and compare with input to get correct feedback ?

    this is how my touchpanel button looks like i need to get correct fb of input button on correct row

    i1 i2 i3 >>>o1
    i1 i2 i3 >>>o2
    i1 i2 i3>>>o3







    J

    Hmmm..

    I think this might be a case of how one approaches the whole notion of tracking the matrix. One method is to just track the outputs and what input they are passing. The other method is tracking each input and which output(s) they are assigned to.

    I tend to chose the former. I will have an array for the Outputs.

    So each output will only have one value: whichever input it currently has assigned to it.

    I don't choose to do something like "Input one is currently assigned to outputs 2,3 6"

    I can tell you that I've seen plenty of other programmers code where they manage feedback in the latter. I'm not saying one is better than the other. It all depends upon one's way of thinking and both methods work. To each his/her own...


    But havaing said all this:

    Here's the method of chopping the string.

    "sourcematrix:3,I4O1-Taken"

    I'm gong to assume you're in a function or in the data_event. Either way I'd create some stack_vars

    stack_var integer MyRouter_ID;
    stack_var integer MyInput;
    stack_var integer MyOutput;


    remove_sting(buffer,':',1) // now the string is: "3,I4O1-Taken"
    MyRouter_ID=atoi(buffer) // Now MyRotuer_ID=3
    remove_stirng(buffer,'I',1') /// Now the string is: "4O1-Taken"
    MyInput=atoi(buffer) // MyInput=4
    remove_stirng(buffer,'O',1') /// Now the string is: "1-Taken"
    MyOutput=atoi(buffer) // MyOutput=1

    so how you have all the information you need in integer form. For me it would end up looking like this:

    Current_Switcher_Output_Stat[MyRouter_ID][MyOutput]=MyInput;

    where
    Current_Switcher_Output_Stat[MyRouter_ID][MyOutput]=MyInput; is a two-dimensional integer array.

    If you're choosing to track the inputs instead, then you just move the three stack_var values to whichever array cell yo choose to do.


    I do know that in the module I do not send any returns formatted like:
    I4,O1,2,3,4,5,10 if that makes any sense. In that case I would send individual returns for each output. This is because the BSS does not send it that way too. it sends each output stat change individually.

    The way I handle feedback is event driven. So, when a touch panel comes online, I update all the feedback based upon current states. Also, if a current state changes, that generates an event to update the feedback for the thing(s) that changed. So I might have a function called fn_Upadte_Switcher_State_fb(switc_id) and that function will run around all the UIs and update the button feedack and/or text windows to reflect that changes. That same function would be called when the TP comes online or if not then before the user access the page(s) that show switcher feedback.

    But, however you manage feedback, I'd suggest populating the tracking variable(s) with the data and then updating fb.

    Does that make sense?
    E




  • JULLYJULLY Junior Member Posts: 4
    Thank you so much, it makes perfect sense and was a great idea. Cheers...:) Will try that out
Sign In or Register to comment.