/****************************************************************************
 * This file is part of the project AqHome.
 * AqHome (c) by 2023 Martin Preuss, all rights reserved.
 *
 * The license for this file can be found in the file COPYING which you
 * should have received along with this file.
 ****************************************************************************/

#ifndef AQH_MSG_IPC_DATA_H
#define AQH_MSG_IPC_DATA_H


#include <aqhome/api.h>
#include <aqhome/data/value.h>
#include <aqhome/data/device.h>

#include <gwenhywfar/msg_ipc.h>
#include <gwenhywfar/buffer.h>
#include <gwenhywfar/tag16.h>



#define AQH_IPC_PROTOCOL_DATA_ID      2
#define AQH_IPC_PROTOCOL_DATA_VERSION 1


#define AQH_MSGTYPE_IPC_DATA_RESULT               0x001  /* AQH_ResultIpcMsg */

#define AQH_MSGTYPE_IPC_DATA_CONNECT_REQ          0x010  /* serviceName, userName, password */

#define AQH_MSGTYPE_IPC_DATA_UPDATEDATA           0x100  /* AQH_MultiDataDataIpcMsg */
#define AQH_MSGTYPE_IPC_DATA_DATACHANGED          0x200  /* AQH_MultiDataDataIpcMsg */

#define AQH_MSGTYPE_IPC_DATA_SETDATA              0x300  /* AQH_SetDataIpcMsg */

#define AQH_MSGTYPE_IPC_DATA_ADDVALUE             0x400  /* AQH_AddValueDataIpcMsg */

#define AQH_MSGTYPE_IPC_DATA_GETDATA_REQ          0x500  /* AQH_GetDataDataIpcMsg */
#define AQH_MSGTYPE_IPC_DATA_GETDATA_RSP          0x600  /* AQH_MultiDataDataIpcMsg */

#define AQH_MSGTYPE_IPC_DATA_GETLASTDATA_REQ      0x700  /* AQH_GetDataDataIpcMsg */
#define AQH_MSGTYPE_IPC_DATA_GETLASTDATA_RSP      0x800  /* AQH_MultiDataDataIpcMsg */

#define AQH_MSGTYPE_IPC_DATA_GETVALUES_REQ        0x900  /* GWEN_IpcMsg */
#define AQH_MSGTYPE_IPC_DATA_GETVALUES_RSP        0xa00  /* AQH_ValuesDataIpcMsg */

#define AQH_MSGTYPE_IPC_DATA_GETDEVICES_REQ       0xb00  /* GWEN_IpcMsg */
#define AQH_MSGTYPE_IPC_DATA_GETDEVICES_RSP       0xc00  /* AQH_DevicesDataIpcMsg */

#define AQH_MSGTYPE_IPC_DATA_MODDEVICE_REQ        0xd00  /* AQH_DevicesDataIpcMsg */

#define AQH_MSGTYPE_IPC_DATA_ANNOUNCEVALUE        0xe00  /* AQH_ValuesDataIpcMsg */



/* utils */
AQHOME_API int AQH_DataIpc_WriteValueListAsTagsToBuffer(unsigned int tagType, const AQH_VALUE_LIST *valueList, GWEN_BUFFER *buf);
AQHOME_API int AQH_DataIpc_WriteValueAsTagToBuffer(unsigned int tagType, const AQH_VALUE *value, GWEN_BUFFER *buf);
AQHOME_API AQH_VALUE_LIST *AQH_DataIpc_ReadValuesFromTagList(const GWEN_TAG16_LIST *tagList, unsigned int wantedTagType);
AQHOME_API AQH_VALUE *AQH_DataIpc_ReadValueFromTagList(const GWEN_TAG16_LIST *tagList, unsigned int wantedTagType);

AQHOME_API int AQH_DataIpc_WriteDeviceListAsTagsToBuffer(unsigned int tagType, const AQH_DEVICE_LIST *deviceList, GWEN_BUFFER *buf);
AQHOME_API int AQH_DataIpc_WriteDeviceAsTagToBuffer(unsigned int tagType, const AQH_DEVICE *device, GWEN_BUFFER *buf);
AQHOME_API AQH_DEVICE_LIST *AQH_DataIpc_ReadDevicesFromTagList(const GWEN_TAG16_LIST *tagList, unsigned int wantedTagType);
AQHOME_API AQH_DEVICE *AQH_DataIpc_ReadDeviceFromTagList(const GWEN_TAG16_LIST *tagList, unsigned int wantedTagType);



#endif



