Hello, knxSubnet configures how to access the KNX network, e.g., via a KNX USB stick. If you don't have a knx network or you want to test stuff, it allows you to specify emulate or virtual. Emulate is only for group communication (KNX datapoints). All the datapoint values you write to it can be read back. There are no devices. Virtual sets up a virtual network link to which you can attach software devices (calimero-device repo). That's what the testnetwork does with its two devices. A simple pushbutton...
Hi Georges, use the 2ByteUnsigned translator with narrowing casting and mask, i.e., v = (short) getValueUnsigned(), and setValue(shortValue & 0xffff) programming for device configuration: what you could do is switch the knx links: if you activate programming mode, use the device routing link for ets only (no knx interface required), switch back to the tunneling link for knx communication restart: that's what I meant :) I saw a note in your code that restart is done after programming (yes), but it...
Hi Georges, I did start to browse your implementation, there has been a lot of progress! :) I noticed that for the Short.class in the group object config, you pick a 4 byte signed translator. This means that you treat them like an int and the written knx value is basically a 4 byte? knx strings are 14 bytes max., if you want to transmit longer stuff and special characters you can also use the utf8 translator. In the sample device, programming mode is now always activated. Do you plan to eventually...
Good it works now as you want! If you find other weird behavior or places that could use improvement let me know! You probably will need a little hack if you want direct access to the device memory, because that is basically just an internal byte array.
Happy new year! What you see happening is caused by the fact that the device does not immediately synchronize its datapoints after every memory.write. If you look into KnxDeviceServiceLogic::readMemory you have this block: if (startAddress >= addrGroupAddrTable && startAddress < addrGroupAddrTable + groupAddrTableSize) { blah blah } If you comment out that block it will work fine. That code is there essentially for the opposite reason you have: someone did not (or doesn't want to) program the device,...
Good news: the attached .knxprod helped, because I got the same error as you did (plus another one later down the road), which I did not see with other devices. The download did finish successfully once I fixed those. It was not related to tunneling, but to a field size and a read-only property. Core & device repo got updated.
I just retried the MDT device I used for testing: BE-GTT4x.01 Glass Push Button 4-fold Plus, Temp, which did finish downloading successfully. Can you maybe share the .knxprod file which contains your device? I didn't find it in your repo.
Hi Georges, the routing stuff was not specifically meant for your case (sorry), I was trying to setup a device that is easily discoverable by everyone via ETS. I know you have to use tunneling. Regarding interface objects xml file (name is arbitrary to the example): That file is never available when you first want to program a device, but only if you KnxDevice::close() it (in the example, an interrupt or a character to System.in will do). Even if you don't program the ProgrammableDevice, if you shutdown...