Snapdragon® Telematics Application Framework (TelAF) Interface Specification
le_messaging.h
Go to the documentation of this file.
1 
818 #ifndef LE_MESSAGING_H_INCLUDE_GUARD
819 #define LE_MESSAGING_H_INCLUDE_GUARD
820 
821 #include "le_semaphore.h"
822 
823 // =======================================
824 // DATA TYPES
825 // =======================================
826 
827 //--------------------------------------------------------------------------------------------------
831 //--------------------------------------------------------------------------------------------------
832 typedef struct le_msg_Protocol* le_msg_ProtocolRef_t;
833 
834 //--------------------------------------------------------------------------------------------------
838 //--------------------------------------------------------------------------------------------------
839 typedef struct le_msg_Interface* le_msg_InterfaceRef_t;
840 
841 //--------------------------------------------------------------------------------------------------
845 //--------------------------------------------------------------------------------------------------
846 typedef struct le_msg_Service* le_msg_ServiceRef_t;
847 
848 //--------------------------------------------------------------------------------------------------
852 //--------------------------------------------------------------------------------------------------
853 typedef struct le_msg_ClientInterface* le_msg_ClientInterfaceRef_t;
854 
855 //--------------------------------------------------------------------------------------------------
859 //--------------------------------------------------------------------------------------------------
860 typedef struct le_msg_Session* le_msg_SessionRef_t;
861 
862 //--------------------------------------------------------------------------------------------------
866 //--------------------------------------------------------------------------------------------------
867 typedef struct le_msg_Message* le_msg_MessageRef_t;
868 
869 //--------------------------------------------------------------------------------------------------
874 //--------------------------------------------------------------------------------------------------
875 typedef struct le_msg_SessionEventHandler* le_msg_SessionEventHandlerRef_t;
876 
877 //--------------------------------------------------------------------------------------------------
888 //--------------------------------------------------------------------------------------------------
889 typedef void (* le_msg_SessionEventHandler_t)
890 (
891  le_msg_SessionRef_t sessionRef,
892  void* contextPtr
893 );
894 
895 
896 //--------------------------------------------------------------------------------------------------
907 //--------------------------------------------------------------------------------------------------
908 typedef void (* le_msg_ReceiveHandler_t)
909 (
910  le_msg_MessageRef_t msgRef,
911  void* contextPtr
912 );
913 
914 
915 //--------------------------------------------------------------------------------------------------
927 //--------------------------------------------------------------------------------------------------
928 typedef void (* le_msg_ResponseCallback_t)
929 (
930  le_msg_MessageRef_t msgRef,
931  void* contextPtr
932 );
933 
934 
935 
936 
937 //--------------------------------------------------------------------------------------------------
941 //--------------------------------------------------------------------------------------------------
943 {
944  enum
945  {
948  } type;
949 };
950 
951 
952 //--------------------------------------------------------------------------------------------------
956 //--------------------------------------------------------------------------------------------------
958 {
960 };
961 
962 
963 //--------------------------------------------------------------------------------------------------
967 //--------------------------------------------------------------------------------------------------
968 typedef struct
969 {
972  void* contextPtr;
974 
975 
976 //--------------------------------------------------------------------------------------------------
985 //--------------------------------------------------------------------------------------------------
986 typedef struct
987 {
988  struct le_msg_Service service;
989 #if LE_CONFIG_CUSTOM_OS && defined(LE_MSG_SERVICE_READY_FLAG)
990  LE_MSG_SERVICE_READY_FLAG;
991 #else
993 #endif
997 
998 
999 //--------------------------------------------------------------------------------------------------
1003 //--------------------------------------------------------------------------------------------------
1004 typedef struct le_msg_LocalMessage
1005 {
1006  struct le_msg_Message message;
1007  int fd;
1011  void* contextPtr;
1012  uint8_t data[] __attribute__((aligned));
1015 
1016 
1017 //--------------------------------------------------------------------------------------------------
1021 //--------------------------------------------------------------------------------------------------
1022 #define LE_MSG_LOCAL_HEADER_SIZE sizeof(le_msg_LocalMessage_t)
1023 
1024 
1025 // =======================================
1026 // PROTOCOL FUNCTIONS
1027 // =======================================
1028 
1029 //--------------------------------------------------------------------------------------------------
1035 //--------------------------------------------------------------------------------------------------
1037 (
1038  const char* protocolId,
1039  size_t largestMsgSize
1040 );
1041 
1042 
1043 //--------------------------------------------------------------------------------------------------
1049 //--------------------------------------------------------------------------------------------------
1051 (
1052  le_msg_ProtocolRef_t protocolRef
1053 );
1054 
1055 
1056 //--------------------------------------------------------------------------------------------------
1062 //--------------------------------------------------------------------------------------------------
1064 (
1065  le_msg_ProtocolRef_t protocolRef
1066 );
1067 
1068 
1069 // =======================================
1070 // SESSION FUNCTIONS
1071 // =======================================
1072 
1073 //--------------------------------------------------------------------------------------------------
1084 //--------------------------------------------------------------------------------------------------
1086 (
1087  le_msg_ProtocolRef_t protocolRef,
1088  const char* interfaceName
1089 );
1090 
1091 
1092 //--------------------------------------------------------------------------------------------------
1099 //--------------------------------------------------------------------------------------------------
1101 (
1102  le_msg_LocalService_t* servicePtr
1103 );
1104 
1105 
1106 //--------------------------------------------------------------------------------------------------
1111 //--------------------------------------------------------------------------------------------------
1113 (
1115 
1116  void* contextPtr
1117 );
1119 
1120 //--------------------------------------------------------------------------------------------------
1128 //--------------------------------------------------------------------------------------------------
1130 (
1132 );
1133 
1134 
1135 //--------------------------------------------------------------------------------------------------
1144 //--------------------------------------------------------------------------------------------------
1146 (
1148 );
1149 
1150 
1151 //--------------------------------------------------------------------------------------------------
1162 //--------------------------------------------------------------------------------------------------
1164 (
1167  void* contextPtr
1168 );
1169 
1170 
1171 //--------------------------------------------------------------------------------------------------
1186 //--------------------------------------------------------------------------------------------------
1188 (
1191  void* contextPtr
1192 );
1193 
1194 
1195 //--------------------------------------------------------------------------------------------------
1200 //--------------------------------------------------------------------------------------------------
1202 (
1205  void** contextPtr
1206 );
1208 
1209 
1210 //--------------------------------------------------------------------------------------------------
1223 //--------------------------------------------------------------------------------------------------
1224 void le_msg_OpenSession
1225 (
1227  le_msg_SessionEventHandler_t callbackFunc,
1228  void* contextPtr
1230 );
1231 
1232 
1233 //--------------------------------------------------------------------------------------------------
1245 //--------------------------------------------------------------------------------------------------
1247 (
1249 );
1250 
1251 
1252 //--------------------------------------------------------------------------------------------------
1277 //--------------------------------------------------------------------------------------------------
1279 (
1281 );
1282 
1283 
1284 //--------------------------------------------------------------------------------------------------
1288 //--------------------------------------------------------------------------------------------------
1290 (
1292 );
1293 
1294 
1295 //--------------------------------------------------------------------------------------------------
1299 //--------------------------------------------------------------------------------------------------
1301 (
1303 );
1304 
1305 
1306 //--------------------------------------------------------------------------------------------------
1312 //--------------------------------------------------------------------------------------------------
1314 (
1316 );
1317 
1318 
1319 //--------------------------------------------------------------------------------------------------
1325 //--------------------------------------------------------------------------------------------------
1327 (
1329 );
1330 
1331 //--------------------------------------------------------------------------------------------------
1340 //--------------------------------------------------------------------------------------------------
1342 (
1344  uid_t* userIdPtr
1345 );
1346 
1347 //--------------------------------------------------------------------------------------------------
1356 //--------------------------------------------------------------------------------------------------
1358 (
1360  pid_t* processIdPtr
1361 );
1362 
1363 //--------------------------------------------------------------------------------------------------
1372 //--------------------------------------------------------------------------------------------------
1374 (
1376  uid_t* userIdPtr,
1377  pid_t* processIdPtr
1378 );
1379 
1380 
1381 
1382 // =======================================
1383 // MESSAGE FUNCTIONS
1384 // =======================================
1385 
1386 //--------------------------------------------------------------------------------------------------
1399 //--------------------------------------------------------------------------------------------------
1400 le_msg_MessageRef_t le_msg_CreateMsg
1401 (
1403 );
1404 
1405 
1406 //--------------------------------------------------------------------------------------------------
1410 //--------------------------------------------------------------------------------------------------
1411 void le_msg_AddRef
1412 (
1413  le_msg_MessageRef_t msgRef
1414 );
1415 
1416 
1417 //--------------------------------------------------------------------------------------------------
1422 //--------------------------------------------------------------------------------------------------
1423 void le_msg_ReleaseMsg
1424 (
1425  le_msg_MessageRef_t msgRef
1426 );
1427 
1428 
1429 //--------------------------------------------------------------------------------------------------
1440 //--------------------------------------------------------------------------------------------------
1442 (
1443  le_msg_MessageRef_t msgRef
1444 );
1445 
1446 
1447 //--------------------------------------------------------------------------------------------------
1455 //--------------------------------------------------------------------------------------------------
1457 (
1458  le_msg_MessageRef_t msgRef
1459 );
1460 
1461 
1462 //--------------------------------------------------------------------------------------------------
1468 //--------------------------------------------------------------------------------------------------
1470 (
1471  le_msg_MessageRef_t msgRef
1472 );
1473 
1474 
1475 //--------------------------------------------------------------------------------------------------
1484 //--------------------------------------------------------------------------------------------------
1485 void le_msg_SetFd
1486 (
1487  le_msg_MessageRef_t msgRef,
1488  int fd
1489 );
1490 
1491 
1492 //--------------------------------------------------------------------------------------------------
1499 //--------------------------------------------------------------------------------------------------
1500 int le_msg_GetFd
1501 (
1502  le_msg_MessageRef_t msgRef
1503 );
1504 
1505 
1506 //--------------------------------------------------------------------------------------------------
1510 //--------------------------------------------------------------------------------------------------
1511 void le_msg_Send
1512 (
1513  le_msg_MessageRef_t msgRef
1514 );
1515 
1516 //--------------------------------------------------------------------------------------------------
1522 //--------------------------------------------------------------------------------------------------
1524 (
1525  le_msg_MessageRef_t msgRef
1526 );
1527 
1528 
1529 //--------------------------------------------------------------------------------------------------
1544 //--------------------------------------------------------------------------------------------------
1546 (
1547  le_msg_MessageRef_t msgRef,
1549  void* contextPtr
1550 );
1551 
1552 
1553 //--------------------------------------------------------------------------------------------------
1580 //--------------------------------------------------------------------------------------------------
1581 le_msg_MessageRef_t le_msg_RequestSyncResponse
1582 (
1583  le_msg_MessageRef_t msgRef
1584 );
1585 
1586 
1587 //--------------------------------------------------------------------------------------------------
1599 //--------------------------------------------------------------------------------------------------
1600 void le_msg_Respond
1601 (
1602  le_msg_MessageRef_t msgRef
1603 );
1604 
1605 
1606 // =======================================
1607 // INTERFACE FUNCTIONS
1608 // =======================================
1609 
1610 //--------------------------------------------------------------------------------------------------
1618 //--------------------------------------------------------------------------------------------------
1619 LE_FULL_API le_msg_ServiceRef_t le_msg_CreateService
1620 (
1621  le_msg_ProtocolRef_t protocolRef,
1622  const char* interfaceName
1623 );
1624 
1625 
1626 //--------------------------------------------------------------------------------------------------
1633 //--------------------------------------------------------------------------------------------------
1634 le_msg_ServiceRef_t le_msg_InitLocalService
1635 (
1636  le_msg_LocalService_t* servicePtr,
1637  const char* serviceNameStr,
1638  le_mem_PoolRef_t messagingPoolRef
1639 );
1640 
1641 
1642 //--------------------------------------------------------------------------------------------------
1648 //--------------------------------------------------------------------------------------------------
1650 (
1651  le_msg_ServiceRef_t serviceRef
1652 );
1653 
1654 //--------------------------------------------------------------------------------------------------
1660 //--------------------------------------------------------------------------------------------------
1662 (
1663  le_msg_ServiceRef_t serviceRef,
1665  void* contextPtr
1666 );
1667 
1668 //--------------------------------------------------------------------------------------------------
1675 //--------------------------------------------------------------------------------------------------
1677 (
1678  le_msg_ServiceRef_t serviceRef,
1680  void* contextPtr
1681 );
1682 
1683 //--------------------------------------------------------------------------------------------------
1690 //--------------------------------------------------------------------------------------------------
1692 (
1694 );
1696 
1697 //--------------------------------------------------------------------------------------------------
1704 //--------------------------------------------------------------------------------------------------
1706 (
1707  le_msg_ServiceRef_t serviceRef,
1709  void* contextPtr
1710 );
1711 
1712 
1713 //--------------------------------------------------------------------------------------------------
1720 //--------------------------------------------------------------------------------------------------
1722 (
1723  le_msg_ServiceRef_t serviceRef,
1724 
1725  void* contextPtr
1726 );
1728 
1729 
1730 //--------------------------------------------------------------------------------------------------
1740 //--------------------------------------------------------------------------------------------------
1742 (
1743  le_msg_ServiceRef_t serviceRef
1744 );
1745 
1746 
1747 //--------------------------------------------------------------------------------------------------
1753 //--------------------------------------------------------------------------------------------------
1755 (
1756  le_msg_ServiceRef_t serviceRef
1757 );
1758 
1759 
1760 //--------------------------------------------------------------------------------------------------
1767 //--------------------------------------------------------------------------------------------------
1769 (
1770  le_msg_ServiceRef_t serviceRef
1771 );
1772 
1773 
1774 //--------------------------------------------------------------------------------------------------
1782 //--------------------------------------------------------------------------------------------------
1784 (
1785  le_msg_InterfaceRef_t interfaceRef
1786 );
1787 
1788 
1789 //--------------------------------------------------------------------------------------------------
1795 //--------------------------------------------------------------------------------------------------
1797 (
1798  le_msg_InterfaceRef_t interfaceRef
1799 );
1800 
1801 
1802 //--------------------------------------------------------------------------------------------------
1810 //--------------------------------------------------------------------------------------------------
1811 le_msg_MessageRef_t le_msg_GetServiceRxMsg
1812 (
1813  void
1814 );
1815 
1816 
1817 //--------------------------------------------------------------------------------------------------
1824 //--------------------------------------------------------------------------------------------------
1825 #define LE_KILL_CLIENT(formatString, ...) \
1826 { \
1827  le_msg_MessageRef_t msgRef = le_msg_GetServiceRxMsg(); \
1828  LE_FATAL_IF(msgRef == NULL, formatString, ##__VA_ARGS__); \
1829  LE_EMERG(formatString, ##__VA_ARGS__); \
1830  le_msg_CloseSession(le_msg_GetSession(msgRef)); \
1831 }
1832 
1833 #endif // LEGATO_MESSAGING_INCLUDE_GUARD
le_result_t le_msg_GetClientUserId(le_msg_SessionRef_t sessionRef, uid_t *userIdPtr)
le_sem_Ref_t responseReady
Semaphore which will be set when response is ready.
Definition: le_messaging.h:1008
void le_msg_SetFd(le_msg_MessageRef_t msgRef, int fd)
struct le_thread * le_thread_Ref_t
Definition: le_thread.h:180
void * contextPtr
Opaque value to be passed to handler function.
Definition: le_messaging.h:1011
void le_msg_OpenSession(le_msg_SessionRef_t sessionRef, le_msg_SessionEventHandler_t callbackFunc, void *contextPtr)
void le_msg_Send(le_msg_MessageRef_t msgRef)
le_msg_MessageRef_t le_msg_GetServiceRxMsg(void)
struct le_msg_SessionEventHandler * le_msg_SessionEventHandlerRef_t
Definition: le_messaging.h:875
void(* le_msg_ResponseCallback_t)(le_msg_MessageRef_t msgRef, void *contextPtr)
Definition: le_messaging.h:929
LE_FULL_API le_msg_ServiceRef_t le_msg_CreateService(le_msg_ProtocolRef_t protocolRef, const char *interfaceName)
LE_FULL_API le_msg_ProtocolRef_t le_msg_GetProtocolRef(const char *protocolId, size_t largestMsgSize)
Definition: le_messaging.h:957
le_msg_SessionRef_t le_msg_CreateLocalSession(le_msg_LocalService_t *servicePtr)
LE_FULL_API void le_msg_DeleteService(le_msg_ServiceRef_t serviceRef)
bool le_msg_NeedsResponse(le_msg_MessageRef_t msgRef)
void le_msg_GetSessionCloseHandler(le_msg_SessionRef_t sessionRef, le_msg_SessionEventHandler_t *handlerFunc, void **contextPtr)
LE_FULL_API const char * le_msg_GetProtocolIdStr(le_msg_ProtocolRef_t protocolRef)
void le_msg_ReleaseMsg(le_msg_MessageRef_t msgRef)
LE_FULL_API le_msg_SessionEventHandlerRef_t le_msg_AddServiceOpenHandler(le_msg_ServiceRef_t serviceRef, le_msg_SessionEventHandler_t handlerFunc, void *contextPtr)
struct le_msg_Interface * le_msg_InterfaceRef_t
Definition: le_messaging.h:839
le_result_t le_msg_TryOpenSessionSync(le_msg_SessionRef_t sessionRef)
void * le_msg_GetPayloadPtr(le_msg_MessageRef_t msgRef)
size_t le_msg_GetMaxPayloadSize(le_msg_MessageRef_t msgRef)
void(* le_msg_SessionEventHandler_t)(le_msg_SessionRef_t sessionRef, void *contextPtr)
Definition: le_messaging.h:890
LE_FULL_API size_t le_msg_GetProtocolMaxMsgSize(le_msg_ProtocolRef_t protocolRef)
void le_msg_CloseSessionLocked(le_msg_SessionRef_t sessionRef)
LE_FULL_API void * le_msg_GetSessionContextPtr(le_msg_SessionRef_t sessionRef)
Definition: le_messaging.h:986
LE_FULL_API void le_msg_SetServiceContextPtr(le_msg_ServiceRef_t serviceRef, void *contextPtr)
le_msg_ResponseCallback_t completionCallback
Function to be called when transaction done.
Definition: le_messaging.h:1010
Definition: le_messaging.h:942
bool needsResponse
True if message needs a response.
Definition: le_messaging.h:1009
void(* le_msg_ReceiveHandler_t)(le_msg_MessageRef_t msgRef, void *contextPtr)
Definition: le_messaging.h:909
void le_msg_SetServiceRecvHandler(le_msg_ServiceRef_t serviceRef, le_msg_ReceiveHandler_t handlerFunc, void *contextPtr)
void le_msg_SetSessionRecvHandler(le_msg_SessionRef_t sessionRef, le_msg_ReceiveHandler_t handlerFunc, void *contextPtr)
void le_msg_AdvertiseService(le_msg_ServiceRef_t serviceRef)
Definition: le_messaging.h:968
le_msg_SessionEventHandlerRef_t le_msg_AddServiceCloseHandler(le_msg_ServiceRef_t serviceRef, le_msg_SessionEventHandler_t handlerFunc, void *contextPtr)
struct le_msg_ClientInterface * le_msg_ClientInterfaceRef_t
Definition: le_messaging.h:853
enum le_msg_Service::@0 type
LE_FULL_API void le_msg_SetSessionCloseHandler(le_msg_SessionRef_t sessionRef, le_msg_SessionEventHandler_t handlerFunc, void *contextPtr)
__attribute__((weak)) LE_SHARED void *le_comm_Create(const int argc
< [IN] Communication channel.
Definition: le_appCtrl_commonclient.c:191
le_msg_LocalReceiver_t receiver
Server destination.
Definition: le_messaging.h:994
le_msg_SessionRef_t sessionRef
Session for this message.
Definition: le_messaging.h:959
le_comm_CallbackHandlerFunc_t handlerFunc
< [IN] Communication channel handle.
Definition: le_comm.h:66
le_msg_SessionRef_t le_msg_GetSession(le_msg_MessageRef_t msgRef)
Definition: le_messaging.h:1004
le_result_t le_msg_GetClientUserCreds(le_msg_SessionRef_t sessionRef, uid_t *userIdPtr, pid_t *processIdPtr)
le_msg_ReceiveHandler_t handler
Handler function which should be called on thread.
Definition: le_messaging.h:971
struct le_sem_t * le_sem_Ref_t
Definition: le_semaphore.h:68
LE_FULL_API const char * le_msg_GetInterfaceName(le_msg_InterfaceRef_t interfaceRef)
LE_FULL_API le_msg_ProtocolRef_t le_msg_GetInterfaceProtocol(le_msg_InterfaceRef_t interfaceRef)
void le_msg_DeleteSession(le_msg_SessionRef_t sessionRef)
LE_FULL_API void le_msg_SetSessionContextPtr(le_msg_SessionRef_t sessionRef, void *contextPtr)
struct le_msg_Protocol * le_msg_ProtocolRef_t
Definition: le_messaging.h:832
le_msg_MessageRef_t le_msg_RequestSyncResponse(le_msg_MessageRef_t msgRef)
struct le_mem_Pool * le_mem_PoolRef_t
Definition: le_mem.h:542
le_result_t le_msg_GetClientProcessId(le_msg_SessionRef_t sessionRef, pid_t *processIdPtr)
le_thread_Ref_t thread
Thread on which receive should be processes.
Definition: le_messaging.h:970
void * contextPtr
Context pointer to pass to the handler.
Definition: le_messaging.h:972
le_mem_PoolRef_t messagePool
Pool for messages on this service.
Definition: le_messaging.h:995
LE_FULL_API void * le_msg_GetServiceContextPtr(le_msg_ServiceRef_t serviceRef)
Definition: le_messaging.h:946
le_result_t
Definition: le_basics.h:45
LE_FULL_API void le_msg_HideService(le_msg_ServiceRef_t serviceRef)
void le_msg_OpenSessionSync(le_msg_SessionRef_t sessionRef)
void le_msg_Respond(le_msg_MessageRef_t msgRef)
LE_FULL_API void le_msg_RemoveServiceHandler(le_msg_SessionEventHandlerRef_t handlerRef)
LE_FULL_API le_msg_SessionRef_t le_msg_CreateSession(le_msg_ProtocolRef_t protocolRef, const char *interfaceName)
LE_FULL_API le_msg_ProtocolRef_t le_msg_GetSessionProtocol(le_msg_SessionRef_t sessionRef)
struct le_msg_Session * le_msg_SessionRef_t
Definition: le_messaging.h:860
Definition: le_messaging.h:947
#define LE_FULL_API
Definition: le_apiFeatures.h:42
void le_msg_CloseSession(le_msg_SessionRef_t sessionRef)
le_msg_ServiceRef_t le_msg_InitLocalService(le_msg_LocalService_t *servicePtr, const char *serviceNameStr, le_mem_PoolRef_t messagingPoolRef)
le_msg_MessageRef_t le_msg_CreateMsg(le_msg_SessionRef_t sessionRef)
bool serviceReady
Indicate if service is ready.
Definition: le_messaging.h:992
void le_msg_RequestResponse(le_msg_MessageRef_t msgRef, le_msg_ResponseCallback_t handlerFunc, void *contextPtr)
LE_FULL_API le_msg_InterfaceRef_t le_msg_GetSessionInterface(le_msg_SessionRef_t sessionRef)
int fd
File descriptor sent with message (via Get/SetFd)
Definition: le_messaging.h:1007
int le_msg_GetFd(le_msg_MessageRef_t msgRef)
void le_msg_AddRef(le_msg_MessageRef_t msgRef)