예제 #1
0
파일: os_time.c 프로젝트: PheeL79/diOS
Status OS_TimeInit(void)
{
Status s = S_OK;
    os_time_mutex = OS_MutexCreate();
    if (OS_NULL == os_time_mutex) { return S_INVALID_PTR; }
    return s;
}
예제 #2
0
파일: osal.c 프로젝트: PheeL79/diOS
Status OS_StorageItemCreate(const void* data_p, const U16 size, OS_StorageItem** item_pp)
{
    if (OS_NULL == item_pp) { return S_INVALID_PTR; }
    OS_StorageItem* item_p = OS_Malloc(sizeof(OS_StorageItem));
    if (OS_NULL == item_p) { return S_OUT_OF_MEMORY; }
    item_p->mutex = OS_MutexCreate();
    if (OS_NULL == item_p->mutex) { return S_INVALID_PTR; }
    *item_pp = item_p;
    item_p->data_p  = (void*)data_p;
    item_p->size    = size;
    item_p->owners  = 1;
    return S_OK;
}
예제 #3
0
int ff_cre_syncobj (	/* 1:Function succeeded, 0:Could not create the sync object */
	BYTE vol,			/* Corresponding volume (logical drive number) */
	_SYNC_t *sobj		/* Pointer to return the created sync object */
)
{
#ifdef FF_USE_STATIC_MUTEX
	if (!ff_mutex_init) {
		ff_mutex_init = 1;
		if (OS_MutexCreate(&ff_mutex) != OS_OK) {
			return 0;
		}
	}
	return 1;
#else
	int ret = 1;


//	*sobj = CreateMutex(NULL, FALSE, NULL);		/* Win32 */
//	ret = (int)(*sobj != INVALID_HANDLE_VALUE);

//	*sobj = SyncObjects[vol];			/* uITRON (give a static sync object) */
//	ret = 1;							/* The initial value of the semaphore must be 1. */

//	*sobj = OSMutexCreate(0, &err);		/* uC/OS-II */
//	ret = (int)(err == OS_NO_ERR);

//	*sobj = xSemaphoreCreateMutex();	/* FreeRTOS */
//	ret = (int)(*sobj != NULL);

	*sobj = malloc(sizeof(**sobj));
	memset(*sobj, 0, sizeof(**sobj));

	if (OS_MutexCreate(*sobj) != OS_OK)
		ret = 0;

	return ret;
#endif
}
예제 #4
0
HAL_Status SSD1306_SPI_Init(SSD1306_t *SSD1306config)
{
	SPI_Global_Config gconfig;
	gconfig.cs_level = 0;
	gconfig.mclk = SSD1306config->SSD1306_SPI_MCLK;
	HAL_Status sta = HAL_SPI_Init(SSD1306config->SSD1306_SPI_ID, &gconfig);
	if (sta != HAL_OK)
		COMPONENT_WARN("spi init error %d\n", sta);

	if(OS_MutexCreate(&SSD1306_SPI_WR_LOCK) != OS_OK)
		COMPONENT_WARN("OS_MutexCreate error\n");

	SPI_Config spi_Config;
	spi_Config.firstBit = SPI_TCTRL_FBS_MSB;
	spi_Config.mode = SPI_CTRL_MODE_MASTER;
	spi_Config.opMode = SPI_OPERATION_MODE_POLL;
	spi_Config.sclk = SSD1306config->SSD1306_SPI_MCLK;
	spi_Config.sclkMode = SPI_SCLK_Mode0;

	sta = HAL_SPI_Open(SSD1306config->SSD1306_SPI_ID,
						SSD1306config->SSD1306_SPI_CS, &spi_Config, 1);
	SSD1306_SPI_ID = SSD1306config->SSD1306_SPI_ID;

	if (sta != HAL_OK)
		COMPONENT_WARN("spi open error error %d\n", sta);

	GPIO_InitParam io_Param;
	io_Param.driving = GPIO_DRIVING_LEVEL_3;
	io_Param.mode = GPIOx_Pn_F1_OUTPUT;
	io_Param.pull = GPIO_PULL_NONE;
	HAL_GPIO_Init(SSD1306config->SSD1306_dsPort,
					SSD1306config->SSD1306_dsPin, &io_Param);

	SSD1306_dsPort = SSD1306config->SSD1306_dsPort;
	SSD1306_dsPin = SSD1306config->SSD1306_dsPin;

	SSD1306config->SSD1306_Write = SSD1306_SPI_Write;
	sta = HAL_SPI_CS(SSD1306_SPI_ID, 1);
	if (sta != HAL_OK)
		COMPONENT_WARN("spi cs init error %d\n", sta);
	COMPONENT_TRACK("end\n");
	return sta;
}
예제 #5
0
static enum cmd_status cmd_mqtt_init_exec(char *cmd)
{
	int32_t cnt;
	uint32_t buf_size;
	uint32_t alive_interval;
	uint32_t clean;
	char *tmp;

	/* get param */
	cnt = cmd_sscanf(cmd, "bufsize=%u alive=%u clean=%u",
			 &buf_size, &alive_interval, &clean);

	/* check param */
	if (cnt != 3) {
		CMD_ERR("invalid param number %d\n", cnt);
		return CMD_STATUS_INVALID_ARG;
	}

	if (clean > 1) {
		CMD_ERR("invalid clean %d\n", clean);
		return CMD_STATUS_INVALID_ARG;
	}

	if (OS_MutexCreate(&lock) != OS_OK)
		return CMD_STATUS_FAIL;;

	if ((tmp = cmd_strrchr(cmd, '\"')) == NULL)
		return CMD_STATUS_INVALID_ARG;
	*tmp = '\0';
	if ((tmp = cmd_strchr(cmd, '\"')) == NULL)
		return CMD_STATUS_INVALID_ARG;
	tmp++;

	client_name = cmd_malloc(cmd_strlen(tmp) + 1);

	cmd_memcpy(client_name, tmp, cmd_strlen(tmp) + 1);
	CMD_DBG("client name = %s\n", client_name);

	connectData.clientID.cstring = client_name;
	connectData.keepAliveInterval = alive_interval;
	connectData.cleansession = clean;

	send_buf = cmd_malloc(buf_size);
	if (send_buf == NULL) {
		CMD_ERR("no memory\n");
		OS_MutexDelete(&lock);
		return CMD_STATUS_FAIL;
	}
	recv_buf = cmd_malloc(buf_size);
	if (recv_buf == NULL) {
		cmd_free(send_buf);
		CMD_ERR("no memory\n");
		OS_MutexDelete(&lock);
		return CMD_STATUS_FAIL;
	}

	NewNetwork(&network);
	MQTTClient(&client, &network, 6000, send_buf, buf_size, recv_buf, buf_size);



	return CMD_STATUS_OK;
}
예제 #6
0
파일: SystemInit.c 프로젝트: beartan/q-sys
void QSYS_Init(void)
{
    u8 *ptr1;
    u8 *ptr2;
//	FIL *ptr3;

    OS_CPU_SysTickInit();//Initialize the SysTick.
#if OS_USE_UCOS
    CPU_IntSrcPrioSet(CPU_INT_PENDSV,15);
    CPU_IntSrcPrioSet(CPU_INT_SYSTICK,15);
#endif
    SetupHardware();

    Debug("sizeof(INPUT_EVENT)=%d\n\r",sizeof(INPUT_EVENT));//for debug by karlno
    Debug("sizeof(PAGE_ATTRIBUTE)=%d\n\r",sizeof(PAGE_ATTRIBUTE));//for debug by karlno
    Debug("sizeof(IMG_BUTTON_OBJ)=%d\n\r",sizeof(IMG_BUTTON_OBJ));//for debug by karlno
    Debug("sizeof(CHAR_BUTTON_OBJ)=%d\n\r",sizeof(CHAR_BUTTON_OBJ));//for debug by karlno
    Debug("sizeof(MUSIC_EVENT)=%d\n\r",sizeof(MUSIC_EVENT));//for debug by karlno
    //Debug("sizeof(QSYS_MSG_BOX)=%d\n\r",sizeof(QSYS_MSG_BOX));//for debug by karlno

    if(SysEvt_MaxNum>32)
    {
        Debug("Error:SysEvt_MaxNum(%d) is too big!!!\n\r",SysEvt_MaxNum);
        Q_ErrorStopScreen("Error:SysEvt_MaxNum is too big!!!\n\r");
    }

    gLCD_Mutex=OS_MutexCreate();

    //创建触摸输入中断发生信号量
    gTouchHandler_Sem=OS_SemaphoreCreate(0);
    gAllowTchHandler_Sem=OS_SemaphoreCreate(0);
    gVsDreq_Sem=OS_SemaphoreCreate(0);
    gRfRecvHandler_Sem=OS_SemaphoreCreate(0);

    //创建事件传递数据
    gInputHandler_Queue=OS_MsgBoxCreate("Input Event",sizeof(INPUT_EVENT),16);
    gMusicHandler_Queue=OS_MsgBoxCreate("MusicKV Event",sizeof(MUSIC_EVENT),8);

#if 0//debug

    OS_TaskCreate((void (*) (void *)) T1_Task,(void *) 0,
                  (OS_STK *) &T1_TaskStack[OS_MINIMAL_STACK_SIZE - 1],T1_TASK_pRIORITY);

    //OS_TaskCreate(T2_Task , ( signed OS_CHAR * ) "T2 Handler", OS_MINI_STACK_SIZE, NULL, MUSIC_HANDLER_TASK_PRIORITY, NULL );
    OS_TaskDelete(SYSTEM_TASK_PRIORITY);
#endif

#if 1 //首次下载完成后可关闭此处代码,防止误下载
    Debug("\n\r-------------------SPI FLASH DOWNLOAD FROM SD------------------\n\r");
    ptr1=(u8 *)Q_Mallco(CfgFileSize);
    ptr2=(u8 *)Q_Mallco(SPI_FLASH_PAGE_SIZE);
    SpiFlashDownFromSD(FALSE,"System/Down.cfg",ptr1,ptr2);
    Q_Free(ptr2);
    Q_Free(ptr1);
    Debug("-------------------SPI FLASH DOWNLOAD FROM SD------------------\n\r\n\r");
#endif

    Debug("----------------DATABASE SETTING INITIALIZATION----------------\n\r");
    DB_Init();
    Debug("----------------DATABASE SETTING INITIALIZATION----------------\n\r\n\r");

    RTC_SetUp();

    Gui_Init();	//图像库初始化
    Gui_SetBgLight(Q_DB_GetValue(Setting_BgLightScale,NULL));//设置背光亮度

    OS_TaskCreate(MusicHandler_Task,"Music",OS_MINIMAL_STACK_SIZE*8,NULL,MUSIC_TASK_PRIORITY,&MusicHandler_Task_Handle);
    OS_TaskCreate(TouchHandler_Task,"Touch",OS_MINIMAL_STACK_SIZE*3,NULL,TOUCH_TASK_PRIORITY,&TouchHandler_Task_Handle);
    OS_TaskCreate(KeysHandler_Task,"Keys",OS_MINIMAL_STACK_SIZE*2,NULL,KEYS_TASK_PRIORITY,&KeysHandler_Task_Handle);
    OS_TaskCreate(QWebHandler_Task,"QWeb",OS_MINIMAL_STACK_SIZE*8,NULL,RF_DATA_TASK_PRIORITY,&QWebHandler_Task_Handle);

    OS_TaskDelay(100);
    OS_TaskStkCheck(FALSE);

    if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0) //如果没按下Key-PE2,就正常启动串口中断
    {
#if !QXW_RELEASE_VER//for debug
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//release版本请关掉此句,免得不懂的用户说板卡老死机。
        USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
#endif
    }
}