Пример #1
0
int ff_req_grant (	/* 1:Got a grant to access the volume, 0:Could not get a grant */
	_SYNC_t sobj	/* Sync object to wait */
)
{
	int ret = 1;
	OS_Status status;

//	ret = (int)(WaitForSingleObject(sobj, _FS_TIMEOUT) == WAIT_OBJECT_0);	/* Win32 */

//	ret = (int)(wai_sem(sobj) == E_OK);			/* uITRON */

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

//	ret = (int)(xSemaphoreTake(sobj, _FS_TIMEOUT) == pdTRUE);	/* FreeRTOS */

#ifdef FF_USE_STATIC_MUTEX
	status = OS_MutexLock(&ff_mutex, _FS_TIMEOUT);
#else
	status = OS_MutexLock(sobj, _FS_TIMEOUT);
#endif
	if (status != OS_OK) {
		ret = 0;
	}

	return ret;
}
Пример #2
0
static enum cmd_status cmd_mqtt_subscribe_exec(char *cmd)
{
	int32_t cnt;
	uint32_t i;
	char *tmp;
	uint32_t qos;
	int rc;

	/* get param */
	cnt = cmd_sscanf(cmd, "qos=%u",
			 &qos);

	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++;


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

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

	i = 0;
	while (sub_topic[i] != NULL) {
		i++;
		if (i >= MAX_SUB_TOPICS) {
			CMD_WRN("Subscribe topics is max\n");
			return CMD_STATUS_FAIL;
		}
	}

	sub_topic[i] = cmd_malloc(cmd_strlen(tmp) + 1);
	cmd_memcpy(sub_topic[i], tmp, cmd_strlen(tmp) + 1);

	if (OS_MutexLock(&lock, 60000) == OS_E_TIMEOUT)
		return CMD_STATUS_FAIL;

	if ((rc = MQTTSubscribe(&client, sub_topic[i], qos, mqtt_msg_cb)) != 0) {
		CMD_ERR("Return code from MQTT subscribe is %d\n", rc);
		return CMD_STATUS_FAIL;
	}

	OS_MutexUnlock(&lock);

	return CMD_STATUS_OK;
}
Пример #3
0
static void cmd_mqtt_bg(void *arg)
{
	int rc;

	while (1) {
		OS_MutexLock(&lock, 0xffffffffU);
		if ((rc = MQTTYield(&client, 3000)) != 0)
			CMD_WRN("Return code from yield is %d\n", rc);
		OS_MutexUnlock(&lock);
	}

}
Пример #4
0
HAL_Status SSD1306_SPI_Write(uint8_t data, SSD1306_WR_MODE mode)
{
	OS_MutexLock(&SSD1306_SPI_WR_LOCK, 10000000);
	HAL_Status sta;
	if(mode == SSD1306_CMD) {
		HAL_GPIO_WritePin(SSD1306_dsPort, SSD1306_dsPin, GPIO_PIN_LOW);
	} else if(mode == SSD1306_DATA) {
		HAL_GPIO_WritePin(SSD1306_dsPort, SSD1306_dsPin, GPIO_PIN_HIGH);
	}
	sta = HAL_SPI_Transmit(SSD1306_SPI_ID, &data, 1);
	if (sta != HAL_OK)
		COMPONENT_WARN("spi write error error %d\n", sta);

	OS_MutexUnlock(&SSD1306_SPI_WR_LOCK);
	return sta;
}
Пример #5
0
static enum cmd_status cmd_mqtt_unsubscribe_exec(char *cmd)
{
	uint32_t i;
	char *tmp;
	int rc;

	/* get param */
	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++;

	i = 0;
	while (i < MAX_SUB_TOPICS) {
		if ((sub_topic[i] != NULL) && (!cmd_memcmp(sub_topic[i], tmp, cmd_strlen(tmp) + 1)))
			break;
		i++;
	}

	if (OS_MutexLock(&lock, 60000) == OS_E_TIMEOUT)
		return CMD_STATUS_FAIL;

	if ((rc = MQTTUnsubscribe(&client, tmp/*sub_topic[i]*/)) != 0) {
		CMD_ERR("Return code from MQTT unsubscribe is %d\n", rc);
		return CMD_STATUS_FAIL;
	}

	if (i == MAX_SUB_TOPICS)
		CMD_WRN("Unsubscribe topics is inexist\n");
	else {
		cmd_free(sub_topic[i]);
		sub_topic[i] = NULL;
	}

	OS_MutexUnlock(&lock);

	return CMD_STATUS_OK;
}
Пример #6
0
static enum cmd_status cmd_mqtt_publish_exec(char *cmd)
{
	int32_t cnt;
	MQTTMessage message;
	char *topic;
	uint8_t *buf;
	char *tmp;
	uint32_t qos;
	uint32_t retain;
	uint32_t size;
	int rc;

	/* get param */
	cnt = cmd_sscanf(cmd, "qos=%u retain=%u",
			 &qos, &retain);

	if ((tmp = cmd_strrchr(cmd, '\"')) == NULL)
		return CMD_STATUS_INVALID_ARG;
	*tmp = '\0';
  	cnt += cmd_sscanf(tmp + 2, "size=%u", &size);
	if ((tmp = cmd_strchr(cmd, '\"')) == NULL)
		return CMD_STATUS_INVALID_ARG;
	tmp++;


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

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

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

	topic = tmp;
	CMD_DBG("topic name = %s\n", topic);

	buf = cmd_malloc(size);
	if (buf == NULL) {
		CMD_ERR("no memory\n");
		return CMD_STATUS_FAIL;
	}


	cmd_write_respond(CMD_STATUS_OK, "OK");
	cmd_raw_mode_enable();
	cmd_raw_mode_read(buf, size, 30000);

	message.qos = qos;
	message.retained = retain;
	message.payload = buf;
	message.payloadlen = size;

	if (OS_MutexLock(&lock, 60000) == OS_E_TIMEOUT)
		return CMD_STATUS_FAIL;

	if ((rc = MQTTPublish(&client, topic, &message)) != 0)
		CMD_ERR("Return code from MQTT publish is %d\n", rc);
	else
		CMD_DBG("MQTT publish is success\n");

	OS_MutexUnlock(&lock);

	cmd_raw_mode_write((uint8_t *)&rc, sizeof(rc));
	cmd_raw_mode_disable();

	cmd_free(buf);

	return CMD_STATUS_ACKED;

}
Пример #7
0
Status OS_StorageItemLock(OS_StorageItem* item_p, const OS_TimeMs timeout)
{
    if (OS_NULL == item_p) { return S_INVALID_PTR; }
    return OS_MutexLock(item_p->mutex, timeout);
}