ThingPlug GMMP library for mbed

Dependents:   ThingPlug_WiFi_Example

Committer:
lesmin
Date:
Thu Aug 13 07:04:29 2015 +0000
Revision:
4:bb6c1ee1d5f0
Parent:
0:32c20cfb2b30
added NTP error return

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lesmin 0:32c20cfb2b30 1 /**
lesmin 0:32c20cfb2b30 2 * @mainpage GMMP (Global M2M Protocol) 개요
lesmin 0:32c20cfb2b30 3 * @brief GMMP는 M2M 단말과 개방형 M2M 플랫폼(OMP)사이의 TCP 기반 연동 규격으로서, 단말 등록/해지, 주기보고, 단말 제어 등의 기능을 수행하는 SKTelecom 내부 규격이다.
lesmin 0:32c20cfb2b30 4 * @brief M2M Portal Site : <a href="https://www.m2mportal.co.kr"> Mobius Portal </a>
lesmin 0:32c20cfb2b30 5 * @date 2015/07/20
lesmin 0:32c20cfb2b30 6 * @version 1.0
lesmin 0:32c20cfb2b30 7 * @file GMMP.h
lesmin 0:32c20cfb2b30 8 **/
lesmin 0:32c20cfb2b30 9
lesmin 0:32c20cfb2b30 10
lesmin 0:32c20cfb2b30 11 #ifndef GMMP_H_
lesmin 0:32c20cfb2b30 12 #define GMMP_H_
lesmin 0:32c20cfb2b30 13
lesmin 0:32c20cfb2b30 14 #include "GMMP_Operation.h"
lesmin 0:32c20cfb2b30 15
lesmin 0:32c20cfb2b30 16 /**
lesmin 0:32c20cfb2b30 17 * @defgroup GMMP_Registration_Operation M2M GW/Device 등록
lesmin 0:32c20cfb2b30 18 *등록 절차는 현장에 설치된 M2M GW가 서비스 수행을 시작하기 위해서 최초로 수행해야 하는 절차이다.\n
lesmin 0:32c20cfb2b30 19 *1. GW 등록 절차\n
lesmin 0:32c20cfb2b30 20 (1) M2M GW는 M2M Portal을 통해 사전에 등록된 자기 자신의 AUTH_ID(MSISDN or MAC Address), Domain Code, Manufacture ID를 전송한다.\n
lesmin 0:32c20cfb2b30 21 (2) OMP는 M2M GW가 전송한 AUTH_ID(MSISDN or MAC Address), Manufacture ID 값이 정상인지 확인하고 이상이 없으면 M2M GW로 Auth Key, GW ID를 부여하여 응답 메시지를 전송한다.\n
lesmin 0:32c20cfb2b30 22 (3) OMP에서 M2M GW의 등록이 정상적으로 이루어지지 않으면 응답 메시지의 Result Code에 Fail Code 값을 포함하여 M2M GW로 전송한다.\n
lesmin 0:32c20cfb2b30 23 (4) 3회 이상 M2M GW의 등록이 정상적이지 않은 경우 M2M GW는 더 이상 등록 요청을 수행하지 않고 GW 장애 절차를 수행한다.(GMMP 규격 논외)\n
lesmin 0:32c20cfb2b30 24 (5) M2M GW의 등록이 정상적으로 수행되었으나 Profile 정보(주기보고의 주기정보 및 Heartbeat 주기정보 등)가 없는 경우에는 @ref GO_Profile을 수행한다.\n
lesmin 0:32c20cfb2b30 25
lesmin 0:32c20cfb2b30 26 NOTE :\n
lesmin 0:32c20cfb2b30 27 [사전 등록] M2M GW 등록 절차 수행을 위해서는 사전에 M2M 포털을 통해 등록 되어야 한다.\n
lesmin 0:32c20cfb2b30 28 [ID 등록] M2M GW의 Auth ID(MSISDN, MAC) 또는 Manufacture ID가 변경되었으나 M2M 포털을 통해 갱신 등록되지 않으면 M2M 단말 등록 절차는 Fail 처리 된다.\n
lesmin 0:32c20cfb2b30 29 [정상 등록] 등록 요청이 정상적으로 수행된 경우 더 이상 등록 절차를 수행 하지 않는다.\n
lesmin 0:32c20cfb2b30 30 [재 등록 요청] OMP 에 등록 과정을 수행한 단말에 대해서 전원을 껐다(Off) 켜(On)는 경우에는 재 등록을 수행할 필요가 없다. 단, 할당 받은 GW ID, Auth Key, Domain Code 등의 값이 유실되거나 삭제된 경우에는 재 등록 요청을 수행 할 수 있다.\n
lesmin 0:32c20cfb2b30 31 [할당 Field 사용] Auth Key 값은 GMMP Common Header의 Auth_key 필드에 설정되며, Domain Code, GW ID 값은 Message Type별 Field 정의영역 부분에 설정되어 반환 된다. 이후 모든 메시지에는 반드시 OMP에서 할당된 Auth Key, GW ID 값을 해당 메시지에 이용되어야 한다.\n
lesmin 0:32c20cfb2b30 32 [중복 등록 허용] 이미 등록되어 있는 M2M GW에 대해 재 등록 요청을 하는 경우에는 중복 등록이 허용이 된다. 이때 전달되는 Auth Key, GW ID 값은 이전의 등록절차에서 할당 되었던 동일한 값이 전달된다.\n
lesmin 0:32c20cfb2b30 33 [M2M GW Timeout] M2M GW에서 OMP로 Request 명령을 전송한 뒤 응답이 없는 경우 Timeout 처리를 수행한다. 이 값은 Profile 정보에 포함 되어 있으며, OMP의 제어 명령에 의해서 변경 될 수 있다. (Timeout은 default로 최소 30sec 이상으로 설정되어야 한다)\n
lesmin 0:32c20cfb2b30 34
lesmin 0:32c20cfb2b30 35 전송 패킷 : @ref Struct_Reg_GW.h, @ref Struct_Reg_Device.h 참조
lesmin 0:32c20cfb2b30 36
lesmin 0:32c20cfb2b30 37 * @ingroup GMMP_Registration_Operation
lesmin 0:32c20cfb2b30 38 * @{
lesmin 0:32c20cfb2b30 39 */
lesmin 0:32c20cfb2b30 40
lesmin 0:32c20cfb2b30 41 /**
lesmin 0:32c20cfb2b30 42 *
lesmin 0:32c20cfb2b30 43 *@brief GW,Device 등록 절차 진행 명령 함수, 옵션으로 암호화 진행 유무 Flag가 있다.\n
lesmin 0:32c20cfb2b30 44 등록 절차는 현장에 설치된 M2M GW가 서비스 수행을 시작하기 위해서 최초로 수행해야 하는 절차이다.\n
lesmin 0:32c20cfb2b30 45 등록 절차를 통해 GW ID, Device ID를 OMP로 부터 제공 받는다.\n
lesmin 0:32c20cfb2b30 46 *@warning GW 등록 절차가 진행되어야만 Device 등록 절차를 진행 할 수 있다.\n
lesmin 0:32c20cfb2b30 47 * @param pszGWID OMP에서 제공받은 GW ID, NULL이면 GW 등록, 아니면 Device 등록 절차를 진행한다.\n
lesmin 0:32c20cfb2b30 48 * @param pszManufactureID M2M GW,Device의 Manufacture ID이다.\n
lesmin 0:32c20cfb2b30 49 - AlphaNumeric : 문자,숫자 조합, 특수문자제외, SPACE 허용 안하며 빈자리는 0x00(NULL)로 채운다.\n
lesmin 0:32c20cfb2b30 50 Ex) 공장 제조 Serial No. : “AVB12132SET23DT”, “SKTSerial“\n
lesmin 0:32c20cfb2b30 51 * @return 성공 : GMMMP_SUCCESS, 실패 : @ref ErrorCode.h 참조
lesmin 0:32c20cfb2b30 52 *
lesmin 0:32c20cfb2b30 53 * @code GW/Device 등록 샘플 코드 (Sample_Registration 샘플 참조)
lesmin 0:32c20cfb2b30 54
lesmin 0:32c20cfb2b30 55 int GW_Reg()
lesmin 0:32c20cfb2b30 56 {
lesmin 0:32c20cfb2b30 57 int nRet = GMMP_SUCCESS;
lesmin 0:32c20cfb2b30 58
lesmin 0:32c20cfb2b30 59 nRet = GO_Reg(NULL, pszGWMFID, false);
lesmin 0:32c20cfb2b30 60
lesmin 0:32c20cfb2b30 61 if(nRet < 0)
lesmin 0:32c20cfb2b30 62 {
lesmin 0:32c20cfb2b30 63 printf("GW GO_Reg Error : %d\n", nRet);
lesmin 0:32c20cfb2b30 64
lesmin 0:32c20cfb2b30 65 return 1;
lesmin 0:32c20cfb2b30 66 }
lesmin 0:32c20cfb2b30 67
lesmin 0:32c20cfb2b30 68 return 0;
lesmin 0:32c20cfb2b30 69 }
lesmin 0:32c20cfb2b30 70
lesmin 0:32c20cfb2b30 71 int Device_Reg()
lesmin 0:32c20cfb2b30 72 {
lesmin 0:32c20cfb2b30 73 int nRet = GMMP_SUCCESS;
lesmin 0:32c20cfb2b30 74
lesmin 0:32c20cfb2b30 75 nRet = GO_Reg(GetGWID(), pszDeviceMFID, false);
lesmin 0:32c20cfb2b30 76
lesmin 0:32c20cfb2b30 77 if(nRet < 0)
lesmin 0:32c20cfb2b30 78 {
lesmin 0:32c20cfb2b30 79 printf("GW GO_Reg Error : %d\n", nRet);
lesmin 0:32c20cfb2b30 80
lesmin 0:32c20cfb2b30 81 return 1;
lesmin 0:32c20cfb2b30 82 }
lesmin 0:32c20cfb2b30 83
lesmin 0:32c20cfb2b30 84 return 0;
lesmin 0:32c20cfb2b30 85 }
lesmin 0:32c20cfb2b30 86
lesmin 0:32c20cfb2b30 87 int Init()
lesmin 0:32c20cfb2b30 88 {
lesmin 0:32c20cfb2b30 89 if(Initialize(szServerIP, nServerPort, pszDomainCode , pszGWAuthID, GMMP_ON_LOG, nErrorLevel, GMMP_NETWORK_ALYWAYS_OFF, "Log") != 0)
lesmin 0:32c20cfb2b30 90 {
lesmin 0:32c20cfb2b30 91 printf("Server Connect Error\n");
lesmin 0:32c20cfb2b30 92
lesmin 0:32c20cfb2b30 93 return 1;
lesmin 0:32c20cfb2b30 94 }
lesmin 0:32c20cfb2b30 95
lesmin 0:32c20cfb2b30 96 SetCallFunction( (void*)Recv);
lesmin 0:32c20cfb2b30 97
lesmin 0:32c20cfb2b30 98 return 0;
lesmin 0:32c20cfb2b30 99 }
lesmin 0:32c20cfb2b30 100
lesmin 0:32c20cfb2b30 101 int main()
lesmin 0:32c20cfb2b30 102 {
lesmin 0:32c20cfb2b30 103 if(Init() != 0)
lesmin 0:32c20cfb2b30 104 {
lesmin 0:32c20cfb2b30 105 printf("Init Error");
lesmin 0:32c20cfb2b30 106 return -1;
lesmin 0:32c20cfb2b30 107 }
lesmin 0:32c20cfb2b30 108
lesmin 0:32c20cfb2b30 109 if(GW_Reg() != 0)
lesmin 0:32c20cfb2b30 110 {
lesmin 0:32c20cfb2b30 111 printf("GW_Reg Error");
lesmin 0:32c20cfb2b30 112 return -1;
lesmin 0:32c20cfb2b30 113 }
lesmin 0:32c20cfb2b30 114
lesmin 0:32c20cfb2b30 115 if(Device_Reg() != 0)
lesmin 0:32c20cfb2b30 116 {
lesmin 0:32c20cfb2b30 117 printf("Device_Reg Error");
lesmin 0:32c20cfb2b30 118 return -1;
lesmin 0:32c20cfb2b30 119 }
lesmin 0:32c20cfb2b30 120
lesmin 0:32c20cfb2b30 121 return 0;
lesmin 0:32c20cfb2b30 122
lesmin 0:32c20cfb2b30 123 }
lesmin 0:32c20cfb2b30 124 @endcode
lesmin 0:32c20cfb2b30 125 */
lesmin 0:32c20cfb2b30 126
lesmin 0:32c20cfb2b30 127 int GO_Reg(const char* pszGWID,
lesmin 0:32c20cfb2b30 128 const char* pszManufactureID);
lesmin 0:32c20cfb2b30 129 /**
lesmin 0:32c20cfb2b30 130 * @}
lesmin 0:32c20cfb2b30 131 */
lesmin 0:32c20cfb2b30 132
lesmin 0:32c20cfb2b30 133 /**
lesmin 0:32c20cfb2b30 134 * @defgroup GMMP_DeRegistration_Operation M2M GW/Device 등록 해지
lesmin 0:32c20cfb2b30 135 *해지 절차는 M2M Device가 더 이상 서비스를 수행하지 않음을 OMP에 알리는 절차로서 Device ID값이 OMP에 반납된다.\n
lesmin 0:32c20cfb2b30 136 * GMMP_Device_DeRegistration_Request 메시지를 이용하여 해지 요청을 수행하고, \n
lesmin 0:32c20cfb2b30 137 * GMMP_Device_DeRegistration_Response 메시지를 통해 해지 결과를 받는다.\n
lesmin 0:32c20cfb2b30 138 * 현장에서 문제가 생기거나 또는 철거하는 경우 M2M 포털을 통해서 해지(DeRegistration)할 수 있다.\n
lesmin 0:32c20cfb2b30 139 * 이때 M2M GW가 DeRegistration 하는 경우 하위 Device 정보도 모두 해제 된다.
lesmin 0:32c20cfb2b30 140
lesmin 0:32c20cfb2b30 141 전송 패킷 : @ref Struct_DeReg_GW.h, @ref Struct_DeReg_Device.h 참조
lesmin 0:32c20cfb2b30 142
lesmin 0:32c20cfb2b30 143 * @ingroup GMMP_DeRegistration_Operation
lesmin 0:32c20cfb2b30 144 * @{
lesmin 0:32c20cfb2b30 145 */
lesmin 0:32c20cfb2b30 146
lesmin 0:32c20cfb2b30 147 /**
lesmin 0:32c20cfb2b30 148 *@brief GW,Device 해지 절차 진행 명령 함수
lesmin 0:32c20cfb2b30 149 *@brief 해지 절차는 등록 절차를 통해 OMP로 부터 제공 받은 GW ID, Device ID를 해지 한다.
lesmin 0:32c20cfb2b30 150 *@warning GW 등록 절차가 진행되어야만 Device 등록 절차를 진행 할 수 있다. GW 등록 해제 절차를 진행할 경우 하위 Device에 대해 자동 해지가 된다.
lesmin 0:32c20cfb2b30 151 *@warning OMP 연동을 통해 서비스를 재개하기 위해서는 다시 OMP를 통해 Auth Key, GW ID를 할당 받아야 한다.
lesmin 0:32c20cfb2b30 152 * @param pszGWID OMP로 제공 받은 GW ID값.
lesmin 0:32c20cfb2b30 153 * @param pszDeviceID OMP로 제공 받은 Device ID값.
lesmin 0:32c20cfb2b30 154 * @return 성공 : GMMMP_SUCCESS, 실패 : @ref ErrorCode.h 참조
lesmin 0:32c20cfb2b30 155 *
lesmin 0:32c20cfb2b30 156 * @code GW/Device 등록 해지 샘플 코드 (Sample_DeRegistration 샘플 참조) 샘플코드 참조
lesmin 0:32c20cfb2b30 157 *
lesmin 0:32c20cfb2b30 158 int GW_DeReg()
lesmin 0:32c20cfb2b30 159 {
lesmin 0:32c20cfb2b30 160 int nRet = GMMP_SUCCESS;
lesmin 0:32c20cfb2b30 161
lesmin 0:32c20cfb2b30 162 nRet = GO_DeReg(pszGWID, NULL);
lesmin 0:32c20cfb2b30 163
lesmin 0:32c20cfb2b30 164 if(nRet < 0)
lesmin 0:32c20cfb2b30 165 {
lesmin 0:32c20cfb2b30 166 printf("GW GO_Reg Error : %d\n", nRet);
lesmin 0:32c20cfb2b30 167
lesmin 0:32c20cfb2b30 168 return 1;
lesmin 0:32c20cfb2b30 169 }
lesmin 0:32c20cfb2b30 170
lesmin 0:32c20cfb2b30 171 return 0;
lesmin 0:32c20cfb2b30 172 }
lesmin 0:32c20cfb2b30 173
lesmin 0:32c20cfb2b30 174 int Device_DeReg()
lesmin 0:32c20cfb2b30 175 {
lesmin 0:32c20cfb2b30 176 int nRet = GMMP_SUCCESS;
lesmin 0:32c20cfb2b30 177
lesmin 0:32c20cfb2b30 178 nRet = GO_DeReg(GetGWID(), pszDeviceID);
lesmin 0:32c20cfb2b30 179
lesmin 0:32c20cfb2b30 180 if(nRet < 0)
lesmin 0:32c20cfb2b30 181 {
lesmin 0:32c20cfb2b30 182 printf("GW GO_Reg Error : %d\n", nRet);
lesmin 0:32c20cfb2b30 183
lesmin 0:32c20cfb2b30 184 return 1;
lesmin 0:32c20cfb2b30 185 }
lesmin 0:32c20cfb2b30 186
lesmin 0:32c20cfb2b30 187 return 0;
lesmin 0:32c20cfb2b30 188 }
lesmin 0:32c20cfb2b30 189
lesmin 0:32c20cfb2b30 190 int Init()
lesmin 0:32c20cfb2b30 191 {
lesmin 0:32c20cfb2b30 192 if(Initialize(szServerIP, nServerPort, pszDomainCode , pszGWAuthID, GMMP_ON_LOG, nErrorLevel, GMMP_NETWORK_ALYWAYS_OFF, "Log") != 0)
lesmin 0:32c20cfb2b30 193 {
lesmin 0:32c20cfb2b30 194 printf("Server Connect Error\n");
lesmin 0:32c20cfb2b30 195
lesmin 0:32c20cfb2b30 196 return 1;
lesmin 0:32c20cfb2b30 197 }
lesmin 0:32c20cfb2b30 198
lesmin 0:32c20cfb2b30 199 SetCallFunction( (void*)Recv);
lesmin 0:32c20cfb2b30 200 SetAuthKey(pszAuthKey);
lesmin 0:32c20cfb2b30 201 SetGWID(pszGWID);
lesmin 0:32c20cfb2b30 202
lesmin 0:32c20cfb2b30 203 return 0;
lesmin 0:32c20cfb2b30 204 }
lesmin 0:32c20cfb2b30 205
lesmin 0:32c20cfb2b30 206 int main()
lesmin 0:32c20cfb2b30 207 {
lesmin 0:32c20cfb2b30 208 if(Init() != 0)
lesmin 0:32c20cfb2b30 209 {
lesmin 0:32c20cfb2b30 210 printf("Init Error");
lesmin 0:32c20cfb2b30 211 return -1;
lesmin 0:32c20cfb2b30 212 }
lesmin 0:32c20cfb2b30 213
lesmin 0:32c20cfb2b30 214 if(GW_DeReg() != 0)
lesmin 0:32c20cfb2b30 215 {
lesmin 0:32c20cfb2b30 216 printf("GW_Reg Error");
lesmin 0:32c20cfb2b30 217 return -1;
lesmin 0:32c20cfb2b30 218 }
lesmin 0:32c20cfb2b30 219
lesmin 0:32c20cfb2b30 220 if(Device_DeReg() != 0)
lesmin 0:32c20cfb2b30 221 {
lesmin 0:32c20cfb2b30 222 printf("Device_Reg Error");
lesmin 0:32c20cfb2b30 223 return -1;
lesmin 0:32c20cfb2b30 224 }
lesmin 0:32c20cfb2b30 225
lesmin 0:32c20cfb2b30 226 return 0;
lesmin 0:32c20cfb2b30 227
lesmin 0:32c20cfb2b30 228 }
lesmin 0:32c20cfb2b30 229 @endcode
lesmin 0:32c20cfb2b30 230 */
lesmin 0:32c20cfb2b30 231 int GO_DeReg(const char* pszGWID,
lesmin 0:32c20cfb2b30 232 const char* pszDeviceID);
lesmin 0:32c20cfb2b30 233
lesmin 0:32c20cfb2b30 234 /**
lesmin 0:32c20cfb2b30 235 * @}
lesmin 0:32c20cfb2b30 236 */
lesmin 0:32c20cfb2b30 237
lesmin 0:32c20cfb2b30 238 /**
lesmin 0:32c20cfb2b30 239 * @defgroup GMMP_ProfileInfo_Operation M2M GW/Device Profile Info
lesmin 0:32c20cfb2b30 240 *
lesmin 0:32c20cfb2b30 241 M2M GW에 Profile 정보가 없는 경우에 또는 일부 존재 하지 않는 경우 OMP에 Profile 정보를 요청한다.\n
lesmin 0:32c20cfb2b30 242 Profile 정보가 미리 설정되어 있는 경우에는 Profile 요청 절차를 수행하지 않는다.\n
lesmin 0:32c20cfb2b30 243 M2M GW의 등록 절차 또는 M2M Device 등록 절차 이후에 수행될 수 있다. \n
lesmin 0:32c20cfb2b30 244 또한 OMP로부터 제어 명령(@ref GMMP_Control_Operation, Control Type @ref CONTROL_Profile_Reset)을 수신한 경우 Profile 정보 Operation을 수행한다.
lesmin 0:32c20cfb2b30 245
lesmin 0:32c20cfb2b30 246 전송 패킷 : @ref Struct_ProfileInfo.h 참조
lesmin 0:32c20cfb2b30 247
lesmin 0:32c20cfb2b30 248 * @ingroup GMMP_ProfileInfo_Operation
lesmin 0:32c20cfb2b30 249 * @{
lesmin 0:32c20cfb2b30 250 */
lesmin 0:32c20cfb2b30 251 /**
lesmin 0:32c20cfb2b30 252 * @param pszGWID OMP로 제공 받은 GW ID값.
lesmin 0:32c20cfb2b30 253 * @param pszDeviceID OMP로 제공 받은 Device ID값.
lesmin 0:32c20cfb2b30 254 * @param nTID T-ID는 M2M GW와 OMP 간의 트랜잭션을 구분하기 위한 값으로서 Request 요청하는 곳에서 할당하며 Response 받은 곳에서는 해당 T-ID 값을 그대로 반환한다.\n
lesmin 0:32c20cfb2b30 255 M2M GW와 OMP에서 T-ID 사용 범위는 다음과 같다.\n
lesmin 0:32c20cfb2b30 256 ※ M2M GW T-ID : 0 ~ 99,999 (10만개)\n
lesmin 0:32c20cfb2b30 257 ※ OMP T-ID : M2M GW가 사용 이외의 값\n
lesmin 0:32c20cfb2b30 258 *
lesmin 0:32c20cfb2b30 259 * @return 성공 : GMMMP_SUCCESS, 실패 : @ref ErrorCode.h 참조
lesmin 0:32c20cfb2b30 260 * @code GW/Device Profile Info 요청 샘플 코드 (Sample_Profile 샘플 참조)
lesmin 0:32c20cfb2b30 261
lesmin 0:32c20cfb2b30 262 int GW_Profile()
lesmin 0:32c20cfb2b30 263 {
lesmin 0:32c20cfb2b30 264 int nRet = GMMP_SUCCESS;
lesmin 0:32c20cfb2b30 265
lesmin 0:32c20cfb2b30 266 nRet = GO_Profile(pszGWID, NULL, nTID);
lesmin 0:32c20cfb2b30 267
lesmin 0:32c20cfb2b30 268 if(nRet < 0)
lesmin 0:32c20cfb2b30 269 {
lesmin 0:32c20cfb2b30 270 printf("GW GO_Profile Error : %d\n", nRet);
lesmin 0:32c20cfb2b30 271
lesmin 0:32c20cfb2b30 272 return 1;
lesmin 0:32c20cfb2b30 273 }
lesmin 0:32c20cfb2b30 274
lesmin 0:32c20cfb2b30 275 return 0;
lesmin 0:32c20cfb2b30 276 }
lesmin 0:32c20cfb2b30 277
lesmin 0:32c20cfb2b30 278 int Device_Profile()
lesmin 0:32c20cfb2b30 279 {
lesmin 0:32c20cfb2b30 280 int nRet = GMMP_SUCCESS;
lesmin 0:32c20cfb2b30 281
lesmin 0:32c20cfb2b30 282 nRet = GO_Profile(pszGWID, pszDeviceID, nTID);
lesmin 0:32c20cfb2b30 283
lesmin 0:32c20cfb2b30 284 if(nRet < 0)
lesmin 0:32c20cfb2b30 285 {
lesmin 0:32c20cfb2b30 286 printf("GW GO_Profile Error : %d\n", nRet);
lesmin 0:32c20cfb2b30 287
lesmin 0:32c20cfb2b30 288 return 1;
lesmin 0:32c20cfb2b30 289 }
lesmin 0:32c20cfb2b30 290
lesmin 0:32c20cfb2b30 291 return 0;
lesmin 0:32c20cfb2b30 292 }
lesmin 0:32c20cfb2b30 293
lesmin 0:32c20cfb2b30 294 int Init()
lesmin 0:32c20cfb2b30 295 {
lesmin 0:32c20cfb2b30 296 if(Initialize(szServerIP, nServerPort, pszDomainCode , pszGWAuthID, GMMP_ON_LOG, nErrorLevel, GMMP_NETWORK_ALYWAYS_OFF, "Log") != 0)
lesmin 0:32c20cfb2b30 297 {
lesmin 0:32c20cfb2b30 298 printf("Server Connect Error\n");
lesmin 0:32c20cfb2b30 299
lesmin 0:32c20cfb2b30 300 return 1;
lesmin 0:32c20cfb2b30 301 }
lesmin 0:32c20cfb2b30 302
lesmin 0:32c20cfb2b30 303 SetCallFunction( (void*)Recv);
lesmin 0:32c20cfb2b30 304 SetAuthKey(pszAuthKey);
lesmin 0:32c20cfb2b30 305
lesmin 0:32c20cfb2b30 306 return 0;
lesmin 0:32c20cfb2b30 307 }
lesmin 0:32c20cfb2b30 308
lesmin 0:32c20cfb2b30 309 int main()
lesmin 0:32c20cfb2b30 310 {
lesmin 0:32c20cfb2b30 311 if(Init() != 0)
lesmin 0:32c20cfb2b30 312 {
lesmin 0:32c20cfb2b30 313 printf("Init Error");
lesmin 0:32c20cfb2b30 314 return -1;
lesmin 0:32c20cfb2b30 315 }
lesmin 0:32c20cfb2b30 316
lesmin 0:32c20cfb2b30 317 if(GW_Profile() != 0)
lesmin 0:32c20cfb2b30 318 {
lesmin 0:32c20cfb2b30 319 printf("GW_Profile Error");
lesmin 0:32c20cfb2b30 320 return -1;
lesmin 0:32c20cfb2b30 321 }
lesmin 0:32c20cfb2b30 322
lesmin 0:32c20cfb2b30 323 if(Device_Profile() != 0)
lesmin 0:32c20cfb2b30 324 {
lesmin 0:32c20cfb2b30 325 printf("Device_Profile Error");
lesmin 0:32c20cfb2b30 326 return -1;
lesmin 0:32c20cfb2b30 327 }
lesmin 0:32c20cfb2b30 328
lesmin 0:32c20cfb2b30 329 return 0;
lesmin 0:32c20cfb2b30 330
lesmin 0:32c20cfb2b30 331 }
lesmin 0:32c20cfb2b30 332 @endcode
lesmin 0:32c20cfb2b30 333 */
lesmin 0:32c20cfb2b30 334 int GO_Profile(const char* pszGWID,
lesmin 0:32c20cfb2b30 335 const char* pszDeviceID,
lesmin 0:32c20cfb2b30 336 const long nTID);
lesmin 0:32c20cfb2b30 337 /**
lesmin 0:32c20cfb2b30 338 * @}
lesmin 0:32c20cfb2b30 339 */
lesmin 0:32c20cfb2b30 340
lesmin 0:32c20cfb2b30 341 /**
lesmin 0:32c20cfb2b30 342 * @defgroup GMMP_Delivery_Operation M2M GW/Device 주기 보고
lesmin 0:32c20cfb2b30 343 *
lesmin 0:32c20cfb2b30 344 M2M 단말에서 수집된 데이터를 OMP로 전송하는 절차이다.\n
lesmin 0:32c20cfb2b30 345 수집된 데이터를 전송하는 M2M 단말은 반드시 등록 절차를 통해 OMP에 등록되어 있어야 한다.\n
lesmin 0:32c20cfb2b30 346 수집된 데이터는 타입에 따라서 수집 데이터(collect data), 장애 데이터(alarm data), 이벤트 데이터(event data), 장애 해제(alarm clear) 데이터 등으로 분류 된다.\n
lesmin 0:32c20cfb2b30 347 이 값에 대한 설정은 cReportType 변수의 Report Type에 따라 구분된다. @ref Define_Delivery.h 참조
lesmin 0:32c20cfb2b30 348
lesmin 0:32c20cfb2b30 349 전송 패킷 : @ref Struct_Delivery.h 참조
lesmin 0:32c20cfb2b30 350
lesmin 0:32c20cfb2b30 351 * @ingroup GMMP_Delivery_Operation
lesmin 0:32c20cfb2b30 352 * @{
lesmin 0:32c20cfb2b30 353 */
lesmin 0:32c20cfb2b30 354 /**
lesmin 0:32c20cfb2b30 355 *
lesmin 0:32c20cfb2b30 356 * @param pszGWID OMP로 제공 받은 GW ID값.
lesmin 0:32c20cfb2b30 357 * @param pszDeviceID OMP로 제공 받은 Device ID값.
lesmin 0:32c20cfb2b30 358 * @param cReportType Report Type\n @ref Define_Delivery.h 참조
lesmin 0:32c20cfb2b30 359 - 0x01 : collect data\n
lesmin 0:32c20cfb2b30 360 - 0x02 : alarm data\n
lesmin 0:32c20cfb2b30 361 - 0x03 : event data\n
lesmin 0:32c20cfb2b30 362 - 0x04 : alarm clear\n
lesmin 0:32c20cfb2b30 363 *
lesmin 0:32c20cfb2b30 364 * @param cMediaType Message Body의 미디어 타입을 의미 @ref Struct_Delivery.h 참조
lesmin 0:32c20cfb2b30 365 * @param pszMessageBody Data[2048 Byte]
lesmin 0:32c20cfb2b30 366 * @param nTotalCount Message Body에 전달될 내용이 2048 Bytes를 초과할 경우 여러 개의 메시지로 전송하며 전체 메시지 개수를 표시 한다
lesmin 0:32c20cfb2b30 367 * @param nCurrentCount 여러 개의 메시지로 전송되는 경우 현재 메시지의 순서로서 1에서 Total Count까지의 값이 기록 된다.
lesmin 0:32c20cfb2b30 368 * @return 성공 : GMMMP_SUCCESS, 실패 : @ref ErrorCode.h 참조
lesmin 0:32c20cfb2b30 369
lesmin 0:32c20cfb2b30 370 @code GW/Device 주기 보고 샘플 코드 (Sample_Delivery 샘플 참조)
lesmin 0:32c20cfb2b30 371 int GW_Delivery()
lesmin 0:32c20cfb2b30 372 {
lesmin 0:32c20cfb2b30 373 int nRet = 0;
lesmin 0:32c20cfb2b30 374 int nTotalCount = 0;
lesmin 0:32c20cfb2b30 375 int nLoop = 0;
lesmin 0:32c20cfb2b30 376 int nMessageBodyLen = strlen(pszMessage);
lesmin 0:32c20cfb2b30 377
lesmin 0:32c20cfb2b30 378 if(nMessageBodyLen < MAX_MSG_BODY)
lesmin 0:32c20cfb2b30 379 {
lesmin 0:32c20cfb2b30 380 nTotalCount = 1;
lesmin 0:32c20cfb2b30 381 }
lesmin 0:32c20cfb2b30 382 else
lesmin 0:32c20cfb2b30 383 {
lesmin 0:32c20cfb2b30 384 nTotalCount = nMessageBodyLen/MAX_MSG_BODY;
lesmin 0:32c20cfb2b30 385
lesmin 0:32c20cfb2b30 386 if(nMessageBodyLen%MAX_MSG_BODY > 0)
lesmin 0:32c20cfb2b30 387 {
lesmin 0:32c20cfb2b30 388 nTotalCount++;
lesmin 0:32c20cfb2b30 389 }
lesmin 0:32c20cfb2b30 390 }
lesmin 0:32c20cfb2b30 391
lesmin 0:32c20cfb2b30 392 int nMessagePos = 0;
lesmin 0:32c20cfb2b30 393 int nSendLen = 0;
lesmin 0:32c20cfb2b30 394 int nSendedLen = nMessageBodyLen;
lesmin 0:32c20cfb2b30 395
lesmin 0:32c20cfb2b30 396 char szMessage[MAX_MSG_BODY];
lesmin 0:32c20cfb2b30 397
lesmin 0:32c20cfb2b30 398 for(nLoop = 1 ; nLoop <= nTotalCount ; nLoop++)
lesmin 0:32c20cfb2b30 399 {
lesmin 0:32c20cfb2b30 400 memset(szMessage, 0, sizeof(szMessage) );
lesmin 0:32c20cfb2b30 401
lesmin 0:32c20cfb2b30 402 if(nSendedLen >= MAX_MSG_BODY)
lesmin 0:32c20cfb2b30 403 {
lesmin 0:32c20cfb2b30 404 nSendLen = MAX_MSG_BODY;
lesmin 0:32c20cfb2b30 405 }
lesmin 0:32c20cfb2b30 406 else
lesmin 0:32c20cfb2b30 407 {
lesmin 0:32c20cfb2b30 408 nSendLen = nSendedLen;
lesmin 0:32c20cfb2b30 409 }
lesmin 0:32c20cfb2b30 410
lesmin 0:32c20cfb2b30 411 memcpy(szMessage, pszMessage+nMessagePos, nSendLen);
lesmin 0:32c20cfb2b30 412
lesmin 0:32c20cfb2b30 413 printf("Send Message Len = %d\n", strlen(szMessage) );
lesmin 0:32c20cfb2b30 414
lesmin 0:32c20cfb2b30 415 nRet = GO_Delivery(pszGWID, NULL, DELIVERY_COLLECT_DATA, 0x01, szMessage);
lesmin 0:32c20cfb2b30 416
lesmin 0:32c20cfb2b30 417 if(nRet < 0)
lesmin 0:32c20cfb2b30 418 {
lesmin 0:32c20cfb2b30 419 printf("GO_Delivery Error : %d\n", nRet);
lesmin 0:32c20cfb2b30 420
lesmin 0:32c20cfb2b30 421 return 1;
lesmin 0:32c20cfb2b30 422 }
lesmin 0:32c20cfb2b30 423
lesmin 0:32c20cfb2b30 424 nSendedLen -= nSendLen;
lesmin 0:32c20cfb2b30 425 nMessagePos+= nSendedLen;
lesmin 0:32c20cfb2b30 426 }
lesmin 0:32c20cfb2b30 427
lesmin 0:32c20cfb2b30 428 return 0;
lesmin 0:32c20cfb2b30 429 }
lesmin 0:32c20cfb2b30 430
lesmin 0:32c20cfb2b30 431 int Device_Delivery()
lesmin 0:32c20cfb2b30 432 {
lesmin 0:32c20cfb2b30 433 int nRet = 0;
lesmin 0:32c20cfb2b30 434 int nTotalCount = 0;
lesmin 0:32c20cfb2b30 435 int nLoop = 0;
lesmin 0:32c20cfb2b30 436 int nMessageBodyLen = strlen(pszMessage);
lesmin 0:32c20cfb2b30 437
lesmin 0:32c20cfb2b30 438 if(nMessageBodyLen < MAX_MSG_BODY)
lesmin 0:32c20cfb2b30 439 {
lesmin 0:32c20cfb2b30 440 nTotalCount = 1;
lesmin 0:32c20cfb2b30 441 }
lesmin 0:32c20cfb2b30 442 else
lesmin 0:32c20cfb2b30 443 {
lesmin 0:32c20cfb2b30 444 nTotalCount = nMessageBodyLen/MAX_MSG_BODY;
lesmin 0:32c20cfb2b30 445
lesmin 0:32c20cfb2b30 446 if(nMessageBodyLen%MAX_MSG_BODY > 0)
lesmin 0:32c20cfb2b30 447 {
lesmin 0:32c20cfb2b30 448 nTotalCount++;
lesmin 0:32c20cfb2b30 449 }
lesmin 0:32c20cfb2b30 450 }
lesmin 0:32c20cfb2b30 451
lesmin 0:32c20cfb2b30 452 int nMessagePos = 0;
lesmin 0:32c20cfb2b30 453 int nSendLen = 0;
lesmin 0:32c20cfb2b30 454 int nSendedLen = nMessageBodyLen;
lesmin 0:32c20cfb2b30 455
lesmin 0:32c20cfb2b30 456 char szMessage[MAX_MSG_BODY];
lesmin 0:32c20cfb2b30 457
lesmin 0:32c20cfb2b30 458 for(nLoop = 1 ; nLoop <= nTotalCount ; nLoop++)
lesmin 0:32c20cfb2b30 459 {
lesmin 0:32c20cfb2b30 460 memset(szMessage, 0, sizeof(szMessage) );
lesmin 0:32c20cfb2b30 461
lesmin 0:32c20cfb2b30 462 if(nSendedLen >= MAX_MSG_BODY)
lesmin 0:32c20cfb2b30 463 {
lesmin 0:32c20cfb2b30 464 nSendLen = MAX_MSG_BODY;
lesmin 0:32c20cfb2b30 465 }
lesmin 0:32c20cfb2b30 466 else
lesmin 0:32c20cfb2b30 467 {
lesmin 0:32c20cfb2b30 468 nSendLen = nSendedLen;
lesmin 0:32c20cfb2b30 469 }
lesmin 0:32c20cfb2b30 470
lesmin 0:32c20cfb2b30 471 memcpy(szMessage, pszMessage+nMessagePos, nSendLen);
lesmin 0:32c20cfb2b30 472
lesmin 0:32c20cfb2b30 473 printf("Send Message Len = %d\n", strlen(szMessage) );
lesmin 0:32c20cfb2b30 474
lesmin 0:32c20cfb2b30 475 nRet = GO_Delivery(pszGWID, pszDeviceID, DELIVERY_COLLECT_DATA, 0x01, szMessage);
lesmin 0:32c20cfb2b30 476
lesmin 0:32c20cfb2b30 477 if(nRet < 0)
lesmin 0:32c20cfb2b30 478 {
lesmin 0:32c20cfb2b30 479 printf("GO_Delivery Error : %d\n", nRet);
lesmin 0:32c20cfb2b30 480
lesmin 0:32c20cfb2b30 481 return 1;
lesmin 0:32c20cfb2b30 482 }
lesmin 0:32c20cfb2b30 483
lesmin 0:32c20cfb2b30 484 nSendedLen -= nSendLen;
lesmin 0:32c20cfb2b30 485 nMessagePos+= nSendedLen;
lesmin 0:32c20cfb2b30 486 }
lesmin 0:32c20cfb2b30 487
lesmin 0:32c20cfb2b30 488 return 0;
lesmin 0:32c20cfb2b30 489 }
lesmin 0:32c20cfb2b30 490
lesmin 0:32c20cfb2b30 491 int Init()
lesmin 0:32c20cfb2b30 492 {
lesmin 0:32c20cfb2b30 493 if(Initialize(szServerIP, nServerPort, pszDomainCode , pszGWAuthID, GMMP_ON_LOG, nErrorLevel, GMMP_NETWORK_ALYWAYS_OFF, "Log") != 0)
lesmin 0:32c20cfb2b30 494 {
lesmin 0:32c20cfb2b30 495 printf("Server Connect Error\n");
lesmin 0:32c20cfb2b30 496
lesmin 0:32c20cfb2b30 497 return 1;
lesmin 0:32c20cfb2b30 498 }
lesmin 0:32c20cfb2b30 499
lesmin 0:32c20cfb2b30 500 SetCallFunction( (void*)Recv);
lesmin 0:32c20cfb2b30 501 SetAuthKey(pszAuthKey);
lesmin 0:32c20cfb2b30 502 SetGWID(pszGWID);
lesmin 0:32c20cfb2b30 503
lesmin 0:32c20cfb2b30 504
lesmin 0:32c20cfb2b30 505 return 0;
lesmin 0:32c20cfb2b30 506 }
lesmin 0:32c20cfb2b30 507
lesmin 0:32c20cfb2b30 508 int main()
lesmin 0:32c20cfb2b30 509 {
lesmin 0:32c20cfb2b30 510 if(Init() != 0)
lesmin 0:32c20cfb2b30 511 {
lesmin 0:32c20cfb2b30 512 printf("Init Error");
lesmin 0:32c20cfb2b30 513 return -1;
lesmin 0:32c20cfb2b30 514 }
lesmin 0:32c20cfb2b30 515
lesmin 0:32c20cfb2b30 516 if(GW_Delivery() != 0)
lesmin 0:32c20cfb2b30 517 {
lesmin 0:32c20cfb2b30 518 printf("GW_Delivery Error");
lesmin 0:32c20cfb2b30 519 return -1;
lesmin 0:32c20cfb2b30 520 }
lesmin 0:32c20cfb2b30 521
lesmin 0:32c20cfb2b30 522 if(Device_Delivery() != 0)
lesmin 0:32c20cfb2b30 523 {
lesmin 0:32c20cfb2b30 524 printf("Device_Delivery Error");
lesmin 0:32c20cfb2b30 525 return -1;
lesmin 0:32c20cfb2b30 526 }
lesmin 0:32c20cfb2b30 527
lesmin 0:32c20cfb2b30 528 return 0;
lesmin 0:32c20cfb2b30 529
lesmin 0:32c20cfb2b30 530 }
lesmin 0:32c20cfb2b30 531 @endcode
lesmin 0:32c20cfb2b30 532 */
lesmin 0:32c20cfb2b30 533 int GO_Delivery(const char* pszGWID,
lesmin 0:32c20cfb2b30 534 const char* pszDeviceID,
lesmin 0:32c20cfb2b30 535 const char cReportType,
lesmin 0:32c20cfb2b30 536 const char cMediaType,
lesmin 0:32c20cfb2b30 537 const char* pszMessageBody);
lesmin 0:32c20cfb2b30 538 /**
lesmin 0:32c20cfb2b30 539 * @}
lesmin 0:32c20cfb2b30 540 */
lesmin 0:32c20cfb2b30 541 /**
lesmin 0:32c20cfb2b30 542 * @defgroup GMMP_Control_Operation M2M GW/Device 단말 제어
lesmin 0:32c20cfb2b30 543 * M2M 단말에 대한 특정 제어 명령을 전달하기 위한 절차로서 GMMP에서는 2가지 제어 방식을 지원한다.\n
lesmin 0:32c20cfb2b30 544 방식 1) TCP Always On 세션을 가지고 있는 M2M 단말인 경우 해당 세션을 통해 직접 제어 메시지를 전달하는 방식이다.\n
lesmin 0:32c20cfb2b30 545 방식 2) SMS 메시지를 통해 제어 명령을 전송하는 방식이다.\n
lesmin 0:32c20cfb2b30 546
lesmin 0:32c20cfb2b30 547 ※ Always ON 단말도 TCP 세션이 끊어져 있는 경우에는 SMS 메시지를 통한 제어 명령을 수신할 수 있다.\n
lesmin 0:32c20cfb2b30 548
lesmin 0:32c20cfb2b30 549 일반적으로 단말 제어 절차는 3단계로 이루어져 있다.\n
lesmin 0:32c20cfb2b30 550 1단계는 단말 제어 메시지를 통해 단말에게 제어 명령을 전달하고 응답하는 절차이다.\n
lesmin 0:32c20cfb2b30 551 2단계는 Control Type 에 따른 부가적인(Optional) 절차로서 Profile 정보, 큰 제어 데이터, FTP 정보, Remote Access 정보등을 획득하는 절차이다.\n
lesmin 0:32c20cfb2b30 552 3단계는 제어 결과를 플랫폼으로 통보하는 절차로서 단말 제어 결과 보고 메시지를 통해 제어 결과를 플랫폼으로 통보하고 그에 대한 결과를 수신한다.\n
lesmin 0:32c20cfb2b30 553
lesmin 0:32c20cfb2b30 554 제어절차시 Control Type 에 따라 M2M GW의 Reboot 절차가 수행될 수 있다.\n
lesmin 0:32c20cfb2b30 555
lesmin 0:32c20cfb2b30 556 단말 제어 메시지의 Control Type은 @ref Define_Control.h의 메시지 타입이 존재하며, 아래의 Control Type인 경우 부가 절차를 따른다.\n
lesmin 0:32c20cfb2b30 557 1. @ref CONTROL_Profile_Reset인 경우 @ref GMMP_ProfileInfo_Operation의 기능을 연계\n
lesmin 0:32c20cfb2b30 558 2. @ref CONTROL_FW_Download, @ref CONTROL_App_Download인 경우 @ref GMMP_FTP_Operation의 기능을 연계\n
lesmin 0:32c20cfb2b30 559 3. @ref CONTROL_Remote_Access인 경우 @ref GMMP_Remote_Operation의 기능을 연계\n
lesmin 0:32c20cfb2b30 560 4. @ref CONTROL_Multimedia_Control_Start인 경우 @ref GMMP_Multimedia_Operation의 기능을 연계
lesmin 0:32c20cfb2b30 561
lesmin 0:32c20cfb2b30 562 전송 패킷 : @ref Struct_Control.h @ref Struct_Control_Opt.h참조
lesmin 0:32c20cfb2b30 563
lesmin 0:32c20cfb2b30 564 * @ingroup GMMP_Control_Operation
lesmin 0:32c20cfb2b30 565 * @{
lesmin 0:32c20cfb2b30 566 */
lesmin 0:32c20cfb2b30 567 /**
lesmin 0:32c20cfb2b30 568 *
lesmin 0:32c20cfb2b30 569 * @param pszGWID OMP로 제공 받은 GW ID값.
lesmin 0:32c20cfb2b30 570 * @param pszDeviceID OMP로 제공 받은 Device ID값.
lesmin 0:32c20cfb2b30 571 * @param nTID T-ID는 M2M GW와 OMP 간의 트랜잭션을 구분하기 위한 값으로서 Request 요청하는 곳에서 할당하며 Response 받은 곳에서는 해당 T-ID 값을 그대로 반환한다.\n
lesmin 0:32c20cfb2b30 572 M2M GW와 OMP에서 T-ID 사용 범위는 다음과 같다.\n
lesmin 0:32c20cfb2b30 573 ※ M2M GW T-ID : 0 ~ 99,999 (10만개)\n
lesmin 0:32c20cfb2b30 574 ※ OMP T-ID : M2M GW가 사용 이외의 값\n
lesmin 0:32c20cfb2b30 575 * @param cControlType Data Collect Period & Time Setting , Reboot, Configuration, Time Sync, Change Server IP/Port(OMP), HB Period, etc\n
lesmin 0:32c20cfb2b30 576 * @ref Define_Operation.h 참조
lesmin 0:32c20cfb2b30 577 * @param cResultCode Result Code (0x00 : Success, other : Fail Reason)\n
lesmin 0:32c20cfb2b30 578 @ref OMPErrorCode.h 참조
lesmin 0:32c20cfb2b30 579 *
lesmin 0:32c20cfb2b30 580 * @return 성공 : GMMMP_SUCCESS, 실패 : @ref ErrorCode.h 참조
lesmin 0:32c20cfb2b30 581 @code GW/Device 제어 샘플 코드 (Sample_Control_TCP_AlwaysOn 샘플 참조)
lesmin 0:32c20cfb2b30 582
lesmin 0:32c20cfb2b30 583 int Recv(GMMPHeader* pstGMMPHeader, void* pBody)
lesmin 0:32c20cfb2b30 584 {
lesmin 0:32c20cfb2b30 585 U8 cMessageType = pstGMMPHeader->ucMessageType;
lesmin 0:32c20cfb2b30 586
lesmin 0:32c20cfb2b30 587 if(cMessageType == OPERATION_PROFILE_RSP)
lesmin 0:32c20cfb2b30 588 {
lesmin 0:32c20cfb2b30 589 stProfileRspHdr* pstRspHdr =(stProfileRspHdr*) pBody;
lesmin 0:32c20cfb2b30 590
lesmin 0:32c20cfb2b30 591 if(pstRspHdr->ucResultCode != 0x00)
lesmin 0:32c20cfb2b30 592 {
lesmin 0:32c20cfb2b30 593 printf("ResultCode : %x - %s\n", pstRspHdr->ucResultCode, GetStringtoOMPErrorCode(pstRspHdr->ucResultCode));
lesmin 0:32c20cfb2b30 594
lesmin 0:32c20cfb2b30 595 return 1;
lesmin 0:32c20cfb2b30 596 }
lesmin 0:32c20cfb2b30 597
lesmin 0:32c20cfb2b30 598 if(strlen((char*)pstRspHdr->usDeviceID) <= 0) //GW Profile 조회
lesmin 0:32c20cfb2b30 599 {
lesmin 0:32c20cfb2b30 600 //주기값 재설정
lesmin 0:32c20cfb2b30 601 //pstRspHdr->unHeartbeatPeriod;
lesmin 0:32c20cfb2b30 602 //pstRspHdr->unReportOffset;
lesmin 0:32c20cfb2b30 603 //pstRspHdr->unReportPeriod;
lesmin 0:32c20cfb2b30 604 //pstRspHdr->unResponseTimeout;
lesmin 0:32c20cfb2b30 605
lesmin 0:32c20cfb2b30 606
lesmin 0:32c20cfb2b30 607 ConvertInt cvtInt;
lesmin 0:32c20cfb2b30 608 memcpy(&cvtInt.usInt, pstRspHdr->unHeartbeatPeriod, sizeof(pstRspHdr->unHeartbeatPeriod) );
lesmin 0:32c20cfb2b30 609
lesmin 0:32c20cfb2b30 610 cvtInt.sU8 = ltobi(cvtInt.sU8);
lesmin 0:32c20cfb2b30 611
lesmin 0:32c20cfb2b30 612 //Profile 요청 수신 값에 Heartbeat 주기 값으로 변경
lesmin 0:32c20cfb2b30 613 if(cvtInt.sU8 > 0)
lesmin 0:32c20cfb2b30 614 {
lesmin 0:32c20cfb2b30 615 nTimerSec = cvtInt.sU8;
lesmin 0:32c20cfb2b30 616 }
lesmin 0:32c20cfb2b30 617 }
lesmin 0:32c20cfb2b30 618 else //Device Profile 조회
lesmin 0:32c20cfb2b30 619 {
lesmin 0:32c20cfb2b30 620 //주기값 재설정
lesmin 0:32c20cfb2b30 621 //pstRspHdr->unReportOffset;
lesmin 0:32c20cfb2b30 622 //pstRspHdr->unReportPeriod;
lesmin 0:32c20cfb2b30 623 //pstRspHdr->unResponseTimeout;
lesmin 0:32c20cfb2b30 624
lesmin 0:32c20cfb2b30 625 }
lesmin 0:32c20cfb2b30 626 }
lesmin 0:32c20cfb2b30 627 else if(pstGMMPHeader->ucMessageType == OPERATION_HEARTBEAT_RSP)
lesmin 0:32c20cfb2b30 628 {
lesmin 0:32c20cfb2b30 629 stHeartBeatMsgReqHdr* pstRspHdr =(stHeartBeatMsgReqHdr*) pBody;
lesmin 0:32c20cfb2b30 630
lesmin 0:32c20cfb2b30 631
lesmin 0:32c20cfb2b30 632 return 0;
lesmin 0:32c20cfb2b30 633 }
lesmin 0:32c20cfb2b30 634
lesmin 0:32c20cfb2b30 635 return 0;
lesmin 0:32c20cfb2b30 636 }
lesmin 0:32c20cfb2b30 637
lesmin 0:32c20cfb2b30 638 void* TimerThread()
lesmin 0:32c20cfb2b30 639 {
lesmin 0:32c20cfb2b30 640 //생략
lesmin 0:32c20cfb2b30 641 }
lesmin 0:32c20cfb2b30 642
lesmin 0:32c20cfb2b30 643 void* TCPReadThread(void *data)
lesmin 0:32c20cfb2b30 644 {
lesmin 0:32c20cfb2b30 645 //생략
lesmin 0:32c20cfb2b30 646 }
lesmin 0:32c20cfb2b30 647
lesmin 0:32c20cfb2b30 648
lesmin 0:32c20cfb2b30 649 int Init()
lesmin 0:32c20cfb2b30 650 {
lesmin 0:32c20cfb2b30 651 //생략
lesmin 0:32c20cfb2b30 652 }
lesmin 0:32c20cfb2b30 653
lesmin 0:32c20cfb2b30 654 int GW_Profile()
lesmin 0:32c20cfb2b30 655 {
lesmin 0:32c20cfb2b30 656 //생략
lesmin 0:32c20cfb2b30 657 }
lesmin 0:32c20cfb2b30 658
lesmin 0:32c20cfb2b30 659 int main()
lesmin 0:32c20cfb2b30 660 {
lesmin 0:32c20cfb2b30 661 if(Init() != 0)
lesmin 0:32c20cfb2b30 662 {
lesmin 0:32c20cfb2b30 663 printf("Init Error");
lesmin 0:32c20cfb2b30 664 return -1;
lesmin 0:32c20cfb2b30 665 }
lesmin 0:32c20cfb2b30 666
lesmin 0:32c20cfb2b30 667 pthread_t thread_id = 0;
lesmin 0:32c20cfb2b30 668 pthread_t timer_id = 0;
lesmin 0:32c20cfb2b30 669
lesmin 0:32c20cfb2b30 670 pthread_create(&thread_id, NULL, TCPReadThread, NULL);
lesmin 0:32c20cfb2b30 671 pthread_create(&timer_id, NULL, TimerThread, NULL);
lesmin 0:32c20cfb2b30 672
lesmin 0:32c20cfb2b30 673 pthread_join(thread_id, NULL);
lesmin 0:32c20cfb2b30 674 pthread_join(timer_id, NULL);
lesmin 0:32c20cfb2b30 675 return 0;
lesmin 0:32c20cfb2b30 676
lesmin 0:32c20cfb2b30 677 }
lesmin 0:32c20cfb2b30 678 @endcode
lesmin 0:32c20cfb2b30 679 */
lesmin 0:32c20cfb2b30 680 int GO_Control(const char* pszGWID,
lesmin 0:32c20cfb2b30 681 const char* pszDeviceID,
lesmin 0:32c20cfb2b30 682 long nTID,
lesmin 0:32c20cfb2b30 683 const char cControlType,
lesmin 0:32c20cfb2b30 684 const char cResultCode);
lesmin 0:32c20cfb2b30 685 /**
lesmin 0:32c20cfb2b30 686 * @}
lesmin 0:32c20cfb2b30 687 */
lesmin 0:32c20cfb2b30 688 /**
lesmin 0:32c20cfb2b30 689 * @defgroup GMMP_Notification_Operation M2M GW/Device 제어 결과 보고
lesmin 0:32c20cfb2b30 690 전송 패킷 : @ref Struct_Notification.h 참조
lesmin 0:32c20cfb2b30 691 * 제어 결과를 플랫폼으로 통보하고 그에 대한 결과를 수신한다.
lesmin 0:32c20cfb2b30 692 */
lesmin 0:32c20cfb2b30 693 /**
lesmin 0:32c20cfb2b30 694 * @ingroup GMMP_Notification_Operation
lesmin 0:32c20cfb2b30 695 * @{
lesmin 0:32c20cfb2b30 696 */
lesmin 0:32c20cfb2b30 697 /**
lesmin 0:32c20cfb2b30 698 *
lesmin 0:32c20cfb2b30 699 * @param pszGWID OMP로 제공 받은 GW ID값.
lesmin 0:32c20cfb2b30 700 * @param pszDeviceID OMP로 제공 받은 Device ID값.
lesmin 0:32c20cfb2b30 701 * @param cControlType 단말 제어 메시지에 수신한 값과 동일한 값을 사용한다
lesmin 0:32c20cfb2b30 702 * @param cResultCode Result Code (0x00 : Success, other : Fail Reason)
lesmin 0:32c20cfb2b30 703 * @param pszMessageBody Data[2048 Byte]
lesmin 0:32c20cfb2b30 704 * @param nMessageBodySize pszMessageBody의 크기
lesmin 0:32c20cfb2b30 705 * @return 성공 : GMMMP_SUCCESS, 실패 : @ref ErrorCode.h 참조
lesmin 0:32c20cfb2b30 706 *
lesmin 0:32c20cfb2b30 707 @code GW/Device 제어 결과 보고 샘플 코드 (Sample_Control_TCP_AlwaysOn 샘플 참조)
lesmin 0:32c20cfb2b30 708
lesmin 0:32c20cfb2b30 709 int Recv(GMMPHeader* pstGMMPHeader, void* pBody)
lesmin 0:32c20cfb2b30 710 {
lesmin 0:32c20cfb2b30 711 U8 cMessageType = pstGMMPHeader->ucMessageType;
lesmin 0:32c20cfb2b30 712
lesmin 0:32c20cfb2b30 713 if(cMessageType == OPERATION_PROFILE_RSP)
lesmin 0:32c20cfb2b30 714 {
lesmin 0:32c20cfb2b30 715 stProfileRspHdr* pstRspHdr =(stProfileRspHdr*) pBody;
lesmin 0:32c20cfb2b30 716
lesmin 0:32c20cfb2b30 717 if(pstRspHdr->ucResultCode != 0x00)
lesmin 0:32c20cfb2b30 718 {
lesmin 0:32c20cfb2b30 719 printf("ResultCode : %x - %s\n", pstRspHdr->ucResultCode, GetStringtoOMPErrorCode(pstRspHdr->ucResultCode));
lesmin 0:32c20cfb2b30 720
lesmin 0:32c20cfb2b30 721 return 1;
lesmin 0:32c20cfb2b30 722 }
lesmin 0:32c20cfb2b30 723
lesmin 0:32c20cfb2b30 724 if(strlen((char*)pstRspHdr->usDeviceID) <= 0) //GW Profile 조회
lesmin 0:32c20cfb2b30 725 {
lesmin 0:32c20cfb2b30 726 //주기값 재설정
lesmin 0:32c20cfb2b30 727 //pstRspHdr->unHeartbeatPeriod;
lesmin 0:32c20cfb2b30 728 //pstRspHdr->unReportOffset;
lesmin 0:32c20cfb2b30 729 //pstRspHdr->unReportPeriod;
lesmin 0:32c20cfb2b30 730 //pstRspHdr->unResponseTimeout;
lesmin 0:32c20cfb2b30 731
lesmin 0:32c20cfb2b30 732
lesmin 0:32c20cfb2b30 733 int nHeartBeat = Char2int((char*)pstRspHdr->unHeartbeatPeriod); //수신받은 Heartbeat 주기 값을 확인.
lesmin 0:32c20cfb2b30 734
lesmin 0:32c20cfb2b30 735 //Profile 요청 수신 값에 Heartbeat 주기 값으로 변경
lesmin 0:32c20cfb2b30 736 if(nHeartBeat > 0)
lesmin 0:32c20cfb2b30 737 {
lesmin 0:32c20cfb2b30 738 nTimerSec = nHeartBeat;
lesmin 0:32c20cfb2b30 739 }
lesmin 0:32c20cfb2b30 740 }
lesmin 0:32c20cfb2b30 741 else //Device Profile 조회
lesmin 0:32c20cfb2b30 742 {
lesmin 0:32c20cfb2b30 743 //주기값 재설정
lesmin 0:32c20cfb2b30 744 //pstRspHdr->unReportOffset;
lesmin 0:32c20cfb2b30 745 //pstRspHdr->unReportPeriod;
lesmin 0:32c20cfb2b30 746 //pstRspHdr->unResponseTimeout;
lesmin 0:32c20cfb2b30 747
lesmin 0:32c20cfb2b30 748 }
lesmin 0:32c20cfb2b30 749 }
lesmin 0:32c20cfb2b30 750 else if(pstGMMPHeader->ucMessageType == OPERATION_HEARTBEAT_RSP)
lesmin 0:32c20cfb2b30 751 {
lesmin 0:32c20cfb2b30 752 stHeartBeatMsgReqHdr* pstRspHdr =(stHeartBeatMsgReqHdr*) pBody;
lesmin 0:32c20cfb2b30 753
lesmin 0:32c20cfb2b30 754
lesmin 0:32c20cfb2b30 755 return 0;
lesmin 0:32c20cfb2b30 756 }
lesmin 0:32c20cfb2b30 757
lesmin 0:32c20cfb2b30 758 return 0;
lesmin 0:32c20cfb2b30 759 }
lesmin 0:32c20cfb2b30 760
lesmin 0:32c20cfb2b30 761 void* TimerThread()
lesmin 0:32c20cfb2b30 762 {
lesmin 0:32c20cfb2b30 763 //생략
lesmin 0:32c20cfb2b30 764 }
lesmin 0:32c20cfb2b30 765
lesmin 0:32c20cfb2b30 766 void* TCPReadThread(void *data)
lesmin 0:32c20cfb2b30 767 {
lesmin 0:32c20cfb2b30 768 //생략
lesmin 0:32c20cfb2b30 769 }
lesmin 0:32c20cfb2b30 770
lesmin 0:32c20cfb2b30 771
lesmin 0:32c20cfb2b30 772 int Init()
lesmin 0:32c20cfb2b30 773 {
lesmin 0:32c20cfb2b30 774 //생략
lesmin 0:32c20cfb2b30 775 }
lesmin 0:32c20cfb2b30 776
lesmin 0:32c20cfb2b30 777 int GW_Profile()
lesmin 0:32c20cfb2b30 778 {
lesmin 0:32c20cfb2b30 779 //생략
lesmin 0:32c20cfb2b30 780 }
lesmin 0:32c20cfb2b30 781
lesmin 0:32c20cfb2b30 782 int main()
lesmin 0:32c20cfb2b30 783 {
lesmin 0:32c20cfb2b30 784 if(Init() != 0)
lesmin 0:32c20cfb2b30 785 {
lesmin 0:32c20cfb2b30 786 printf("Init Error");
lesmin 0:32c20cfb2b30 787 return -1;
lesmin 0:32c20cfb2b30 788 }
lesmin 0:32c20cfb2b30 789
lesmin 0:32c20cfb2b30 790 pthread_t thread_id = 0;
lesmin 0:32c20cfb2b30 791 pthread_t timer_id = 0;
lesmin 0:32c20cfb2b30 792
lesmin 0:32c20cfb2b30 793 pthread_create(&thread_id, NULL, TCPReadThread, NULL);
lesmin 0:32c20cfb2b30 794 pthread_create(&timer_id, NULL, TimerThread, NULL);
lesmin 0:32c20cfb2b30 795
lesmin 0:32c20cfb2b30 796 pthread_join(thread_id, NULL);
lesmin 0:32c20cfb2b30 797 pthread_join(timer_id, NULL);
lesmin 0:32c20cfb2b30 798 return 0;
lesmin 0:32c20cfb2b30 799
lesmin 0:32c20cfb2b30 800 }
lesmin 0:32c20cfb2b30 801 @endcode
lesmin 0:32c20cfb2b30 802 */
lesmin 0:32c20cfb2b30 803 int GO_Notifi(const char* pszGWID,
lesmin 0:32c20cfb2b30 804 const char* pszDeviceID,
lesmin 0:32c20cfb2b30 805 const char cControlType,
lesmin 0:32c20cfb2b30 806 const char cResultCode,
lesmin 0:32c20cfb2b30 807 const char* pszMessageBody,
lesmin 0:32c20cfb2b30 808 const int nMessageBodySize);
lesmin 0:32c20cfb2b30 809 /**
lesmin 0:32c20cfb2b30 810 * @}
lesmin 0:32c20cfb2b30 811 */
lesmin 0:32c20cfb2b30 812
lesmin 0:32c20cfb2b30 813 /**
lesmin 0:32c20cfb2b30 814 * @defgroup GMMP_Heartbeat_Operation M2M GW/Device Heartbeat
lesmin 0:32c20cfb2b30 815 TCP Always On 단말인 경우 해당 세션을 감시하기 위해 주기적으로 Heartbeat 메시지를 전송한다.\n
lesmin 0:32c20cfb2b30 816 M2M 단말은 Profile 정보의 Heartbeat Period 값을 주기로 전송하며, 0인 경우에는 세션을 유지하지 않는다.
lesmin 0:32c20cfb2b30 817
lesmin 0:32c20cfb2b30 818 전송 패킷 : @ref Struct_Heartbeat.h 참조
lesmin 0:32c20cfb2b30 819
lesmin 0:32c20cfb2b30 820 * @ingroup GMMP_Heartbeat_Operation
lesmin 0:32c20cfb2b30 821 * @{
lesmin 0:32c20cfb2b30 822 */
lesmin 0:32c20cfb2b30 823
lesmin 0:32c20cfb2b30 824 /**
lesmin 0:32c20cfb2b30 825 *
lesmin 0:32c20cfb2b30 826 * @param pszGWID GW ID
lesmin 0:32c20cfb2b30 827 * @return 성공 : GMMMP_SUCCESS, 실패 : @ref ErrorCode.h 참조
lesmin 0:32c20cfb2b30 828 @code GW/Device Heartbeat 보고 샘플 코드 (Sample_Control_TCP_AlwaysOn 샘플 참조)
lesmin 0:32c20cfb2b30 829
lesmin 0:32c20cfb2b30 830 int Recv(GMMPHeader* pstGMMPHeader, void* pBody)
lesmin 0:32c20cfb2b30 831 {
lesmin 0:32c20cfb2b30 832 U8 cMessageType = pstGMMPHeader->ucMessageType;
lesmin 0:32c20cfb2b30 833
lesmin 0:32c20cfb2b30 834 if(cMessageType == OPERATION_PROFILE_RSP)
lesmin 0:32c20cfb2b30 835 {
lesmin 0:32c20cfb2b30 836 //생략
lesmin 0:32c20cfb2b30 837 }
lesmin 0:32c20cfb2b30 838 else if(pstGMMPHeader->ucMessageType == OPERATION_HEARTBEAT_RSP)
lesmin 0:32c20cfb2b30 839 {
lesmin 0:32c20cfb2b30 840 stHeartBeatMsgReqHdr* pstRspHdr =(stHeartBeatMsgReqHdr*) pBody;
lesmin 0:32c20cfb2b30 841
lesmin 0:32c20cfb2b30 842
lesmin 0:32c20cfb2b30 843 return 0;
lesmin 0:32c20cfb2b30 844 }
lesmin 0:32c20cfb2b30 845
lesmin 0:32c20cfb2b30 846 return 0;
lesmin 0:32c20cfb2b30 847 }
lesmin 0:32c20cfb2b30 848
lesmin 0:32c20cfb2b30 849 void* TimerThread()
lesmin 0:32c20cfb2b30 850 {
lesmin 0:32c20cfb2b30 851 int nCount = 0;
lesmin 0:32c20cfb2b30 852 while(bTimer == true)
lesmin 0:32c20cfb2b30 853 {
lesmin 0:32c20cfb2b30 854 if(strlen(pszGWAuthID) > 0 && strlen(pszAuthKey) > 0 )
lesmin 0:32c20cfb2b30 855 {
lesmin 0:32c20cfb2b30 856 SetTID(GetTID()+1);
lesmin 0:32c20cfb2b30 857
lesmin 0:32c20cfb2b30 858 int nRet = GMMP_SetHB(pszGWAuthID, pszAuthKey, pszDomainCode, pszGWID);
lesmin 0:32c20cfb2b30 859 if(nRet != GMMP_SUCCESS)
lesmin 0:32c20cfb2b30 860 {
lesmin 0:32c20cfb2b30 861 if(nCount > 2)
lesmin 0:32c20cfb2b30 862 {
lesmin 0:32c20cfb2b30 863 break;
lesmin 0:32c20cfb2b30 864 }
lesmin 0:32c20cfb2b30 865 nCount++;
lesmin 0:32c20cfb2b30 866 }
lesmin 0:32c20cfb2b30 867 }
lesmin 0:32c20cfb2b30 868
lesmin 0:32c20cfb2b30 869 sleep(nTimerSec);
lesmin 0:32c20cfb2b30 870 }
lesmin 0:32c20cfb2b30 871
lesmin 0:32c20cfb2b30 872 return NULL;
lesmin 0:32c20cfb2b30 873 }
lesmin 0:32c20cfb2b30 874
lesmin 0:32c20cfb2b30 875 void* TCPReadThread(void *data)
lesmin 0:32c20cfb2b30 876 {
lesmin 0:32c20cfb2b30 877 //생략
lesmin 0:32c20cfb2b30 878 }
lesmin 0:32c20cfb2b30 879
lesmin 0:32c20cfb2b30 880
lesmin 0:32c20cfb2b30 881 int Init()
lesmin 0:32c20cfb2b30 882 {
lesmin 0:32c20cfb2b30 883 //생략
lesmin 0:32c20cfb2b30 884 }
lesmin 0:32c20cfb2b30 885
lesmin 0:32c20cfb2b30 886 int GW_Profile()
lesmin 0:32c20cfb2b30 887 {
lesmin 0:32c20cfb2b30 888 //생략
lesmin 0:32c20cfb2b30 889 }
lesmin 0:32c20cfb2b30 890
lesmin 0:32c20cfb2b30 891 int main()
lesmin 0:32c20cfb2b30 892 {
lesmin 0:32c20cfb2b30 893 if(Init() != 0)
lesmin 0:32c20cfb2b30 894 {
lesmin 0:32c20cfb2b30 895 printf("Init Error");
lesmin 0:32c20cfb2b30 896 return -1;
lesmin 0:32c20cfb2b30 897 }
lesmin 0:32c20cfb2b30 898
lesmin 0:32c20cfb2b30 899 pthread_t thread_id = 0;
lesmin 0:32c20cfb2b30 900 pthread_t timer_id = 0;
lesmin 0:32c20cfb2b30 901
lesmin 0:32c20cfb2b30 902 pthread_create(&thread_id, NULL, TCPReadThread, NULL);
lesmin 0:32c20cfb2b30 903 pthread_create(&timer_id, NULL, TimerThread, NULL);
lesmin 0:32c20cfb2b30 904
lesmin 0:32c20cfb2b30 905 pthread_join(thread_id, NULL);
lesmin 0:32c20cfb2b30 906 pthread_join(timer_id, NULL);
lesmin 0:32c20cfb2b30 907 return 0;
lesmin 0:32c20cfb2b30 908
lesmin 0:32c20cfb2b30 909 }
lesmin 0:32c20cfb2b30 910
lesmin 0:32c20cfb2b30 911 @endcode
lesmin 0:32c20cfb2b30 912 */
lesmin 0:32c20cfb2b30 913 int GO_HB(const char* pszGWID);
lesmin 0:32c20cfb2b30 914 /**
lesmin 0:32c20cfb2b30 915 * @}
lesmin 0:32c20cfb2b30 916 */
lesmin 0:32c20cfb2b30 917
lesmin 0:32c20cfb2b30 918 int OG_Reg_Recv(GMMPHeader* pstGMMPHeader, stGwRegistrationRspHdr* pstGWBody, stDeviceRegistrationRspHdr* pstDeviceBody);
lesmin 0:32c20cfb2b30 919 int OG_DeReg_Recv(GMMPHeader* pstGMMPHeader, stGwDeRegistrationRspHdr* pstGWBody, stDeviceDeRegistrationRspHdr* pstDeviceBody);
lesmin 0:32c20cfb2b30 920 int OG_Profile_Recv(GMMPHeader* pstGMMPHeader, stProfileRspHdr* pstBody);
lesmin 0:32c20cfb2b30 921 int OG_Delivery_Recv(GMMPHeader* pstGMMPHeader, stPacketDeliveryRspHdr* pstBody);
lesmin 0:32c20cfb2b30 922 int OG_Ctrl_Recv(GMMPHeader* pstGMMPHeader, stControlReqHdr* pstBody);
lesmin 0:32c20cfb2b30 923 int OG_HB_Recv(GMMPHeader* pstGMMPHeader, stHeartBeatMsgRspHdr* pstBody);
lesmin 0:32c20cfb2b30 924 int OG_Notifi_Recv(GMMPHeader* pstGMMPHeader, stNotificationRspHdr* pstBody);
lesmin 0:32c20cfb2b30 925
lesmin 0:32c20cfb2b30 926 /**
lesmin 0:32c20cfb2b30 927 * @brief GMMP 라이브러리 초기화 및 기본 정보 입력
lesmin 0:32c20cfb2b30 928 * @param serverIp 접속할 서버 IP, 4 byte array. @ref g_serverIp에 저장된다,
lesmin 0:32c20cfb2b30 929 * @param nPort 접속할 서버 port, @ref g_nServerPort에 저장된다.
lesmin 0:32c20cfb2b30 930 * @param pszDomainCode OMP Portal을 통해 등록된 서비스 코드, @ref g_szDomainCode에 저장된다,
lesmin 0:32c20cfb2b30 931 * @param pszGWAuthID M2M GW 의 Serial Number 값이며, MSISDN 또는 MAC Address값을 사용할 수도 있다. @ref g_szAuthID에 저장된다.
lesmin 0:32c20cfb2b30 932 * @param nGMMPMode 로그 저장 유무, GMMP_OFF_LOG, GMMP_ON_LOG
lesmin 0:32c20cfb2b30 933 * @param nErrorLevel 로그 출력 레벨
lesmin 0:32c20cfb2b30 934 * @param nNetwrokType 통신 타입
lesmin 0:32c20cfb2b30 935 * @param mac MAC Address. 6 byte array.
lesmin 0:32c20cfb2b30 936 * @return 성공 : GMMP_SUCCESS, 실패: 1이상 , 에러코드 참조
lesmin 0:32c20cfb2b30 937 */
lesmin 0:32c20cfb2b30 938 int Initialize(byte* serverIp,
lesmin 0:32c20cfb2b30 939 const int nPort,
lesmin 0:32c20cfb2b30 940 const char* pszDomainCode,
lesmin 0:32c20cfb2b30 941 const char* pszGWAuthID,
lesmin 0:32c20cfb2b30 942 byte* mac);
lesmin 0:32c20cfb2b30 943
lesmin 0:32c20cfb2b30 944 /**
lesmin 0:32c20cfb2b30 945 * @brief GMMP 라이브러리 Uninitialize
lesmin 0:32c20cfb2b30 946 */
lesmin 0:32c20cfb2b30 947 void Uninitialize();
lesmin 0:32c20cfb2b30 948
lesmin 0:32c20cfb2b30 949 /**
lesmin 0:32c20cfb2b30 950 * @brief TCP Always On 에서 사용하는 함수\n
lesmin 0:32c20cfb2b30 951 * Thread를 생성 하고 이 함수를 연결하여 사용한다.
lesmin 0:32c20cfb2b30 952 * @param pstGMMPHeader @ref GMMPHeader 구조체 포인트
lesmin 0:32c20cfb2b30 953 * @param pBody Body 메시지 구조체 포인트
lesmin 0:32c20cfb2b30 954 * @return 성공 : GMMMP_SUCCESS, 실패 : @ref ErrorCode.h 참조
lesmin 0:32c20cfb2b30 955 */
lesmin 0:32c20cfb2b30 956 int GetReadData(GMMPHeader* pstGMMPHeader, void** pBody);
lesmin 0:32c20cfb2b30 957
lesmin 0:32c20cfb2b30 958 /**
lesmin 0:32c20cfb2b30 959 *char 타입의 데이터를 int로 변환한다.
lesmin 0:32c20cfb2b30 960 * @param pBuffer in
lesmin 0:32c20cfb2b30 961 * @param nSize in pBuffer size
lesmin 0:32c20cfb2b30 962 * @return int
lesmin 0:32c20cfb2b30 963 */
lesmin 0:32c20cfb2b30 964 long Char2int(void* pBuffer, int nSize);
lesmin 0:32c20cfb2b30 965
lesmin 0:32c20cfb2b30 966 /**
lesmin 0:32c20cfb2b30 967 *char 타입의 데이터를 short로 변환한다.
lesmin 0:32c20cfb2b30 968 * @param pBuffer
lesmin 0:32c20cfb2b30 969 * @param nSize
lesmin 0:32c20cfb2b30 970 * @return
lesmin 0:32c20cfb2b30 971 */
lesmin 0:32c20cfb2b30 972 int Char2short(void* pBuffer, int nSize);
lesmin 0:32c20cfb2b30 973
lesmin 0:32c20cfb2b30 974 /**
lesmin 0:32c20cfb2b30 975 *@fn void InitMemory();
lesmin 0:32c20cfb2b30 976 *@brief 내부 변수 초기화
lesmin 0:32c20cfb2b30 977 */
lesmin 0:32c20cfb2b30 978 void InitMemory();
lesmin 0:32c20cfb2b30 979
lesmin 0:32c20cfb2b30 980 /**
lesmin 0:32c20cfb2b30 981 * @brief OMP로 제공 받은 AuthKey값을 저장하는 함수
lesmin 0:32c20cfb2b30 982 * @param pszAuthKey OMP로 부터 제공 받은 Auth Key 값
lesmin 0:32c20cfb2b30 983 */
lesmin 0:32c20cfb2b30 984 void SetAuthKey(const char* pszAuthKey);
lesmin 0:32c20cfb2b30 985 /**
lesmin 0:32c20cfb2b30 986 @brief 저장된 AuthKey
lesmin 0:32c20cfb2b30 987 * @return 저장된 Auth Key
lesmin 0:32c20cfb2b30 988 */
lesmin 0:32c20cfb2b30 989 char* GetAuthKey();
lesmin 0:32c20cfb2b30 990
lesmin 0:32c20cfb2b30 991
lesmin 0:32c20cfb2b30 992 /**
lesmin 0:32c20cfb2b30 993 * @brief OMP로 제공 받은 GW ID값을 저장하는 함수
lesmin 0:32c20cfb2b30 994 * @param pszGWID OMP로 부터 제공 받은 GW ID 값
lesmin 0:32c20cfb2b30 995 */
lesmin 0:32c20cfb2b30 996 void SetGWID(const char* pszGWID);
lesmin 0:32c20cfb2b30 997
lesmin 0:32c20cfb2b30 998 /**
lesmin 0:32c20cfb2b30 999 *
lesmin 0:32c20cfb2b30 1000 * @return 저장된 GW ID
lesmin 0:32c20cfb2b30 1001 */
lesmin 0:32c20cfb2b30 1002 char* GetGWID();
lesmin 0:32c20cfb2b30 1003
lesmin 0:32c20cfb2b30 1004 /**
lesmin 0:32c20cfb2b30 1005 *@brief 서버 정보 및 GW Auth ID, DomainCode를 저장한다.
lesmin 0:32c20cfb2b30 1006 * @param serverIp Server IP
lesmin 0:32c20cfb2b30 1007 * @param nPort Server Port
lesmin 0:32c20cfb2b30 1008 * @param pszAuthID Auth ID
lesmin 0:32c20cfb2b30 1009 * @param pszDomainCode DomainCode
lesmin 0:32c20cfb2b30 1010 * @return 성공 : GMMP_SUCCESS, 실패 : LIB_PARAM_ERROR
lesmin 0:32c20cfb2b30 1011 */
lesmin 0:32c20cfb2b30 1012 int SetServerInfo(byte* serverIp, int nPort, const char* pszAuthID, const char* pszDomainCode);
lesmin 0:32c20cfb2b30 1013
lesmin 0:32c20cfb2b30 1014 /**
lesmin 0:32c20cfb2b30 1015 *@brief OMP서버로 부터 수신한 패킷을 제공할 콜백함수 저장 함수
lesmin 0:32c20cfb2b30 1016 * @param pCallFunctionName 콜백을 제공 받을 함수 포인트
lesmin 0:32c20cfb2b30 1017 */
lesmin 0:32c20cfb2b30 1018 void SetCallFunction(int (* pCallFunctionName)(GMMPHeader* pstGMMPHeader, void* pstBody));
lesmin 0:32c20cfb2b30 1019
lesmin 0:32c20cfb2b30 1020 #endif /* GMMP_H_ */