基于OpenHarmony的智能门锁目前兼容的OH版本为3.0release~5.0Release。现已兼容我们自己在开源仓库最新的OH发行版源码。其他关于智能门锁的源码不多赘述,参考智能储物柜。

密码功能

static int DealSetPassword(const char *jsonString) {
    int ret = -1;
    cJSON *root = cJSON_Parse(jsonString);
    if (root == NULL) {
        const char *error_ptr = cJSON_GetErrorPtr();
        if (error_ptr != NULL) {
            HILOG_ERROR(LOG_LABEL, "Parse json error: %s", error_ptr);
        }
        return ret;
    }

    CommandParamSetPsk setLockPskParam = {0};

    cJSON *paras = cJSON_GetObjectItem(root, "paras");
    if (paras == NULL) {
        HILOG_ERROR(LOG_LABEL, "Paras not exist");
        cJSON_Delete(root);
        return ret;
    }

    cJSON *pskId = cJSON_GetObjectItem(paras, "PskId");
    if (pskId != NULL && cJSON_IsString(pskId)) {
        const char *id = cJSON_GetStringValue(pskId);
        if (id == NULL || strlen(id) > LOCK_ID_LENGTH) {
            HILOG_ERROR(LOG_LABEL, "check lock id failed!");
            cJSON_Delete(root);
            return -1;
        }
        strncpy(setLockPskParam.id, id, strlen(id));
    } else {
        cJSON_Delete(root);
        return ret;
    }

    cJSON *option = cJSON_GetObjectItem(paras, "Option");
    if (option != NULL && cJSON_IsString(option)) {
        const char *opt = cJSON_GetStringValue(option);
        setLockPskParam.option = GetOptionType(opt);
        if (setLockPskParam.option == OPTION_NONE) {
            HILOG_ERROR(LOG_LABEL, "no such option(%s)!", opt);
            cJSON_Delete(root);
            return -1;
        }
        HILOG_INFO(LOG_LABEL, "option = %s", opt);
    } else {
        cJSON_Delete(root);
        return ret;
    }

    cJSON *lockPsk = cJSON_GetObjectItem(paras, "LockPsk");
    if (lockPsk != NULL && cJSON_IsString(lockPsk)) {
        const char *psk = cJSON_GetStringValue(lockPsk);
        if (psk == NULL || strlen(psk) > LOCK_PSK_LENGTH) {
            HILOG_ERROR(LOG_LABEL, "check psk failed!");
            cJSON_Delete(root);
            return -1;
        }
        strncpy(setLockPskParam.password, psk, strlen(psk));
    } else {
        cJSON_Delete(root);
        return ret;
    }

    ret = IotProfile_CommandCallback(CLOUD_COMMAND_SETPSK, &setLockPskParam);
    cJSON_Delete(root);
    return ret;
}

 

门是否关好

static int InitGpio(void) {
    int ret = GPIO_Init(DOOR_PIN, GPIO_DIRECTION_IN, GPIO_PULL_NONE);
    if (ret != 0) {
        HILOG_ERROR(LOG_LABEL, "GPIO_failed: %d", ret);
        return -1;
    }
    return 0;
}

static void CheckDoorStatus(void) {
    int ret = GPIO_Read(DOOR_PIN);
    if (ret < 0) {
        HILOG_ERROR(LOG_LABEL, "Failed_GPIO: %d", ret);
        return;
    }

    if (ret == GPIO_HIGH) {
        HILOG_ERROR(LOG_LABEL, "not_closed");
    } else {
        HILOG_INFO(LOG_LABEL, "is_closed.");
    }
}

static void TimerCallback(void *arg) {
    CheckDoorStatus();
    TimerStart((TimerHandle_t)arg, CHECK_INTERVAL);
}

static int DoorStatusAppMain(int argc, char *argv[]) {
    if (InitGpio() != 0) {
        return -1;
    }

    TimerHandle_t timer = TimerCreate(TIMER_MODE_PERIODIC, TimerCallback, NULL);
    if (timer == NULL) {
        HILOG_ERROR(LOG_LABEL, "Failed");
        GPIO_Deinit(DOOR_PIN);
        return -1;
    }

    TimerStart(timer, CHECK_INTERVAL);

    while (1) {
        sleep(1);
    }

    TimerDelete(timer);
    GPIO_Deinit(DOOR_PIN);
    return 0;
}

APP_ENTRY(DoorStatusAppMain)

 

 

 

 

 

苏ICP备2024134786号