Modified for W5500 Ethernet initialize Added the Ethernet interface re-initialize code Added the connection retry

Dependents:   ThingPlug_Ethernet_Example

Fork of GMMP_mbed by Eric Jung

Committer:
hkjung
Date:
Wed Aug 12 08:58:58 2015 +0000
Revision:
5:9bbb6933559b
Parent:
0:7e575e5f88ec
Ethernet interface reinitialize code added

Who changed what in which revision?

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