/* * Copyright (C) 2019-2025 SGCC Holding Limited */ #include #include #include #include "infra_config.h" #include "infra_types.h" #include "infra_defs.h" #include "infra_compat.h" #include "infra_state.h" #include "dev_model_api.h" #include "wrappers.h" #include "cJSON.h" #ifdef ATM_ENABLED #include "at_api.h" #endif #include "protocol.h" #include "interface.h" #ifdef DYNAMIC_REGISTER #include "dynreg_api.h" #endif #ifdef HTTP2_COMM_ENABLED #include "http2_upload_api.h" #define UPLOAD_RETRY_TIME 50 #define HTTP2_ONLINE_SERVER_URL "a1IgnOND7vI.iot-as-http2.cn-shanghai.aliyuncs.com" #define HTTP2_ONLINE_SERVER_PORT 443 #endif static int upload_result = 1; static char g_upload_id[50] = {0}; static unsigned char is_connected = 0; static int main_loop_step = EVS_LINKKIT_OPEN; #if defined(PLATFORM_IS_DEBUG) #define PROTOCOL_TRACE(...) \ do \ { \ HAL_Printf("\033[1;32;40m%s.%d: ", __func__, __LINE__); \ HAL_Printf(__VA_ARGS__); \ HAL_Printf("\033[0m\r\n"); \ } while (0) #else #define PROTOCOL_TRACE(...) #endif #define EVS_YIELD_TIMEOUT_MS (200) unsigned int strtoint(char s[]) { unsigned int i; unsigned int num = 0; for (i = 0; s[i] >= '0' && s[i] <= '9'; i++) { num = 10 * num + (s[i] - '0'); } return num; } void bcd2str(unsigned char byte[], char str[], int len) { int i, index = 0; for (i = 0; i < len; i++) { char hex1; char hex2; int value = byte[i]; int v1 = value / 16; int v2 = value % 16; if (v1 >= 0 && v1 <= 9) hex1 = (char)(48 + v1); else hex1 = (char)(55 + v1); if (v2 >= 0 && v2 <= 9) hex2 = (char)(48 + v2); else hex2 = (char)(55 + v2); str[index++] = hex1; str[index++] = hex2; } } int stringToHex(char *str, unsigned char *hex) { char *p = NULL; char High = 0; char Low = 0; int Len = 0; int count = 0; p = str; Len = strlen(p); while (count < (Len / 2)) { High = ((*p > '9') && ((*p <= 'F') || (*p <= 'f'))) ? *p - 48 - 7 : *p - 48; Low = (*(++p) > '9' && ((*p <= 'F') || (*p <= 'f'))) ? *p - 48 - 7 : *p - 48; hex[count] = ((High & 0x0f) << 4 | (Low & 0x0f)); p++; count++; } if (0 != Len % 2) { hex[count++] = ((*p > '9') && ((*p <= 'F') || (*p <= 'f'))) ? *p - 48 - 7 : *p - 48; } return Len / 2 + Len % 2; } typedef struct { int master_devid; int cloud_connected; int master_initialized; } evs_user_ctx_t; static evs_user_ctx_t evs_g_user_ctx; iotx_linkkit_dev_meta_info_t master_meta_info; typedef struct { unsigned char gunNo; unsigned char getTerminalFlag; unsigned char getServerAuthFlag; unsigned char getAuthChargeFlag; unsigned char PKid; unsigned char MAC1[4]; unsigned char MAC2[4]; unsigned char TAC[4]; unsigned char randomC[4]; unsigned char cardBalance[4]; unsigned char tradeSn[2]; unsigned char tradeTime[7]; unsigned char terminalSn[6]; unsigned char authVer; unsigned char authFlag; unsigned char usr_id[10]; unsigned char psy_id[8]; unsigned char usrId[8]; } evs_smart_gun_auth_process_data; static evs_smart_gun_auth_process_data gun_auth_process_data[EVS_MAX_PORT_NUM]; /** * @brief 瑙f瀽鎵€鏈夊睘鎬э拷?锟界疆鐨勶拷? * @param request 鎸囧悜灞炴€э拷?锟界疆璇锋眰payload鐨勬寚锟�? * @param request_len 灞炴€э拷?锟界疆璇锋眰鐨刾ayload闀垮害 * @return 瑙f瀽鎴愬姛: 0, 瑙f瀽澶辫触: <0 */ int app_parse_property(const char *request, unsigned int request_len) { cJSON *structcnt = NULL; cJSON *req = cJSON_Parse(request); if (req == NULL || !cJSON_IsObject(req)) { return STATE_DEV_MODEL_WRONG_JSON_FORMAT; } structcnt = cJSON_GetObjectItem(req, "structCnt"); if (structcnt != NULL && cJSON_IsObject(structcnt)) { PROTOCOL_TRACE("struct property id: structCnt"); } cJSON_Delete(req); return 0; } void upload_file_result(const char *file_path, int result, const char *store_id, void *user_data) { upload_result = result; PROTOCOL_TRACE("=========== file_path = %s, result = %d ===========", file_path, upload_result); } void upload_id_received_handle(const char *file_path, const char *upload_id, void *user_data) { PROTOCOL_TRACE("=========== file_path = %s, upload_id = %s ===========", file_path, upload_id); if (upload_id != NULL) { memset(g_upload_id, 0, sizeof(g_upload_id)); strncpy(g_upload_id, upload_id, sizeof(g_upload_id) - 1); } } /** http寤虹珛杩炴垚鍔熶簨浠跺洖锟�? */ static void _on_http2_reconnect(void) { PROTOCOL_TRACE("http2 reconnected"); is_connected = 1; } /** http锟�?寮€杩炴帴浜嬩欢鍥炶皟 */ static void _on_http2_disconnect(void) { PROTOCOL_TRACE("http2 disconnected"); is_connected = 0; } /** IOT寤虹珛杩炴垚鍔熶簨浠跺洖锟�? */ static int user_connected_event_handler(void) { void *callback; evs_g_user_ctx.cloud_connected = 1; callback = evs_service_callback(EVS_CONNECT_SUCC); if (callback) { ((int (*)(void))callback)(); } return 0; } /** IOT锟�?寮€杩炴帴浜嬩欢鍥炶皟 */ static int user_disconnected_event_handler(void) { void *callback; evs_g_user_ctx.cloud_connected = 0; callback = evs_service_callback(EVS_DISCONNECTED); if (callback) { ((int (*)(void))callback)(); } return 0; } /* 璁撅拷?锟藉垵濮嬪寲鎴愬姛浜嬩欢鍥炶皟 */ static int user_initialized(const int devid) { evs_g_user_ctx.master_initialized = 1; return 0; } /** 浜嬩欢鍥炶皟锛氭帴鏀跺埌浜戯拷??鍥烇拷?锟藉睘鎬т笂鎶ュ簲锟�? **/ static int user_report_reply_event_handler(const int devid, const int msgid, const int code, const char *reply, const int reply_len) { void *callback; callback = evs_service_callback(EVS_REPORT_REPLY); if (callback) { ((int (*)(const int msgid, const int code, const char *reply, const int reply_len))callback)(msgid, code, reply, reply_len); } return 0; } /** 浜嬩欢鍥炶皟锛氭帴鏀跺埌浜戯拷??鍥烇拷?锟界殑浜嬩欢涓婃姤搴旂瓟 **/ static int user_trigger_event_reply_event_handler(const int devid, const int msgid, const int code, const char *eventid, const int eventid_len, const char *message, const int message_len) { void *callback; callback = evs_service_callback(EVS_TRIGGER_EVENT_REPLY); if (callback) { ((int (*)(const int msgid, const int code, const char *eventid, const int eventid_len, const char *message, const int message_len))callback)(msgid, code, eventid, eventid_len, message, message_len); } return 0; } /** 浜嬩欢鍥炶皟锛氭帴鏀跺埌浜戯拷??涓嬪彂鐨勫睘鎬э拷?锟界疆 **/ static int user_property_set_event_handler(const int devid, const char *request, const int request_len) { int res = 0; PROTOCOL_TRACE("Property Set Received, Request: %s", request); app_parse_property(request, request_len); res = IOT_Linkkit_Report(evs_g_user_ctx.master_devid, ITM_MSG_POST_PROPERTY, (unsigned char *)request, request_len); PROTOCOL_TRACE("Post Property return: %d", res); return res; } /** 浜嬩欢鍥炶皟锛氭帴鏀跺埌浜戯拷??鍥烇拷?锟界殑鏃堕棿锟�? **/ static int user_timestamp_reply_event_handler(const char *timestamp) { PROTOCOL_TRACE("Current Timestamp: %s", timestamp); char time_buf[11] = {0}; memcpy(time_buf, timestamp, sizeof(time_buf) - 1); unsigned int time = strtoint(time_buf); void *callback; callback = evs_service_callback(EVS_TIME_SYNC); if (callback) { ((int (*)(unsigned int))callback)(time); } return 0; } /** FOTA浜嬩欢鍥炶皟澶勭悊 **/ static int user_fota_event_handler(int type, const char *version) { /* 0 - new firmware exist, query the new firmware */ if (type == 0) { PROTOCOL_TRACE("-------2. New Firmware Version: %s", version); memcpy(&new_firmware_version[0], version, strlen(version)); HAL_Printf("-------2. New Firmware Version: %s-------\n", new_firmware_version); //version); void *callback; callback = evs_service_callback(EVS_OTA_UPDATE); if (callback) { ((int (*)(const char *))callback)(version); } } return 0; } /** 浜嬩欢鍥炶皟锛氭帴鏀跺埌浜戯拷??閿欙拷??淇℃伅 **/ static int user_cloud_error_handler(const int code, const char *data, const char *detail) { PROTOCOL_TRACE("code =%d ,data=%s, detail=%s", code, data, detail); return 0; } /** 浜嬩欢鍥炶皟锛氶€氳繃鍔ㄦ€佹敞鍐岃幏鍙栧埌DeviceSecret **/ static int dynreg_device_secret(const char *device_secret) { PROTOCOL_TRACE("device secret: %s", device_secret); return 0; } /** 浜嬩欢鍥炶皟: SDK鍐呴儴杩愶拷?锟界姸鎬佹墦锟�? **/ static int user_sdk_state_dump(int ev, const char *msg) { void *callback; PROTOCOL_TRACE("received state event, -0x%04x(%s)\n", -ev, msg); callback = evs_service_callback(EVS_STATE_EVERYTHING); if (callback) { ((int (*)(int ev, const char *msg))callback)(ev, msg); } return 0; } static int evs_service_get_config_handler(const char *request, char **response, int *response_len) { void *callback; int i = 0; evs_data_dev_config service_dev_feedback_config_data; callback = evs_service_callback(EVS_CONF_GET_SRV); if (callback) { ((int (*)(const evs_data_dev_config *))callback)(&service_dev_feedback_config_data); } cJSON *response_root = cJSON_CreateObject(); cJSON *qrCodeArray; cJSON_AddNumberToObject(response_root, "equipParamFreq", service_dev_feedback_config_data.equipParamFreq); cJSON_AddNumberToObject(response_root, "gunElecFreq", service_dev_feedback_config_data.gunElecFreq); cJSON_AddNumberToObject(response_root, "nonElecFreq", service_dev_feedback_config_data.nonElecFreq); cJSON_AddNumberToObject(response_root, "faultWarnings", service_dev_feedback_config_data.faultWarnings); cJSON_AddNumberToObject(response_root, "acMeterFreq", service_dev_feedback_config_data.acMeterFreq); cJSON_AddNumberToObject(response_root, "dcMeterFreq", service_dev_feedback_config_data.dcMeterFreq); cJSON_AddNumberToObject(response_root, "offlinChaLen", service_dev_feedback_config_data.offlinChaLen); cJSON_AddNumberToObject(response_root, "grndLock", service_dev_feedback_config_data.grndLock); cJSON_AddNumberToObject(response_root, "doorLock", service_dev_feedback_config_data.doorLock); cJSON_AddItemToObject(response_root, "qrCode", qrCodeArray = cJSON_CreateArray()); for (i = 0; i < EVS_MAX_PORT_NUM; i++) { // cJSON_AddStringToArray(qrCodeArray, service_dev_feedback_config_data.qrCode[i]); cJSON_AddItemToArray(qrCodeArray, cJSON_CreateString(service_dev_feedback_config_data.qrCode[i])); } cJSON_AddNumberToObject(response_root, "s2CloseTime", service_dev_feedback_config_data.s2CloseTime); cJSON_AddNumberToObject(response_root, "s2OpenTime", service_dev_feedback_config_data.s2OpenTime); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(response_root); return 0; } static int evs_service_get_Maintain_handler(const char *request, char **response, int *response_len) { void *callback; evs_service_feedback_maintain_query service_feedback_maintain_status; callback = evs_service_callback(EVS_MAINTAIN_RESULT_SRV); if (callback) { ((int (*)(const evs_service_feedback_maintain_query *))callback)(&service_feedback_maintain_status); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddNumberToObject(response_root, "ctrlType", service_feedback_maintain_status.ctrlType); cJSON_AddNumberToObject(response_root, "result", service_feedback_maintain_status.result); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(response_root); return 0; } static int evs_service_update_config_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_data_dev_config service_dev_config_data; int feedback_data; int i = 0; memset(&service_dev_config_data, 0, sizeof(service_dev_config_data)); cJSON *item_equipParamFreq = cJSON_GetObjectItem(root, "equipParamFreq"); if (item_equipParamFreq != NULL && cJSON_IsNumber(item_equipParamFreq)) { service_dev_config_data.equipParamFreq = item_equipParamFreq->valueint; } cJSON *item_gunElecFeeq = cJSON_GetObjectItem(root, "gunElecFreq"); if (item_gunElecFeeq != NULL && cJSON_IsNumber(item_gunElecFeeq)) { service_dev_config_data.gunElecFreq = item_gunElecFeeq->valueint; } cJSON *item_nonElecFreq = cJSON_GetObjectItem(root, "nonElecFreq"); if (item_nonElecFreq != NULL && cJSON_IsNumber(item_nonElecFreq)) { service_dev_config_data.nonElecFreq = item_nonElecFreq->valueint; } cJSON *item_faultWarnings = cJSON_GetObjectItem(root, "faultWarnings"); if (item_faultWarnings != NULL && cJSON_IsNumber(item_faultWarnings)) { service_dev_config_data.faultWarnings = item_faultWarnings->valueint; } cJSON *item_acMeterFreq = cJSON_GetObjectItem(root, "acMeterFreq"); if (item_acMeterFreq != NULL && cJSON_IsNumber(item_acMeterFreq)) { service_dev_config_data.acMeterFreq = item_acMeterFreq->valueint; } cJSON *item_dcMeterFreq = cJSON_GetObjectItem(root, "dcMeterFreq"); if (item_dcMeterFreq != NULL && cJSON_IsNumber(item_dcMeterFreq)) { service_dev_config_data.dcMeterFreq = item_dcMeterFreq->valueint; } cJSON *item_offlinChaLen = cJSON_GetObjectItem(root, "offlinChaLen"); if (item_offlinChaLen != NULL && cJSON_IsNumber(item_offlinChaLen)) { service_dev_config_data.offlinChaLen = item_offlinChaLen->valueint; } cJSON *item_grndLock = cJSON_GetObjectItem(root, "grndLock"); if (item_grndLock != NULL && cJSON_IsNumber(item_grndLock)) { service_dev_config_data.grndLock = item_grndLock->valueint; } cJSON *item_doorLock = cJSON_GetObjectItem(root, "doorLock"); if (item_doorLock != NULL && cJSON_IsNumber(item_doorLock)) { service_dev_config_data.doorLock = item_doorLock->valueint; } cJSON *item_qrCode = cJSON_GetObjectItem(root, "qrCode"); if (item_qrCode != NULL && cJSON_IsArray(item_qrCode)) { cJSON *item_arrayData; int qrcode_len = 0; int qrcode_num = cJSON_GetArraySize(item_qrCode); qrcode_num = (qrcode_num <= EVS_MAX_PORT_NUM) ? qrcode_num : EVS_MAX_PORT_NUM; for (i = 0; i < qrcode_num; i++) { item_arrayData = cJSON_GetArrayItem(item_qrCode, i); qrcode_len = strlen(item_arrayData->valuestring); if (qrcode_len < EVS_MAX_QRCODE_LEN) { memcpy(service_dev_config_data.qrCode[i], item_arrayData->valuestring, qrcode_len); } else { PROTOCOL_TRACE("QRCode is too big!"); } } } cJSON *item_s2CloseTime = cJSON_GetObjectItem(root, "s2CloseTime"); if (item_s2CloseTime != NULL && cJSON_IsNumber(item_s2CloseTime)) { service_dev_config_data.s2CloseTime = item_s2CloseTime->valueint; } cJSON *item_s2OpenTime = cJSON_GetObjectItem(root, "s2OpenTime"); if (item_s2OpenTime != NULL && cJSON_IsNumber(item_s2OpenTime)) { service_dev_config_data.s2OpenTime = item_s2OpenTime->valueint; } callback = evs_service_callback(EVS_CONF_UPDATE_SRV); if (callback) { ((int (*)(const evs_data_dev_config *, int *))callback)(&service_dev_config_data, &feedback_data); } cJSON *response_root = cJSON_CreateObject(); if ((feedback_data != 10) && (feedback_data != 11)) // 蹇呴』澶勭悊杩斿洖鍊硷紝骞惰繑鍥炵粨鏋滐紝榛橈拷?锟藉洖澶嶅け锟�? { cJSON_AddNumberToObject(response_root, "resCode", 11); } else { cJSON_AddNumberToObject(response_root, "resCode", feedback_data); } *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(root); cJSON_Delete(response_root); return 0; } static int evs_service_issue_feeModel_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_issue_feeModel service_feeModel_data; evs_service_feedback_feeModel service_feedback_feeModel_data; int i = 0; memset(&service_feeModel_data, 0, sizeof(service_feeModel_data)); cJSON *item_feeModelId = cJSON_GetObjectItem(root, "feeModelId"); if (item_feeModelId != NULL && cJSON_IsString(item_feeModelId)) { char *feeModelId = item_feeModelId->valuestring; memcpy(service_feeModel_data.feeModelId, feeModelId, strlen(feeModelId)); } cJSON *item_eleTimeNum = cJSON_GetObjectItem(root, "timeNum"); if (item_eleTimeNum != NULL && cJSON_IsNumber(item_eleTimeNum)) { service_feeModel_data.timeNum = item_eleTimeNum->valueint; } cJSON *item_TimeSeg = cJSON_GetObjectItem(root, "timeSeg"); cJSON *array_timeSeg = NULL; if (item_TimeSeg != NULL && cJSON_IsArray(item_TimeSeg)) { for (i = 0; i < service_feeModel_data.timeNum; i++) { array_timeSeg = cJSON_GetArrayItem(item_TimeSeg, i); memcpy(service_feeModel_data.timeSeg[i], array_timeSeg->valuestring, strlen(array_timeSeg->valuestring)); } } cJSON *item_chargeFee = cJSON_GetObjectItem(root, "chargeFee"); cJSON *arrary_chargeFee = NULL; if (item_chargeFee != NULL && cJSON_IsArray(item_chargeFee)) { for (i = 0; i < service_feeModel_data.timeNum; i++) { arrary_chargeFee = cJSON_GetArrayItem(item_chargeFee, i); service_feeModel_data.chargeFee[i] = arrary_chargeFee->valueint; } } cJSON *item_serviceFee = cJSON_GetObjectItem(root, "serviceFee"); cJSON *arrary_serviceFee = NULL; if (item_serviceFee != NULL && cJSON_IsArray(item_serviceFee)) { for (i = 0; i < service_feeModel_data.timeNum; i++) { arrary_serviceFee = cJSON_GetArrayItem(item_serviceFee, i); service_feeModel_data.serviceFee[i] = arrary_serviceFee->valueint; } } callback = evs_service_callback(EVS_FEE_MODEL_UPDATE_SRV); if (callback) { ((int (*)(const evs_service_issue_feeModel *, evs_service_feedback_feeModel *))callback)(&service_feeModel_data, &service_feedback_feeModel_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddStringToObject(response_root, "feeModelId", service_feedback_feeModel_data.feeModelId); cJSON_AddNumberToObject(response_root, "result", service_feedback_feeModel_data.result); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(root); cJSON_Delete(response_root); return 0; } static int evs_service_startCharge_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_startCharge service_charge_data; evs_service_feedback_startCharge service_feedback_startCharge_data; memset(&service_charge_data, 0, sizeof(service_charge_data)); /* Parse json */ cJSON *item_gunNo = cJSON_GetObjectItem(root, "gunNo"); if (item_gunNo != NULL && cJSON_IsNumber(item_gunNo)) { service_charge_data.gunNo = item_gunNo->valueint; } cJSON *item_preTradeNo = cJSON_GetObjectItem(root, "preTradeNo"); if (item_preTradeNo != NULL && cJSON_IsString(item_preTradeNo)) { memcpy(service_charge_data.preTradeNo, item_preTradeNo->valuestring, strlen(item_preTradeNo->valuestring)); } cJSON *item_startType = cJSON_GetObjectItem(root, "startType"); if (item_startType != NULL && cJSON_IsNumber(item_startType)) { service_charge_data.startType = item_startType->valueint; } cJSON *item_chargeMode = cJSON_GetObjectItem(root, "chargeMode"); if (item_chargeMode != NULL && cJSON_IsNumber(item_chargeMode)) { service_charge_data.chargeMode = item_chargeMode->valueint; } cJSON *item_limitData = cJSON_GetObjectItem(root, "limitData"); if (item_limitData != NULL && cJSON_IsNumber(item_limitData)) { service_charge_data.limitData = item_limitData->valueint; } cJSON *item_stopCode = cJSON_GetObjectItem(root, "stopCode"); if (item_stopCode != NULL && cJSON_IsNumber(item_stopCode)) { service_charge_data.stopCode = item_stopCode->valueint; } cJSON *item_startMode = cJSON_GetObjectItem(root, "startMode"); if (item_startMode != NULL && cJSON_IsNumber(item_startMode)) { service_charge_data.startMode = item_startMode->valueint; } cJSON *item_insertGunTime = cJSON_GetObjectItem(root, "insertGunTime"); if (item_insertGunTime != NULL && cJSON_IsNumber(item_insertGunTime)) { service_charge_data.insertGunTime = item_insertGunTime->valueint; } callback = evs_service_callback(EVS_START_CHARGE_SRV); if (callback) { ((int (*)(const evs_service_startCharge *, evs_service_feedback_startCharge *))callback)(&service_charge_data, &service_feedback_startCharge_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddStringToObject(response_root, "preTradeNo", service_feedback_startCharge_data.preTradeNo); cJSON_AddStringToObject(response_root, "tradeNo", service_feedback_startCharge_data.tradeNo); cJSON_AddNumberToObject(response_root, "gunNo", service_feedback_startCharge_data.gunNo); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(root); cJSON_Delete(response_root); return 0; } static int evs_service_authCharge_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_authCharge service_authCharge_data; evs_service_feedback_authCharge service_feedback_authCharge_data; memset(&service_authCharge_data, 0, sizeof(service_authCharge_data)); cJSON *item_gunNo = cJSON_GetObjectItem(root, "gunNo"); if (item_gunNo != NULL && cJSON_IsNumber(item_gunNo)) { service_authCharge_data.gunNo = item_gunNo->valueint; gun_auth_process_data[service_authCharge_data.gunNo - 1].getAuthChargeFlag = 1; } cJSON *item_preTradeNo = cJSON_GetObjectItem(root, "preTradeNo"); if (item_preTradeNo != NULL && cJSON_IsString(item_preTradeNo)) { char *tradeNo = item_preTradeNo->valuestring; memcpy(service_authCharge_data.preTradeNo, tradeNo, strlen(tradeNo)); } cJSON *item_tradeNo = cJSON_GetObjectItem(root, "tradeNo"); if (item_tradeNo != NULL && cJSON_IsString(item_tradeNo)) { char *devTradeNo = item_tradeNo->valuestring; memcpy(service_authCharge_data.tradeNo, devTradeNo, strlen(devTradeNo)); } cJSON *item_startType = cJSON_GetObjectItem(root, "startType"); if (item_startType != NULL && cJSON_IsNumber(item_startType)) { service_authCharge_data.startType = item_startType->valueint; } cJSON *item_authCode = cJSON_GetObjectItem(root, "authCode"); if (item_authCode != NULL && cJSON_IsString(item_authCode)) { char *authCode = item_authCode->valuestring; memcpy(service_authCharge_data.authCode, authCode, strlen(authCode)); } cJSON *item_result = cJSON_GetObjectItem(root, "result"); if (item_result != NULL && cJSON_IsNumber(item_result)) { service_authCharge_data.result = item_result->valueint; } cJSON *item_chargeMode = cJSON_GetObjectItem(root, "chargeMode"); if (item_chargeMode != NULL && cJSON_IsNumber(item_chargeMode)) { service_authCharge_data.chargeMode = item_chargeMode->valueint; } cJSON *item_limitData = cJSON_GetObjectItem(root, "limitData"); if (item_limitData != NULL && cJSON_IsNumber(item_limitData)) { service_authCharge_data.limitData = item_limitData->valueint; } cJSON *item_stopCode = cJSON_GetObjectItem(root, "stopCode"); if (item_stopCode != NULL && cJSON_IsNumber(item_stopCode)) { service_authCharge_data.stopCode = item_stopCode->valueint; } cJSON *item_startMode = cJSON_GetObjectItem(root, "startMode"); if (item_startMode != NULL && cJSON_IsNumber(item_startMode)) { service_authCharge_data.startMode = item_startMode->valueint; } cJSON *item_insertGunTime = cJSON_GetObjectItem(root, "insertGunTime"); if (item_insertGunTime != NULL && cJSON_IsNumber(item_insertGunTime)) { service_authCharge_data.insertGunTime = item_insertGunTime->valueint; } callback = evs_service_callback(EVS_AUTH_RESULT_SRV); if (callback) { ((int (*)(const evs_service_authCharge *, evs_service_feedback_authCharge *))callback)(&service_authCharge_data, &service_feedback_authCharge_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddStringToObject(response_root, "preTradeNo", service_feedback_authCharge_data.preTradeNo); cJSON_AddStringToObject(response_root, "tradeNo", service_feedback_authCharge_data.tradeNo); cJSON_AddNumberToObject(response_root, "gunNo", service_feedback_authCharge_data.gunNo); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(root); cJSON_Delete(response_root); return 0; } static int evs_service_stopCharge_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_stopCharge service_stopCharge_data; evs_service_feedback_stopCharge service_feedback_stopCharge_data; memset(&service_stopCharge_data, 0, sizeof(service_stopCharge_data)); cJSON *item_gunNo = cJSON_GetObjectItem(root, "gunNo"); if (item_gunNo != NULL && cJSON_IsNumber(item_gunNo)) { service_stopCharge_data.gunNo = item_gunNo->valueint; } cJSON *item_preTradeNo = cJSON_GetObjectItem(root, "preTradeNo"); if (item_preTradeNo != NULL && cJSON_IsString(item_preTradeNo)) { char *tradeNo = item_preTradeNo->valuestring; memcpy(service_stopCharge_data.preTradeNo, tradeNo, strlen(tradeNo)); } cJSON *item_tradeNo = cJSON_GetObjectItem(root, "tradeNo"); if (item_tradeNo != NULL && cJSON_IsString(item_tradeNo)) { char *devTradeNo = item_tradeNo->valuestring; memcpy(service_stopCharge_data.tradeNo, devTradeNo, strlen(devTradeNo)); } cJSON *item_stopReason = cJSON_GetObjectItem(root, "stopReason"); if (item_stopReason != NULL && cJSON_IsNumber(item_stopReason)) { service_stopCharge_data.stopReason = item_stopReason->valueint; } callback = evs_service_callback(EVS_STOP_CHARGE_SRV); if (callback) { ((int (*)(const evs_service_stopCharge *, evs_service_feedback_stopCharge *))callback)(&service_stopCharge_data, &service_feedback_stopCharge_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddStringToObject(response_root, "preTradeNo", service_feedback_stopCharge_data.preTradeNo); cJSON_AddStringToObject(response_root, "tradeNo", service_feedback_stopCharge_data.tradeNo); cJSON_AddNumberToObject(response_root, "gunNo", service_feedback_stopCharge_data.gunNo); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(root); cJSON_Delete(response_root); return 0; } static int evs_service_confirmTrade_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_confirmTrade service_confirmTrade_data; memset(&service_confirmTrade_data, 0, sizeof(service_confirmTrade_data)); cJSON *item_gunNo = cJSON_GetObjectItem(root, "gunNo"); if (item_gunNo != NULL && cJSON_IsNumber(item_gunNo)) { service_confirmTrade_data.gunNo = item_gunNo->valueint; } cJSON *item_preTradeNo = cJSON_GetObjectItem(root, "preTradeNo"); if (item_preTradeNo != NULL && cJSON_IsString(item_preTradeNo)) { char *tradeNo = item_preTradeNo->valuestring; memcpy(service_confirmTrade_data.preTradeNo, tradeNo, strlen(tradeNo)); } cJSON *item_tradeNo = cJSON_GetObjectItem(root, "tradeNo"); if (item_tradeNo != NULL && cJSON_IsString(item_tradeNo)) { char *devTradeNo = item_tradeNo->valuestring; memcpy(service_confirmTrade_data.tradeNo, devTradeNo, strlen(devTradeNo)); } cJSON *item_errcode = cJSON_GetObjectItem(root, "errcode"); if (item_errcode != NULL && cJSON_IsNumber(item_errcode)) { service_confirmTrade_data.errcode = item_errcode->valueint; } callback = evs_service_callback(EVS_ORDER_CHECK_SRV); if (callback) { ((int (*)(const evs_service_confirmTrade *, void *))callback)(&service_confirmTrade_data, NULL); } cJSON_Delete(root); return 0; } static int evs_service_query_log_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_query_log service_query_log_data; evs_service_feedback_query_log feedback_query_log_data; char temp[16] = {0}; memset(&service_query_log_data, 0, sizeof(service_query_log_data)); cJSON *item_gunNo = cJSON_GetObjectItem(root, "gunNo"); if (item_gunNo != NULL && cJSON_IsNumber(item_gunNo)) { service_query_log_data.gunNo = item_gunNo->valueint; } cJSON *item_startDate = cJSON_GetObjectItem(root, "startDate"); if (item_startDate != NULL && cJSON_IsString(item_startDate)) { char *startDate = item_startDate->valuestring; service_query_log_data.startDate = strtoint(startDate); } cJSON *item_stopDate = cJSON_GetObjectItem(root, "stopDate"); if (item_stopDate != NULL && cJSON_IsString(item_stopDate)) { char *stopDate = item_stopDate->valuestring; service_query_log_data.stopDate = strtoint(stopDate); } cJSON *item_askType = cJSON_GetObjectItem(root, "askType"); if (item_askType != NULL && cJSON_IsNumber(item_askType)) { service_query_log_data.askType = item_askType->valueint; } cJSON *item_logQueryNo = cJSON_GetObjectItem(root, "logQueryNo"); if (item_logQueryNo != NULL && cJSON_IsString(item_logQueryNo)) { char *logQueryNo = item_logQueryNo->valuestring; memcpy(service_query_log_data.logQueryNo, logQueryNo, strlen(logQueryNo)); } callback = evs_service_callback(EVS_QUE_DATA_SRV); if (callback) { ((int (*)(const evs_service_query_log *, evs_service_feedback_query_log *))callback)(&service_query_log_data, &feedback_query_log_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddNumberToObject(response_root, "gunNo", feedback_query_log_data.gunNo); sprintf(temp, "%d", feedback_query_log_data.startDate); cJSON_AddStringToObject(response_root, "startDate", temp); sprintf(temp, "%d", feedback_query_log_data.stopDate); cJSON_AddStringToObject(response_root, "stopDate", temp); cJSON_AddNumberToObject(response_root, "askType", feedback_query_log_data.askType); cJSON_AddNumberToObject(response_root, "result", feedback_query_log_data.result); cJSON_AddStringToObject(response_root, "logQueryNo", feedback_query_log_data.logQueryNo); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(root); cJSON_Delete(response_root); return 0; } static int evs_service_gateLock_ctrl_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_gateLock_ctrl service_gateLock_ctrl_data; evs_service_feedback_gateLock_ctrl service_feedback_gateLock_ctrl_data; memset(&service_gateLock_ctrl_data, 0, sizeof(service_gateLock_ctrl_data)); cJSON *item_lockNo = cJSON_GetObjectItem(root, "lockNo"); if (item_lockNo != NULL && cJSON_IsNumber(item_lockNo)) { service_gateLock_ctrl_data.lockNo = item_lockNo->valueint; } cJSON *item_ctrlFlag = cJSON_GetObjectItem(root, "ctrlFlag"); if (item_ctrlFlag != NULL && cJSON_IsNumber(item_ctrlFlag)) { service_gateLock_ctrl_data.ctrlFlag = item_ctrlFlag->valueint; } callback = evs_service_callback(EVS_GATE_LOCK_SRV); if (callback) { ((int (*)(const evs_service_gateLock_ctrl *, evs_service_feedback_gateLock_ctrl *))callback)(&service_gateLock_ctrl_data, &service_feedback_gateLock_ctrl_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddNumberToObject(response_root, "lockNo", service_feedback_gateLock_ctrl_data.lockNo); cJSON_AddNumberToObject(response_root, "result", service_feedback_gateLock_ctrl_data.result); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(root); cJSON_Delete(response_root); return 0; } static int evs_service_groundLock_ctrl_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_groundLock_ctrl service_groundLock_ctrl_data; evs_service_feedback_groundLock_ctrl service_feedback_groundLock_ctrl_data; memset(&service_groundLock_ctrl_data, 0, sizeof(service_groundLock_ctrl_data)); cJSON *item_gunNo = cJSON_GetObjectItem(root, "gunNo"); if (item_gunNo != NULL && cJSON_IsNumber(item_gunNo)) { service_groundLock_ctrl_data.gunNo = item_gunNo->valueint; } cJSON *item_ctrlFlag = cJSON_GetObjectItem(root, "ctrlFlag"); if (item_ctrlFlag != NULL && cJSON_IsNumber(item_ctrlFlag)) { service_groundLock_ctrl_data.ctrlFlag = item_ctrlFlag->valueint; } callback = evs_service_callback(EVS_GROUND_LOCK_SRV); if (callback) { ((int (*)(const evs_service_groundLock_ctrl *, evs_service_feedback_groundLock_ctrl *))callback)(&service_groundLock_ctrl_data, &service_feedback_groundLock_ctrl_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddNumberToObject(response_root, "gunNo", service_feedback_groundLock_ctrl_data.gunNo); cJSON_AddNumberToObject(response_root, "reason", service_feedback_groundLock_ctrl_data.reason); cJSON_AddNumberToObject(response_root, "result", service_feedback_groundLock_ctrl_data.result); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(root); cJSON_Delete(response_root); return 0; } static int evs_service_lockCtrl_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_lockCtrl service_lockCtrl_data; memset(&service_lockCtrl_data, 0, sizeof(service_lockCtrl_data)); cJSON *item_gunNo = cJSON_GetObjectItem(root, "gunNo"); if (item_gunNo != NULL && cJSON_IsNumber(item_gunNo)) { service_lockCtrl_data.gunNo = item_gunNo->valueint; } cJSON *item_lockParam = cJSON_GetObjectItem(root, "lockParam"); if (item_lockParam != NULL && cJSON_IsNumber(item_lockParam)) { service_lockCtrl_data.lockParam = item_lockParam->valueint; } callback = evs_service_callback(EVS_CTRL_LOCK_SRV); if (callback) { ((int (*)(const evs_service_lockCtrl *))callback)(&service_lockCtrl_data); } cJSON_Delete(root); return 0; } static int evs_service_dev_maintain_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_dev_maintain service_dev_maintain; memset(&service_dev_maintain, 0, sizeof(service_dev_maintain)); cJSON *item_gunNo = cJSON_GetObjectItem(root, "gunNo"); if (item_gunNo != NULL && cJSON_IsNumber(item_gunNo)) { service_dev_maintain.gunNo = item_gunNo->valueint; } cJSON *item_ctrlType = cJSON_GetObjectItem(root, "ctrlType"); if (item_ctrlType != NULL && cJSON_IsNumber(item_ctrlType)) { service_dev_maintain.ctrlType = item_ctrlType->valueint; } callback = evs_service_callback(EVS_DEV_MAINTAIN_SRV); if (callback) { ((int (*)(const evs_service_dev_maintain *))callback)(&service_dev_maintain); } cJSON_Delete(root); return 0; } static int evs_service_orderCharge_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_orderCharge service_oderCharge_data; evs_service_feedback_orderCharge service_feedback_oderCharge_data; memset(&service_oderCharge_data, 0, sizeof(service_oderCharge_data)); cJSON *item_preTradeNo = cJSON_GetObjectItem(root, "preTradeNo"); if (item_preTradeNo != NULL && cJSON_IsString(item_preTradeNo)) { char *tradeNo = item_preTradeNo->valuestring; memcpy(service_oderCharge_data.preTradeNo, tradeNo, strlen(tradeNo)); } cJSON *item_validTime = cJSON_GetObjectItem(root, "validTime"); if (item_validTime != NULL && cJSON_IsArray(item_validTime)) { int item_num = cJSON_GetArraySize(item_validTime); if ((item_num > 0)) { if (item_num <= EVS_MAX_SEG_LEN) { service_oderCharge_data.num = item_num; } else { service_oderCharge_data.num = EVS_MAX_SEG_LEN; } cJSON *array_validTime = NULL; int i = 0; for (i = 0; i < service_oderCharge_data.num; i++) { array_validTime = cJSON_GetArrayItem(item_validTime, i); memcpy(service_oderCharge_data.validTime[i], array_validTime->valuestring, strlen(array_validTime->valuestring)); } cJSON *item_kw = cJSON_GetObjectItem(root, "kw"); cJSON *array_kw; if (item_kw != NULL && cJSON_IsArray(item_kw)) { for (i = 0; i < service_oderCharge_data.num; i++) { array_kw = cJSON_GetArrayItem(item_kw, i); service_oderCharge_data.kw[i] = array_kw->valueint; } } } } callback = evs_service_callback(EVS_ORDERLY_CHARGE_SRV); if (callback) { ((int (*)(const evs_service_orderCharge *, evs_service_feedback_orderCharge *))callback)(&service_oderCharge_data, &service_feedback_oderCharge_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddStringToObject(response_root, "preTradeNo", service_feedback_oderCharge_data.preTradeNo); cJSON_AddNumberToObject(response_root, "reason", service_feedback_oderCharge_data.reason); cJSON_AddNumberToObject(response_root, "result", service_feedback_oderCharge_data.result); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(root); cJSON_Delete(response_root); return 0; } static int evs_service_terminalSn_handler(const char *request, char **response, int *response_len) { const char *response_fmt = "{\"result\": %d}"; char terminalStr[13] = {0}; int gunNo = 0; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } cJSON *item_gunNo = cJSON_GetObjectItem(root, "gunNo"); if (item_gunNo != NULL && cJSON_IsNumber(item_gunNo)) { gunNo = item_gunNo->valueint; } else { PROTOCOL_TRACE("JSON Parse 'gunNo' Error"); cJSON_Delete(root); return -1; } cJSON *item_terminalSn = cJSON_GetObjectItem(root, "terminalSn"); if (item_terminalSn != NULL && cJSON_IsString(item_terminalSn)) { memcpy(terminalStr, item_terminalSn->valuestring, sizeof(terminalStr)); stringToHex(terminalStr, gun_auth_process_data[gunNo - 1].terminalSn); } else { PROTOCOL_TRACE("JSON Parse 'terminalSn' Error"); cJSON_Delete(root); return -1; } gun_auth_process_data[gunNo - 1].getTerminalFlag = 1; /* 鏈嶅姟搴旂瓟鏁版嵁锛屾暟锟�?闀垮害閫氳繃response锛宺esponse_len鍙傛暟浼犵粰SDK */ *response_len = strlen(response_fmt) + 10 + 1; *response = (char *)HAL_Malloc(*response_len); if (*response == NULL) { PROTOCOL_TRACE("Memory Not Enough"); return -1; } memset(*response, 0, *response_len); HAL_Snprintf(*response, *response_len, response_fmt, 10); *response_len = strlen(*response); cJSON_Delete(root); return 0; } static int evs_service_srvAuthCode_handler(const char *request, char **response, int *response_len) { char tv[15] = {0}; char strMac2[9] = {0}; int gunNo = 0; const char *response_fmt = "{\"result\": %d}"; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } cJSON *item_gunNo = cJSON_GetObjectItem(root, "gunNo"); if (item_gunNo != NULL && cJSON_IsNumber(item_gunNo)) { gunNo = item_gunNo->valueint; } else { PROTOCOL_TRACE("JSON Parse 'gunNo' Error"); cJSON_Delete(root); return -1; } cJSON *item_timeStr = cJSON_GetObjectItem(root, "timeStr"); if (item_timeStr != NULL && cJSON_IsString(item_timeStr)) { memcpy(tv, item_timeStr->valuestring, sizeof(tv)); stringToHex(tv, gun_auth_process_data[gunNo - 1].tradeTime); } else { PROTOCOL_TRACE("JSON Parse 'timeStr' Error"); cJSON_Delete(root); return -1; } cJSON *item_mac2 = cJSON_GetObjectItem(root, "tradeMac2"); if (item_mac2 != NULL && cJSON_IsString(item_mac2)) { memcpy(strMac2, item_mac2->valuestring, sizeof(strMac2)); stringToHex(strMac2, gun_auth_process_data[gunNo - 1].MAC2); } else { PROTOCOL_TRACE("JSON Parse 'tradeMac2' Error"); cJSON_Delete(root); return -1; } gun_auth_process_data[gunNo - 1].getServerAuthFlag = 1; /* 鏈嶅姟搴旂瓟鏁版嵁锛屾暟锟�?闀垮害閫氳繃response锛宺esponse_len鍙傛暟浼犵粰SDK */ *response_len = strlen(response_fmt) + 10 + 1; *response = (char *)HAL_Malloc(*response_len); if (*response == NULL) { PROTOCOL_TRACE("Memory Not Enough"); return -1; } memset(*response, 0, *response_len); HAL_Snprintf(*response, *response_len, response_fmt, 10); *response_len = strlen(*response); cJSON_Delete(root); return 0; } static int evs_service_update_fun_config_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); evs_service_feedback_dev_fun_config feedback_data = {0}; if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_dev_fun_config service_dev_fun_config_data; memset(&service_dev_fun_config_data, 0, sizeof(service_dev_fun_config_data)); cJSON *item_funCode = cJSON_GetObjectItem(root, "funCode"); if (item_funCode != NULL && cJSON_IsNumber(item_funCode)) { service_dev_fun_config_data.funCode = item_funCode->valueint; } else { PROTOCOL_TRACE("JSON Parse 'funCode' Error"); cJSON_Delete(root); return -1; } if (service_dev_fun_config_data.funCode == 12 || service_dev_fun_config_data.funCode == 13 || service_dev_fun_config_data.funCode == 20 || service_dev_fun_config_data.funCode == 22) { cJSON *item_confString = cJSON_GetObjectItem(root, "confString"); if (item_confString != NULL && cJSON_IsString(item_confString)) { char *confString = item_confString->valuestring; memcpy(service_dev_fun_config_data.confString, confString, strlen(confString)); } else { PROTOCOL_TRACE("JSON Parse 'confString' Error"); cJSON_Delete(root); return -1; } } else { cJSON *item_confInt = cJSON_GetObjectItem(root, "confInt"); if (item_confInt != NULL && cJSON_IsNumber(item_confInt)) { service_dev_fun_config_data.confInt = item_confInt->valueint; } else { PROTOCOL_TRACE("JSON Parse 'confInt' Error"); cJSON_Delete(root); return -1; } } cJSON *item_optSn = cJSON_GetObjectItem(root, "optSn"); if (item_optSn != NULL && cJSON_IsString(item_optSn)) { char *optString = item_optSn->valuestring; memcpy(service_dev_fun_config_data.optSn, optString, strlen(optString)); } else { PROTOCOL_TRACE("JSON Parse 'optSn' Error"); cJSON_Delete(root); return -1; } callback = evs_service_callback(EVS_FUN_CONF_UPDATE_SRV); if (callback) { ((int (*)(const evs_service_dev_fun_config *, evs_service_feedback_dev_fun_config *))callback)(&service_dev_fun_config_data, &feedback_data); } cJSON *response_root = cJSON_CreateObject(); if ((feedback_data.resCode != 10) && (feedback_data.resCode != 11)) // 蹇呴』澶勭悊杩斿洖鍊硷紝骞惰繑鍥炵粨鏋滐紝榛橈拷?锟藉洖澶嶅け锟�? { cJSON_AddNumberToObject(response_root, "resCode", 11); } else { cJSON_AddNumberToObject(response_root, "resCode", feedback_data.resCode); } cJSON_AddNumberToObject(response_root, "funCode", feedback_data.funCode); cJSON_AddStringToObject(response_root, "optSn", feedback_data.optSn); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(root); cJSON_Delete(response_root); return 0; } static int evs_service_get_fun_config_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); evs_service_get_dev_fun_config service_get_fun_config_data; evs_service_dev_fun_config service_dev_feedback_fun_config_data; memset(&service_get_fun_config_data, 0, sizeof(service_get_fun_config_data)); memset(&service_dev_feedback_fun_config_data, 0, sizeof(service_dev_feedback_fun_config_data)); cJSON *item_funCode = cJSON_GetObjectItem(root, "funCode"); if (item_funCode != NULL && cJSON_IsNumber(item_funCode)) { service_get_fun_config_data.funCode = item_funCode->valueint; } else { PROTOCOL_TRACE("JSON Parse 'funCode' Error"); cJSON_Delete(root); return -1; } callback = evs_service_callback(EVS_FUN_CONF_GET_SRV); if (callback) { ((int (*)(const evs_service_get_dev_fun_config *, evs_service_dev_fun_config *))callback)(&service_get_fun_config_data, &service_dev_feedback_fun_config_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddNumberToObject(response_root, "funCode", service_dev_feedback_fun_config_data.funCode); cJSON_AddNumberToObject(response_root, "confInt", service_dev_feedback_fun_config_data.confInt); cJSON_AddStringToObject(response_root, "confString", service_dev_feedback_fun_config_data.confString); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(response_root); return 0; } static int evs_service_feeModel_query_handler(const char *request, char **response, int *response_len) { void *callback = NULL; cJSON *root = cJSON_Parse(request); cJSON *TimeSegArray, *chargeFeeArray, *serviceFeeArray; int i = 0; if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_feedback_feeModel_qurey service_feedback_feeModel_query_data; memset(&service_feedback_feeModel_query_data, 0, sizeof(service_feedback_feeModel_query_data)); callback = evs_service_callback(EVS_FEE_MODEL_QUERY_SRV); if (callback) { ((int (*)(evs_service_feedback_feeModel_qurey *))callback)(&service_feedback_feeModel_query_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddStringToObject(response_root, "feeModelId", service_feedback_feeModel_query_data.feeModelId); cJSON_AddNumberToObject(response_root, "timeNum", service_feedback_feeModel_query_data.timeNum); cJSON_AddItemToObject(response_root, "timeSeg", TimeSegArray = cJSON_CreateArray()); for (i = 0; i < service_feedback_feeModel_query_data.timeNum; i++) { cJSON_AddItemToArray(TimeSegArray, cJSON_CreateString(service_feedback_feeModel_query_data.timeSeg[i])); } cJSON_AddItemToObject(response_root, "chargeFee", chargeFeeArray = cJSON_CreateArray()); for (i = 0; i < service_feedback_feeModel_query_data.timeNum; i++) { cJSON_AddItemToArray(chargeFeeArray, cJSON_CreateNumber(service_feedback_feeModel_query_data.chargeFee[i])); } cJSON_AddItemToObject(response_root, "serviceFee", serviceFeeArray = cJSON_CreateArray()); for (i = 0; i < service_feedback_feeModel_query_data.timeNum; i++) { cJSON_AddItemToArray(serviceFeeArray, cJSON_CreateNumber(service_feedback_feeModel_query_data.serviceFee[i])); } *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(root); cJSON_Delete(response_root); return 0; } static int evs_service_reserve_charge_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_rsvCharge service_reserve_charge_data; evs_service_feedback_rsvCharge service_feedback_reserve_charge_data; memset(&service_reserve_charge_data, 0, sizeof(service_reserve_charge_data)); cJSON *item_gunNo = cJSON_GetObjectItem(root, "gunNo"); if (item_gunNo != NULL && cJSON_IsNumber(item_gunNo)) { service_reserve_charge_data.gunNo = item_gunNo->valueint; } else { PROTOCOL_TRACE("JSON Parse 'gunNo' Error"); cJSON_Delete(root); return -1; } cJSON *item_appoMethod = cJSON_GetObjectItem(root, "appoMethod"); if (item_appoMethod != NULL && cJSON_IsNumber(item_appoMethod)) { service_reserve_charge_data.appoMethod = item_appoMethod->valueint; } else { PROTOCOL_TRACE("JSON Parse 'appoMethod' Error"); cJSON_Delete(root); return -1; } cJSON *item_appoDelay = cJSON_GetObjectItem(root, "appoDelay"); if (item_appoDelay != NULL && cJSON_IsNumber(item_appoDelay)) { service_reserve_charge_data.appoDelay = item_appoDelay->valueint; } else { PROTOCOL_TRACE("JSON Parse 'appoDelay' Error"); cJSON_Delete(root); return -1; } cJSON *item_appoData = cJSON_GetObjectItem(root, "appoData"); if (item_appoData != NULL && cJSON_IsNumber(item_appoDelay)) { service_reserve_charge_data.appoData = item_appoData->valueint; } else { PROTOCOL_TRACE("JSON Parse 'appoData' Error"); cJSON_Delete(root); return -1; } cJSON *item_startChargeTime = cJSON_GetObjectItem(root, "startChargeTime"); if (item_startChargeTime != NULL && cJSON_IsString(item_startChargeTime)) { char *startChargeTime = item_startChargeTime->valuestring; service_reserve_charge_data.startChargeTime = strtoint(startChargeTime); } else { PROTOCOL_TRACE("JSON Parse 'startChargeTime' Error"); cJSON_Delete(root); return -1; } cJSON *item_stopChargeTime = cJSON_GetObjectItem(root, "stopChargeTime"); if (item_stopChargeTime != NULL && cJSON_IsString(item_stopChargeTime)) { char *stopChargeTime = item_stopChargeTime->valuestring; service_reserve_charge_data.stopChargeTime = strtoint(stopChargeTime); } else { PROTOCOL_TRACE("JSON Parse 'stopChargeTime' Error"); cJSON_Delete(root); return -1; } callback = evs_service_callback(EVS_RSV_CHARGE_SRV); if (callback) { ((int (*)(const evs_service_rsvCharge *, evs_service_feedback_rsvCharge *))callback)(&service_reserve_charge_data, &service_feedback_reserve_charge_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddNumberToObject(response_root, "gunNo", service_feedback_reserve_charge_data.gunNo); cJSON_AddNumberToObject(response_root, "appoMethod", service_feedback_reserve_charge_data.appoMethod); cJSON_AddNumberToObject(response_root, "result", service_feedback_reserve_charge_data.result); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(root); cJSON_Delete(response_root); return 0; } static int evs_service_ble_secret_update_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_blesecret_update service_ble_secret_data; evs_service_feedback_blesecret_update service_feedback_ble_secret_data; memset(&service_ble_secret_data, 0, sizeof(service_ble_secret_data)); memset(&service_feedback_ble_secret_data, 0, sizeof(service_feedback_ble_secret_data)); cJSON *item_bleSecretKey = cJSON_GetObjectItem(root, "bleSecretKey"); if (item_bleSecretKey != NULL && cJSON_IsString(item_bleSecretKey)) { char *bleSecretKey = item_bleSecretKey->valuestring; memcpy(service_ble_secret_data.bleSecretKey, bleSecretKey, strlen(bleSecretKey)); } else { PROTOCOL_TRACE("JSON Parse 'bleSecretKey' Error"); cJSON_Delete(root); return -1; } cJSON *item_updateTime = cJSON_GetObjectItem(root, "updateTime"); if (item_updateTime != NULL && cJSON_IsString(item_updateTime)) { char *updateTime = item_updateTime->valuestring; service_ble_secret_data.updateTime = strtoint(updateTime); } else { PROTOCOL_TRACE("JSON Parse 'updateTime' Error"); cJSON_Delete(root); return -1; } callback = evs_service_callback(EVS_BLE_SECRET_UPDATE_SRV); if (callback) { ((int (*)(const evs_service_blesecret_update *, evs_service_feedback_blesecret_update *))callback)(&service_ble_secret_data, &service_feedback_ble_secret_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddStringToObject(response_root, "bleSecretKey", service_feedback_ble_secret_data.bleSecretKey); cJSON_AddNumberToObject(response_root, "result", service_feedback_ble_secret_data.result); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(root); cJSON_Delete(response_root); return 0; } static int evs_service_ble_auth_list_get_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); cJSON *macListArray = NULL; int i = 0; if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_event_ble_plug_charge_info service_feedback_ble_plugchg_data; memset(&service_feedback_ble_plugchg_data, 0, sizeof(service_feedback_ble_plugchg_data)); callback = evs_service_callback(EVS_BLE_PLUG_CHG_INFO_GET_SRV); if (callback) { ((int (*)(evs_event_ble_plug_charge_info *))callback)(&service_feedback_ble_plugchg_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddNumberToObject(response_root, "plugChgStatus", service_feedback_ble_plugchg_data.plugChgStatus); cJSON_AddNumberToObject(response_root, "macNum", service_feedback_ble_plugchg_data.macNum); cJSON_AddItemToObject(response_root, "macList", macListArray = cJSON_CreateArray()); for (i = 0; i < service_feedback_ble_plugchg_data.macNum; i++) { cJSON_AddItemToArray(macListArray, cJSON_CreateString(service_feedback_ble_plugchg_data.macList[i])); } *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(root); cJSON_Delete(response_root); return 0; } static int evs_service_ble_auth_list_confirm_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_ble_plug_charge_info_conf service_ble_plugchg_confirm; memset(&service_ble_plugchg_confirm, 0, sizeof(service_ble_plugchg_confirm)); cJSON *item_macNum = cJSON_GetObjectItem(root, "macNum"); if (item_macNum != NULL && cJSON_IsNumber(item_macNum)) { service_ble_plugchg_confirm.macNum = item_macNum->valueint; } else { PROTOCOL_TRACE("JSON Parse 'macNum' Error"); cJSON_Delete(root); return -1; } callback = evs_service_callback(EVS_BLE_PLUG_CHG_INFO_CONF_SRV); if (callback) { ((int (*)(evs_service_ble_plug_charge_info_conf *))callback)(&service_ble_plugchg_confirm); } cJSON_Delete(root); return 0; } static int evs_service_ble_auth_list_clean_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_blelist_clean service_blelist_clean_data; evs_service_feedback_blelist_clean service_feedback_blelist_clean_data; memset(&service_blelist_clean_data, 0, sizeof(service_blelist_clean_data)); memset(&service_feedback_blelist_clean_data, 0, sizeof(service_feedback_blelist_clean_data)); cJSON *item_cleanType = cJSON_GetObjectItem(root, "cleanType"); if (item_cleanType != NULL && cJSON_IsNumber(item_cleanType)) { service_blelist_clean_data.cleanType = item_cleanType->valueint; } else { PROTOCOL_TRACE("JSON Parse 'cleanType' Error"); cJSON_Delete(root); return -1; } cJSON *item_macInfo = cJSON_GetObjectItem(root, "macInfo"); if (item_macInfo != NULL && cJSON_IsString(item_macInfo)) { char *macInfo = item_macInfo->valuestring; memcpy(service_blelist_clean_data.macInfo, macInfo, strlen(macInfo)); } else { PROTOCOL_TRACE("JSON Parse 'macInfo' Error"); cJSON_Delete(root); return -1; } callback = evs_service_callback(EVS_BLE_AUTH_LIST_CLEAN_SRV); if (callback) { ((int (*)(const evs_service_blelist_clean *, evs_service_feedback_blelist_clean *))callback)(&service_blelist_clean_data, &service_feedback_blelist_clean_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddNumberToObject(response_root, "cleanType", service_feedback_blelist_clean_data.cleanType); cJSON_AddNumberToObject(response_root, "result", service_feedback_blelist_clean_data.result); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(root); cJSON_Delete(response_root); return 0; } static int evs_service_ble_reset_handler(const char *request, char **response, int *response_len) { void *callback; evs_service_feedback_ble_reset service_feedback_ble_reset_data; memset(&service_feedback_ble_reset_data, 0, sizeof(service_feedback_ble_reset_data)); callback = evs_service_callback(EVS_BLE_RESET_SRV); if (callback) { ((int (*)(evs_service_feedback_ble_reset *))callback)(&service_feedback_ble_reset_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddNumberToObject(response_root, "result", service_feedback_ble_reset_data.result); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(response_root); return 0; } static int evs_service_get_parts_config_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); evs_service_parts_config_get service_parts_config_data; evs_service_feedback_config_parts_get service_feedback_get_config_data; memset(&service_parts_config_data, 0, sizeof(service_parts_config_data)); memset(&service_feedback_get_config_data, 0, sizeof(service_feedback_get_config_data)); cJSON *item_gunNo = cJSON_GetObjectItem(root, "gunNo"); if (item_gunNo != NULL && cJSON_IsNumber(item_gunNo)) { service_parts_config_data.gunNo = item_gunNo->valueint; } else { PROTOCOL_TRACE("JSON Parse 'gunNo' Error"); cJSON_Delete(root); return -1; } cJSON *item_partsType = cJSON_GetObjectItem(root, "partsType"); if (item_partsType != NULL && cJSON_IsNumber(item_partsType)) { service_parts_config_data.partsType = item_partsType->valueint; } else { PROTOCOL_TRACE("JSON Parse 'partsType' Error"); cJSON_Delete(root); return -1; } cJSON *item_funCode = cJSON_GetObjectItem(root, "funCode"); if (item_funCode != NULL && cJSON_IsNumber(item_funCode)) { service_parts_config_data.funCode = item_funCode->valueint; } else { PROTOCOL_TRACE("JSON Parse 'funCode' Error"); cJSON_Delete(root); return -1; } callback = evs_service_callback(EVS_PILE_PARTS_CONF_GET_SRV); if (callback) { ((int (*)(const evs_service_parts_config_get *, evs_service_feedback_config_parts_get *))callback)(&service_parts_config_data, &service_feedback_get_config_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddNumberToObject(response_root, "result", service_feedback_get_config_data.result); cJSON_AddNumberToObject(response_root, "confInt", service_feedback_get_config_data.confInt); cJSON_AddStringToObject(response_root, "confString", service_feedback_get_config_data.confString); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(response_root); return 0; } static int evs_service_parts_config_handler(const char *request, char **response, int *response_len) { PROTOCOL_TRACE("recv parts config"); void *callback; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_config_parts service_parts_config_data; evs_service_feedback_config_parts result = {0}; memset(&service_parts_config_data, 0, sizeof(evs_service_config_parts)); cJSON *item_gunNo = cJSON_GetObjectItem(root, "gunNo"); if (item_gunNo != NULL && cJSON_IsNumber(item_gunNo)) { service_parts_config_data.gunNo = item_gunNo->valueint; } else { PROTOCOL_TRACE("JSON Parse 'gunNo' Error"); cJSON_Delete(root); return -1; } cJSON *item_opSn = cJSON_GetObjectItem(root, "optSn"); if (item_opSn != NULL && cJSON_IsString(item_opSn)) { memcpy(service_parts_config_data.optSn, item_opSn->valuestring, strlen(item_opSn->valuestring)); } else { PROTOCOL_TRACE("JSON Parse 'optSn' Error"); cJSON_Delete(root); return -1; } cJSON *item_funCode = cJSON_GetObjectItem(root, "funCode"); if (item_funCode != NULL && cJSON_IsNumber(item_funCode)) { service_parts_config_data.funCode = item_funCode->valueint; } else { PROTOCOL_TRACE("JSON Parse 'funCode' Error"); cJSON_Delete(root); return -1; } // cJSON *item_conf = cJSON_GetObjectItem(root, "confInfo"); // if (item_conf != NULL && cJSON_IsObject(item_conf)) // { // cJSON *item_power = cJSON_GetObjectItem(item_conf, "powerAlloc"); // if (item_power != NULL && cJSON_IsNumber(item_power)) // { // service_parts_config_data.powerAlloc = item_power->valueint; // } // cJSON *item_partsType = cJSON_GetObjectItem(item_conf, "partsType"); // if (item_partsType != NULL && cJSON_IsNumber(item_partsType)) // { // service_parts_config_data.partsType = item_partsType->valueint; // } // cJSON *item_sendMode = cJSON_GetObjectItem(item_conf, "sendMode"); // if (item_sendMode != NULL && cJSON_IsNumber(item_sendMode)) // { // service_parts_config_data.sendMode = item_sendMode->valueint; // } // cJSON *item_ccuPeriod = cJSON_GetObjectItem(item_conf, "ccuPeriod"); // if (item_ccuPeriod != NULL && cJSON_IsNumber(item_ccuPeriod)) // { // service_parts_config_data.ccuPeriod = item_ccuPeriod->valueint; // } // cJSON *item_tcuPeriod = cJSON_GetObjectItem(item_conf, "tcuPeriod"); // if (item_tcuPeriod != NULL && cJSON_IsNumber(item_tcuPeriod)) // { // service_parts_config_data.tcuPeriod = item_tcuPeriod->valueint; // } // } // else // { // PROTOCOL_TRACE("JSON Parse 'confInfo' Error"); // cJSON_Delete(root); // return -1; // } if (service_parts_config_data.funCode == 11) { cJSON *item_confString = cJSON_GetObjectItem(root, "confString"); if (item_confString != NULL && cJSON_IsString(item_confString)) { char *confString = item_confString->valuestring; memcpy(service_parts_config_data.confString, confString, strlen(confString)); } else { PROTOCOL_TRACE("JSON Parse 'confString' Error"); cJSON_Delete(root); return -1; } } else if (service_parts_config_data.funCode == 10) { cJSON *item_confInt = cJSON_GetObjectItem(root, "confInt"); if (item_confInt != NULL && cJSON_IsNumber(item_confInt)) { service_parts_config_data.confInt = item_confInt->valueint; } else { PROTOCOL_TRACE("JSON Parse 'confInt' Error"); cJSON_Delete(root); return -1; } } callback = evs_service_callback(EVS_PILE_PARTS_CONF_SRV); if (callback) { ((int (*)(const evs_service_config_parts *, evs_service_feedback_config_parts *))callback)(&service_parts_config_data, &result); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddNumberToObject(response_root, "resCode", result.resCode); cJSON_AddStringToObject(response_root, "optSn", result.optSn); cJSON_AddNumberToObject(response_root, "funCode", result.funCode); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(root); cJSON_Delete(response_root); return 0; } static int evs_service_vin_whitelist_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } evs_service_vinList_update service_vinList_data; evs_service_feedback_vinList_update service_feedback_vinList_data; int i = 0; memset(&service_vinList_data, 0, sizeof(evs_service_vinList_update)); cJSON *item_updateSN = cJSON_GetObjectItem(root, "updateSN"); if (item_updateSN != NULL && cJSON_IsString(item_updateSN)) { char *updateSN = item_updateSN->valuestring; memcpy(service_vinList_data.updateSN, updateSN, strlen(updateSN)); } cJSON *item_optType = cJSON_GetObjectItem(root, "optType"); if (item_optType != NULL && cJSON_IsNumber(item_optType)) { service_vinList_data.optType = item_optType->valueint; } cJSON *item_num = cJSON_GetObjectItem(root, "totalVINCnt"); if (item_num != NULL && cJSON_IsNumber(item_num)) { service_vinList_data.totalVINCnt = item_num->valueint; } item_num = cJSON_GetObjectItem(root, "packTotalCnt"); if (item_num != NULL && cJSON_IsNumber(item_num)) { service_vinList_data.packTotalCnt = item_num->valueint; } item_num = cJSON_GetObjectItem(root, "packCnt"); if (item_num != NULL && cJSON_IsNumber(item_num)) { service_vinList_data.packCnt = item_num->valueint; } item_num = cJSON_GetObjectItem(root, "packVINCnt"); if (item_num != NULL && cJSON_IsNumber(item_num)) { service_vinList_data.packVINCnt = item_num->valueint; } cJSON *item_vinList = cJSON_GetObjectItem(root, "vinList"); cJSON *array_vinList = NULL; if (item_vinList != NULL && cJSON_IsArray(item_vinList)) { for (i = 0; i < service_vinList_data.packVINCnt; i++) { array_vinList = cJSON_GetArrayItem(array_vinList, i); memcpy(service_vinList_data.vinList[i], array_vinList->valuestring, strlen(array_vinList->valuestring)); } } callback = evs_service_callback(EVS_VIN_LIST_UPDATE_SRV); if (callback) { ((int (*)(const evs_service_vinList_update *, evs_service_feedback_vinList_update *))callback)(&service_vinList_data, &service_feedback_vinList_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddStringToObject(response_root, "updateSN", service_feedback_vinList_data.updateSN); cJSON_AddNumberToObject(response_root, "optType", service_feedback_vinList_data.optType); cJSON_AddNumberToObject(response_root, "result", service_feedback_vinList_data.result); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(root); cJSON_Delete(response_root); return 0; } static int evs_service_get_trade_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); evs_service_trade_get service_get_trade_data; evs_service_feedback_trade_get service_dev_feedback_trade_data; memset(&service_get_trade_data, 0, sizeof(service_get_trade_data)); memset(&service_dev_feedback_trade_data, 0, sizeof(service_dev_feedback_trade_data)); cJSON *item_gunNo = cJSON_GetObjectItem(root, "gunNo"); if (item_gunNo != NULL && cJSON_IsNumber(item_gunNo)) { service_get_trade_data.gunNo = item_gunNo->valueint; } cJSON *item_askType = cJSON_GetObjectItem(root, "askType"); if (item_askType != NULL && cJSON_IsNumber(item_askType)) { service_get_trade_data.askType = item_askType->valueint; } cJSON *item_preTradeNo = cJSON_GetObjectItem(root, "preTradeNo"); if (item_preTradeNo != NULL && cJSON_IsString(item_preTradeNo)) { char *tradeNo = item_preTradeNo->valuestring; memcpy(service_get_trade_data.preTradeNo, tradeNo, strlen(tradeNo)); } cJSON *item_tradeNo = cJSON_GetObjectItem(root, "tradeNo"); if (item_tradeNo != NULL && cJSON_IsString(item_tradeNo)) { char *tradeNo = item_tradeNo->valuestring; memcpy(service_get_trade_data.tradeNo, tradeNo, strlen(tradeNo)); } cJSON *item_startDate = cJSON_GetObjectItem(root, "startDate"); if (item_startDate != NULL && cJSON_IsString(item_startDate)) { char *startDate = item_startDate->valuestring; memcpy(service_get_trade_data.startDate, startDate, strlen(startDate)); } cJSON *item_stopDate = cJSON_GetObjectItem(root, "stopDate"); if (item_stopDate != NULL && cJSON_IsString(item_stopDate)) { char *stopDate = item_stopDate->valuestring; memcpy(service_get_trade_data.stopDate, stopDate, strlen(stopDate)); } callback = evs_service_callback(EVS_ORDER_ASK_SRV); if (callback) { ((int (*)(const evs_service_trade_get *, evs_service_feedback_trade_get *))callback)(&service_get_trade_data, &service_dev_feedback_trade_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddNumberToObject(response_root, "gunNo", service_dev_feedback_trade_data.gunNo); cJSON_AddNumberToObject(response_root, "askType", service_dev_feedback_trade_data.askType); cJSON_AddStringToObject(response_root, "preTradeNo", service_dev_feedback_trade_data.preTradeNo); cJSON_AddStringToObject(response_root, "tradeNo", service_dev_feedback_trade_data.tradeNo); cJSON_AddStringToObject(response_root, "startDate", service_dev_feedback_trade_data.startDate); cJSON_AddStringToObject(response_root, "stopDate", service_dev_feedback_trade_data.stopDate); cJSON_AddNumberToObject(response_root, "askResult", service_dev_feedback_trade_data.askResult); cJSON_AddNumberToObject(response_root, "tradeCnt", service_dev_feedback_trade_data.tradeCnt); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(response_root); return 0; } static int evs_service_get_meter_handler(const char *request, char **response, int *response_len) { void *callback; cJSON *root = cJSON_Parse(request); evs_service_meter_get service_get_meter_data; evs_service_feedback_meter_get service_dev_feedback_meter_data; memset(&service_get_meter_data, 0, sizeof(service_get_meter_data)); memset(&service_dev_feedback_meter_data, 0, sizeof(service_dev_feedback_meter_data)); cJSON *item_gunNo = cJSON_GetObjectItem(root, "gunNo"); if (item_gunNo != NULL && cJSON_IsNumber(item_gunNo)) { service_get_meter_data.gunNo = item_gunNo->valueint; } cJSON *item_askDate = cJSON_GetObjectItem(root, "askDate"); if (item_askDate != NULL && cJSON_IsString(item_askDate)) { char *askDate = item_askDate->valuestring; memcpy(service_get_meter_data.askDate, askDate, strlen(askDate)); } cJSON *item_askType = cJSON_GetObjectItem(root, "askType"); if (item_askType != NULL && cJSON_IsNumber(item_askType)) { service_get_meter_data.askType = item_askType->valueint; } callback = evs_service_callback(EVS_Meter_ASK_SRV); if (callback) { ((int (*)(const evs_service_meter_get *, evs_service_feedback_meter_get *))callback)(&service_get_meter_data, &service_dev_feedback_meter_data); } cJSON *response_root = cJSON_CreateObject(); cJSON_AddNumberToObject(response_root, "gunNo", service_dev_feedback_meter_data.gunNo); cJSON_AddStringToObject(response_root, "askDate", service_dev_feedback_meter_data.askDate); cJSON_AddNumberToObject(response_root, "askType", service_dev_feedback_meter_data.askType); cJSON_AddNumberToObject(response_root, "askResult", service_dev_feedback_meter_data.askResult); *response = cJSON_PrintUnformatted(response_root); if (*response == NULL) { PROTOCOL_TRACE("Json Not Exist!"); return -1; } else { *response_len = strlen(*response); } cJSON_Delete(response_root); return 0; } static int evs_service_time_sync_handler(const char *request, char **response, int *response_len) { char time_buf[20] = {0}; cJSON *root = cJSON_Parse(request); cJSON *item_time = cJSON_GetObjectItem(root, "srvTime"); if (item_time != NULL && cJSON_IsString(item_time)) { memcpy(time_buf, item_time->valuestring, strlen(item_time->valuestring)); } PROTOCOL_TRACE("Current Timestamp: %s", time_buf); unsigned int time = strtoint(time_buf); void *callback; callback = evs_service_callback(EVS_TIME_SYNC); if (callback) { ((int (*)(unsigned int))callback)(time); } return 0; } /** 浜嬩欢鍥炶皟锛氭帴鏀跺埌浜戯拷??涓嬪彂鐨勬湇鍔★拷?锟芥眰 **/ static int user_service_request_event_handler(const int devid, const char *serviceid, const int serviceid_len, const char *request, const int request_len, char **response, int *response_len) { int add_result = 0; const char *response_fmt = "{\"Result\": %d}"; PROTOCOL_TRACE("Service Request Received, Service ID: %.*s, Payload: %s", serviceid_len, serviceid, request); if (strlen("feeModelTwUpdateSrv") == serviceid_len && memcmp("feeModelTwUpdateSrv", serviceid, serviceid_len) == 0) { evs_service_issue_feeModel_handler(request, response, response_len); } if (strlen("startChargeSrv") == serviceid_len && memcmp("startChargeSrv", serviceid, serviceid_len) == 0) { evs_service_startCharge_handler(request, response, response_len); } if (strlen("authResultSrv") == serviceid_len && memcmp("authResultSrv", serviceid, serviceid_len) == 0) { evs_service_authCharge_handler(request, response, response_len); } if (strlen("stopChargeSrv") == serviceid_len && memcmp("stopChargeSrv", serviceid, serviceid_len) == 0) { evs_service_stopCharge_handler(request, response, response_len); } if (strlen("orderCheckSrv") == serviceid_len && memcmp("orderCheckSrv", serviceid, serviceid_len) == 0) { evs_service_confirmTrade_handler(request, response, response_len); } if (strlen("queDataSrv") == serviceid_len && memcmp("queDataSrv", serviceid, serviceid_len) == 0) { evs_service_query_log_handler(request, response, response_len); } if (strlen("gateLockSrv") == serviceid_len && memcmp("gateLockSrv", serviceid, serviceid_len) == 0) { evs_service_gateLock_ctrl_handler(request, response, response_len); } if (strlen("groundLockSrv") == serviceid_len && memcmp("groundLockSrv", serviceid, serviceid_len) == 0) { evs_service_groundLock_ctrl_handler(request, response, response_len); } if (strlen("ctrlLockSrv") == serviceid_len && memcmp("ctrlLockSrv", serviceid, serviceid_len) == 0) { evs_service_lockCtrl_handler(request, response, response_len); } if (strlen("devMaintainCtrlSrv") == serviceid_len && memcmp("devMaintainCtrlSrv", serviceid, serviceid_len) == 0) { evs_service_dev_maintain_handler(request, response, response_len); } if (strlen("acOrderlyChargeSrv") == serviceid_len && memcmp("acOrderlyChargeSrv", serviceid, serviceid_len) == 0) { evs_service_orderCharge_handler(request, response, response_len); } if (strlen("dcOrderlyChargeSrv") == serviceid_len && memcmp("dcOrderlyChargeSrv", serviceid, serviceid_len) == 0) { evs_service_orderCharge_handler(request, response, response_len); } if (strlen("confUpdateCtrlSrv") == serviceid_len && memcmp("confUpdateCtrlSrv", serviceid, serviceid_len) == 0) { evs_service_update_config_handler(request, response, response_len); } if (strlen("getDevConfSrv") == serviceid_len && memcmp("getDevConfSrv", serviceid, serviceid_len) == 0) { evs_service_get_config_handler(request, response, response_len); } if (strlen("devMaintainQuerySrv") == serviceid_len && memcmp("devMaintainQuerySrv", serviceid, serviceid_len) == 0) { evs_service_get_Maintain_handler(request, response, response_len); } if (strlen("srvAuthCodeSrv") == serviceid_len && memcmp("srvAuthCodeSrv", serviceid, serviceid_len) == 0) { evs_service_srvAuthCode_handler(request, response, response_len); } if (strlen("termSnSrv") == serviceid_len && memcmp("termSnSrv", serviceid, serviceid_len) == 0) { evs_service_terminalSn_handler(request, response, response_len); } if (strlen("funConfUpdateDataSrv") == serviceid_len && memcmp("funConfUpdateDataSrv", serviceid, serviceid_len) == 0) { evs_service_update_fun_config_handler(request, response, response_len); } if (strlen("getFunConfSrv") == serviceid_len && memcmp("getFunConfSrv", serviceid, serviceid_len) == 0) { evs_service_get_fun_config_handler(request, response, response_len); } if (strlen("feeModelTwQuerySrv") == serviceid_len && memcmp("feeModelTwQuerySrv", serviceid, serviceid_len) == 0) { evs_service_feeModel_query_handler(request, response, response_len); } if (strlen("rsvChargeSrv") == serviceid_len && memcmp("rsvChargeSrv", serviceid, serviceid_len) == 0) { evs_service_reserve_charge_handler(request, response, response_len); } if (strlen("bleSecretUpdateSrv") == serviceid_len && memcmp("bleSecretUpdateSrv", serviceid, serviceid_len) == 0) { evs_service_ble_secret_update_handler(request, response, response_len); } if (strlen("getBlePlugChgInfoSrv") == serviceid_len && memcmp("getBlePlugChgInfoSrv", serviceid, serviceid_len) == 0) { evs_service_ble_auth_list_get_handler(request, response, response_len); } if (strlen("blePlugChgConfSrv") == serviceid_len && memcmp("blePlugChgConfSrv", serviceid, serviceid_len) == 0) { evs_service_ble_auth_list_confirm_handler(request, response, response_len); } if (strlen("bleAuthListCleanSrv") == serviceid_len && memcmp("bleAuthListCleanSrv", serviceid, serviceid_len) == 0) { evs_service_ble_auth_list_clean_handler(request, response, response_len); } if (strlen("bleResetSrv") == serviceid_len && memcmp("bleResetSrv", serviceid, serviceid_len) == 0) { evs_service_ble_reset_handler(request, response, response_len); } if (strlen("partsConfUpdateSrv") == serviceid_len && memcmp("partsConfUpdateSrv", serviceid, serviceid_len) == 0) { evs_service_parts_config_handler(request, response, response_len); } if (strlen("getPartsConfSrv") == serviceid_len && memcmp("getPartsConfSrv", serviceid, serviceid_len) == 0) { evs_service_get_parts_config_handler(request, response, response_len); } if (strlen("vinListUpdateSrv") == serviceid_len && memcmp("vinListUpdateSrv", serviceid, serviceid_len) == 0) { evs_service_vin_whitelist_handler(request, response, response_len); } if (strlen("tradeRecordAskSrv") == serviceid_len && memcmp("tradeRecordAskSrv", serviceid, serviceid_len) == 0) { evs_service_get_trade_handler(request, response, response_len); } if (strlen("meterRecordAskSrv") == serviceid_len && memcmp("meterRecordAskSrv", serviceid, serviceid_len) == 0) { evs_service_get_meter_handler(request, response, response_len); } if (strlen("timeSyncSrv") == serviceid_len && memcmp("timeSyncSrv", serviceid, serviceid_len) == 0) { evs_service_time_sync_handler(request, response, response_len); } if (*response == NULL) { *response_len = strlen(response_fmt) + 10 + 1; *response = (char *)HAL_Malloc(*response_len); memset(*response, 0, *response_len); HAL_Snprintf(*response, *response_len, response_fmt, add_result); *response_len = strlen(*response); } return 0; } static int send_property_dcPile(evs_property_dcPile *data) { int res = 0; char *payload = NULL; cJSON *root = NULL; cJSON *body = NULL; root = cJSON_CreateObject(); cJSON_AddItemToObject(root, "dcDeRealItyTwData", body = cJSON_CreateObject()); cJSON_AddNumberToObject(body, "netType", data->netType); cJSON_AddNumberToObject(body, "sigVal", data->sigVal); cJSON_AddNumberToObject(body, "netId", data->netId); cJSON_AddNumberToObject(body, "acVolA", data->acVolA); cJSON_AddNumberToObject(body, "acCurA", data->acCurA); cJSON_AddNumberToObject(body, "acVolB", data->acVolB); cJSON_AddNumberToObject(body, "acCurB", data->acCurB); cJSON_AddNumberToObject(body, "acVolC", data->acVolC); cJSON_AddNumberToObject(body, "acCurC", data->acCurC); cJSON_AddNumberToObject(body, "caseTemp", data->caseTemp); cJSON_AddStringToObject(body, "feeModelId", data->feeModelId); cJSON_AddNumberToObject(body, "outletTemp", data->outletTemp); cJSON_AddNumberToObject(body, "inletTemp", data->inletTemp); cJSON_AddNumberToObject(body, "caseHumidity", data->caseHumidity); cJSON_AddNumberToObject(body, "totalRam", data->totalRam); cJSON_AddNumberToObject(body, "ramUseRate", data->ramUseRate); cJSON_AddNumberToObject(body, "totalRom", data->totalRom); cJSON_AddNumberToObject(body, "romUseRate", data->romUseRate); cJSON_AddNumberToObject(body, "cpuUseRate", data->cpuUseRate); // sprintf(time, "%d", data->sysStartTime); // cJSON_AddStringToObject(body, "sysStartTime", time); cJSON_AddNumberToObject(body, "sysStartTime", data->sysStartTime); cJSON_AddNumberToObject(body, "sysWorkTime", data->sysWorkTime); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_Report(evs_g_user_ctx.master_devid, ITM_MSG_POST_PROPERTY, (unsigned char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Property Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_property_acPile(evs_property_acPile *data) { int res = 0; char *payload = NULL; cJSON *root = NULL; cJSON *body = NULL; root = cJSON_CreateObject(); cJSON_AddItemToObject(root, "acDeRealItyData", body = cJSON_CreateObject()); cJSON_AddNumberToObject(body, "netType", data->netType); cJSON_AddNumberToObject(body, "sigVal", data->sigVal); cJSON_AddNumberToObject(body, "netId", data->netId); cJSON_AddNumberToObject(body, "acVolA", data->acVolA); cJSON_AddNumberToObject(body, "acCurA", data->acCurA); cJSON_AddNumberToObject(body, "acVolB", data->acVolB); cJSON_AddNumberToObject(body, "acCurB", data->acCurB); cJSON_AddNumberToObject(body, "acVolC", data->acVolC); cJSON_AddNumberToObject(body, "acCurC", data->acCurC); cJSON_AddNumberToObject(body, "caseTemp", data->caseTemp); cJSON_AddStringToObject(body, "feeModelId", data->feeModelId); cJSON_AddNumberToObject(body, "totalRam", data->totalRam); cJSON_AddNumberToObject(body, "ramUseRate", data->ramUseRate); cJSON_AddNumberToObject(body, "totalRom", data->totalRom); cJSON_AddNumberToObject(body, "romUseRate", data->romUseRate); cJSON_AddNumberToObject(body, "cpuUseRate", data->cpuUseRate); cJSON_AddStringToObject(body, "netSigQua", data->netSigQua); cJSON_AddStringToObject(body, "devRunSampVal", data->devRunSampVal); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_Report(evs_g_user_ctx.master_devid, ITM_MSG_POST_PROPERTY, (unsigned char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Property Message ID: %d", res); if (res < 0) { return -1; } return res; } // 浜ゆ祦闈炲厖鐢佃繃绋嬪疄鏃剁洃娴嬪睘锟�? static int send_property_ac_nonwork(evs_property_ac_nonWork *data) { int res = 0; char *payload = NULL; char Temp[20] = {0}; cJSON *root = NULL; cJSON *body = NULL; root = cJSON_CreateObject(); cJSON_AddItemToObject(root, "acGunIdleItyData", body = cJSON_CreateObject()); cJSON_AddNumberToObject(body, "gunNo", data->gunNo); cJSON_AddNumberToObject(body, "workStatus", data->workStatus); cJSON_AddNumberToObject(body, "conStatus", data->conStatus); cJSON_AddNumberToObject(body, "outRelayStatus", data->outRelayStatus); cJSON_AddNumberToObject(body, "eLockStatus", data->eLockStatus); cJSON_AddNumberToObject(body, "gunTemp", data->gunTemp); cJSON_AddNumberToObject(body, "acVolA", data->acVolA); cJSON_AddNumberToObject(body, "acCurA", data->acCurA); cJSON_AddNumberToObject(body, "acVolB", data->acVolB); cJSON_AddNumberToObject(body, "acCurB", data->acCurB); cJSON_AddNumberToObject(body, "acVolC", data->acVolC); cJSON_AddNumberToObject(body, "acCurC", data->acCurC); sprintf(Temp, "%lld", data->sumMeter); cJSON_AddStringToObject(body, "sumMeter", Temp); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_Report(evs_g_user_ctx.master_devid, ITM_MSG_POST_PROPERTY, (unsigned char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Property Message ID: %d", res); if (res < 0) { return -1; } return res; } // 浜ゆ祦鍏呯數杩囩▼瀹炴椂鐩戞祴灞烇拷? static int send_property_ac_work(evs_property_ac_work *data) { int res = 0; int i = 0; char *payload = NULL; char Temp[20] = {0}; cJSON *root = NULL; cJSON *body = NULL; root = cJSON_CreateObject(); cJSON_AddItemToObject(root, "acGunRunItyData", body = cJSON_CreateObject()); cJSON_AddNumberToObject(body, "gunNo", data->gunNo); cJSON_AddNumberToObject(body, "workStatus", data->workStatus); cJSON_AddNumberToObject(body, "conStatus", data->conStatus); cJSON_AddNumberToObject(body, "eLockStatus", data->eLockStatus); cJSON_AddNumberToObject(body, "outRelayStatus", data->outRelayStatus); cJSON_AddNumberToObject(body, "gunTemp", data->gunTemp); cJSON_AddNumberToObject(body, "acVolA", data->acVolA); cJSON_AddNumberToObject(body, "acCurA", data->acCurA); cJSON_AddNumberToObject(body, "acVolB", data->acVolB); cJSON_AddNumberToObject(body, "acCurB", data->acCurB); cJSON_AddNumberToObject(body, "acVolC", data->acVolC); cJSON_AddNumberToObject(body, "acCurC", data->acCurC); cJSON_AddStringToObject(body, "preTradeNo", data->preTradeNo); cJSON_AddStringToObject(body, "tradeNo", data->tradeNo); cJSON_AddNumberToObject(body, "realPower", data->realPower); cJSON_AddNumberToObject(body, "chgTime", data->chgTime); cJSON_AddNumberToObject(body, "PwmDutyRadio", data->PwmDutyRadio); cJSON_AddNumberToObject(body, "s2SwhActNum", data->s2SwhActNum); memset(Temp, 0, 20); sprintf(Temp, "%lld", data->meterStartVal); cJSON_AddStringToObject(body, "meterStartVal", Temp); memset(Temp, 0, 20); sprintf(Temp, "%lld", data->meterRealVal); cJSON_AddStringToObject(body, "meterRealVal", Temp); cJSON_AddNumberToObject(body, "totalElect", data->totalElect); cJSON_AddNumberToObject(body, "totalCost", data->totalCost); cJSON_AddNumberToObject(body, "totalPowerCost", data->totalPowerCost); cJSON_AddNumberToObject(body, "totalServCost", data->totalServCost); cJSON_AddNumberToObject(body, "timeNum", data->timeNum); int segCnt = data->timeNum; if (segCnt > 0 && segCnt < EVS_MAX_MODEL_DEVSEG + 1) { int str_len = 0; char *tempTarriff = (char *)HAL_Malloc(8 * segCnt); memset(tempTarriff, 0, 8 * segCnt); for (i = 0; i < segCnt; i++) { sprintf(tempTarriff + str_len, "%d,", data->partElect[i]); str_len = strlen(tempTarriff); } tempTarriff[str_len - 1] = '\0'; cJSON_AddStringToObject(body, "partElect", tempTarriff); str_len = 0; memset(tempTarriff, 0, 8 * segCnt); for (i = 0; i < segCnt; i++) { sprintf(tempTarriff + str_len, "%d,", data->chargeFee[i]); str_len = strlen(tempTarriff); } tempTarriff[str_len - 1] = '\0'; cJSON_AddStringToObject(body, "chargeFee", tempTarriff); str_len = 0; memset(tempTarriff, 0, 8 * segCnt); for (i = 0; i < segCnt; i++) { sprintf(tempTarriff + str_len, "%d,", data->serviceFee[i]); str_len = strlen(tempTarriff); } tempTarriff[str_len - 1] = '\0'; cJSON_AddStringToObject(body, "serviceFee", tempTarriff); HAL_Free(tempTarriff); } cJSON_AddNumberToObject(body, "startPoint", data->startPoint); cJSON_AddNumberToObject(body, "crossPoints", data->crossPoints); int pointCnt = data->crossPoints; if (pointCnt > 0 && pointCnt < EVS_MAX_MODEL_DEVSEG + 1) { int str_len = 0; char *tempPoint = (char *)HAL_Malloc(8 * pointCnt); memset(tempPoint, 0, 8 * pointCnt); for (i = 0; i < pointCnt; i++) { sprintf(tempPoint + str_len, "%d,", data->pointsElect[i]); str_len = strlen(tempPoint); } tempPoint[str_len - 1] = '\0'; cJSON_AddStringToObject(body, "pointsElect", tempPoint); HAL_Free(tempPoint); } payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_Report(evs_g_user_ctx.master_devid, ITM_MSG_POST_PROPERTY, (unsigned char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Property Message ID: %d", res); if (res < 0) { return -1; } return res; } // 鐩存祦鍏呯數杩囩▼BMS瀹炴椂鐩戞祴灞烇拷? static int send_property_bms(evs_property_BMS *data) { int res = 0; char *payload = NULL; cJSON *root = NULL; cJSON *body = NULL; root = cJSON_CreateObject(); cJSON_AddItemToObject(root, "dcBmsRunItyData", body = cJSON_CreateObject()); cJSON_AddNumberToObject(body, "gunNo", data->gunNo); cJSON_AddStringToObject(body, "preTradeNo", data->preTradeNo); cJSON_AddStringToObject(body, "tradeNo", data->tradeNo); cJSON_AddNumberToObject(body, "socVal", data->socVal); cJSON_AddNumberToObject(body, "BMSVer", data->BMSVer); cJSON_AddNumberToObject(body, "BMSMaxVol", data->BMSMaxVol); cJSON_AddNumberToObject(body, "batType", data->batType); cJSON_AddNumberToObject(body, "batRatedCap", data->batRatedCap); cJSON_AddNumberToObject(body, "batRatedTotalVol", data->batRatedTotalVol); cJSON_AddNumberToObject(body, "singlBatMaxAllowVol", data->singlBatMaxAllowVol); cJSON_AddNumberToObject(body, "maxAllowCur", data->maxAllowCur); cJSON_AddNumberToObject(body, "battotalEnergy", data->battotalEnergy); cJSON_AddNumberToObject(body, "maxVol", data->maxVol); cJSON_AddNumberToObject(body, "maxTemp", data->maxTemp); cJSON_AddNumberToObject(body, "batCurVol", data->batCurVol); cJSON_AddStringToObject(body, "batManu", data->batManufacturer); cJSON_AddStringToObject(body, "batSN", data->batSN); cJSON_AddStringToObject(body, "batMadeDay", data->batMadeDay); cJSON_AddNumberToObject(body, "chargeTimes", data->chargeTimes); cJSON_AddNumberToObject(body, "batProperty", data->batProperty); cJSON_AddStringToObject(body, "bmsSoftVer", data->bmsSoftVer); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_Report(evs_g_user_ctx.master_devid, ITM_MSG_POST_PROPERTY, (unsigned char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Property Message ID: %d", res); if (res < 0) { return -1; } return res; } // 鐩存祦闈炲厖鐢佃繃绋嬪疄鏃剁洃娴嬪睘锟�? static int send_property_dc_nonwork(evs_property_dc_nonWork *data) { int res = 0; char *payload = NULL; char Temp[20] = {0}; cJSON *root = NULL; cJSON *body = NULL; root = cJSON_CreateObject(); cJSON_AddItemToObject(root, "dcGunIdleItyFoData", body = cJSON_CreateObject()); cJSON_AddNumberToObject(body, "gunNo", data->gunNo); cJSON_AddNumberToObject(body, "workStatus", data->workStatus); cJSON_AddNumberToObject(body, "gunStatus", data->gunStatus); cJSON_AddNumberToObject(body, "eLockStatus", data->eLockStatus); cJSON_AddNumberToObject(body, "DCK1Status", data->DCK1Status); cJSON_AddNumberToObject(body, "DCK2Status", data->DCK2Status); cJSON_AddNumberToObject(body, "DCPlusFuseStatus", data->DCPlusFuseStatus); cJSON_AddNumberToObject(body, "DCMinusFuseStatus", data->DCMinusFuseStatus); cJSON_AddNumberToObject(body, "conTemp1", data->conTemp1); cJSON_AddNumberToObject(body, "conTemp2", data->conTemp2); cJSON_AddNumberToObject(body, "dcVol", data->dcVol); cJSON_AddNumberToObject(body, "dcCur", data->dcCur); cJSON_AddNumberToObject(body, "chargeCnt", data->chargeCnt); cJSON_AddNumberToObject(body, "chargeTime", data->chargeTime); cJSON_AddNumberToObject(body, "k1Cnt", data->k1Cnt); cJSON_AddNumberToObject(body, "k2Cnt", data->k2Cnt); cJSON_AddNumberToObject(body, "acContactorStatus", data->acContactorState); cJSON_AddNumberToObject(body, "guidanceVal", data->guidanceVal); cJSON_AddNumberToObject(body, "auxiliaryPowerStatus", data->auxiliaryPowerStatus); cJSON_AddNumberToObject(body, "eLockCtrlStatus", data->elockCtrlState); cJSON_AddNumberToObject(body, "fanSwitchCtrlStatus", data->fanSwitchCtrlStatus); sprintf(Temp, "%lld", data->sumMeter); cJSON_AddStringToObject(body, "sumMeter", Temp); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_Report(evs_g_user_ctx.master_devid, ITM_MSG_POST_PROPERTY, (unsigned char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Property Message ID: %d", res); if (res < 0) { return -1; } return res; } // 鐩存祦鍏呯數杩囩▼瀹炴椂鐩戞祴灞烇拷? static int send_property_dc_work(evs_property_dc_work *data) { int res = 0; int i = 0; char *payload = NULL; cJSON *root = NULL; cJSON *body = NULL; const char *ctrlState_fmt = "%d,%d,%d,%d,%d,%d"; char temp[512]; root = cJSON_CreateObject(); cJSON_AddItemToObject(root, "dcGunRunItyTwData", body = cJSON_CreateObject()); cJSON_AddNumberToObject(body, "gunNo", data->gunNo); cJSON_AddNumberToObject(body, "workStatus", data->workStatus); cJSON_AddNumberToObject(body, "gunStatus", data->gunStatus); cJSON_AddNumberToObject(body, "eLockStatus", data->eLockStatus); cJSON_AddNumberToObject(body, "DCK1Status", data->DCK1Status); cJSON_AddNumberToObject(body, "DCK2Status", data->DCK2Status); cJSON_AddNumberToObject(body, "DCPlusFuseStatus", data->DCPlusFuseStatus); cJSON_AddNumberToObject(body, "DCMinusFuseStatus", data->DCMinusFuseStatus); cJSON_AddNumberToObject(body, "conTemp1", data->conTemp1); cJSON_AddNumberToObject(body, "conTemp2", data->conTemp2); cJSON_AddNumberToObject(body, "dcVol", data->dcVol); cJSON_AddNumberToObject(body, "dcCur", data->dcCur); cJSON_AddStringToObject(body, "preTradeNo", data->preTradeNo); cJSON_AddStringToObject(body, "tradeNo", data->tradeNo); cJSON_AddNumberToObject(body, "chgType", data->chgType); cJSON_AddNumberToObject(body, "realPower", data->realPower); cJSON_AddNumberToObject(body, "chgTime", data->chgTime); cJSON_AddNumberToObject(body, "remainT", data->remainT); cJSON_AddNumberToObject(body, "socVal", data->socVal); cJSON_AddNumberToObject(body, "needVol", data->needVol); cJSON_AddNumberToObject(body, "needCur", data->needCur); cJSON_AddNumberToObject(body, "chargeMode", data->chargeMode); cJSON_AddNumberToObject(body, "bmsVol", data->bmsVol); cJSON_AddNumberToObject(body, "bmsCur", data->bmsCur); cJSON_AddNumberToObject(body, "SingleMHV", data->SingleMHV); cJSON_AddNumberToObject(body, "SingleMLV", data->SingleMLV); cJSON_AddNumberToObject(body, "MHTemp", data->MHTemp); cJSON_AddNumberToObject(body, "MLTemp", data->MLTemp); cJSON_AddNumberToObject(body, "SingleMHVNo", data->SingleMHVNo); cJSON_AddNumberToObject(body, "MHTempNo", data->MHTempNo); cJSON_AddNumberToObject(body, "MLTempNo", data->MLTempNo); cJSON_AddNumberToObject(body, "acContactorStatus", data->acInputContactorState); cJSON_AddNumberToObject(body, "guidanceVal", data->guidanceVol); HAL_Snprintf(temp, sizeof(temp), ctrlState_fmt, data->k1CtrlState, data->k2CtrlState, data->acInputContactorCtrlState, data->apsSwtichCtrlState, data->elockCtrlState, data->carbinFanCtrlState); cJSON_AddStringToObject(body, "componentsCtrlStatus", temp); memset(temp, 0, 20); sprintf(temp, "%lld", data->meterStartVal); cJSON_AddStringToObject(body, "meterStartVal", temp); memset(temp, 0, 20); sprintf(temp, "%lld", data->meterRealVal); cJSON_AddStringToObject(body, "meterRealVal", temp); cJSON_AddNumberToObject(body, "totalElect", data->totalElect); cJSON_AddNumberToObject(body, "totalCost", data->totalCost); cJSON_AddNumberToObject(body, "totalPowerCost", data->totalPowerCost); cJSON_AddNumberToObject(body, "totalServCost", data->totalServCost); cJSON_AddNumberToObject(body, "timeNum", data->timeNum); int segCnt = data->timeNum; if (segCnt > 0 && segCnt < EVS_MAX_MODEL_DEVSEG + 1) { int str_len = 0; char *tempTarriff = (char *)HAL_Malloc(8 * segCnt); memset(tempTarriff, 0, 8 * segCnt); for (i = 0; i < segCnt; i++) { sprintf(tempTarriff + str_len, "%d,", data->partElect[i]); str_len = strlen(tempTarriff); } tempTarriff[str_len - 1] = '\0'; cJSON_AddStringToObject(body, "partElect", tempTarriff); str_len = 0; memset(tempTarriff, 0, 8 * segCnt); for (i = 0; i < segCnt; i++) { sprintf(tempTarriff + str_len, "%d,", data->chargeFee[i]); str_len = strlen(tempTarriff); } tempTarriff[str_len - 1] = '\0'; cJSON_AddStringToObject(body, "chargeFee", tempTarriff); str_len = 0; memset(tempTarriff, 0, 8 * segCnt); for (i = 0; i < segCnt; i++) { sprintf(tempTarriff + str_len, "%d,", data->serviceFee[i]); str_len = strlen(tempTarriff); } tempTarriff[str_len - 1] = '\0'; cJSON_AddStringToObject(body, "serviceFee", tempTarriff); HAL_Free(tempTarriff); } cJSON_AddNumberToObject(body, "startPoint", data->startPoint); cJSON_AddNumberToObject(body, "crossPoints", data->crossPoints); int pointCnt = data->crossPoints; if (pointCnt > 0 && pointCnt < EVS_MAX_MODEL_DEVSEG + 1) { int str_len = 0; char *tempPoint = (char *)HAL_Malloc(8 * pointCnt); memset(tempPoint, 0, 8 * pointCnt); for (i = 0; i < pointCnt; i++) { sprintf(tempPoint + str_len, "%d,", data->pointsElect[i]); str_len = strlen(tempPoint); } tempPoint[str_len - 1] = '\0'; cJSON_AddStringToObject(body, "pointsElect", tempPoint); HAL_Free(tempPoint); } payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_Report(evs_g_user_ctx.master_devid, ITM_MSG_POST_PROPERTY, (unsigned char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Property Message ID: %d", res); if (res < 0) { return -1; } return res; } // 鐩存祦鍏呯數璁撅拷?锟戒氦娴佽緭鍏ョ數琛ㄥ簳鍊肩洃娴嬪睘鎬ц〃 static int send_property_dc_input_meter(evs_property_dc_input_meter *data) { int res = 0; char *payload = NULL; char Temp[20] = {0}; cJSON *root = NULL; cJSON *body = NULL; root = cJSON_CreateObject(); cJSON_AddItemToObject(root, "dcSysMeterItyData", body = cJSON_CreateObject()); cJSON_AddNumberToObject(body, "gunNo", data->gunNo); cJSON_AddStringToObject(body, "acqTime", data->acqTime); bcd2str(data->mailAddr, Temp, sizeof(data->mailAddr)); cJSON_AddStringToObject(body, "mailAddr", Temp); bcd2str(data->meterNo, Temp, sizeof(data->meterNo)); cJSON_AddStringToObject(body, "meterNo", Temp); cJSON_AddStringToObject(body, "assetId", data->assetId); sprintf(Temp, "%lld", data->sumMeter); cJSON_AddStringToObject(body, "sumMeter", Temp); sprintf(Temp, "%d", data->ApElect); cJSON_AddStringToObject(body, "ApElect", Temp); sprintf(Temp, "%d", data->BpElect); cJSON_AddStringToObject(body, "BpElect", Temp); sprintf(Temp, "%d", data->CpElect); cJSON_AddStringToObject(body, "CpElect", Temp); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_Report(evs_g_user_ctx.master_devid, ITM_MSG_POST_PROPERTY, (unsigned char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Property Message ID: %d", res); if (res < 0) { return -1; } return res; } // 鍏呯數璁撅拷?锟借緭鍑虹數琛ㄥ簳鍊肩洃娴嬪睘鎬ц〃 static int send_property_dc_outmeter(evs_property_meter *data) { int res = 0; char *payload = NULL; char Temp[20] = {0}; cJSON *root = NULL; cJSON *body = NULL; root = cJSON_CreateObject(); cJSON_AddItemToObject(root, "dcOutMeterIty", body = cJSON_CreateObject()); cJSON_AddNumberToObject(body, "gunNo", data->gunNo); cJSON_AddStringToObject(body, "acqTime", data->acqTime); bcd2str(data->mailAddr, Temp, sizeof(data->mailAddr)); cJSON_AddStringToObject(body, "mailAddr", Temp); bcd2str(data->meterNo, Temp, sizeof(data->meterNo)); cJSON_AddStringToObject(body, "meterNo", Temp); cJSON_AddStringToObject(body, "assetId", data->assetId); sprintf(Temp, "%lld", data->sumMeter); cJSON_AddStringToObject(body, "sumMeter", Temp); cJSON_AddStringToObject(body, "lastTrade", data->lastTrade); cJSON_AddNumberToObject(body, "power", data->elec); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_Report(evs_g_user_ctx.master_devid, ITM_MSG_POST_PROPERTY, (unsigned char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Property Message ID: %d", res); if (res < 0) { return -1; } return res; } // 鍏呯數璁撅拷?锟借緭鍑虹數琛ㄥ簳鍊肩洃娴嬪睘鎬ц〃 static int send_property_ac_outmeter(evs_property_meter *data) { int res = 0; char *payload = NULL; char Temp[20] = {0}; cJSON *root = NULL; cJSON *body = NULL; root = cJSON_CreateObject(); cJSON_AddItemToObject(root, "acOutMeterItyData", body = cJSON_CreateObject()); cJSON_AddNumberToObject(body, "gunNo", data->gunNo); cJSON_AddStringToObject(body, "acqTime", data->acqTime); bcd2str(data->mailAddr, Temp, sizeof(data->mailAddr)); cJSON_AddStringToObject(body, "mailAddr", Temp); bcd2str(data->meterNo, Temp, sizeof(data->meterNo)); cJSON_AddStringToObject(body, "meterNo", Temp); cJSON_AddStringToObject(body, "assetId", data->assetId); sprintf(Temp, "%lld", data->sumMeter); cJSON_AddStringToObject(body, "sumMeter", Temp); cJSON_AddStringToObject(body, "lastTrade", data->lastTrade); cJSON_AddNumberToObject(body, "power", data->elec); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_Report(evs_g_user_ctx.master_devid, ITM_MSG_POST_PROPERTY, (unsigned char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Property Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_firmware_info(evs_event_firmware_info *data) { int res = 0; char *payload = NULL; char meterAddr[13] = {0}; char meter[EVS_MAX_METER_ADDR_LEN] = {0}; cJSON *root = NULL; cJSON *inMeterArray = NULL; cJSON *outMeterArray = NULL; unsigned char i = 0, j = 0, k = 0; root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "simNo", data->simNo); cJSON_AddStringToObject(root, "feeModelId", data->feeModelId); cJSON_AddStringToObject(root, "stakeModel", data->stakeModel); cJSON_AddStringToObject(root, "devSn", data->devSn); cJSON_AddStringToObject(root, "simMac", data->simMac); cJSON_AddStringToObject(root, "btMac", data->btMac); cJSON_AddNumberToObject(root, "vendorCode", data->vendorCode); cJSON_AddNumberToObject(root, "devType", data->devType); cJSON_AddNumberToObject(root, "portNum", data->portNum); cJSON_AddNumberToObject(root, "longitude", data->longitude); cJSON_AddNumberToObject(root, "latitude", data->latitude); cJSON_AddNumberToObject(root, "height", data->height); cJSON_AddNumberToObject(root, "gridType", data->gridType); cJSON_AddNumberToObject(root, "meaType", data->meaType); cJSON_AddNumberToObject(root, "otRate", data->otRate); cJSON_AddNumberToObject(root, "otMinVol", data->otMinVol); //cJSON_AddNumberToObject(root, "otMinCur", data->otMinCur); cJSON_AddNumberToObject(root, "otMaxVol", data->otMaxVol); //cJSON_AddNumberToObject(root, "otMaxCur", data->otMaxCur); cJSON_AddNumberToObject(root, "otCur", data->otMaxCur); cJSON_AddNumberToObject(root, "CT", data->CT); cJSON_AddNumberToObject(root, "isGateLock", data->isGateLock); cJSON_AddNumberToObject(root, "isGroundLock", data->isGroundLock); cJSON_AddNumberToObject(root, "mutliChargingMode", data->mutliChargingMode); cJSON_AddItemToObject(root, "inMeter", inMeterArray = cJSON_CreateArray()); for (i = 0; i < EVS_MAX_INPUT_METER_NUM; i++) { if (memcmp(data->inMeter[i], meter, EVS_MAX_METER_ADDR_LEN) != 0) { for (j = 0, k = 0; j < EVS_MAX_METER_ADDR_LEN; k++, j++) { meterAddr[k] = ((data->inMeter[i][j] >> 4) + '0'); meterAddr[++k] = (data->inMeter[i][j] & 0x0f) + '0'; } // cJSON_AddStringToArray(inMeterArray, meterAddr); cJSON_AddItemToArray(inMeterArray, cJSON_CreateString(meterAddr)); } } cJSON_AddItemToObject(root, "outMeter", outMeterArray = cJSON_CreateArray()); for (i = 0; i < EVS_MAX_PORT_NUM; i++) { if (memcmp(data->outMeter[i], meter, EVS_MAX_METER_ADDR_LEN) != 0) { for (j = 0, k = 0; j < EVS_MAX_METER_ADDR_LEN; k++, j++) { meterAddr[k] = ((data->outMeter[i][j] >> 4) + '0'); meterAddr[++k] = (data->outMeter[i][j] & 0x0f) + '0'; } // cJSON_AddStringToArray(outMeterArray, meterAddr); cJSON_AddItemToArray(outMeterArray, cJSON_CreateString(meterAddr)); } } payload = cJSON_PrintUnformatted(root); //logMsg("0122= %s\n",payload); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "firmwareTwEvt", strlen("firmwareTwEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_ver_info(evs_event_ver_info *data) { int res = 0; char *payload = NULL; cJSON *root = NULL; root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "devRegMethod", data->devRegMethod); cJSON_AddStringToObject(root, "pileSoftwareVer", data->pileSoftwareVer); cJSON_AddStringToObject(root, "pileHardwareVer", data->pileHardwareVer); cJSON_AddStringToObject(root, "sdkVer", "SDK_v1.1.10"); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "verInfoEvt", strlen("verInfoEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_dev_maintain_result(evs_event_feedback_dev_maintain *data) { int res = 0; char *payload = NULL; cJSON *root = NULL; root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "ctrlType", data->ctrlType); cJSON_AddNumberToObject(root, "reason", data->reason); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "devMaintainRetEvt", strlen("devMaintainRetEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_lock_ctrl_result(evs_event_feedback_lockCtrl *data) { int res = 0; char *payload = NULL; cJSON *root = NULL; root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "gunNo", data->gunNo); cJSON_AddNumberToObject(root, "lockStatus", data->lockStatus); cJSON_AddNumberToObject(root, "resCode", data->resCode); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "ctrlLockRetEvt", strlen("ctrlLockRetEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_logquery_result(evs_event_logQuery_Result *data) { int res = 0; int i = 0; char *payload = NULL; char temp[20] = {0}; cJSON *root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "gunNo", data->gunNo); sprintf(temp, "%d", data->startDate); cJSON_AddStringToObject(root, "startDate", temp); sprintf(temp, "%d", data->stopDate); cJSON_AddStringToObject(root, "stopDate", temp); cJSON_AddNumberToObject(root, "askType", data->askType); cJSON_AddNumberToObject(root, "result", data->result); cJSON_AddStringToObject(root, "logQueryNo", data->logQueryNo); cJSON_AddNumberToObject(root, "retType", data->retType); cJSON_AddNumberToObject(root, "logQueryEvtSum", data->logQueryEvtSum); cJSON_AddNumberToObject(root, "logQueryEvtNo", data->logQueryEvtNo); if (data->retType == 10) { if (data->askType == 10) // 浜ゆ槗璁板綍 { cJSON *partElecArray = NULL; cJSON *partChargeFeeArray = NULL; cJSON *partServiceFeeArray = NULL; cJSON *pointElecArray = NULL; cJSON *tradeRoot = cJSON_CreateObject(); cJSON_AddNumberToObject(tradeRoot, "gunNo", data->dataArea.tradeInfo.gunNo); cJSON_AddStringToObject(tradeRoot, "preTradeNo", data->dataArea.tradeInfo.preTradeNo); cJSON_AddStringToObject(tradeRoot, "tradeNo", data->dataArea.tradeInfo.tradeNo); cJSON_AddStringToObject(tradeRoot, "vinCode", data->dataArea.tradeInfo.vinCode); cJSON_AddNumberToObject(tradeRoot, "timeDivType", data->dataArea.tradeInfo.timeDivType); sprintf(temp, "%d", data->dataArea.tradeInfo.chargeStartTime); cJSON_AddStringToObject(tradeRoot, "chargeStartTime", temp); sprintf(temp, "%d", data->dataArea.tradeInfo.chargeEndTime); cJSON_AddStringToObject(tradeRoot, "chargeEndTime", temp); cJSON_AddNumberToObject(tradeRoot, "startSoc", data->dataArea.tradeInfo.startSoc); cJSON_AddNumberToObject(tradeRoot, "endSoc", data->dataArea.tradeInfo.endSoc); cJSON_AddNumberToObject(tradeRoot, "reason", data->dataArea.tradeInfo.reason); cJSON_AddNumberToObject(tradeRoot, "totalElect", data->dataArea.tradeInfo.totalElect); cJSON_AddStringToObject(tradeRoot, "feeModelId", data->dataArea.tradeInfo.feeModelId); sprintf(temp, "%lld", data->dataArea.tradeInfo.sumStart); cJSON_AddStringToObject(tradeRoot, "sumStart", temp); sprintf(temp, "%lld", data->dataArea.tradeInfo.sumEnd); cJSON_AddStringToObject(tradeRoot, "sumEnd", temp); cJSON_AddNumberToObject(tradeRoot, "totalElect", data->dataArea.tradeInfo.totalElect); cJSON_AddNumberToObject(tradeRoot, "totalPowerCost", data->dataArea.tradeInfo.totalPowerCost); cJSON_AddNumberToObject(tradeRoot, "totalServCost", data->dataArea.tradeInfo.totalServCost); cJSON_AddNumberToObject(tradeRoot, "timeNum", data->dataArea.tradeInfo.timeNum); int segCnt = data->dataArea.tradeInfo.timeNum; if (segCnt > 0 && segCnt < EVS_MAX_MODEL_DEVSEG + 1) { cJSON_AddItemToObject(tradeRoot, "partElect", partElecArray = cJSON_CreateArray()); cJSON_AddItemToObject(tradeRoot, "chargeFee", partChargeFeeArray = cJSON_CreateArray()); cJSON_AddItemToObject(tradeRoot, "serviceFee", partServiceFeeArray = cJSON_CreateArray()); for (i = 0; i < segCnt; i++) { cJSON_AddItemToArray(partElecArray, cJSON_CreateNumber(data->dataArea.tradeInfo.partElect[i])); cJSON_AddItemToArray(partChargeFeeArray, cJSON_CreateNumber(data->dataArea.tradeInfo.chargeFee[i])); cJSON_AddItemToArray(partServiceFeeArray, cJSON_CreateNumber(data->dataArea.tradeInfo.serviceFee[i])); } } cJSON_AddNumberToObject(tradeRoot, "startPoint", data->dataArea.tradeInfo.startPoint); cJSON_AddNumberToObject(tradeRoot, "crossPoints", data->dataArea.tradeInfo.crossPoints); int pointCnt = data->dataArea.tradeInfo.crossPoints; if (pointCnt > 0 && pointCnt < EVS_MAX_MODEL_DEVSEG + 1) { cJSON_AddItemToObject(tradeRoot, "pointsElect", pointElecArray = cJSON_CreateArray()); for (i = 0; i < pointCnt; i++) { cJSON_AddItemToArray(pointElecArray, cJSON_CreateNumber(data->dataArea.tradeInfo.partElect[i])); } } char *tradePayload = cJSON_PrintUnformatted(tradeRoot); cJSON_AddStringToObject(root, "dataArea", tradePayload); if (tradeRoot != NULL) { cJSON_Delete(tradeRoot); } if (tradePayload != NULL) { HAL_Free(tradePayload); } } else if (data->askType == 11) // 鐢佃〃搴曪拷? { cJSON *meterRoot, *body; meterRoot = cJSON_CreateObject(); cJSON_AddItemToObject(meterRoot, "outMeterItyData", body = cJSON_CreateObject()); cJSON_AddNumberToObject(body, "gunNo", data->dataArea.meterData.gunNo); cJSON_AddStringToObject(body, "acqTime", data->dataArea.meterData.acqTime); bcd2str(data->dataArea.meterData.mailAddr, temp, 6); cJSON_AddStringToObject(body, "mailAddr", temp); bcd2str(data->dataArea.meterData.meterNo, temp, 6); cJSON_AddStringToObject(body, "meterNo", temp); cJSON_AddStringToObject(body, "assetId", data->dataArea.meterData.assetId); sprintf(temp, "%lld", data->dataArea.meterData.sumMeter); cJSON_AddStringToObject(body, "sumMeter", temp); cJSON_AddStringToObject(body, "lastTrade", data->dataArea.meterData.lastTrade); cJSON_AddNumberToObject(body, "power", data->dataArea.meterData.elec); char *meterPayload = cJSON_PrintUnformatted(meterRoot); cJSON_AddStringToObject(root, "dataArea", meterPayload); if (meterRoot != NULL) { cJSON_Delete(meterRoot); } if (meterPayload != NULL) { HAL_Free(meterPayload); } } else if (data->askType == 14) // BMS灞烇拷? { cJSON *BMSRoot, *body; BMSRoot = cJSON_CreateObject(); cJSON_AddItemToObject(BMSRoot, "dcBmsRunIty", body = cJSON_CreateObject()); cJSON_AddNumberToObject(body, "gunNo", data->dataArea.BMSData.gunNo); cJSON_AddStringToObject(body, "preTradeNo", data->dataArea.BMSData.preTradeNo); cJSON_AddStringToObject(body, "tradeNo", data->dataArea.BMSData.tradeNo); cJSON_AddNumberToObject(body, "socVal", data->dataArea.BMSData.socVal); cJSON_AddNumberToObject(body, "BMSVer", data->dataArea.BMSData.BMSVer); cJSON_AddNumberToObject(body, "BMSMaxVol", data->dataArea.BMSData.BMSMaxVol); cJSON_AddNumberToObject(body, "batType", data->dataArea.BMSData.batType); cJSON_AddNumberToObject(body, "batRatedCap", data->dataArea.BMSData.batRatedCap); cJSON_AddNumberToObject(body, "batRatedTotalVol", data->dataArea.BMSData.batRatedTotalVol); cJSON_AddNumberToObject(body, "singlBatMaxAllowVol", data->dataArea.BMSData.singlBatMaxAllowVol); cJSON_AddNumberToObject(body, "maxAllowCur", data->dataArea.BMSData.maxAllowCur); cJSON_AddNumberToObject(body, "battotalEnergy", data->dataArea.BMSData.battotalEnergy); cJSON_AddNumberToObject(body, "maxVol", data->dataArea.BMSData.maxVol); cJSON_AddNumberToObject(body, "maxTemp", data->dataArea.BMSData.maxTemp); cJSON_AddNumberToObject(body, "batCurVol", data->dataArea.BMSData.batCurVol); cJSON_AddStringToObject(body, "batManufacturer", data->dataArea.BMSData.batManufacturer); cJSON_AddStringToObject(body, "batSN", data->dataArea.BMSData.batSN); cJSON_AddStringToObject(body, "batMadeDay", data->dataArea.BMSData.batMadeDay); cJSON_AddNumberToObject(body, "chargeTimes", data->dataArea.BMSData.chargeTimes); cJSON_AddNumberToObject(body, "batProperty", data->dataArea.BMSData.batProperty); cJSON_AddStringToObject(body, "bmsSoftVer", data->dataArea.BMSData.bmsSoftVer); char *BMSPayload = cJSON_PrintUnformatted(BMSRoot); cJSON_AddStringToObject(root, "dataArea", BMSPayload); if (BMSRoot != NULL) { cJSON_Delete(BMSRoot); } if (BMSPayload != NULL) { HAL_Free(BMSPayload); } } else { cJSON_AddStringToObject(root, "dataArea", data->dataArea.rawData); } } else { cJSON_AddStringToObject(root, "dataArea", ""); } payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "logQueryEvt", strlen("logQueryEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_ask_feeModel(evs_event_ask_feeModel *data) { int res = 0; char *payload = NULL; cJSON *root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "feeModelId", data->feeModelId); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "askFeeModelTwEvt", strlen("askFeeModelTwEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_start_result(evs_event_startResult *data) { int res = 0; char *payload = NULL; cJSON *root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "gunNo", data->gunNo); cJSON_AddNumberToObject(root, "startResult", data->startResult); cJSON_AddNumberToObject(root, "faultCode", data->faultCode); cJSON_AddStringToObject(root, "preTradeNo", data->preTradeNo); cJSON_AddStringToObject(root, "tradeNo", data->tradeNo); cJSON_AddStringToObject(root, "vinCode", data->vinCode); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "startChaResEvt", strlen("startChaResEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_auth_start(evs_event_startCharge *data) { int res = 0; char *payload = NULL; cJSON *root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "gunNo", data->gunNo); cJSON_AddNumberToObject(root, "startType", data->startType); cJSON_AddStringToObject(root, "preTradeNo", data->preTradeNo); cJSON_AddStringToObject(root, "tradeNo", data->tradeNo); cJSON_AddStringToObject(root, "authCode", data->authCode); cJSON_AddNumberToObject(root, "batterySOC", data->batterySOC); cJSON_AddNumberToObject(root, "batteryCap", data->batteryCap); cJSON_AddNumberToObject(root, "chargeTimes", data->chargeTimes); cJSON_AddNumberToObject(root, "batteryVol", data->batteryVol); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "startChargeAuthEvt", strlen("startChargeAuthEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_stopCharge(evs_event_stopCharge *data) { int res = 0; char *payload = NULL; cJSON *root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "gunNo", data->gunNo); cJSON_AddNumberToObject(root, "stopResult", data->stopResult); cJSON_AddNumberToObject(root, "resultCode", data->resultCode); cJSON_AddStringToObject(root, "preTradeNo", data->preTradeNo); cJSON_AddStringToObject(root, "tradeNo", data->tradeNo); cJSON_AddNumberToObject(root, "stopFailReson", data->stopFailReson); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "stopChaResEvt", strlen("stopChaResEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_groundLock_change(evs_event_groundLock_change *data) { int res = 0; char *payload = NULL; cJSON *root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "gunNo", data->gunNo); cJSON_AddNumberToObject(root, "lockState", data->lockState); cJSON_AddNumberToObject(root, "powerType", data->powerType); cJSON_AddNumberToObject(root, "cellState", data->cellState); cJSON_AddNumberToObject(root, "lockerState", data->lockerState); cJSON_AddNumberToObject(root, "lockerForced", data->lockerForced); cJSON_AddNumberToObject(root, "lowPower", data->lowPower); cJSON_AddNumberToObject(root, "soc", data->soc); cJSON_AddNumberToObject(root, "openCnt", data->openCnt); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "groundLockEvt", strlen("groundLockEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_gateLock_change(evs_event_gateLock_change *data) { int res = 0; char *payload = NULL; cJSON *root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "lockNo", data->lockNo); cJSON_AddNumberToObject(root, "lockState", data->lockState); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "smartLockEvent", strlen("smartLockEvent"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_tradeInfo(evs_event_tradeInfo *data) { int res = 0; int i = 0; char *payload = NULL; char time[16] = {0}; char sumPower[20] = {0}; cJSON *root = NULL; cJSON *partElecArray = NULL; cJSON *partChargeFeeArray = NULL; cJSON *partServiceFeeArray = NULL; cJSON *pointElecArray = NULL; root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "gunNo", data->gunNo); cJSON_AddStringToObject(root, "preTradeNo", data->preTradeNo); cJSON_AddStringToObject(root, "tradeNo", data->tradeNo); cJSON_AddStringToObject(root, "vinCode", data->vinCode); cJSON_AddNumberToObject(root, "timeDivType", data->timeDivType); cJSON_AddNumberToObject(root, "startType", data->startType); sprintf(time, "%d", data->chargeStartTime); cJSON_AddStringToObject(root, "chargeStartTime", time); sprintf(time, "%d", data->chargeEndTime); cJSON_AddStringToObject(root, "chargeEndTime", time); cJSON_AddNumberToObject(root, "startSoc", data->startSoc); cJSON_AddNumberToObject(root, "endSoc", data->endSoc); cJSON_AddNumberToObject(root, "reason", data->reason); cJSON_AddStringToObject(root, "feeModelId", data->feeModelId); sprintf(sumPower, "%lld", data->sumStart); cJSON_AddStringToObject(root, "sumStart", sumPower); sprintf(sumPower, "%lld", data->sumEnd); cJSON_AddStringToObject(root, "sumEnd", sumPower); cJSON_AddNumberToObject(root, "totalElect", data->totalElect); cJSON_AddNumberToObject(root, "totalPowerCost", data->totalPowerCost); cJSON_AddNumberToObject(root, "totalServCost", data->totalServCost); cJSON_AddNumberToObject(root, "totalCost", data->totalCost); cJSON_AddNumberToObject(root, "timeNum", data->timeNum); int segCnt = data->timeNum; if (segCnt > 0 && segCnt < EVS_MAX_MODEL_DEVSEG + 1) { cJSON_AddItemToObject(root, "partElect", partElecArray = cJSON_CreateArray()); cJSON_AddItemToObject(root, "chargeFee", partChargeFeeArray = cJSON_CreateArray()); cJSON_AddItemToObject(root, "serviceFee", partServiceFeeArray = cJSON_CreateArray()); for (i = 0; i < segCnt; i++) { cJSON_AddItemToArray(partElecArray, cJSON_CreateNumber(data->partElect[i])); cJSON_AddItemToArray(partChargeFeeArray, cJSON_CreateNumber(data->chargeFee[i])); cJSON_AddItemToArray(partServiceFeeArray, cJSON_CreateNumber(data->serviceFee[i])); } } cJSON_AddNumberToObject(root, "startPoint", data->startPoint); cJSON_AddNumberToObject(root, "crossPoints", data->crossPoints); int pointCnt = data->crossPoints; if (pointCnt > 0 && pointCnt < EVS_MAX_MODEL_DEVSEG + 1) { cJSON_AddItemToObject(root, "pointsElect", pointElecArray = cJSON_CreateArray()); for (i = 0; i < pointCnt; i++) { cJSON_AddItemToArray(pointElecArray, cJSON_CreateNumber(data->pointsElect[i])); } } payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "orderTwUpdateEvt", strlen("orderTwUpdateEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_alarm(evs_event_alarm *data) { int res = 0; char *payload = NULL; cJSON *root = NULL; cJSON *faultArray = NULL; cJSON *warnArray = NULL; unsigned char i = 0; root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "gunNo", data->gunNo); cJSON_AddNumberToObject(root, "faultSum", data->faultSum); cJSON_AddNumberToObject(root, "warnSum", data->warnSum); cJSON_AddItemToObject(root, "faultValue", faultArray = cJSON_CreateArray()); for (i = 0; i < data->faultSum; i++) { // cJSON_AddNumberToArray(faultArray, data->faultValue[i]); cJSON_AddItemToArray(faultArray, cJSON_CreateNumber(data->faultValue[i])); } cJSON_AddItemToObject(root, "warnValue", warnArray = cJSON_CreateArray()); for (i = 0; i < data->warnSum; i++) { // cJSON_AddNumberToArray(warnArray, data->warnValue[i]); cJSON_AddItemToArray(warnArray, cJSON_CreateNumber(data->warnValue[i])); } payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "totalFaultEvt", strlen("totalFaultEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_ask_dev_config(void) { int res = 0; char payload[6] = "{}"; res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "askConfigEvt", strlen("askConfigEvt"), (char *)payload, strlen(payload)); PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_acPile_change(evs_event_pile_stutus_change *data) { int res = 0; char *payload = NULL; char time[16] = {0}; cJSON *root = NULL; sprintf(time, "%d", data->yxOccurTime); root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "gunNo", data->gunNo); cJSON_AddStringToObject(root, "yxOccurTime", time); cJSON_AddNumberToObject(root, "connCheckStatus", data->connCheckStatus); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "acStChEvt", strlen("acStChEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_raw(char *data) { int res = 0; char *eventName = NULL; char *payload = NULL; if (data == NULL) return -1; cJSON *root = cJSON_Parse(data); if (root == NULL || !cJSON_IsObject(root)) { PROTOCOL_TRACE("JSON Parse Error"); return -1; } cJSON *item_partsType = cJSON_GetObjectItem(root, "partsType"); if (item_partsType != NULL && cJSON_IsNumber(item_partsType)) { // 0x01锛氱洿娴佸厖鐢垫帶鍒跺櫒锛堝厖鐢垫帶鍒舵ā鍧楋級 // 0x02锛氫氦娴佸厖鐢垫帶鍒跺櫒 // 0x03锛氬姛鐜囨帶鍒舵ā锟�? // 0x04锛氬厖鐢垫ā锟�? // 0x05锛氬紑鍏虫ā锟�? // 0x06锛氱幆澧冧俊锟�?閲囬泦妯″潡 // 0x07锛氬厖鐢垫ā鍧楄繍琛屼俊锟�?缁燂拷?锟芥暟锟�? int partsType = item_partsType->valueint; switch (partsType) { case 1: eventName = "ccuInfoEvt"; break; case 2: /* code */ break; case 3: eventName = "pcuInfoEvt"; break; case 4: eventName = "cuInfoEvt"; break; case 5: eventName = "switchInfoEvt"; break; case 6: eventName = "evInfoEvt"; break; case 7: eventName = "cuWorkInfoEvt"; break; default: break; } } cJSON *item_partsInfo = cJSON_GetObjectItem(root, "partsInfo"); if (item_partsInfo != NULL && cJSON_IsObject(item_partsInfo)) { payload = cJSON_PrintUnformatted(item_partsInfo); } if (eventName != NULL) res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, eventName, strlen(eventName), (char *)payload, strlen(payload)); PROTOCOL_TRACE("Post Event Message ID: %d", res); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } if (res < 0) { return -1; } return res; } static int send_event_dcPile_change(evs_event_pile_stutus_change *data) { int res = 0; char *payload = NULL; char time[16] = {0}; cJSON *root = NULL; sprintf(time, "%d", data->yxOccurTime); root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "gunNo", data->gunNo); cJSON_AddStringToObject(root, "yxOccurTime", time); cJSON_AddNumberToObject(root, "connCheckStatus", data->connCheckStatus); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "dcStChEvt", strlen("dcStChEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_car_info(evs_event_car_info *data) { int res = 0; cJSON *root = NULL; char *payload = NULL; root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "gunNo", data->gunNo); cJSON_AddNumberToObject(root, "batterySOC", data->batterySOC); cJSON_AddNumberToObject(root, "batteryCap", data->batteryCap); cJSON_AddStringToObject(root, "vinCode", data->vinCode); cJSON_AddNumberToObject(root, "state", data->state); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "acCarInfoEvt", strlen("acCarInfoEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_card_info(evs_event_card_info *data) { int res = 0; char *payload = NULL; cJSON *root = NULL; bcd2str(gun_auth_process_data[data->gunNo - 1].psy_id, data->cardPsySn, sizeof(gun_auth_process_data[data->gunNo - 1].psy_id)); bcd2str(gun_auth_process_data[data->gunNo - 1].usrId, data->cardSn, sizeof(gun_auth_process_data[data->gunNo - 1].usrId)); root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "gunNo", data->gunNo); cJSON_AddStringToObject(root, "cardSn", data->cardSn); cJSON_AddStringToObject(root, "cardPsySn", data->cardPsySn); cJSON_AddNumberToObject(root, "startMode", data->startMode); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "tagCardInfoEvt", strlen("tagCardInfoEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_card_auth(evs_event_card_auth *data) { int res = 0; char *payload = NULL; cJSON *root = NULL; bcd2str(gun_auth_process_data[data->gunNo - 1].randomC, data->randomC, sizeof(gun_auth_process_data[data->gunNo - 1].randomC)); bcd2str(gun_auth_process_data[data->gunNo - 1].cardBalance, data->cardBalance, sizeof(gun_auth_process_data[data->gunNo - 1].cardBalance)); bcd2str(gun_auth_process_data[data->gunNo - 1].tradeSn, data->cardTradeSn, sizeof(gun_auth_process_data[data->gunNo - 1].tradeSn)); bcd2str(&gun_auth_process_data[data->gunNo - 1].authVer, data->keyVer, sizeof(gun_auth_process_data[data->gunNo - 1].authVer)); bcd2str(&gun_auth_process_data[data->gunNo - 1].authFlag, data->keyFlag, sizeof(gun_auth_process_data[data->gunNo - 1].authFlag)); bcd2str(gun_auth_process_data[data->gunNo - 1].MAC1, data->tradeMac1, sizeof(gun_auth_process_data[data->gunNo - 1].MAC1)); root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "gunNo", data->gunNo); cJSON_AddStringToObject(root, "randomC", data->randomC); cJSON_AddStringToObject(root, "cardBalance", data->cardBalance); cJSON_AddStringToObject(root, "cardTradeSn", data->cardTradeSn); cJSON_AddStringToObject(root, "keyVer", data->keyVer); cJSON_AddStringToObject(root, "keyFlag", data->keyFlag); cJSON_AddStringToObject(root, "tradeMac1", data->tradeMac1); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "devAuthCodeEvt", strlen("devAuthCodeEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_card_auth_result(evs_event_card_auth_result *data) { int res = 0; char *payload = NULL; cJSON *root = NULL; bcd2str(gun_auth_process_data[data->gunNo - 1].TAC, data->tradeTac, sizeof(gun_auth_process_data[data->gunNo - 1].TAC)); root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "gunNo", data->gunNo); cJSON_AddStringToObject(root, "preTradeNo", data->preTradeNo); cJSON_AddStringToObject(root, "tradeNo", data->tradeNo); cJSON_AddStringToObject(root, "tradeTac", data->tradeTac); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "srvAuthConfirmEvt", strlen("srvAuthConfirmEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_card_check_error(evs_event_card_check_error *data) { int res = 0; char *payload = NULL; cJSON *root = NULL; root = cJSON_CreateObject(); bcd2str(gun_auth_process_data[data->gunNo - 1].psy_id, data->cardPsySn, sizeof(gun_auth_process_data[data->gunNo - 1].psy_id)); bcd2str(gun_auth_process_data[data->gunNo - 1].usrId, data->cardSn, sizeof(gun_auth_process_data[data->gunNo - 1].usrId)); cJSON_AddNumberToObject(root, "gunNo", data->gunNo); cJSON_AddStringToObject(root, "cardSn", data->cardSn); cJSON_AddStringToObject(root, "cardPsySn", data->cardPsySn); cJSON_AddNumberToObject(root, "faultValue", data->faultValue); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "cardCheckErrorEvt", strlen("cardCheckErrorEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_devmdu_info(evs_event_devmdu_info *data) { int res = 0, i = 0; cJSON *root = NULL; char *payload = NULL; cJSON *mduInfoIntArray = NULL; cJSON *mduInfoStringArray = NULL; root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "netMduInfo", data->netMduInfo); cJSON_AddStringToObject(root, "netMduSoftVer", data->netMduSoftVer); cJSON_AddStringToObject(root, "netMduImei", data->netMduImei); cJSON_AddNumberToObject(root, "smartGun", data->smartGun); cJSON_AddItemToObject(root, "mduInfoInt", mduInfoIntArray = cJSON_CreateArray()); for (i = 0; i < EVS_MAX_MDUINT_NUM; i++) { cJSON_AddItemToArray(mduInfoIntArray, cJSON_CreateNumber(data->mduInfoInt[i])); } cJSON_AddItemToObject(root, "mduInfoString", mduInfoStringArray = cJSON_CreateArray()); for (i = 0; i < EVS_MAX_MDUSTRING_NUM; i++) { cJSON_AddItemToArray(mduInfoStringArray, cJSON_CreateString(data->mduInfoString[i])); } payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "devMduInfoEvt", strlen("devMduInfoEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_charge_connect(evs_event_charge_connect_change *data) { int res = 0; cJSON *root = NULL; char *payload = NULL; char time[16] = {0}; root = cJSON_CreateObject(); sprintf(time, "%d", data->yxOccurTime); cJSON_AddNumberToObject(root, "gunNo", data->gunNo); cJSON_AddNumberToObject(root, "cpStatus", data->cpStatus); cJSON_AddNumberToObject(root, "cpVolt", data->cpVolt); cJSON_AddNumberToObject(root, "s3Status", data->s3Status); cJSON_AddStringToObject(root, "yxOccurTime", time); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "acCarConChEvt", strlen("acCarConChEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_ble_plug_chg_info(evs_event_ble_plug_charge_info *data) { int res = 0; cJSON *root = NULL; cJSON *macList = NULL; char *payload = NULL; int i = 0; root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "plugChgStatus", data->plugChgStatus); cJSON_AddNumberToObject(root, "macNum", data->macNum); cJSON_AddItemToObject(root, "macList", macList = cJSON_CreateArray()); for (i = 0; i < data->macNum; i++) { cJSON_AddItemToArray(macList, cJSON_CreateString(data->macList[i])); } payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "blePlugChgInfoEvt", strlen("blePlugChgInfoEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_ble_conn_change(evs_event_ble_conn_change *data) { int res = 0; cJSON *root = NULL; char *payload = NULL; char time[16] = {0}; root = cJSON_CreateObject(); sprintf(time, "%d", data->yxOccurTime); cJSON_AddStringToObject(root, "yxOccurTime", time); cJSON_AddNumberToObject(root, "connCheckStatus", data->connCheckStatus); cJSON_AddStringToObject(root, "macInfo", data->macInfo); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "bleConnChEvt", strlen("bleConnChEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_pile_parts_ccu_info(evs_event_ccu_info *data) { int res = 0; int i = 0; cJSON *root = NULL; char *payload = NULL; root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "partsAddr", data->partsAddr); cJSON_AddNumberToObject(root, "residualLife", data->residualLife); cJSON_AddNumberToObject(root, "workTime", data->workTime); cJSON_AddNumberToObject(root, "alarmTimes", data->alarmTimes); cJSON_AddNumberToObject(root, "faultTimes", data->faultTimes); cJSON_AddNumberToObject(root, "k1Cnt", data->k1Cnt); cJSON_AddNumberToObject(root, "k2Cnt", data->k2Cnt); cJSON_AddNumberToObject(root, "reliefCircuitCnt", data->reliefCircuitCnt); cJSON_AddNumberToObject(root, "gunPlugCnt", data->gunPlugCnt); cJSON_AddNumberToObject(root, "gunLockCnt", data->gunLockCnt); cJSON_AddNumberToObject(root, "totalChargeCnt", data->totalChargeCnt); cJSON_AddNumberToObject(root, "totalChargeTime", data->totalChargeTime); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "ccuInfoEvt", strlen("ccuInfoEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_pile_parts_pcu_info(evs_event_pcu_info *data) { int res = 0; int i = 0; cJSON *root = NULL; char *payload = NULL; root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "partsAddr", data->partsAddr); cJSON_AddNumberToObject(root, "residualLife", data->residualLife); cJSON_AddNumberToObject(root, "workTime", data->workTime); cJSON_AddNumberToObject(root, "alarmTimes", data->alarmTimes); cJSON_AddNumberToObject(root, "faultTimes", data->faultTimes); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "pcuInfoEvt", strlen("pcuInfoEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_pile_parts_cu_info(evs_event_cu_info *data) { int res = 0; int i = 0; cJSON *root = NULL; char *payload = NULL; root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "partsAddr", data->partsAddr); cJSON_AddStringToObject(root, "devSN", data->devSN); cJSON_AddStringToObject(root, "devType", data->devType); cJSON_AddNumberToObject(root, "residualLife", data->residualLife); cJSON_AddNumberToObject(root, "workTime", data->workTime); cJSON_AddNumberToObject(root, "alarmTimes", data->alarmTimes); cJSON_AddNumberToObject(root, "faultTimes", data->faultTimes); cJSON_AddNumberToObject(root, "upTimes", data->upTimes); cJSON_AddNumberToObject(root, "pfcTemper", data->pfcTemper); cJSON_AddNumberToObject(root, "transformerTemper", data->transformerTemper); cJSON_AddNumberToObject(root, "frontFanTemper", data->frontFanTemper); cJSON_AddNumberToObject(root, "backFanTemper", data->backFanTemper); cJSON_AddNumberToObject(root, "inletTemer", data->inletTemer); cJSON_AddNumberToObject(root, "phaseVa", data->phaseVa); cJSON_AddNumberToObject(root, "phaseVb", data->phaseVb); cJSON_AddNumberToObject(root, "phaseVc", data->phaseVc); cJSON_AddNumberToObject(root, "status", data->status); cJSON_AddNumberToObject(root, "outputVol", data->outputVol); cJSON_AddNumberToObject(root, "outputCur", data->outputCur); cJSON_AddNumberToObject(root, "currentGID", data->currentGID); cJSON_AddNumberToObject(root, "alarm1", data->alarm1); cJSON_AddNumberToObject(root, "alarm2", data->alarm2); cJSON_AddNumberToObject(root, "alarm3", data->alarm3); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "cuInfoEvt", strlen("cuInfoEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_pile_parts_switch_info(evs_event_switch_info *data) { int res = 0; int i = 0; cJSON *root = NULL; char *payload = NULL; root = cJSON_CreateObject(); cJSON *switchAnodeState = NULL; cJSON *switchAnodeInfo = NULL; cJSON *switchCathodeInfo = NULL; cJSON_AddNumberToObject(root, "partsAddr", data->partsAddr); cJSON_AddNumberToObject(root, "residualLife", data->residualLife); cJSON_AddNumberToObject(root, "workTime", data->workTime); cJSON_AddNumberToObject(root, "alarmTimes", data->alarmTimes); cJSON_AddNumberToObject(root, "faultTimes", data->faultTimes); cJSON_AddNumberToObject(root, "switchType", data->switchType); cJSON_AddNumberToObject(root, "commState", data->commState); cJSON_AddItemToObject(root, "switchAnodeState", switchAnodeState = cJSON_CreateArray()); for (i = 0; i < EVS_MAX_PARTS_SWITCH_NUM; i++) cJSON_AddItemToArray(switchAnodeState, cJSON_CreateNumber(data->switchAnodeState[i])); cJSON_AddItemToObject(root, "switchAnodeActCnt", switchAnodeInfo = cJSON_CreateArray()); for (i = 0; i < EVS_MAX_PARTS_SWITCH_NUM; i++) cJSON_AddItemToArray(switchAnodeInfo, cJSON_CreateNumber(data->switchAnodeActCnt[i])); cJSON_AddItemToObject(root, "switchCathodeActCnt", switchCathodeInfo = cJSON_CreateArray()); for (i = 0; i < EVS_MAX_PARTS_SWITCH_NUM; i++) cJSON_AddItemToArray(switchCathodeInfo, cJSON_CreateNumber(data->switchCathodeActCnt[i])); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "switchInfoEvt", strlen("switchInfoEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_pile_parts_edas_info(evs_event_edas_info *data) { int res = 0; int i = 0; cJSON *root = NULL; char *payload = NULL; root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "partsAddr", data->partsAddr); cJSON_AddNumberToObject(root, "residualLife", data->residualLife); cJSON_AddNumberToObject(root, "workTime", data->workTime); cJSON_AddNumberToObject(root, "alarmTimes", data->alarmTimes); cJSON_AddNumberToObject(root, "faultTimes", data->faultTimes); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "evInfoEvt", strlen("evInfoEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_pile_parts_cu_work_info(evs_event_cu_work_info *data) { int res = 0; int i = 0; cJSON *root = NULL; char *payload = NULL; root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "gunNo", data->gunNo); cJSON_AddNumberToObject(root, "sumModul", data->sumModul); cJSON_AddNumberToObject(root, "ratedPower", data->ratedPower); cJSON_AddNumberToObject(root, "workModulCnt", data->workModulCnt); cJSON_AddNumberToObject(root, "faultModulCnt", data->faultModulCnt); cJSON_AddNumberToObject(root, "portWorkModulCnt", data->portWorkModulCnt); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "cuWorkInfoEvt", strlen("cuWorkInfoEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_vin_list_result(evs_event_vinList_result *data) { int res = 0, i = 0; cJSON *root = NULL; char *payload = NULL; root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "updateSN", data->updateSN); cJSON_AddNumberToObject(root, "packCnt", data->packCnt); cJSON_AddNumberToObject(root, "packTotalCnt", data->packTotalCnt); cJSON_AddNumberToObject(root, "totalVINCnt", data->totalVINCnt); cJSON_AddNumberToObject(root, "packVINCnt", data->packVINCnt); if (data->packVINCnt > 0) { cJSON *vinListArray = NULL; cJSON_AddItemToObject(root, "vinList", vinListArray = cJSON_CreateArray()); for (i = 0; i < data->packVINCnt; i++) { cJSON_AddItemToArray(vinListArray, cJSON_CreateString(data->vinList[i])); } } payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "vinListCheckEvt", strlen("vinListCheckEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } static int send_event_time_sync_result(evs_event_time_sync_result *data) { int res = 0, i = 0; cJSON *root = NULL; char *payload = NULL; root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "srvTime", data->srvTime); cJSON_AddStringToObject(root, "devTime", data->devTime); cJSON_AddNumberToObject(root, "resCode", data->resCode); payload = cJSON_PrintUnformatted(root); res = IOT_Linkkit_TriggerEvent(evs_g_user_ctx.master_devid, "timeSyncRetEvt", strlen("timeSyncRetEvt"), (char *)payload, strlen(payload)); if (root != NULL) { cJSON_Delete(root); } if (payload != NULL) { HAL_Free(payload); } PROTOCOL_TRACE("Post Event Message ID: %d", res); if (res < 0) { return -1; } return res; } int evs_linkkit_time_sync(void) { int ret = 0; ret = IOT_Linkkit_Query(evs_g_user_ctx.master_devid, ITM_MSG_QUERY_TIMESTAMP, NULL, 0); if (ret) { PROTOCOL_TRACE("Linkkit Qurey Time Stamp Failed %d ", ret); return 1; } return 0; } int evs_linkkit_fota(unsigned char *buffer, int buffer_length) { int ret = 0; ret = IOT_Linkkit_Query(evs_g_user_ctx.master_devid, ITM_MSG_QUERY_FOTA_DATA, buffer, buffer_length); if (ret) { PROTOCOL_TRACE("Linkkit Qurey Image Failed %d ", ret); return 1; } return 0; } #ifdef HTTP2_COMM_ENABLED int evs_linkkit_file_upload(char *filePath) { http2_upload_conn_info_t conn_info; http2_status_cb_t status_cb; http2_upload_result_cb_t result_cb; void *handle; unsigned int retry_time = 0; int ret; char url[250] = {0}; memset(&conn_info, 0, sizeof(http2_upload_conn_info_t)); sprintf(url, "%s.iot-as-http2.cn-shanghai.aliyuncs.com", master_meta_info.product_key); // mark锟�? need to confirm is master_meta_info.product_key or master_meta_info.devicename conn_info.product_key = master_meta_info.product_key; conn_info.device_name = master_meta_info.device_name; conn_info.device_secret = master_meta_info.device_secret; conn_info.url = url; conn_info.port = HTTP2_ONLINE_SERVER_PORT; memset(&status_cb, 0, sizeof(http2_status_cb_t)); status_cb.on_reconnect_cb = _on_http2_reconnect; status_cb.on_disconnect_cb = _on_http2_disconnect; memset(&result_cb, 0, sizeof(http2_upload_result_cb_t)); result_cb.upload_completed_cb = upload_file_result; result_cb.upload_id_received_cb = upload_id_received_handle; handle = IOT_HTTP2_UploadFile_Connect(&conn_info, &status_cb); if (handle == NULL) { return -1; } is_connected = 1; http2_upload_params_t fs_params; memset(&fs_params, 0, sizeof(fs_params)); fs_params.file_path = filePath; fs_params.opt_bit_map = UPLOAD_FILE_OPT_BIT_OVERWRITE; ret = IOT_HTTP2_UploadFile_Request(handle, &fs_params, &result_cb, NULL); if (ret < 0) { return -1; } /* wait until upload end */ while (upload_result == 1) { HAL_SleepMs(200); } /* check the result */ if (upload_result == UPLOAD_SUCCESS) { PROTOCOL_TRACE("upload succeed"); ret = IOT_HTTP2_UploadFile_Disconnect(handle); PROTOCOL_TRACE("close connect %d\n", ret); return 0; } else { /* check if upload_id receivced */ if (g_upload_id[0] == '\0') { PROTOCOL_TRACE("upload id is NULL, resume is impossible!"); return -1; } } /* into resume routine */ do { /* TODO: assume that http2 disconnected */ if (upload_result < 0 && is_connected == 1) { HAL_SleepMs(30000); } /* wait until connected */ while (is_connected == 0) { HAL_SleepMs(200); } /* reset upload result */ upload_result = 1; /* use resume option to upload file */ fs_params.file_path = filePath; fs_params.upload_len = 0; fs_params.upload_id = g_upload_id; fs_params.opt_bit_map = UPLOAD_FILE_OPT_BIT_RESUME; /* resume option used */ ret = IOT_HTTP2_UploadFile_Request(handle, &fs_params, &result_cb, NULL); if (ret < 0) { PROTOCOL_TRACE("upload file request error"); return -1; } while (upload_result == 1) { HAL_SleepMs(200); } } while (upload_result != UPLOAD_SUCCESS && (++retry_time < UPLOAD_RETRY_TIME)); PROTOCOL_TRACE("upload succeed %d\n", ret); ret = IOT_HTTP2_UploadFile_Disconnect(handle); PROTOCOL_TRACE("close connect %d\n", ret); return 0; } #endif extern void IOT_SetRootCA(int type); int evs_linkkit_new(const int evs_access, const int is_device_uid) { #ifdef DYNAMIC_REGISTER int DeviceSecretLength = 0; int regCodeLenth = 0; iotx_http_region_types_t region = IOTX_HTTP_REGION_CUSTOM; int res = 0; iotx_dev_meta_info_t dev_reg_meta; char reg_code[IOTX_DEVICE_REG_CODE_LEN + 1] = ""; char device_uid[IOTX_DEVICE_UID_LEN + 1] = ""; IOT_Ioctl(IOTX_IOCTL_SET_REGISTER_REGION, (void *)&evs_access); #endif int custom_port = 0; if (evs_access == ACCESS_IS_FORMAL) { custom_port = 18883; IOT_SetLogLevel(IOT_LOG_ERROR); } else { custom_port = 30183; //add at 2025.7.15 IOT_SetLogLevel(IOT_LOG_DEBUG); } main_loop_step = 0; void *callback; int dynamic_register = 0, post_reply_need = 0; evs_device_meta evs_dev_meta; memset(&evs_g_user_ctx, 0, sizeof(evs_g_user_ctx)); int ret = 0; #ifdef ATM_ENABLED if (IOT_ATM_Init() < 0) { PROTOCOL_TRACE("IOT_ATM_Init failed!"); return -1; } #endif #ifdef DYNAMIC_REGISTER memset(&dev_reg_meta, 0, sizeof(dev_reg_meta)); memset(&evs_dev_meta, 0, sizeof(evs_dev_meta)); callback = evs_service_callback(EVS_CERT_GET); if (callback) { ret = ((int (*)(evs_device_meta *meta))callback)(&evs_dev_meta); } DeviceSecretLength = strlen(evs_dev_meta.device_secret); // 濡傛灉娌℃湁璇佷功 if ((DeviceSecretLength <= 5) || (DeviceSecretLength > IOTX_DEVICE_SECRET_LEN) || (ret < 0)) { if (is_device_uid != 0) { callback = evs_service_callback(EVS_DEVICE_UID_GET); if (callback) { regCodeLenth = ((int (*)(char *device_uid))callback)(device_uid); memcpy(dev_reg_meta.device_asset, device_uid, sizeof(device_uid)); } IOT_Get_Regcode(region, &dev_reg_meta); PROTOCOL_TRACE("IOT_Get_Regcode dev_reg_meta.device_reg_code is %s\n",dev_reg_meta.device_reg_code); regCodeLenth = strlen(dev_reg_meta.device_reg_code); } else { callback = evs_service_callback(EVS_DEVICE_REG_CODE_GET); if (callback) { regCodeLenth = ((int (*)(char *device_reg_code))callback)(reg_code); memcpy(dev_reg_meta.device_reg_code, reg_code, sizeof(reg_code)); } } // regCodeLenth = HAL_GetDeviceRegCode(g_device_reg_code); // 鍒ゆ柇娉ㄥ唽鐮侊紝濡傛灉娌℃湁娉ㄥ唽鐮侊紝鍒欏湪姝ゅ惊锟�? // PROTOCOL_TRACE("dev_reg_meta.device_reg_code length is %d\n",regCodeLenth); // PROTOCOL_TRACE("dev_reg_meta.device_reg_code is %s\n",dev_reg_meta.device_reg_code); if ((regCodeLenth < 5) || (regCodeLenth > IOTX_DEVICE_REG_CODE_LEN)) { PROTOCOL_TRACE("Get RegCode failed"); return -1; } res = IOT_Dynamic_Register(region, &dev_reg_meta); if (res < 0) { PROTOCOL_TRACE("IOT_Dynamic_Register failed"); return -2; } // HAL_Printf("\nProduct Key: %s\n", dev_reg_meta.product_key); memcpy(evs_dev_meta.product_key, dev_reg_meta.product_key, strlen(dev_reg_meta.product_key)); // HAL_Printf("\nDevice Name: %s\n", dev_reg_meta.device_name); memcpy(evs_dev_meta.device_name, dev_reg_meta.device_name, strlen(dev_reg_meta.device_name)); // HAL_Printf("\nDevice Secret: %s\n", dev_reg_meta.device_secret); memcpy(evs_dev_meta.device_secret, dev_reg_meta.device_secret, strlen(dev_reg_meta.device_secret)); memcpy(evs_dev_meta.device_reg_code, dev_reg_meta.device_reg_code, strlen(dev_reg_meta.device_reg_code)); callback = evs_service_callback(EVS_CERT_SET); if (callback) { ((int (*)(const evs_device_meta meta))callback)(evs_dev_meta); } } #endif callback = evs_service_callback(EVS_CERT_GET); if (callback) { if (((int (*)(evs_device_meta *))callback)(&evs_dev_meta) != 0) { PROTOCOL_TRACE("Get cert failed"); return -3; } } memset(&master_meta_info, 0, sizeof(iotx_linkkit_dev_meta_info_t)); memcpy(master_meta_info.product_key, evs_dev_meta.product_key, strlen(evs_dev_meta.product_key)); memcpy(master_meta_info.device_name, evs_dev_meta.device_name, strlen(evs_dev_meta.device_name)); memcpy(master_meta_info.device_secret, evs_dev_meta.device_secret, strlen(evs_dev_meta.device_secret)); /* 娉ㄥ唽鍥炶皟鍑芥暟 */ IOT_RegisterCallback(ITE_STATE_EVERYTHING, user_sdk_state_dump); IOT_RegisterCallback(ITE_CONNECT_SUCC, user_connected_event_handler); IOT_RegisterCallback(ITE_DISCONNECTED, user_disconnected_event_handler); IOT_RegisterCallback(ITE_SERVICE_REQUEST, user_service_request_event_handler); IOT_RegisterCallback(ITE_PROPERTY_SET, user_property_set_event_handler); IOT_RegisterCallback(ITE_REPORT_REPLY, user_report_reply_event_handler); IOT_RegisterCallback(ITE_TRIGGER_EVENT_REPLY, user_trigger_event_reply_event_handler); IOT_RegisterCallback(ITE_TIMESTAMP_REPLY, user_timestamp_reply_event_handler); IOT_RegisterCallback(ITE_INITIALIZE_COMPLETED, user_initialized); IOT_RegisterCallback(ITE_FOTA, user_fota_event_handler); IOT_RegisterCallback(ITE_CLOUD_ERROR, user_cloud_error_handler); IOT_RegisterCallback(ITE_DYNREG_DEVICE_SECRET, dynreg_device_secret); /* 閫夋嫨涓婄嚎鏂瑰紡锛堟槸鍚︿娇鐢ㄥ姩鎬佹敞鍐岋級 */ dynamic_register = 0; IOT_Ioctl(IOTX_IOCTL_SET_DYNAMIC_REGISTER, (void *)&dynamic_register); /* 锟�?鍚﹂渶鐢ㄥ睘鎬с€佷簨浠朵笂锟�?(璁剧疆)搴旂瓟 */ post_reply_need = 1; IOT_Ioctl(IOTX_IOCTL_RECV_EVENT_REPLY, (void *)&post_reply_need); if (evs_access == ACCESS_IS_FORMAL) { //IOT_Ioctl(IOTX_IOCTL_SET_MQTT_DOMAIN, (void *)"10.111.186.1"); IOT_Ioctl(IOTX_IOCTL_SET_MQTT_DOMAIN, (void *)"10.111.186.1"); IOT_Ioctl(IOTX_IOCTL_SET_MQTT_PORT, (void *)&custom_port); } else { //add at 2025.5.13 IOT_Ioctl(IOTX_IOCTL_SET_MQTT_DOMAIN, (void *)"47.114.190.246"); IOT_Ioctl(IOTX_IOCTL_SET_MQTT_PORT, (void *)&custom_port); } return 0; } int evs_linkkit_free() { IOT_Linkkit_Close(evs_g_user_ctx.master_devid); IOT_SetLogLevel(IOT_LOG_NONE); main_loop_step = -1; return 0; } void evs_set_firmware_version(const char *verion) { HAL_SetFirmwareVersion(verion); } int evs_mainloop() { int res = 0; switch (main_loop_step) { case EVS_LINKKIT_OPEN: { evs_g_user_ctx.master_devid = IOT_Linkkit_Open(IOTX_LINKKIT_DEV_TYPE_MASTER, &master_meta_info); if (evs_g_user_ctx.master_devid >= 0) { main_loop_step = EVS_LINKKIT_CONNECT; } else { PROTOCOL_TRACE("IOT_Linkkit_Open failed!\n"); return EVS_LINKKIT_OPEN_FAULT; } } case EVS_LINKKIT_CONNECT: { res = IOT_Linkkit_Connect(evs_g_user_ctx.master_devid); if (res >= 0) { main_loop_step = EVS_LINKKIT_POLL; } else { PROTOCOL_TRACE("IOT_Linkkit_Connect failed!\n"); return EVS_LINKKIT_CONNECT_FAULT; } } case EVS_LINKKIT_POLL: IOT_Linkkit_Yield(EVS_YIELD_TIMEOUT_MS); break; default: break; } return 0; } /** * @brief Send pile event data to SDK. *--- * @param [in] event_type: @n the event you want to send. * @param [in] param: @n the event data will be written. * @return failed -1 success 0. * @see None. * @note None. */ void evs_send_event(evs_cmd_event_enum event_type, void *param) { switch (event_type) { case EVS_CMD_EVENT_FIRMWARE_INFO: send_event_firmware_info((evs_event_firmware_info *)param); break; case EVS_CMD_EVENT_ASK_FEEMODEL: send_event_ask_feeModel((evs_event_ask_feeModel *)param); break; case EVS_CMD_EVENT_STARTCHARGE: send_event_auth_start((evs_event_startCharge *)param); break; case EVS_CMD_EVENT_STARTRESULT: send_event_start_result((evs_event_startResult *)param); break; case EVS_CMD_EVENT_STOPCHARGE: send_event_stopCharge((evs_event_stopCharge *)param); break; case EVS_CMD_EVENT_TRADEINFO: send_event_tradeInfo((evs_event_tradeInfo *)param); break; case EVS_CMD_EVENT_ALARM: send_event_alarm((evs_event_alarm *)param); break; case EVS_CMD_EVENT_ACPILE_CHANGE: send_event_acPile_change((evs_event_pile_stutus_change *)param); break; case EVS_CMD_EVENT_DCPILE_CHANGE: send_event_dcPile_change((evs_event_pile_stutus_change *)param); break; case EVS_CMD_EVENT_GROUNDLOCK_CHANGE: send_event_groundLock_change((evs_event_groundLock_change *)param); break; case EVS_CMD_EVENT_GATELOCK_CHANGE: send_event_gateLock_change((evs_event_gateLock_change *)param); break; case EVS_CMD_EVENT_ASK_DEV_CONFIG: send_event_ask_dev_config(); break; case EVS_CMD_EVENT_CAR_INFO: send_event_car_info((evs_event_car_info *)param); break; case EVS_CMD_EVENT_VER_INFO: send_event_ver_info((evs_event_ver_info *)param); break; case EVS_CMD_EVENT_LOGQUERY_RESULT: send_event_logquery_result((evs_event_logQuery_Result *)param); break; case EVS_CMD_EVENT_CARD_INFO: send_event_card_info((evs_event_card_info *)param); break; case EVS_CMD_EVENT_CARD_AUTH: send_event_card_auth((evs_event_card_auth *)param); break; case EVS_CMD_EVENT_CARD_AUTH_RESULT: send_event_card_auth_result((evs_event_card_auth_result *)param); break; case EVS_CMD_EVENT_CARD_CHECK_ERROR: send_event_card_check_error((evs_event_card_check_error *)param); break; case EVS_CMD_EVENT_DEVMDU_INFO: send_event_devmdu_info((evs_event_devmdu_info *)param); break; case EVS_CMD_EVENT_CHARGE_CONNECT: send_event_charge_connect((evs_event_charge_connect_change *)param); break; case EVS_CMD_EVENT_BLE_PLUG_CHARGE_INFO: send_event_ble_plug_chg_info((evs_event_ble_plug_charge_info *)param); break; case EVS_CMD_EVENT_BLE_CONN_CHANGE: send_event_ble_conn_change((evs_event_ble_conn_change *)param); break; case EVS_CMD_EVENT_VIN_CHECK_RESULT: send_event_vin_list_result((evs_event_vinList_result *)param); break; case EVS_CMD_EVENT_PILE_PARTS_CCU_INFO: send_event_pile_parts_ccu_info((evs_event_ccu_info *)param); break; case EVS_CMD_EVENT_PILE_PARTS_PCU_INFO: send_event_pile_parts_pcu_info((evs_event_pcu_info *)param); break; case EVS_CMD_EVENT_PILE_PARTS_CU_INFO: send_event_pile_parts_cu_info((evs_event_cu_info *)param); break; case EVS_CMD_EVENT_PILE_PARTS_SWITCH_INFO: send_event_pile_parts_switch_info((evs_event_switch_info *)param); break; case EVS_CMD_EVENT_PILE_PARTS_EDAS_INFO: send_event_pile_parts_edas_info((evs_event_edas_info *)param); break; case EVS_CMD_EVENT_PILE_PARTS_CU_WORK_INFO: send_event_pile_parts_cu_work_info((evs_event_cu_work_info *)param); break; case EVS_CMD_EVENT_RAW_DATA: send_event_raw((char *)param); break; case EVS_CMD_EVENT_DEV_MAINTAIN_RESULT: send_event_dev_maintain_result((evs_event_feedback_dev_maintain *)param); break; case EVS_CMD_EVENT_LOCK_CTRL_RESULT: send_event_lock_ctrl_result((evs_event_feedback_lockCtrl *)param); break; case EVS_CMD_EVENT_TIME_SYNC_RESULT: send_event_time_sync_result((evs_event_time_sync_result *)param); break; default: break; } } /** 聽* 聽* 鍑芥暟 evs_send_property() SDK鍐呴儴瀹炵幇鐨勪簨浠跺彂閫佹帴锟�?, 渚涗娇鐢ㄨ€呰皟鐢拷? 聽* --- 聽* Interface of evs_send_property() implemented by SDK锟�? provide for user of SDK. 聽* 聽*聽 聽*/ /** * @brief Send pile porperty data to SDK. *--- * @param [in] event_type: @n the property you want to send. * @param [in] param: @n the property data will be written. * @return failed -1 success 0. * @see None. * @note None. */ void evs_send_property(evs_cmd_property_enum property_type, void *param) { switch (property_type) { case EVS_CMD_PROPERTY_DCPILE: send_property_dcPile((evs_property_dcPile *)param); break; case EVS_CMD_PROPERTY_ACPILE: send_property_acPile((evs_property_acPile *)param); break; case EVS_CMD_PROPERTY_AC_WORK: send_property_ac_work((evs_property_ac_work *)param); break; case EVS_CMD_PROPERTY_AC_NONWORK: send_property_ac_nonwork((evs_property_ac_nonWork *)param); break; case EVS_CMD_PROPERTY_BMS: send_property_bms((evs_property_BMS *)param); break; case EVS_CMD_PROPERTY_DC_INPUT_METER: send_property_dc_input_meter((evs_property_dc_input_meter *)param); break; case EVS_CMD_PROPERTY_AC_OUTMETER: send_property_ac_outmeter((evs_property_meter *)param); break; case EVS_CMD_PROPERTY_DC_OUTMETER: send_property_dc_outmeter((evs_property_meter *)param); break; case EVS_CMD_PROPERTY_DC_WORK: send_property_dc_work((evs_property_dc_work *)param); break; case EVS_CMD_PROPERTY_DC_NONWORK: send_property_dc_nonwork((evs_property_dc_nonWork *)param); break; default: break; } } /*--------------------------------------鏅鸿兘锟�?-----------------------------------------------*/ /*------------------------------------------------------------------------------------------------ * 鍚戯拷?锟藉崱鍣ㄥ彂閫佹暟锟�?骞舵帴鏀舵暟锟�?杩斿洖 ------------------------------------------------------------------------------------------------*/ static void evs_card_exchange_data(int fd, int send_count, unsigned char *send_buf, int *recv_count, unsigned char *reply_buf, int opCnt) { int n = 0, nCount = 0, dataCount = 0; int reply_count = 128; int ret = 0, send_err_time = 0; char buf[128] = {0}; for (n = 0; n < opCnt; n++) { nCount = 0; ret = HAL_Write(fd, send_buf, send_count); if (ret != send_count) { send_err_time++; if (send_err_time == 3) { PROTOCOL_TRACE("Send To Reader Failed"); break; } continue; } memset(buf, 0, sizeof(buf)); HAL_SleepMs(200); while ((nCount = HAL_Read(fd, buf, reply_count)) > 0) { if (nCount == (((buf[1] << 8) + buf[2]) + 5)) { memcpy(reply_buf, buf, nCount); *recv_count = nCount; return; } else { dataCount = (((buf[1] << 8) + buf[2]) + 5); if (dataCount > 0) { if ((buf[0] == 0x02) && (buf[dataCount - 1] == 0x03)) { memcpy(reply_buf, buf, dataCount); *recv_count = dataCount; return; } } } } } *recv_count = 0; return; } /* static void evs_card_exchange_data(int fd, int send_count, unsigned char *send_buf, int *recv_count, unsigned char *reply_buf, int opCnt) { int n = 0, nCount = 0, sleepCnt = 0; int ret = 0, send_err_time = 0, recv_err_time = 0; int reciev_data = 0, framLen = 0; int bufLen = *recv_count; for (n = 0; n < opCnt; n++) { sleepCnt = 100; nCount = 0; reciev_data = 0; memset(reply_buf, 0, sizeof(bufLen)); ret = HAL_Write(fd, send_buf, send_count); if (ret != send_count) { send_err_time++; if (send_err_time == 3) { PROTOCOL_TRACE("Send To Reader Failed"); break; } continue; } while (1) { HAL_SleepMs(sleepCnt); reciev_data = HAL_Read(fd, (reply_buf + nCount), bufLen); if (reciev_data > 0) { nCount += reciev_data; framLen = (reply_buf[1] << 8) + reply_buf[2] + 5; if (framLen > bufLen) { nCount = 0; memset(reply_buf, 0, sizeof(bufLen)); } else { if (nCount >= framLen) { if (reply_buf[0] == 0x2 && reply_buf[framLen - 1] == 0x3) { PROTOCOL_TRACE("Recv Reader %d Bytes", nCount); *recv_count = nCount; return; } else { nCount = 0; memset(reply_buf, 0, sizeof(bufLen)); } } } } else //绛夊緟鏁版嵁 { sleepCnt = 10; recv_err_time++; if (recv_err_time > 10) { PROTOCOL_TRACE("Read From Reader Failed"); break; } } } } *recv_count = 0; return; } */ /*------------------------------------------------------------------------------------------------ * 鍏抽棴灏勶拷?? ------------------------------------------------------------------------------------------------*/ static int evs_card_ctrl_rf_close(int fd) { unsigned char order_buf[7]; unsigned char reply_buf[128]; int nCount = 0; memset(order_buf, 0, sizeof(order_buf)); memset(reply_buf, 0, sizeof(reply_buf)); order_buf[0] = 0x2; order_buf[1] = 0x0; order_buf[2] = 0x2; order_buf[3] = 0x31; order_buf[4] = 0x91; order_buf[5] = order_buf[3] ^ order_buf[4]; order_buf[6] = 0x3; nCount = sizeof(reply_buf); evs_card_exchange_data(fd, sizeof(order_buf), order_buf, &nCount, reply_buf, 3); if (nCount == 0) { PROTOCOL_TRACE("Get Data Failed"); return -1; } if ((reply_buf[3] == 0) && (reply_buf[4] == 0)) return EVS_OPT_READER_SUCCESS; else return EVS_CLOSE_RF_FAIL; } /*------------------------------------------------------------------------------------------------ * 鎵撳紑灏勶拷?? ------------------------------------------------------------------------------------------------*/ static int evs_card_ctrl_rf_open(int fd) { unsigned char order_buf[7]; unsigned char reply_buf[128]; int nCount = 0; memset(order_buf, 0, sizeof(order_buf)); memset(reply_buf, 0, sizeof(reply_buf)); order_buf[0] = 0x2; order_buf[1] = 0x0; order_buf[2] = 0x2; order_buf[3] = 0x31; order_buf[4] = 0x90; order_buf[5] = (order_buf[3] ^ order_buf[4]); order_buf[6] = 0x3; nCount = sizeof(reply_buf); evs_card_exchange_data(fd, sizeof(order_buf), order_buf, &nCount, reply_buf, 3); if (nCount == 0) { PROTOCOL_TRACE("Get Data Failed"); return -1; } if ((reply_buf[3] == 0) && (reply_buf[4] == 0)) return EVS_OPT_READER_SUCCESS; else return EVS_OPEN_RF_FAIL; } /**----------------------------------------------------------------------------------------------- * 瀵诲崱 ------------------------------------------------------------------------------------------------*/ static int evs_card_ctrl_found(int fd, int gunNo) { unsigned char order_buf[9]; unsigned char reply_buf[512]; int i = 0; int nCount = 0, err = -1; memset(order_buf, 0, sizeof(order_buf)); memset(reply_buf, 0, sizeof(reply_buf)); memset(gun_auth_process_data[gunNo - 1].usrId, 0, sizeof(gun_auth_process_data[gunNo - 1].usrId)); order_buf[0] = 0x2; order_buf[1] = 0x0; order_buf[2] = 0x04; order_buf[3] = 0x32; order_buf[4] = 0x24; order_buf[5] = 0x00; order_buf[6] = 0xc3; order_buf[7] = (order_buf[3] ^ order_buf[4] ^ order_buf[5] ^ order_buf[6]); order_buf[8] = 0x3; nCount = sizeof(reply_buf); unsigned int startTime = HAL_UptimeMs(); while (1) { if ((HAL_UptimeMs() - startTime) < 10 * 1000) { evs_card_exchange_data(fd, sizeof(order_buf), order_buf, &nCount, reply_buf, 3); if (nCount == 0) { PROTOCOL_TRACE("Get Data Failed"); return -1; } err = ((reply_buf[3] << 8) + reply_buf[4]); if (err == 0) { for (i = 0; i < 8; i++) { gun_auth_process_data[gunNo - 1].usrId[i] = reply_buf[18 + i]; } } else { PROTOCOL_TRACE("Activity Card Failed!"); } break; } else { PROTOCOL_TRACE("Found Card Timeout!"); break; } } return err; } /*------------------------------------------------------------------------------------------------ * 璁剧疆璇诲崱鍣ㄦ尝鐗圭巼 ------------------------------------------------------------------------------------------------*/ static int evs_card_set_baudRate(int fd, int baud) { unsigned char order_buf[8]; unsigned char reply_buf[128]; int nCount = 0; memset(order_buf, 0, sizeof(order_buf)); memset(reply_buf, 0, sizeof(reply_buf)); order_buf[0] = 0x02; order_buf[1] = 0x00; order_buf[2] = 0x03; order_buf[3] = 0x30; order_buf[4] = 0x01; order_buf[5] = baud; order_buf[6] = order_buf[3] ^ order_buf[4] ^ order_buf[5]; order_buf[7] = 0x03; nCount = sizeof(reply_buf); evs_card_exchange_data(fd, sizeof(order_buf), order_buf, &nCount, reply_buf, 3); if (nCount == 0) { PROTOCOL_TRACE("Get Data Failed"); return -1; } if ((reply_buf[3] == 0) && (reply_buf[4] == 0)) return EVS_OPT_READER_SUCCESS; else return EVS_SET_READER_BAUD_FAIL; } /**----------------------------------------------------------------------------------------------- * 鑾峰彇鐢ㄦ埛鍗′俊锟�? ------------------------------------------------------------------------------------------------*/ static int evs_card_get_cardSn(int fd) { unsigned char order_buf[15]; unsigned char reply_buf[128]; unsigned char usr_id[10] = {0}; unsigned char usr_version = 0; int i = 0; int nCount = 0; int nPos = 0; memset(order_buf, 0, sizeof(order_buf)); memset(reply_buf, 0, sizeof(reply_buf)); order_buf[0] = 0x2; order_buf[1] = 0x0; order_buf[2] = 0xa; order_buf[3] = 0x32; order_buf[4] = 0x26; order_buf[5] = 0xff; order_buf[6] = 0x0; order_buf[7] = 0xA4; order_buf[8] = 0x00; order_buf[9] = 0x00; order_buf[10] = 0x02; order_buf[11] = 0xDF; order_buf[12] = 0x02; order_buf[13] = (order_buf[3] ^ order_buf[4] ^ order_buf[5] ^ order_buf[6] ^ order_buf[7] ^ order_buf[8] ^ order_buf[9] ^ order_buf[10] ^ order_buf[11] ^ order_buf[12]); order_buf[14] = 0x3; nCount = sizeof(reply_buf); evs_card_exchange_data(fd, sizeof(order_buf), order_buf, &nCount, reply_buf, 3); if (nCount == 0) { PROTOCOL_TRACE("Get Data Failed"); return -1; } if ((reply_buf[nCount - 4] == 0x90) && (reply_buf[nCount - 3] == 0x00)) { for (i = 0; i < nCount - 1; i++) { if (reply_buf[i] == 0x9f && reply_buf[i + 1] == 0x0c) { usr_version = reply_buf[i + 12]; nPos = i + 13; break; } } } if (nPos == 0) { return ((reply_buf[nCount - 4] << 8) + reply_buf[nCount - 3]); } for (i = 0; i < 10; i++) { usr_id[i] = reply_buf[nPos + i]; } return ((reply_buf[nCount - 4] << 8) + reply_buf[nCount - 3]); } static int evs_card_check_pin(int fd) { unsigned char order_buf[16]; unsigned char reply_buf[128]; int nCount = 0; memset(order_buf, 0, sizeof(order_buf)); memset(reply_buf, 0, sizeof(reply_buf)); order_buf[0] = 0x2; order_buf[1] = 0x0; order_buf[2] = 0xb; order_buf[3] = 0x32; order_buf[4] = 0x26; order_buf[5] = 0xff; order_buf[6] = 0x0; order_buf[7] = 0x20; order_buf[8] = 0x00; order_buf[9] = 0x00; order_buf[10] = 0x03; // 榛橈拷?锟界敤鎴峰崱瀵嗙爜 order_buf[11] = 0x12; order_buf[12] = 0x34; order_buf[13] = 0x56; order_buf[14] = (order_buf[3] ^ order_buf[4] ^ order_buf[5] ^ order_buf[6] ^ order_buf[7] ^ order_buf[8] ^ order_buf[9] ^ order_buf[10] ^ order_buf[11] ^ order_buf[12] ^ order_buf[13]); order_buf[15] = 0x3; nCount = sizeof(reply_buf); evs_card_exchange_data(fd, sizeof(order_buf), order_buf, &nCount, reply_buf, 3); if (nCount == 0) { PROTOCOL_TRACE("Get Data Failed"); return -1; } if (((reply_buf[nCount - 4] << 8) + reply_buf[nCount - 3]) != 0x9000) { PROTOCOL_TRACE("Check PIN Failed!"); } return ((reply_buf[nCount - 4] << 8) + reply_buf[nCount - 3]); } static int evs_card_get_keyInfo(int fd, int gunNo) { unsigned char order_buf[13]; unsigned char reply_buf[128]; int nCount = 0; memset(order_buf, 0, sizeof(order_buf)); memset(reply_buf, 0, sizeof(reply_buf)); order_buf[0] = 0x2; order_buf[1] = 0x0; order_buf[2] = 0x8; order_buf[3] = 0x32; order_buf[4] = 0x26; order_buf[5] = 0xff; order_buf[6] = 0x0; order_buf[7] = 0xB0; order_buf[8] = 0x95; order_buf[9] = 0x09; order_buf[10] = 0x01; order_buf[11] = (order_buf[3] ^ order_buf[4] ^ order_buf[5] ^ order_buf[6] ^ order_buf[7] ^ order_buf[8] ^ order_buf[9] ^ order_buf[10]); order_buf[12] = 0x3; nCount = sizeof(reply_buf); evs_card_exchange_data(fd, sizeof(order_buf), order_buf, &nCount, reply_buf, 3); if (nCount == 0) { PROTOCOL_TRACE("Get Data Failed"); return -1; } if (((reply_buf[nCount - 4] << 8) + reply_buf[nCount - 3]) == 0x9000) { gun_auth_process_data[gunNo - 1].PKid = reply_buf[5]; } else { PROTOCOL_TRACE("Get Pkey Failed"); } return ((reply_buf[nCount - 4] << 8) + reply_buf[nCount - 3]); } /**----------------------------------------------------------------------------------------------- * 楠岃瘉骞冲彴涓嬪彂鐨凪AC2 ------------------------------------------------------------------------------------------------*/ static int evs_card_trade_confirm(int fd, int gunNo) { unsigned char order_buf[25] = {0}; unsigned char reply_buf[128] = {0}; int nCount = 0; memset(gun_auth_process_data[gunNo - 1].TAC, 0, sizeof(gun_auth_process_data[gunNo - 1].TAC)); order_buf[0] = 0x2; order_buf[1] = 0x0; order_buf[2] = 0x14; order_buf[3] = 0x32; order_buf[4] = 0x26; order_buf[5] = 0xff; order_buf[6] = 0x80; order_buf[7] = 0x52; order_buf[8] = 0x00; order_buf[9] = 0x00; order_buf[10] = 0x0B; /***************************trade date start***************************************/ order_buf[11] = gun_auth_process_data[gunNo - 1].tradeTime[0]; order_buf[12] = gun_auth_process_data[gunNo - 1].tradeTime[1]; order_buf[13] = gun_auth_process_data[gunNo - 1].tradeTime[2]; order_buf[14] = gun_auth_process_data[gunNo - 1].tradeTime[3]; order_buf[15] = gun_auth_process_data[gunNo - 1].tradeTime[4]; order_buf[16] = gun_auth_process_data[gunNo - 1].tradeTime[5]; order_buf[17] = gun_auth_process_data[gunNo - 1].tradeTime[6]; /*****************************trade date end***************************************/ /*********************************MAC2 start***************************************/ order_buf[18] = gun_auth_process_data[gunNo - 1].MAC2[0]; order_buf[19] = gun_auth_process_data[gunNo - 1].MAC2[1]; order_buf[20] = gun_auth_process_data[gunNo - 1].MAC2[2]; order_buf[21] = gun_auth_process_data[gunNo - 1].MAC2[3]; /*********************************MAC2 end*****************************************/ order_buf[22] = 0x04; order_buf[23] = (order_buf[3] ^ order_buf[4] ^ order_buf[5] ^ order_buf[6] ^ order_buf[7] ^ order_buf[8] ^ order_buf[9] ^ order_buf[10] ^ order_buf[11] ^ order_buf[12] ^ order_buf[13] ^ order_buf[14] ^ order_buf[15] ^ order_buf[16] ^ order_buf[17] ^ order_buf[18] ^ order_buf[19] ^ order_buf[20] ^ order_buf[21] ^ order_buf[22]); order_buf[24] = 0x3; nCount = sizeof(reply_buf); evs_card_exchange_data(fd, sizeof(order_buf), order_buf, &nCount, reply_buf, 3); if (nCount == 0) { PROTOCOL_TRACE("Get Data Failed"); return -1; } if (((reply_buf[nCount - 4] << 8) + reply_buf[nCount - 3]) == 0x9000) { gun_auth_process_data[gunNo - 1].TAC[0] = reply_buf[5]; gun_auth_process_data[gunNo - 1].TAC[1] = reply_buf[6]; gun_auth_process_data[gunNo - 1].TAC[2] = reply_buf[7]; gun_auth_process_data[gunNo - 1].TAC[3] = reply_buf[8]; } else { PROTOCOL_TRACE("Trade Confirm Failed"); } return ((reply_buf[nCount - 4] << 8) + reply_buf[nCount - 3]); } /**----------------------------------------------------------------------------------------------- * 鑾峰彇鍗$墖闅忔満鏁板強MAC1绛変俊锟�? ------------------------------------------------------------------------------------------------*/ static int evs_card_get_authCode(int fd, int gunNo) { unsigned char order_buf[25]; unsigned char reply_buf[128]; int nCount = 0; gun_auth_process_data[gunNo - 1].authVer = 0; gun_auth_process_data[gunNo - 1].authFlag = 0; memset(order_buf, 0, sizeof(order_buf)); memset(reply_buf, 0, sizeof(reply_buf)); memset(gun_auth_process_data[gunNo - 1].cardBalance, 0, sizeof(gun_auth_process_data[gunNo - 1].cardBalance)); memset(gun_auth_process_data[gunNo - 1].tradeSn, 0, sizeof(gun_auth_process_data[gunNo - 1].tradeSn)); memset(gun_auth_process_data[gunNo - 1].randomC, 0, sizeof(gun_auth_process_data[gunNo - 1].randomC)); memset(gun_auth_process_data[gunNo - 1].MAC1, 0, sizeof(gun_auth_process_data[gunNo - 1].MAC1)); order_buf[0] = 0x2; order_buf[1] = 0x0; order_buf[2] = 0x14; order_buf[3] = 0x32; order_buf[4] = 0x26; order_buf[5] = 0xff; order_buf[6] = 0x80; order_buf[7] = 0x50; order_buf[8] = 0x00; order_buf[9] = 0x01; order_buf[10] = 0x0B; order_buf[11] = gun_auth_process_data[gunNo - 1].PKid; order_buf[12] = 0x00; order_buf[13] = 0x00; order_buf[14] = 0x00; order_buf[15] = 0x00; order_buf[16] = gun_auth_process_data[gunNo - 1].terminalSn[0]; order_buf[17] = gun_auth_process_data[gunNo - 1].terminalSn[1]; order_buf[18] = gun_auth_process_data[gunNo - 1].terminalSn[2]; order_buf[19] = gun_auth_process_data[gunNo - 1].terminalSn[3]; order_buf[20] = gun_auth_process_data[gunNo - 1].terminalSn[4]; order_buf[21] = gun_auth_process_data[gunNo - 1].terminalSn[5]; order_buf[22] = 0x10; order_buf[23] = (order_buf[3] ^ order_buf[4] ^ order_buf[5] ^ order_buf[6] ^ order_buf[7] ^ order_buf[8] ^ order_buf[9] ^ order_buf[10] ^ order_buf[11] ^ order_buf[12] ^ order_buf[13] ^ order_buf[14] ^ order_buf[15] ^ order_buf[16] ^ order_buf[17] ^ order_buf[18] ^ order_buf[19] ^ order_buf[20] ^ order_buf[21] ^ order_buf[22]); order_buf[24] = 0x3; nCount = sizeof(reply_buf); evs_card_exchange_data(fd, sizeof(order_buf), order_buf, &nCount, reply_buf, 3); if (nCount == 0) { PROTOCOL_TRACE("Get Data Failed"); return -1; } if (((reply_buf[nCount - 4] << 8) + reply_buf[nCount - 3]) == 0x9000) { gun_auth_process_data[gunNo - 1].cardBalance[0] = reply_buf[5]; gun_auth_process_data[gunNo - 1].cardBalance[1] = reply_buf[6]; gun_auth_process_data[gunNo - 1].cardBalance[2] = reply_buf[7]; gun_auth_process_data[gunNo - 1].cardBalance[3] = reply_buf[8]; gun_auth_process_data[gunNo - 1].tradeSn[0] = reply_buf[9]; gun_auth_process_data[gunNo - 1].tradeSn[1] = reply_buf[10]; gun_auth_process_data[gunNo - 1].authVer = reply_buf[11]; gun_auth_process_data[gunNo - 1].authFlag = reply_buf[12]; gun_auth_process_data[gunNo - 1].randomC[0] = reply_buf[13]; gun_auth_process_data[gunNo - 1].randomC[1] = reply_buf[14]; gun_auth_process_data[gunNo - 1].randomC[2] = reply_buf[15]; gun_auth_process_data[gunNo - 1].randomC[3] = reply_buf[16]; gun_auth_process_data[gunNo - 1].MAC1[0] = reply_buf[17]; gun_auth_process_data[gunNo - 1].MAC1[1] = reply_buf[18]; gun_auth_process_data[gunNo - 1].MAC1[2] = reply_buf[19]; gun_auth_process_data[gunNo - 1].MAC1[3] = reply_buf[20]; } else { PROTOCOL_TRACE("Get Auth Info Failed"); } return ((reply_buf[nCount - 4] << 8) + reply_buf[nCount - 3]); } /*---------------------------------------------------------------- * 妫€鏌ワ拷?锟藉崱鍣ㄧ姸锟�? ---------------------------------------------------------------*/ static int evs_card_check_reader(int fd) { unsigned char order_buf[7]; unsigned char reply_buf[128]; int nCount = 0; memset(reply_buf, 0, sizeof(reply_buf)); order_buf[0] = 0x2; order_buf[1] = 0x0; order_buf[2] = 0x2; order_buf[3] = 0x31; order_buf[4] = 0x11; order_buf[5] = order_buf[3] ^ order_buf[4]; order_buf[6] = 0x3; nCount = sizeof(reply_buf); evs_card_exchange_data(fd, sizeof(order_buf), order_buf, &nCount, reply_buf, 3); if (nCount == 0) { PROTOCOL_TRACE("Get Data Failed"); return -1; } if ((reply_buf[3] == 0) && (reply_buf[4] == 0)) return EVS_OPT_READER_SUCCESS; else return EVS_CHECK_READER_FAIL; } /**----------------------------------------------------------------------------------------------- * 鑾峰彇鐗╃悊鍗″彿鍙婂瘑鐮佹爣锟�? ------------------------------------------------------------------------------------------------*/ static int evs_card_get_psyInfo(int fd, int gunNo) { unsigned char order_buf[13]; unsigned char reply_buf[128]; unsigned char Enabled = 0; unsigned char usr_type = 0; unsigned char card_type = 0; unsigned char pin_flage = 0; int i = 0; int nCount = 0; memset(order_buf, 0, sizeof(order_buf)); memset(reply_buf, 0, sizeof(reply_buf)); order_buf[0] = 0x2; order_buf[1] = 0x0; order_buf[2] = 0x8; order_buf[3] = 0x32; order_buf[4] = 0x26; order_buf[5] = 0xff; order_buf[6] = 0x0; order_buf[7] = 0xB0; order_buf[8] = 0x85; order_buf[9] = 0x00; order_buf[10] = 0x15; order_buf[11] = (order_buf[3] ^ order_buf[4] ^ order_buf[5] ^ order_buf[6] ^ order_buf[7] ^ order_buf[8] ^ order_buf[9] ^ order_buf[10]); order_buf[12] = 0x3; nCount = sizeof(reply_buf); evs_card_exchange_data(fd, sizeof(order_buf), order_buf, &nCount, reply_buf, 3); if (nCount == 0) { PROTOCOL_TRACE("Get Data Failed"); return -1; } if (((reply_buf[nCount - 4] << 8) + reply_buf[nCount - 3]) == 0x9000) { Enabled = reply_buf[5]; // 锟�?鍚﹀惎鐢ㄥ崱锟�? for (i = 0; i < 8; i++) { gun_auth_process_data[gunNo - 1].psy_id[i] = reply_buf[6 + i]; // 鐗╃悊鍗″彿 } usr_type = reply_buf[14]; // 鐢ㄦ埛绫诲瀷 card_type = reply_buf[15]; // 鍗$被锟�? pin_flage = reply_buf[16]; // 瀵嗙爜鏍囪瘑 } else { PROTOCOL_TRACE("Get Psy Info Failed"); } return ((reply_buf[nCount - 4] << 8) + reply_buf[nCount - 3]); } int evs_card_ctrl_init(int fd) { int err = 0; err = evs_card_set_baudRate(fd, 3); if (err != 0) { PROTOCOL_TRACE("Set Baud Ratio Failed!"); return EVS_SET_READER_BAUD_FAIL; } HAL_SleepMs(100); err = evs_card_check_reader(fd); if (err != 0) { PROTOCOL_TRACE("Check Reader Failed!"); return EVS_CHECK_READER_FAIL; } HAL_SleepMs(100); return err; } /*------------------------------------------------------------------------------------------------ * 璇诲崱鍣ㄦ搷锟�? ------------------------------------------------------------------------------------------------*/ static int evs_ctrl_reader(evs_cmd_card_enum ctrl_cmd, int fd, int gunNo) { int ret = 0; switch (ctrl_cmd) { case EVS_CMD_READER_INIT: ret = evs_card_ctrl_init(fd); break; case EVS_CMD_READER_CHECK: ret = evs_card_check_reader(fd); break; case EVS_CMD_OPEN_RF: ret = evs_card_ctrl_rf_open(fd); break; case EVS_CMD_FOUND_CARD: ret = evs_card_ctrl_found(fd, gunNo); break; case EVS_CMD_CHECK_PIN: ret = evs_card_check_pin(fd); break; case EVS_CMD_GET_KEY_VER: ret = evs_card_get_keyInfo(fd, gunNo); break; case EVS_CMD_GET_USER_ID: ret = evs_card_get_cardSn(fd); break; case EVS_CMD_GET_PSY_ID: ret = evs_card_get_psyInfo(fd, gunNo); break; case EVS_CMD_GET_CARD_AUTH: ret = evs_card_get_authCode(fd, gunNo); break; case EVS_CMD_CONFIRM_AUTHCODE_S: ret = evs_card_trade_confirm(fd, gunNo); break; case EVS_CMD_CLOSE_RF: ret = evs_card_ctrl_rf_close(fd); break; default: break; } return ret; } static int evs_card_info_get(int fd, int gunNo) { static int loop = 0; int err = 0; switch (loop) { case 0: err = evs_ctrl_reader(EVS_CMD_OPEN_RF, fd, gunNo); if (err != 0) { err = EVS_CARD_ERROR_OPEN_RF; break; } HAL_SleepMs(100); loop++; case 1: err = evs_ctrl_reader(EVS_CMD_FOUND_CARD, fd, gunNo); if (err != 0) { err = EVS_CARD_ERROR_FOUND_CARD; loop = 0; break; } HAL_SleepMs(100); loop++; case 2: err = evs_ctrl_reader(EVS_CMD_GET_USER_ID, fd, gunNo); if (err != 0x9000) { err = EVS_CARD_ERROR_GET_USER_ID; loop = 0; break; } HAL_SleepMs(100); loop++; case 3: err = evs_ctrl_reader(EVS_CMD_GET_PSY_ID, fd, gunNo); if (err != 0x9000) { err = EVS_CARD_ERROR_GET_PSY_ID; loop = 0; break; } HAL_SleepMs(100); loop++; case 4: err = evs_ctrl_reader(EVS_CMD_CHECK_PIN, fd, gunNo); if (err != 0x9000) { err = EVS_CARD_ERROR_CHECK_PIN; loop = 0; break; } HAL_SleepMs(100); loop++; case 5: err = evs_ctrl_reader(EVS_CMD_GET_KEY_VER, fd, gunNo); if (err != 0x9000) err = EVS_CARD_ERROR_GET_KEY_VER; loop = 0; break; default: break; } return err; } int evs_card_handle(int fd, evs_smart_gun_auth_param *param) { static unsigned char step = 0; static unsigned int authTime; static unsigned char sendCnt = 0; int authResult = 0; int ret = 0; if (param->gunNo < 1 || param->gunNo > EVS_MAX_PORT_NUM) { authResult = EVS_HANDLE_GUN_NUM_WRONG; HAL_Printf("param->gunNo is over range: %d", param->gunNo); return authResult; } evs_event_card_info card_info = {0}; card_info.gunNo = param->gunNo; card_info.startMode = param->startMode; evs_event_card_auth card_auth = {0}; card_auth.gunNo = param->gunNo; evs_event_card_auth_result card_auth_result = {0}; card_auth_result.gunNo = param->gunNo; memcpy(card_auth_result.tradeNo, param->tradeNo, EVS_MAX_TRADE_LEN); evs_event_card_check_error card_error = {0}; card_error.gunNo = param->gunNo; switch (step) { case 0: authResult = EVS_HANDLE_AUTHING; sendCnt = 0; memset(&gun_auth_process_data[param->gunNo - 1], 0, sizeof(evs_smart_gun_auth_process_data)); gun_auth_process_data[param->gunNo - 1].gunNo = param->gunNo; ret = evs_card_info_get(fd, param->gunNo); if (ret != 0x9000) { card_error.faultValue = ret; authResult = EVS_HANDLE_CARD_FAILED; evs_send_event(EVS_CMD_EVENT_CARD_CHECK_ERROR, &card_error); break; } else { step++; authTime = HAL_UptimeMs(); evs_send_event(EVS_CMD_EVENT_CARD_INFO, &card_info); } case 1: if (gun_auth_process_data[param->gunNo - 1].getTerminalFlag == 1) { gun_auth_process_data[param->gunNo - 1].getTerminalFlag = 0; step++; sendCnt = 0; } else { if ((HAL_UptimeMs() - authTime) > 10 * 1000) { if (sendCnt < 2) { evs_send_event(EVS_CMD_EVENT_CARD_INFO, &card_info); sendCnt++; authTime = HAL_UptimeMs(); } else { card_error.faultValue = EVS_CARD_ERROR_TERMINAL_TIMEOUT; // get terminal number failed authResult = EVS_HANDLE_TERMINAL_TIMEOUT; evs_send_event(EVS_CMD_EVENT_CARD_CHECK_ERROR, &card_error); } } break; } case 2: if (evs_ctrl_reader(EVS_CMD_GET_CARD_AUTH, fd, param->gunNo) != 0x9000) { card_error.faultValue = EVS_CARD_ERROR_GET_MAC1; // get mac1 failed authResult = EVS_HANDLE_GET_MAC1; evs_send_event(EVS_CMD_EVENT_CARD_CHECK_ERROR, &card_error); break; } else { step++; authTime = HAL_UptimeMs(); evs_send_event(EVS_CMD_EVENT_CARD_AUTH, &card_auth); } case 3: if (gun_auth_process_data[param->gunNo - 1].getServerAuthFlag == 1) { gun_auth_process_data[param->gunNo - 1].getServerAuthFlag = 0; step++; sendCnt = 0; } else { if ((HAL_UptimeMs() - authTime) > 10 * 1000) { if (sendCnt < 2) { evs_send_event(EVS_CMD_EVENT_CARD_AUTH, &card_auth); sendCnt++; authTime = HAL_UptimeMs(); } else { card_error.faultValue = EVS_CARD_ERROR_CHECK_MAC1_TIMEOUT; // confirm card's mac1 or genarate mac2 failed! authResult = EVS_HANDLE_AUTHCODE_TIMEOUT; evs_send_event(EVS_CMD_EVENT_CARD_CHECK_ERROR, &card_error); } } break; } case 4: if (evs_ctrl_reader(EVS_CMD_CONFIRM_AUTHCODE_S, fd, param->gunNo) != 0x9000) { card_error.faultValue = EVS_CARD_ERROR_CHECK_MAC2; // check mac2 failed authResult = EVS_HANDLE_CHECK_MAC2; evs_send_event(EVS_CMD_EVENT_CARD_CHECK_ERROR, &card_error); break; } else { step++; authTime = HAL_UptimeMs(); evs_ctrl_reader(EVS_CMD_CLOSE_RF, fd, param->gunNo); evs_send_event(EVS_CMD_EVENT_CARD_AUTH_RESULT, &card_auth_result); } case 5: if (gun_auth_process_data[param->gunNo - 1].getAuthChargeFlag == 1) { gun_auth_process_data[param->gunNo - 1].getAuthChargeFlag = 0; authResult = EVS_HANDLE_AUTH_SUCCESS; } else { if ((HAL_UptimeMs() - authTime) > 10 * 1000) { if (sendCnt < 2) { evs_send_event(EVS_CMD_EVENT_CARD_AUTH_RESULT, &card_auth_result); sendCnt++; authTime = HAL_UptimeMs(); } else { card_error.faultValue = EVS_CARD_ERROR_AUTH_TIMEOUT; // authentication result timeout authResult = EVS_HANDLE_AUTH_RESULT_TIMEOUT; evs_send_event(EVS_CMD_EVENT_CARD_CHECK_ERROR, &card_error); } } break; } default: break; } if (!param->gunIsReady && authResult == 0) // 宸叉嫈锟�?涓旈壌鏉冩湭瀹屾垚 { card_error.faultValue = EVS_CARD_ERROR_GUN_PULL_OUT; // 閴存潈杩囩▼锟�?鐢ㄦ埛鎷旀灙 authResult = EVS_HANDLE_GUN_PULL_OUT; evs_send_event(EVS_CMD_EVENT_CARD_CHECK_ERROR, &card_error); } if (authResult != 0) { step = 0; evs_ctrl_reader(EVS_CMD_CLOSE_RF, fd, param->gunNo); // 鍏冲皠锟�? } return authResult; }