2026-04-12 17:47:54 +08:00

138 lines
4.1 KiB
C

/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef MSG_BROKER_H
#define MSG_BROKER_H
#include <stdint.h>
#include <pthread.h>
#ifdef __cplusplus
extern "C" {
#endif
#define SR_MODULE_NAME "daemon_sr"
#define GYRO_MODULE_NAME "daemon_gyro"
#define SR_CMD_FIFO "/tmp/sr/c0/command.fifo"
#define REGISTER_HOST "process"
#define SUSPEND_CMD "suspend"
#define SUSPEND_ACK "suspend_ack"
#define RESUME_CMD "resume"
#define REGISTER_CMD "register"
#define UNREGISTER_CMD "unregister"
typedef enum {
STOP,
START
}STATUS;
typedef struct register_node {
pid_t process_pid;
char cmdfifo[50];
STATUS status;
}register_node;
/**
* A Structure for message transmission between processes
*/
typedef struct
{
unsigned int dwHostLen; //! Length of pszHost
const char* pszHost; //! The pointer to host data
unsigned int dwCmdLen; //! Length of pszCmd
const char* pszCmd; //! The pointer to command data
unsigned int dwDataSize; //! Data size of pbyData
unsigned char* pbyData; //! The pointer to bytes of data you want to transmit, max size is 256 bytes;
unsigned int bHasResponse; //! Sender need feadback or not, 0: no, 1: yes
} MsgContext;
/**
* A function pointer for message callback function which was called in MsgBroker_Run
*/
typedef void (*MsgCallBack)(MsgContext*, void* user_data);
/**
* @brief Function for message reciver to get message
*
* @param[in] pszPath The path to command fifo.
* @param[in] pfnFunc The function pointer for MsgCallBack.
* @param[in] pUserData User data pointer to pass in MsgCallBack function.
* @param[in] piTerminate The pointer to terminate flag to inform MsgBroker to quit message listening.
* @return The handle of resize object
*/
void MsgBroker_Run(const char* pszPath, MsgCallBack pfnFunc, void* pUserData, int* piTerminate);
/**
* @brief Function for message sender to send message
*
* @param[in] pszPath The path to command fifo.
* @param[in] ptContext The pointer to MsgContext.
@return Success: 0 Fail: negative integer.
*/
int MsgBroker_SendMsg(const char* pszPath, MsgContext* ptContext);
/**
* @brief Function send register message to daemon_sr
*
* @param[in] pszPath The path of own command fifo.
@return Success: 0 Fail: negative integer.
*/
int MsgBroker_RegisterMsg(const char * fifo);
/**
* @brief Function send unregister message to daemon_sr
*
@return Success: 0 Fail: negative integer.
*/
int MsgBroker_UnRegisterMsg();
/**
* @brief Function send suspend finish ack message to daemon_sr
*
@return Success: 0 Fail: negative integer.
*/
int MsgBroker_SuspendAckMsg();
/**
* @brief Function send suspend message to register app
*
* @param[in] pszPath The path of own command fifo.
@return Success: 0 Fail: negative integer.
*/
int MsgBroker_SuspendMsg(const char* cmdfifo);
/**
* @brief Function send resume message to register app
*
* @param[in] pszPath The path of own command fifo.
@return Success: 0 Fail: negative integer.
*/
int MsgBroker_ResumeMsg(const char* cmdfifo);
#ifdef __cplusplus
}
#endif
#endif