123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514 |
- /**
- * @file datatype.h
- * \brief 数据结构类型定义
- * @author tyler tyler_cncq@msn.com
- * @version 1.0
- * @date 2012-06-03
- */
- #ifndef _PTT_DATATYPE_H_
- #define _PTT_DATATYPE_H_
- //#include "pro_conf.h"
- //#include "datalist.h" //ADD[yaojingya]<更改group结构,member存储方式为dlist>
- /** @defgroup 基础类型
- * 基础类型定义
- * @{
- */
- typedef unsigned char T_BYTE; ///< 字节
- typedef char T_INT8; ///< 8位整数
- typedef unsigned char T_UINT8; ///< 8位无符号整数
- typedef short T_INT16; ///< 16位整数
- typedef unsigned short T_UINT16; ///< 16位无符号整数
- typedef int T_INT32; ///< 32位整数
- typedef unsigned int T_UINT32; ///< 32位无符号整数
- #if SUPPORT_INT64
- typedef _t_int64 T_INT64; ///< 64位整数
- typedef _t_uint64 T_UINT64; ///< 64位无符号
- #endif
- // UNICODE for default string codec
- typedef T_UINT16 T_CHAR; ///< 字符类型,所有字符及字符串默认采用LittleEndian的UNICODE
- typedef T_CHAR T_NAME[32]; ///< UNICDOE 字符串,用来表示用户名字,组名字等名称,最多32个字符共64字节,如果不够32字符必须以0结尾
- typedef char T_PASSWORD[32]; ///< ansii 字符串,用来表示密码,最多16个字符,如果不够16个字符必须以0结尾
- typedef T_UINT32 T_UID; ///< user id
- typedef T_UINT8 T_UTYPE; ///< user type;
- typedef T_UINT32 T_GID; ///< chat room/conversation/group id,uint,4 bytes
- typedef T_UINT32 T_SYSGID; ///< system group id in db table (department id)
- typedef T_UINT8 T_GTYPE; ///< chat room/group type
- typedef T_UINT16 T_CMD_CODE; ///< command code;
- typedef T_UINT16 T_INDEX; ///< data packet index,start from 0
- typedef T_UINT8 T_STATE; ///< user state,online or offline
- typedef T_UINT8 T_CODEC; ///< 语音编码,默认录音参数为8000KHZ,signed 16位采样,单声道
- typedef T_UINT32 T_TOKEN; ///< 发言权令牌,在聊天频道中只有拥有了令牌才能发言
- #if defined PLATFORM_MS5700
- typedef T_UINT8 T_BOOL;
- #elif defined PLATFORM_NE58
- typedef T_UINT8 T_BOOL;
- #else
- typedef enum{
- FALSE,
- TRUE
- }T_BOOL;
- #endif
- /** @} */
- /** @addtogroup 常量定义
- *
- * @{
- */
- #define T_TRUE 1 ///< 逻辑值 真
- #define T_FALSE 0 ///< 逻辑之 假
- /** @defgroup 聊天组类型
- * 聊天组类型
- * @{
- */
- #define GROUP_BUILDIN 0 ///< 内建组,默认
- #define GROUP_STATIC 1 ///< 自建静态组,存在直到明确删除
- #define GROUP_TEMP 2 ///< 自建临时组,所有用户退出即自动删除
- /** @} */
- /** @defgroup 用户状态
- * 用户状态
- * @{
- */
- #define MEMBER_UNKNOWN 0 ///< 用户状态未知
- #define MEMBER_OFFLINE 1 ///< 离线状态
- #define MEMBER_ONLINE 2 ///< 在线状态
- #define MEMBER_INGROUP 3 ///< 在线且与查询者在同一个聊天组
- /** @} */
- /** @defgroup 语音编码
- * 语音编码
- * @{
- */
- #define RELEASE_MIC_CMD 77
- #define CODEC_PROTOBUF 88 //UDP心跳
- #define REQ_MIC_PROTOBUF 99 //UDP释放麦
-
- #define CODEC_PCM 100 ///< PCM 语音编码
- #define CODEC_AMR_NB 101 ///< AMR NB 语音编码
- #define CODEC_AMR_NB_475 101 ///< AMR NB 语音编码,
- #define CODEC_AMR_NB_DTX 101
- #define CODEC_QCELP_8K 102 ///< QCELP 8K
- #define CODEC_EVRC_8K 111//103
- #define CODEC_EVRC_FULL_8K 110
- #define CODEC_AMR_NB_122 95
- #define CODEC_SPEEX 104
- /** @} 语音编码 */
- /** @} */
- /** @defgroup 结构体定义
- * 数据结构定义
- * @{
- */
- /** \struct ProtocolHeader
- * 数据包协议头
- */
- typedef struct
- {
- T_UINT16 size; ///< 协议数据包大小,包括协议头本身和协议数据
- T_UINT8 version; ///< 客户端版本
- T_UTYPE type; ///< 客户端类型
- T_CMD_CODE cmd_code; ///< 信令代码,参考 cmd_code.h
- T_INDEX cmd_index;///< 数据包标识,用于在短时间内多个请求和服务器反馈得到对应关系
- T_UID uid; ///< 用户ID
- }ProtocolHeader;
- /** \struct ConfigureInfo
- * 配置信息
- */
- typedef struct{
- T_UINT16 heartbeat_sec; ///< UDP 心跳间隔长度,单位秒
- T_UINT16 audio_frametime; ///< 每个语音包建议包含多长时间的语音数据,单位毫秒
- T_UINT16 audio_cachetime_out; ///< 建议缓存多长时间的语音数据后再发送,单位毫秒
- T_UINT16 audio_cachetime_in; ///< 建议缓存多长时间的语音数据后再播放,单位毫秒
- }ConfigureInfo;
- #define ConfigureInfoBinarySize (sizeof(T_UINT16)+sizeof(T_UINT16)+sizeof(T_UINT16)+sizeof(T_UINT16))
- /** \struct PersonalConfigureInfo
- * 针对个人配置信息
- */
- typedef struct{
- T_UINT32 gps_reporttime; ///< GPS信息通报间隔时间,单位秒
- T_GID gid; ///< 以下保留
- T_UINT32 resoved2;
- T_UINT16 resoved3;
- T_UINT8 resoved4;
- T_UINT8 resoved5;
- }PersonalConfigureInfo;
- #define PersonalConfigureInfoBinarySize (sizeof(T_UINT32)+sizeof(T_UINT32)+sizeof(T_UINT32)+sizeof(T_UINT16)+sizeof(T_UINT8)+sizeof(T_UINT8))
- /** \struct UpgradeInfo
- * 版本更新通知
- */
- typedef struct {
- T_UINT8 type; ///< 客户端类型
- T_UINT8 new_version; ///< 新版本号
- T_UINT16 url_length; ///< 下载url地址长度,不含0
- char* url; ///< 下载url,0结尾的单字节(ansii)字符串
- }UpgradeInfo;
- #define UpgradeInfoBinarySize(u) (sizeof(T_UINT8)+sizeof(T_UINT8)+sizeof(T_UINT16)+(u).url_length+1)
- typedef struct
- {
- T_UID uid; ///< 用户ID
- T_NAME name; ///< 组成员名字
- T_UINT8 state; ///< 用户状态 @see MODULE_USERSTATE
- T_UINT8 head; ///< 头像索引,for future
- T_UINT8 selected; //0--未选择,1--选择
- }Member; //对外接口
- /** \struct Group
- * 组结构
- */
- typedef struct
- {
- T_UID uid; ///< 用户ID
- T_NAME name; ///< 名字
- }MemberInfo; //存储所有的用户信息,与组无关的用户信息
- typedef struct
- {
- T_UID uid; ///< 用户ID
- T_UINT8 state; ///< 用户状态 @see MODULE_USERSTATE
- T_UINT8 head; ///< 头像索引,for future
- T_UINT8 selected; //0--未选择,1--选择
- }MemberGroupInfo;
- typedef struct
- {
- T_GID gid; ///< 组ID
- T_NAME name; ///< 组名称
- T_GTYPE type; ///< 组类型,@see MODULE_GROUPTYPE
- T_BOOL is_creator; ///< (该成员变量将删除)
- // DataList* members; //成员列表,链表MemberInfo
- }Group_t;
- #define GROUP_BINARYSIZE (sizeof(T_GID)+sizeof(T_NAME)+sizeof(T_GTYPE)+sizeof(T_BOOL))
- /** \struct Groups
- * 组列表
- */
- typedef struct
- {
- T_UINT8 count; ///< 个数
- #ifndef SWIG
- Group_t *group; ///< 组列表
- #endif
- }Groups;
- #define GroupsBinarySize(g) (sizeof(T_UINT8) + (GROUP_BINARYSIZE * (g).count))
- /** \struct GroupMember
- * 组成员结构
- */
- typedef struct
- {
- T_UID uid; ///< 用户ID
- T_NAME name; ///< 组成员名字
- T_UINT8 state; ///< 用户状态 @see MODULE_USERSTATE
- T_UINT8 head; ///< 头像索引,for future
- }GroupMember;
- typedef struct
- {
- T_UID uid; ///< 用户ID
- T_NAME name;
- T_UINT8 isSelected; //0-未选, 1-已选
- T_UINT8 state; //状态
- T_GID group; ///< 当前所在聊天频道,0 表示没在任何聊天频道
- char isTempSelected; //在倭偈组中质欠潜选中
- }GroupMember2;
- ///////////////
- #define GROUPMEMBER_BINARYSIZE = (sizeof(T_UID)+sizeof(T_NAME)+sizeof(T_UINT8)+sizeof(T_UINT8))
- /** \struct GroupMembers
- * 组成员列表,用来表示一个聊天频道里的成员列表
- */
- typedef struct
- {
- T_GID gid; ///< 组ID
- T_UINT8 count; ///< 个数
- #ifndef SWIG
- GroupMember *members; ///< 组成员
- #endif
- }GroupMembers;
- #define GroupMembersBinarySize(m) (sizeof(T_GID)+sizeof(T_UINT8)+(GROUPMEMBER_BINARYSIZE*(m).count))
- /** \struct Contact
- * 联系人结构
- */
- typedef struct
- {
- T_UID uid; ///< 用户ID
- T_NAME name; ///< 用户名字
- T_UINT8 state; ///< 用户状态,@see MODULE_USERSTATE
- T_UINT8 head; ///< 头像索引,for future
- T_GID group; ///< 当前所在聊天频道,0 表示没在任何聊天频道
- } Contact;
- #define ContactBinarySize (sizeof(T_UID)+sizeof(T_NAME)+sizeof(T_UINT8)+sizeof(T_UINT8)+sizeof(T_GID))
- /** \struct Contacts
- * 联系人列表
- */
- typedef struct
- {
- T_UINT16 count; ///< 个数
- #ifndef SWIG
- Contact* contacts; ///< 联系人
- #endif
- } Contacts;
- #define ContactsBinarySize(c) (sizeof(T_UINT16)+ ( ContactBinarySize * (c).count))
- /** \struct GroupContacts
- * 组联系人结构,用来表示同一系统组和部门的多个成员
- */
- typedef struct
- {
- T_SYSGID gid; ///< 系统组ID
- T_UINT16 count; ///< 个数
- #ifndef SWIG
- Contact* contacts; ///< 联系人
- #endif
- } GroupContacts;
- #define GroupContactsBinarySize(gc) (sizeof(T_GID) + sizeof(T_UINT16) + (ContactBinarySize * (gc).count))
- /** \struct GroupContactsList
- * 组联系人结构,用来表示多个系统组和部门的多个成员
- */
- typedef struct
- {
- T_UINT16 count; ///< 个数
- #ifndef SWIG
- GroupContacts* groupcontacts; ///< 组联系人
- #endif
- } GroupContactsList;
- #define GroupContactsListBinarySize(gcl) sizeof_GroupContactList(gcl)
- /** \struct AudioData
- * 音频数据
- */
- typedef struct
- {
- T_GID gid; ///< 聊天组ID,对于上发到服务器的单呼音频是接收者的用户ID
- T_UID uid; ///< 发言者用户ID
- T_TOKEN token; ///< 令牌,单呼为0
- T_INDEX index; ///< 语音包顺序序列号
- T_CODEC codec; ///< 语音包音频编码
- T_UINT32 client_use1; ///< 客户端自用数据1
- T_UINT32 client_use2; ///< 客户端自用数据2
- T_UINT16 size; ///< 音频数据大小
- #ifndef SWIG
- T_BYTE *data; ///< 音频数据
- #endif
- T_BOOL is_ref; ///< 音频数据指针是否为引用,该值用于本地内存管理,不会写入协议数据包
- }AudioData;
- #define AudioDataWithoutDataBinarySize (sizeof(T_GID)+ sizeof(T_UID) + sizeof(T_TOKEN) + sizeof(T_INDEX)+sizeof(T_CODEC)+sizeof(T_UINT32)*2+sizeof(T_UINT16))
- #define AudioDataBinarySize(a) (AudioDataWithoutDataBinarySize+(a).size)
- /** \struct PTT_DATE
- * 日期
- */
- typedef struct
- {
- T_UINT16 year; ///< 年
- T_UINT8 month; ///< 月
- T_UINT8 day; ///< 日
- } PTT_DATE;
- #define DateBinarySize 4
- /** \struct PTT_TIME
- * 时间
- */
- typedef struct
- {
- T_UINT8 hour; ///< 小时
- T_UINT8 min; ///< 分
- T_UINT8 second; ///< 秒
- T_UINT16 msecond; ///< 毫秒
- } PTT_TIME;
- #define TimeBinarySize 5
- /** \struct PTT_DATETIME
- * 日期时间
- */
- typedef struct
- {
- PTT_DATE date; ///< 日期
- PTT_TIME time; ///< 时间
- }PTT_DATETIME;
- #define DateTimeBinarySize 9
- /* \struct PTT_GPS
- * GPS信息
- * 浮点数不同cpu表示标准不一样,因此采用整数传递。其中度与分将在服务器整合为"度.分"的浮点数,而不论分是多少
- * 即 88 10 -> 88.1
- * 88 10000 -> 88.1
- */
- typedef struct
- {
- T_UINT8 ns; ///< 北纬(0),南纬(1)
- T_UINT8 latitude; ///< 纬度(度)
- T_UINT16 min_latitude; ///< 纬度(分)
- T_UINT8 ew; ///< 东经(0),西经(1)
- T_UINT8 longitude; ///< 经度(度)
- T_UINT16 min_longitude; ///< 经度(分)
- } PTT_GPS;
- #define GPSBinarySize 8
- /** \struct GPS_REPORT
- * 上传GPS数据结构
- */
- typedef struct
- {
- PTT_DATETIME datatime; ///< 日期时间
- PTT_GPS gps; ///< GPS信息
- } GPS_REPORT;
- #define GPSReportBinarySize (GPSBinarySize + DataTimeBinarySize)
- /** @} */
- /** \struct ProtocolHeader
- * 数据包协议头
- */
- //需要跟后台交互的协议包命令字,U_开头的代表是模块向服务器发送的,ACK结尾的代表是从服务器下来的到模块的
- enum{
- U_LOGIN = 1,
- U_QUERY_GROUP = 2,
- U_QUERY_MEMBERS = 3,
- U_ENTER_GROUP = 4,
- U_LEAVE_GROUP = 5,
- U_REQUEST_MIC = 6,
- U_RELEASE_MIC = 7,
- U_LOGOUT = 8,
- U_MAKE_TMP_CALL = 9,
- U_GPS_REPORT = 0x0A,
- U_CHANGE_PWD = 0x0B,
- U_MAX_CMD = 0x7F,
- };
- #define PUSH_PING_ACK 0x41
- enum{
- U_LOGIN_ACK = 0x81,
- U_QUERY_GROUP_ACK = 0x82,
- U_QUERY_MEMBERS_ACK = 0x83,
- U_ENTER_GROUP_ACK = 0x84,
- U_LEAVE_GROUP_ACK = 0x85,
- U_REQUEST_MIC_ACK = 0x86,
- U_RELEASE_MIC_ACK = 0x87,
- U_LOGOUT_ACK = 0x88,
- U_MAKE_TMP_CALL_ACK = 0x89,
- U_GPS_REPORT_ACK = 0x8A,
- U_CHANGE_PWD_ACK = 0x8B,
- U_TCP_PING_ACK = 0x90,
- U_MAX_CMD_ACK = 0xBF,
- };
- enum{
- ON_PUSH_PING = 0xC1,
- ON_LOST_MIC = 0xC2,
- ON_KICKED_OUT = 0xC3,
- ON_RECONFIGURED = 0xC4,
- ON_CURRENT_GROUP = 0xC5,
- ON_GROUP_CHANGED = 0xC6,
- ON_MEMBER_GETMIC = 0xC7,
- ON_MEMBER_LOSTTMIC = 0xC8,
- ON_LOGO_CHANGED = 0xC9,
- ON_TEMP_CALL_REL = 0xCA,
- ON_TEMP_CALL_ARRIVED = 0xCB, //来了临时呼叫
- ON_PUSH_MAX = 0xFF,
- };
- /** \struct ProtocolHeader
- * 数据包协议头
- */
- struct Protocol_Descriptor
- {
- T_UINT16 packet_size;
- T_UINT8* packet_ptr;
- //T_UINT16 name_size;
- char* name_ptr;
- T_UINT8 name_cmd;
- T_UINT32 msg_size;
- T_UINT8* msg_ptr;
- T_UINT16 check_sum; ///< adler32 of nameLen, typeName and protobufData
- };
- typedef struct {
- T_UINT8 version;
- T_UINT8 p;
- T_UINT8 x;
- T_UINT8 cc;
- T_UINT8 m;
- T_UINT8 pt;
- T_UINT16 seq;
- T_UINT32 ts;
- T_UINT32 ssrc;
- T_UINT32 csrc[16];
- } rtp_hdr_t;
- #ifndef NULL
- #define NULL 0
- #endif
- T_UID get_uid(void);
- T_GID get_gid(void);
- /** @} */
- typedef enum{
- IPD_IP,
- IPD_DOMAIN
- }IPD_ENUM;
- typedef enum{
- TUP_TCP=0x30,
- TUP_UDP=0x31
- }TUP_ENUM;
- #define IP_DOMAIN_SIZE 50
- #define IP_SIZE 15
- #define PCM_FRAME_BYTE_SIZE 320
- #include "log.h"
- #include "_com_dtypes.h"
- #endif
|