/**
 * \file kv_main.c
 * \brief
 * \version 0.1
 * \date 2022-10-29
 * \author notrynohigh (notrynohigh@outlook.com)
 *
 * Copyright (c) 2020 by notrynohigh. All Rights Reserved.
 */
#include "../port.h"
#include "b_os.h"

B_TASK_CREATE_ATTR(task1_attr);
B_TASK_CREATE_ATTR(task2_attr);

uint8_t buf[1024];

B_QUEUE_CREATE_ATTR(q_attr, buf, 1024);

bQueueId_t gqueueId = NULL;

PT_THREAD(test_task1)(struct pt *pt, void *arg)
{
    static uint32_t tmp = 0;
    PT_BEGIN(pt);
    while (1)
    {
        bQueuePutBlock(pt, gqueueId, &tmp, 1000);
        if(PT_WAIT_IS_TIMEOUT(pt))
        {
            b_log("put timeout\r\n");
        }
        tmp += 1;
    }
    PT_END(pt);
}

PT_THREAD(test_task2)(struct pt *pt, void *arg)
{
    uint32_t tmp = 0;
    PT_BEGIN(pt);
    while (1)
    {
        bTaskDelayMs(pt, 1000);
        bQueueGetBlock(pt, gqueueId, &tmp, 0xffffffff);
        if(PT_WAIT_IS_TIMEOUT(pt))
        {
            b_log("get timeout\r\n");
        }
        else
        {
            b_log("hello [%d][%d]\r\n",bQueueGetCount(gqueueId), tmp);
        }
        
    }
    PT_END(pt);
}


int main()
{
    port_init();
    bInit();

    gqueueId = bQueueCreate(10, sizeof(uint32_t), &q_attr);
    b_log("q:%p\r\n", gqueueId);

    bTaskCreate("task1", test_task1, NULL, &task1_attr);
    bTaskCreate("task2", test_task2, NULL, &task2_attr);

    while (1)
    {
        bExec();
    }
    return 0;
}