void ff_rel_grant ( _SYNC_t sobj /* Sync object to be signaled */ ) { // ReleaseMutex(sobj); /* Win32 */ // sig_sem(sobj); /* uITRON */ // OSMutexPost(sobj); /* uC/OS-II */ // xSemaphoreGive(sobj); /* FreeRTOS */ #ifdef FF_USE_STATIC_MUTEX OS_MutexUnlock(&ff_mutex); #else OS_MutexUnlock(sobj); #endif }
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_StorageItemUnlock(OS_StorageItem* item_p) { if (OS_NULL == item_p) { return S_INVALID_PTR; } return OS_MutexUnlock(item_p->mutex); }