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; }
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; }
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); } }
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; }
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; }
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; }
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); }