Home AMX User Forum AMX On-Demand Classes & Certifications

AMX Programmer (Cafe Duet) as an online course

To the Harman trainers hanging around here: Any change that the instructor led course 'Welcome to AMX Programmer (Cafe Duet)' will become available as an online course? don't really want to take the class, but would like to have a look to see what it will bring me and work through it when I have a change.


  • Richard, the Harman Pro training program underwent a radical transformation recently as part of a broader Pro Division restructure plane. An online version of Duet was on the road map, but I believe that initiative has been cancelled. Officially, Cafe Duet has been discontinued and no updates are planned. However, it is the only tool available to developers who need to leverage functions only available in Java... If you have specific questions, members here can assist, but there will not likely be any content coming out of the training department in support of Duet in the foreseeable future.

  • richardhermanrichardherman Posts: 348
    edited August 2020

    Oh, well. Thanks for the answer. I know that Cafe Duet has been discontinued , but wanted to see if I could improve my device drivers with Java.

    If no updates for Duet are planned, I hope that updates to NetLinx ARE in the near future. If not, then what?

  • viningvining Posts: 4,368

    @richardherman said:
    If not, then what?

    I think everyone would like to know this answer!

  • John NagyJohn Nagy Posts: 1,691

    Yup. Considering that AMX was hinting that their future would be all Java.

  • John, the future is looking like JavaScript.

  • @HARMAN_Chris I know you aren't gonna tell us anything, but I still gotta ask ;) : When is AMX gonna announce some real future plans, something I can take to management? As things are now I am continously having to defend my choice to stay with AMX and I'm slowly loosing the fight...

  • viningvining Posts: 4,368

    RTI drivers are written in JS but I told myself I don’t want to learn it and spend a few years to get proficient. If AMX was heading down that path then it might be worth while but I fear I’ll be retired before AMX comes out publicly to let their dealers a know where their futures are heading. I’m actually surprised there are people still here at all now. The last 5 years have been sad and pathetic.

  • @richardherman I think you will find that SVSi by AMX by Harman by Samsung is far more open about roadmap and projects that are in the works than legacy AMX ever was. The reality of release schedules is never what fans of a product line would want -- we want it today, but when you are building things, everything takes more time than anyone would want. Realistically, I think Netlinx and Duet will remain viable in new projects for at least 4 more years as we see the roll out of a next gen platform and have an overlap period while a full product portfolio is rolled out to support the platform.

    As for your team hearing the message and seeing the roadmap, that request would start with your rep or regional sales manager.

  • @HARMAN_Chris wayyy behind on this thread. But are you saying that Netlinx will effectively disappear and SVSI/AMX will effectively be Javascript based?how long before next gen platforms are seen - not looking for exact timescales but are we talking 2021 or are we talking a couple of years?

    Appreciate that you can't be too specific, but an idea would be great

  • There will be overlap, but modern functions will require modern language support. A nextgen device would not necessarily be Native Netlinx, however, with a module that speaks next-gen, you should be able to leverage new devices in a system design. Much to be determined as engineering continues cranking on the final product. I am guessing that we would see it in 2022, but there has been significant effort behind ensuring Netlinx skills are not abandoned... after all, remember what your trained user base has in the toolbox on launch day.

  • Duncan EllisDuncan Ellis Posts: 126
    edited January 2021

    @HARMAN_Chris I guess what I'm asking is if it will still be based around centralised control? I'm interested for a couple of reasons.

    Firstly, We have to do cr**tron because we would lose work otherwise - AMX has been my preferred base for the last 20 years, it always just made sense because it was well structured and reliable. I was going to take on learning their S# - it doesn't really interest me, but was doing it out of necessity.
    If the next offering for AMX/Harman is going to be Javascript/HTML5 based - but still allow centralised control, this could quite easily blow this out of the water, and I'd be a really happy developer/installer.
    Secondly, I believe that centralised systems are a necessity to allow a stable, closed loop control system. To allow everything to have access to all the data in the control system is an important part of what we do. Turning interfaces in to control points that have no knowledge of what is in the system is a bit of a mare.

    I think the opportunity to use a new language with more flexibility/libraries/links to the Web is a great one.

    Looking forward to seeing it. Thanks for the info

  • Duncan, you can expect to see a platform that supports centralized and distributed control topologies. The reality is that cloud based control is not for all of our users. Some sites are air gapped, but could leverage on-prem server based solutions. Some sites will require traditional hardware controllers in each space.

    There is control logic that needs to reside somewhere, and then there are I/O ports that need to reside somewhere. I would anticipate giving system designers a choice rather than hard limits on how systems can be designed.

  • Hi Chris

    Thats brilliant. Thanks very much, Sounds really promising!!

  • It does sound promising. I would love it if there was a possibility to test this, even if it's just in 'alpha' stage. Some kind of 'AMX insider' thing. It would really help to show people that AMX is not giving up just yet and is worth investing time and money in.

  • what about with the older netlinx language based "soldiers" of amx ?

  • I Think @HARMAN_Chris explained that there has been max effort to make sure Netlinx skills haven't gone to waste, there is clearly a transition plan.

    I think it sounds like a major step forward

  • George, product management understands the current programmer community has a deep skillset in the netlinx language, and for some -- it is the only coding language a programer may currently know. We also understand the power of modern languages.

    It is too early to speculate or share info on a product in development. If you want me to simply guess, I would say it is highly probably that a new product will work in a Netlinx world, but have limited features within a Netlinx system when compared to how it may perform within a full next gen solution.

  • ok but if AMX has already decided to change the way of coding, shouldn't they be warning/preparing the programmer community about that ?
    Of course AMX like to "jump" to modern language/es ( in marketing terms ) but for some NetLinx programmers it will be a "sudden death" announcement as they may not be able to start learning a new language from scratch (Python/Java/C# or whatever), especially for those who have invested on netlinx for the last years and they are old now.
    New languages need new product and vice versa and I'm not sure if NetLinx world will be working with that any more even if AMX tries to limit the gap.

  • FerrographFerrograph Posts: 7
    edited October 2021

    You dont actually need Cafe Duet to make Java Modules, just a bit of knowledge about how they a structured and a few files needed by the master to spin them up at boot. Its not the simplest arrangement but once you know it you can just copy from module to module and change names in the meta-info files and .jardesc. Ive been making Duet modules for a while this way just with Eclipse.

    Also you dont have to use SNAPI you can use you own formatted send-commands by setting 'IGNORE-UNKNOWN-NETLINX-COMMAND=true' in the axs module stub file. I was extremely irritated that someone at AMX chose the command format that used separator tokens that needed additional escaping in the resulting command string and were nothing like how folk had been writing modules for years... Im not going there. So instead you can still use the traditional command strings that most used on their own modules keeping compatibility with existing code and NetLinx modules.

    Comparison: Module Data Exchange vs Duet SNAPI
    MDX: DECODE-SOURCE=8926637|"The Man", Vol1|http://media.myserver.net
    SNAPI: DECODESOURCE-8926637,"""The Man"", Vol1",http://media.myserver.net

    The only char that needed escaping in MDX was pipe... As you can tell Im still salty about this.

    An online course would be cool though. I cant imagine AMX moving away from Java. Having 1.8SE available on recent masters has really set the sky as the limit.

    Personally I would like to see the ability to write the whole thing in Java. Netlinx is great but its lack of proper objects and libraries makes it very difficult to do complex multi-instance systems required these days.

  • jjamesjjames Posts: 2,906

    @Ferrograph said:
    Personally I would like to see the ability to write the whole thing in Java.

    Nothing should be stopping you from doing this.

    I've seen a few systems with only Duet modules defined.

  • @jjames said:

    @Ferrograph said:
    Personally I would like to see the ability to write the whole thing in Java.

    Nothing should be stopping you from doing this.

    I've seen a few systems with only Duet modules defined.

    Yup. Inter-module communication is a piece of cake through the OSGi BundleContext (and SNAPI).

    Touch panels just need a new NetLinxDevice() instantiated with a DPS and the appropriate listeners enabled (and initialized).

        private NetLinxDevice dvTp  = new NetLinxDevice(new DPS(10001, 1, 0), false); // true for virtual device
        private DevChan[ ] buttons = new DevChan[3];  // Play, Stop, Pause
        private DiscDevice theDvd;
        protected boolean doNetLinxDeviceInitialization() {
            ServiceReference sr = bctxt.getServiceReference(DiscDevice.class.getName());
            theDvd = (DiscDevice) bctxt.getService(sr);
            if(theDvd != null) {
            return false;
        public void handleButtonEvent(Event arg0) {
            if(theDvd != null) {
                if(arg0.getDPS().equals(dvTp.getDPS())) {
                    if(arg0.type == Event.E_PUSH) {
                        switch(arg0.getChannelID()) {
                            case 1: {
                            case 2: {
                            case 3: {
        public void processDiscTransportEvent(DiscTransportComponentEvent evt) {
            if(evt.getObjValue() instanceof DiscTransport) {
                if(evt.getSource().equals(theDvd)) {
                    for(int i = 0; i < buttons.length; i++) {
                    if(evt.getObjValue().equals(DiscTransport.PLAY)) {
                    else if(evt.getObjValue().equals(DiscTransport.STOP)) {
                    else if(evt.getObjValue().equals(DiscTransport.PAUSE)) {
Sign In or Register to comment.