/**************************************************************************//**
 * @item     CosyOS-III 例程（服务应用）
 * @file     msg_taskmsg.c
 * @brief    消息同步_私信
 * @details  通过私信的应用实现任务间通信。
 * @author   迟凯峰
 * @version  V1.0.1
 * @date     2026.07.31
 ******************************************************************************/

#if 0 /* 编译开关 */

#include "CosyOS.H" // 用户的各个c文件中应包含此文件
#include <stdio.h> // for printf

/*
    私信参数说明：
    1、私信参数的数量支持：1~8 个；
    2、各个参数的数据类型可为任意类型，只要编译器支持即可；
    3、各个参数的名称必须依次为：tm1、tm2...，用户可自行宏定义别名提高易用性。
 */

dExternTaskmsg(task_2)(unsigned int, void *, float); // 声明动态创建的私信任务 task_2

/* 静态创建私信任务 task_1 */// 1个私信参数
uCreateTaskmsg(task_1, 1, 512, 0, "task_key", 1)(unsigned int tm1)
{
    while(1){ // 已内置循环，此循环可省略
        if(uRecvTaskmsg(xTick_ms(2000))){ // 接收私信，超时时间为2000毫秒，返回值为真表示接收成功
            printf("task_1: %u, %u\r\n", tm1++, (unsigned int)&tm1);
            uDelay_ms(1000);
            uSendTaskmsg(task_2)(tm1, &tm1, tm1); // 发送私信至 task_2
        }
    }
    uEndTaskmsg(); // 结束私信任务
}

/* 动态创建私信任务 task_2 */// 3个私信参数
dCreateTaskmsg(task_2, 2, 768, 0, "task_led", 3)(unsigned int tm1, void *tm2, float tm3)
{
//  while(1){ // 已内置循环，此循环可省略
        if(uRecvTM(xTick_s(2))){ // 接收私信，超时时间为2秒，返回值为真表示接收成功
            printf("task_2: %u, %u, %f\r\n", tm1++, (unsigned int)tm2, tm3);
            uDelay_s(1);
            uSendTM(task_1)(tm1); // 发送私信至 task_1
        }
//  }
    uEndTM(); // 结束私信任务
}

/** 启动钩子 */
void start_hook(void)
{
//  uScheduleLock();
    uSendTaskmsg(task_1)(1);  // 发送私信至 task_1
    uStartTask_Ready(task_1); // 启动 task_1，初始状态为就绪状态
    uStartTask_Ready(task_2); // 启动 task_2，初始状态为就绪状态
//  uScheduleUnlock();
}

#endif
