//======================================================================= // Copyright (c) 2016, Mark Charlebois. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following // disclaimer in the documentation and/or other materials provided // with the distribution. // * Neither the name of The Linux Foundation nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS // BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN // IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. //========================================================================= #include "AEEStdDef.idl" interface px4muorb{ /** * interface method to start the uorb service and initialize the muorb */ AEEResult orb_initialize(); /** * Interface to set an offset to hrt_absolute_time on the DSP. * * @param time_diff_us: time difference of the DSP clock to Linux clock. * A positive number means the Linux clock is ahead of the DSP one. */ AEEResult set_absolute_time_offset( in long time_diff_us ); /** * Interface to request hrt_absolute_time on the DSP. * @param time_us: pointer to time in us */ AEEResult get_absolute_time(rout unsigned long long time_us); /** * Interface to update param for krait. * * @param param: param index. * @param value: param value. */ AEEResult param_update_to_shmem( in unsigned long param, in sequence value); /** * Interface to update index for krait. * @param data: param index array. */ AEEResult param_update_index_from_shmem( rout sequence data); /** * Interface to get param value for krait. * * @param param: param index. * @param value: param value. */ AEEResult param_update_value_from_shmem( in unsigned long param, rout sequence value); /** * Interface called from krait to inform of a published topic. * @param topic_name: name of the topic being advertised */ AEEResult topic_advertised(in string topic_name); /** * Interface called from krait to inform of a published topic. * @param topic_name: name of the topic being advertised */ AEEResult topic_unadvertised(in string topic_name); /** * Interface to add a subscriber to the identified topic * @param topic_name * @return status * 0 == success * all others is a failure. */ AEEResult add_subscriber( in string topic_name ); /** * Interface to remove a subscriber for the identified topic. * @param topic_name * @return status * 0 == success * all others is a failure. */ AEEResult remove_subscriber( in string topic_name ); /** * Interface called from krait for topic data. * @param topic_name * @param data * a sequence of bytes for the passed data stream. * as per the HExagon Documention, the max size of this stream is 255 bytes. * @return status * 0 == success * all others is a failure. */ AEEResult send_topic_data( in string topic_name, in sequence data ); /** * Inteface to check if there are subscribers on the remote adsp client * This inteface is required as the krait app can be restarted without adsp * being re-started. In this scenario the krait app does not know if there * is subscriber on the remote end(ie adsp). * @param topic_name * The name of the topic for which the subscription needs to be checked. * @param rout int status * The status of the subscription, 0=no-subscribers, 1 = more than one subscriber. * @return status * 0 == success * all others is a failure. */ AEEResult is_subscriber_present( in string topic_name, rout long status ); /** * Interface to receive data from adsp. Since there is only one interface, the different message * types are identified by the msg_type field. * @param msg_type * The possible values are: * 1 ==> add_subscriber * 2 ==> remove_subscriber * 3 ==> recieve_topic_data * 4 ==> advertised_topic * @note: for message types, 1 & 2, the data pointer returned is null with length of 0. * @param topic_name * The topic being returned. * @param data * the data stream * @param bytes_returned * The number of bytes returned in the byte buffer. * @return status * 0 == success * all others is a failure. */ AEEResult receive_msg( rout long msg_type, rout string topic_name, rout sequence data, rout long bytes_returned ); /** * Since the receive_msg is a blocking call, the client will not be able to peform a clean shutdown. Calling this * function will unblock the receive msg an return an error code. * Ideally this should be implemented as a timeout for the #receive_msg call. * @param none * @return status * 0 = success * all others is a failure. **/ AEEResult unblock_recieve_msg(); /** * This interface will perform a bulk read from the adsp and return the data buffer. * The structure of the messages is as follows * +----------------+-----------+---------------+----------+----------------+ * | Topic Name Len | datal_len |TopicName(nullterminated) | data bytes | * +----------------+-----------+---------------+----------+----------------+ * |<-- 2 bytes -->|<-2bytes-> |<-- topicnamelen bytes -->|<-datalenbytes->| * +----------------+---------------------------+----------+----------------+ * @param data * The output buffer where the data needs to be copied * @param bytes_returned * The number of bytes the buffer is filled up by. * @param topic_count * The numbe of topics filled in the buffer. * @return status * 0 = success * all others is a failure. **/ AEEResult receive_bulk_data( rout sequence data, rout long bytes_returned, rout long topic_count ); };