123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- #include "iot_demo_def.h"
- #include "iot_boardled.h"
- #include "iot_gpio.h"
- #include "iot_gpio_ex.h"
- #include "iot_pwm.h"
- #include "ohos_init.h"
- #include <cmsis_os2.h>
- #define DEVICE_STATUS_LED_GPIO 2
- #define DEVICE_SATTUS_LED_PWD 2
- #define CONFIG_FLASHLED_FREDEFAULT 5
-
- int BOARD_InitPwmLed(void)
- {
- IoTGpioInit(DEVICE_STATUS_LED_GPIO);
- IoTGpioSetFunc(DEVICE_STATUS_LED_GPIO, IOT_GPIO_FUNC_GPIO_2_PWM2_OUT);
- IoTGpioSetDir(DEVICE_STATUS_LED_GPIO, IOT_GPIO_DIR_OUT);
- IoTPwmInit(DEVICE_SATTUS_LED_PWD);
- return 0;
- }
- int BOARD_SetPwmLedDutyCycle(int dutyCycle)
- {
- dutyCycle = dutyCycle < 0 ? 1 : dutyCycle;
- dutyCycle = dutyCycle >= 100 ? 99 : dutyCycle;
- IoTPwmStart(DEVICE_STATUS_LED_GPIO, dutyCycle, 40000);
- return 0;
- }
- int BOARD_InitIoLed(void)
- {
-
- IoTGpioSetFunc(DEVICE_STATUS_LED_GPIO, IOT_GPIO_FUNC_GPIO_2_GPIO);
-
- IoTGpioSetDir(DEVICE_STATUS_LED_GPIO, IOT_GPIO_DIR_OUT);
- return 0;
- }
- int BOARD_SetIoLedStatus(int status)
- {
- if (status) {
- IoTGpioSetOutputVal(DEVICE_STATUS_LED_GPIO, 1);
- } else {
- IoTGpioSetOutputVal(DEVICE_STATUS_LED_GPIO, 0);
- }
- return 0;
- }
- #define CONFIG_TASK_MAIN_STACKSIZE 0x800
- #define CONFIG_TASK_MAIN_PRIOR 22
- static uint32_t Time2Tick(uint32_t ms)
- {
- uint64_t ret;
- ret = ((uint64_t)ms * osKernelGetTickFreq()) / CN_MINISECONDS_IN_SECOND;
- return (uint32_t)ret;
- }
- typedef struct
- {
- int cycleTicks;
- int cycleLightTicks;
- osThreadId_t taskID;
- }LedFlashController;
- static LedFlashController g_ledFlashController;
- #define CN_LED_FLASH_HIGHBASE 200
- #define CN_LED_FLASH_CYCLEBASE 1000
- int LedFlashFrequencySet(float flashHz)
- {
- int cycleHighMs = 0;
- int cycleMs = 0;
- cycleMs = (int)(CN_MINISECONDS_IN_SECOND / flashHz);
- cycleHighMs = cycleMs *CN_LED_FLASH_HIGHBASE /CN_LED_FLASH_CYCLEBASE;
- g_ledFlashController.cycleTicks = Time2Tick(cycleMs);
- g_ledFlashController.cycleLightTicks = Time2Tick(cycleHighMs);
- RaiseLog(LOG_LEVEL_INFO, "cycle:%d cycleon:%d ",g_ledFlashController.cycleTicks, g_ledFlashController.cycleLightTicks);
- return 0;
- }
- int LedFlashTaskDeinit(void)
- {
- osThreadTerminate(g_ledFlashController.taskID);
- g_ledFlashController.taskID = NULL;
- return 0;
- }
- static void LedTaskEntry(const void *arg)
- {
- (void)arg;
- BOARD_InitIoLed();
- LedFlashFrequencySet(CONFIG_FLASHLED_FREDEFAULT);
- while (1) {
- BOARD_SetIoLedStatus(CN_BOARD_SWITCH_ON);
- osDelay((uint32_t)g_ledFlashController.cycleLightTicks);
- BOARD_SetIoLedStatus(CN_BOARD_SWITCH_OFF);
- osDelay((uint32_t)(g_ledFlashController.cycleTicks - g_ledFlashController.cycleLightTicks));
- }
- return;
- }
- static void LedFlashTaskInit(void)
- {
- osThreadAttr_t attr;
- RaiseLog(LOG_LEVEL_INFO, "DATA:%s Time:%s \r\n", __DATE__, __TIME__);
-
- attr.attr_bits = 0U;
- attr.cb_mem = NULL;
- attr.cb_size = 0U;
- attr.stack_mem = NULL;
- attr.stack_size = CONFIG_TASK_MAIN_STACKSIZE;
- attr.priority = CONFIG_TASK_MAIN_PRIOR;
- attr.name = "LedFlashTask";
- g_ledFlashController.taskID = osThreadNew((osThreadFunc_t)LedTaskEntry, NULL, (const osThreadAttr_t *)&attr);
- if (g_ledFlashController.taskID == NULL) {
- RaiseLog(LOG_LEVEL_ERR, "Create the LED FLASH TASK failed");
- } else {
- RaiseLog(LOG_LEVEL_INFO, "Create the LED FLASH TASK success");
- }
- return;
- }
- APP_FEATURE_INIT(LedFlashTaskInit);
|