10a7ce71fSopenharmony_ci/*
20a7ce71fSopenharmony_ci * Copyright (C) 2022 HiHope Open Source Organization .
30a7ce71fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
40a7ce71fSopenharmony_ci * you may not use this file except in compliance with the License.
50a7ce71fSopenharmony_ci * You may obtain a copy of the License at
60a7ce71fSopenharmony_ci *
70a7ce71fSopenharmony_ci *     http:// www.apache.org/licenses/LICENSE-2.0
80a7ce71fSopenharmony_ci *
90a7ce71fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
100a7ce71fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
110a7ce71fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
120a7ce71fSopenharmony_ci * See the License for the specific language governing permissions and
130a7ce71fSopenharmony_ci *
140a7ce71fSopenharmony_ci * limitations under the License.
150a7ce71fSopenharmony_ci */
160a7ce71fSopenharmony_ci
170a7ce71fSopenharmony_ci#include <stdio.h>
180a7ce71fSopenharmony_ci
190a7ce71fSopenharmony_ci#include <unistd.h>
200a7ce71fSopenharmony_ci
210a7ce71fSopenharmony_ci#include "ohos_init.h"
220a7ce71fSopenharmony_ci#include "cmsis_os2.h"
230a7ce71fSopenharmony_ci#include "wifiiot_gpio.h"
240a7ce71fSopenharmony_ci#include "wifiiot_gpio_ex.h"
250a7ce71fSopenharmony_ci
260a7ce71fSopenharmony_ci#define LED_INTERVAL_TIME 30
270a7ce71fSopenharmony_ci#define LED_TASK_STACK_SIZE 512
280a7ce71fSopenharmony_ci#define LED_TASK_PRIO 25
290a7ce71fSopenharmony_ci#define NUM 1
300a7ce71fSopenharmony_ci
310a7ce71fSopenharmony_cienum LedState {
320a7ce71fSopenharmony_ci    LED_ON = 0,
330a7ce71fSopenharmony_ci    LED_OFF,
340a7ce71fSopenharmony_ci    LED_SPARK,
350a7ce71fSopenharmony_ci};
360a7ce71fSopenharmony_ci
370a7ce71fSopenharmony_cienum LedState g_ledState = LED_SPARK;
380a7ce71fSopenharmony_ci
390a7ce71fSopenharmony_cistatic int *LedTask(const char *arg)
400a7ce71fSopenharmony_ci{
410a7ce71fSopenharmony_ci    (void)arg;
420a7ce71fSopenharmony_ci    while (NUM) {
430a7ce71fSopenharmony_ci        switch (g_ledState) {
440a7ce71fSopenharmony_ci            case LED_ON:
450a7ce71fSopenharmony_ci                GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_VALUE0);
460a7ce71fSopenharmony_ci                osDelay(LED_INTERVAL_TIME);
470a7ce71fSopenharmony_ci                break;
480a7ce71fSopenharmony_ci            case LED_OFF:
490a7ce71fSopenharmony_ci                GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_VALUE1);
500a7ce71fSopenharmony_ci                osDelay(LED_INTERVAL_TIME);
510a7ce71fSopenharmony_ci                break;
520a7ce71fSopenharmony_ci            case LED_SPARK:
530a7ce71fSopenharmony_ci                GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_VALUE0);
540a7ce71fSopenharmony_ci                osDelay(LED_INTERVAL_TIME);
550a7ce71fSopenharmony_ci                GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_VALUE1);
560a7ce71fSopenharmony_ci                osDelay(LED_INTERVAL_TIME);
570a7ce71fSopenharmony_ci                break;
580a7ce71fSopenharmony_ci            default:
590a7ce71fSopenharmony_ci                osDelay(LED_INTERVAL_TIME);
600a7ce71fSopenharmony_ci                break;
610a7ce71fSopenharmony_ci        }
620a7ce71fSopenharmony_ci    }
630a7ce71fSopenharmony_ci
640a7ce71fSopenharmony_ci    return NULL;
650a7ce71fSopenharmony_ci}
660a7ce71fSopenharmony_ci
670a7ce71fSopenharmony_cistatic void OnButtonPressed(char *arg)
680a7ce71fSopenharmony_ci{
690a7ce71fSopenharmony_ci    (void) arg;
700a7ce71fSopenharmony_ci
710a7ce71fSopenharmony_ci    enum LedState nextState = LED_SPARK;
720a7ce71fSopenharmony_ci    switch (g_ledState) {
730a7ce71fSopenharmony_ci        case LED_ON:
740a7ce71fSopenharmony_ci            nextState = LED_OFF;
750a7ce71fSopenharmony_ci            break;
760a7ce71fSopenharmony_ci        case LED_OFF:
770a7ce71fSopenharmony_ci            nextState = LED_ON;
780a7ce71fSopenharmony_ci            break;
790a7ce71fSopenharmony_ci        case LED_SPARK:
800a7ce71fSopenharmony_ci            nextState = LED_OFF;
810a7ce71fSopenharmony_ci            break;
820a7ce71fSopenharmony_ci        default:
830a7ce71fSopenharmony_ci            break;
840a7ce71fSopenharmony_ci    }
850a7ce71fSopenharmony_ci
860a7ce71fSopenharmony_ci    g_ledState = nextState;
870a7ce71fSopenharmony_ci}
880a7ce71fSopenharmony_ci
890a7ce71fSopenharmony_cistatic void LedExampleEntry(void)
900a7ce71fSopenharmony_ci{
910a7ce71fSopenharmony_ci    osThreadAttr_t attr;
920a7ce71fSopenharmony_ci
930a7ce71fSopenharmony_ci    GpioInit();
940a7ce71fSopenharmony_ci    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);
950a7ce71fSopenharmony_ci    GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);
960a7ce71fSopenharmony_ci
970a7ce71fSopenharmony_ci    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_IO_FUNC_GPIO_5_GPIO);
980a7ce71fSopenharmony_ci    GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW,
990a7ce71fSopenharmony_ci        OnButtonPressed, NULL);
1000a7ce71fSopenharmony_ci
1010a7ce71fSopenharmony_ci    attr.name = "LedTask";
1020a7ce71fSopenharmony_ci    attr.attr_bits = 0U;
1030a7ce71fSopenharmony_ci    attr.cb_mem = NULL;
1040a7ce71fSopenharmony_ci    attr.cb_size = 0U;
1050a7ce71fSopenharmony_ci    attr.stack_mem = NULL;
1060a7ce71fSopenharmony_ci    attr.stack_size = LED_TASK_STACK_SIZE;
1070a7ce71fSopenharmony_ci    attr.priority = LED_TASK_PRIO;
1080a7ce71fSopenharmony_ci
1090a7ce71fSopenharmony_ci    if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) {
1100a7ce71fSopenharmony_ci        printf("[LedExample] Failed to create LedTask!\n");
1110a7ce71fSopenharmony_ci    }
1120a7ce71fSopenharmony_ci}
1130a7ce71fSopenharmony_ci
1140a7ce71fSopenharmony_ciSYS_RUN(LedExampleEntry);