Issues with ClearOne XAP Module
PhreaK
Posts: 966
There appears to be a small bug with the ClearOne XAP module (v1.0.3) found on the AMX site. It doesn't properly interpret the PROPERTY-NetworkConfig command. However, if you specify device types as integers (rather than converting them to their ascii equivalents it will properly read string returned from a network of XAP's.
Additionally it does not properly form the headers of command it sends to the physical device. However, it is possible to create a virtual device to act as a proxy and re-write outgoing strings.
Additionally it does not properly form the headers of command it sends to the physical device. However, it is possible to create a virtual device to act as a proxy and re-write outgoing strings.
PROGRAM_NAME='XAP Example' DEFINE_DEVICE dvDSP = 5001:1:0 // Clearone XAP network vdvDSP = 41001:1:0 // Duet device for XAP module comms vdvXAPProxy = 41002:1:0 // Proxy device for command translation. A Duet // has been used as they don't echo back // string, thus preventing an infinite loop. DEFINE_CONSTANT INTEGER DSP_TYPE_XAP800 = 5 // Device types INTEGER DSP_TYPE_XAPTH2 = 6 INTEGER DSP_TYPE_XAP400 = 7 DEFINE_COMBINE (vdvXAPProxy, dvDSP) // These devices must be combined to // allow returned strings to be processed by // the control module. (** * Initializes DSP communication parameters. * * The integer to ascii conversion has been intentionally ommitted to combat * the bug in the module. * *) DEFINE_FUNCTION fnDSPInit () { SEND_COMMAND vdvDSP[1], "'PROPERTY-NetworkConfig,', DSP_TYPE_XAP400,':0:', DSP_TYPE_XAP800,':0'" SEND_COMMAND vdvDSP[1], "'REINIT'" } (** * Translates an outgoing string from the control module into the correct * format (see header comment block). * * @param sString the incorrectly formed string to convert * @return a correctly formed string that the device will understand * *) DEFINE_FUNCTION CHAR[128] fnDSPTranslateOutgoingString (CHAR sString[]) { STACK_VAR INTEGER nDeviceType nDeviceType = TYPE_CAST(MID_STRING(sString, 2, 1)) IF (nDeviceType == DSP_TYPE_XAP400 || nDeviceType == DSP_TYPE_XAP800 || nDeviceType == DSP_TYPE_XAPTH2) { RETURN "'#', ITOA(nDeviceType), RIGHT_STRING(sString, LENGTH_STRING(sString) - 2)" } ELSE { RETURN sString } } DEFINE_START DEFINE_MODULE 'ClearOneXAP_Comm_dr1_0_0' mdlDSP(vdvDSP, vdvXAPProxy) DEFINE_EVENT DATA_EVENT[vdvDSP] { ONLINE: { fnDSPInit() } } DATA_EVENT[vdvXAPProxy] { STRING: { SEND_STRING dvDSP, fnDSPTranslateOutgoingString(DATA.TEXT) } }
0