#include <stdio.h>
#include "osal_test.h"
#include "exo_common.h"

os_status_t t_sts;
os_thread_handle_ptr thread1;
os_thread_handle_ptr thread2;
os_itc_msg_handle_t ipc_msg;

os_queue_handle_ptr q1;
os_queue_handle_ptr q2;


void app_init(void *args)
{
    DEBUG_CPRINT(("appinit\r\n"));
}

void thread1_test(void* args)
{
   // thread1->app_init_func(NULL);
    ipc_msg.src_entity=1;
    ipc_msg.pld_info=10;
    ipc_msg.Msg_id=100;
    
    uint8_t *pld_ptr =os_malloc(6);
    pld_ptr[0] ='h';
    pld_ptr[1] ='e';
    pld_ptr[2] ='l';
    pld_ptr[3] ='l';
    pld_ptr[4] ='o';
    pld_ptr[5] ='\0';

    ipc_msg.pld.pld_ptr = pld_ptr;
    int snd_q_data =10;
    //DEBUG_CPRINT(("thread_test\r\n"));
    for(;;)
    {
       // HAL_GPIO_TogglePin(GPIOJ, GPIO_PIN_13);
      //  os_itc_msg_send(&ipc_msg,2,os_send_itc_wait);
        os_queue_send(q2,&snd_q_data,10);
        osDelay(500);
    }
}

void thread2_test()
{
    //os_itc_msg_handle_t rcv_id;
    int rcv_q_data;
    //DEBUG_CPRINT(("thread_test\r\n"));
    for(;;)
    {
    	os_queue_receive(q2,&rcv_q_data,10000);
    	DEBUG_CPRINT(("Received data=%d\n",rcv_q_data));
    	//os_itc_msg_rcv(2,&rcv_id,os_send_itc_wait);
        //DEBUG_CPRINT(("Received data=%hu",rcv_id.Msg_id));
        HAL_GPIO_TogglePin(GPIOJ, GPIO_PIN_13);
        osDelay(1);
        //    if(rcv_id.pld.pld_ptr)
        //    {
        //        os_free(rcv_id.pld.pld_ptr);
        //        rcv_id.pld.pld_ptr = NULL;
        //    }
    }
}



void osal_test(void)
{

	os_queue_create(&q1,10,4,NULL);
	os_queue_create(&q2,10,4,NULL);
    t_sts=os_thread_create(1,T_OSAL_TEST_STACK_SIZE,24,"thread1", thread1_test,NULL,NULL,NULL);
    t_sts=os_thread_create(2,T_OSAL_TEST_STACK_SIZE,24,"thread2", thread2_test,NULL,NULL,NULL);
}

