int cpu_status(int nr) { u32 *table, id = get_my_id(); if (nr == id) { table = (u32 *)get_spin_addr(); printf("table base @ 0x%p\n", table); } else { table = (u32 *)get_spin_addr() + nr * NUM_BOOT_ENTRY; printf("Running on cpu %d\n", id); printf("\n"); printf("table @ 0x%p\n", table); printf(" addr - 0x%08x\n", table[BOOT_ENTRY_ADDR_LOWER]); printf(" pir - 0x%08x\n", table[BOOT_ENTRY_PIR]); printf(" r3 - 0x%08x\n", table[BOOT_ENTRY_R3_LOWER]); printf(" r6 - 0x%08x\n", table[BOOT_ENTRY_R6_LOWER]); } return 0; }
int cpu_release(int nr, int argc, char *argv[]) { u32 i, val, *table = (u32 *)get_spin_addr() + nr * NUM_BOOT_ENTRY; u64 boot_addr; if (nr == get_my_id()) { printf("Invalid to release the boot core.\n\n"); return 1; } if (argc != 4) { printf("Invalid number of arguments to release.\n\n"); return 1; } #ifdef CFG_64BIT_STRTOUL boot_addr = simple_strtoull(argv[0], NULL, 16); #else boot_addr = simple_strtoul(argv[0], NULL, 16); #endif /* handle pir, r3, r6 */ for (i = 1; i < 4; i++) { if (argv[i][0] != '-') { u8 entry = boot_entry_map[i]; val = simple_strtoul(argv[i], NULL, 16); table[entry] = val; } } table[BOOT_ENTRY_ADDR_UPPER] = (u32)(boot_addr >> 32); /* ensure all table updates complete before final address write */ eieio(); table[BOOT_ENTRY_ADDR_LOWER] = (u32)(boot_addr & 0xffffffff); return 0; }
int cpu_status(int nr) { u32 *table, id = get_my_id(); if (hold_cores_in_reset(1)) return 0; if (nr == id) { table = (u32 *)&__spin_table; printf("table base @ 0x%p\n", table); } else if (is_core_disabled(nr)) { puts("Disabled\n"); } else { table = (u32 *)&__spin_table + nr * NUM_BOOT_ENTRY; printf("Running on cpu %d\n", id); printf("\n"); printf("table @ 0x%p\n", table); printf(" addr - 0x%08x\n", table[BOOT_ENTRY_ADDR_LOWER]); printf(" r3 - 0x%08x\n", table[BOOT_ENTRY_R3_LOWER]); printf(" pir - 0x%08x\n", table[BOOT_ENTRY_PIR]); } return 0; }
static void mqtt_task(void *pvParameters) { int ret = 0; struct Network network; MQTTClient client = DefaultClient; char mqtt_client_id[20]; uint8_t mqtt_buf[100]; uint8_t mqtt_readbuf[100]; MQTTPacket_connectData data = MQTTPacket_connectData_initializer; NewNetwork( &network ); memset(mqtt_client_id, 0, sizeof(mqtt_client_id)); strcpy(mqtt_client_id, "ESP-"); strcat(mqtt_client_id, get_my_id()); while(1) { xSemaphoreTake(wifi_alive, portMAX_DELAY); printf("%s: started\n\r", __func__); printf("%s: (Re)connecting to MQTT server %s ... ",__func__, MQTT_HOST); ret = ConnectNetwork(&network, MQTT_HOST, MQTT_PORT); if( ret ){ printf("error: %d\n\r", ret); taskYIELD(); continue; } printf("done\n\r"); NewMQTTClient(&client, &network, 5000, mqtt_buf, 100, mqtt_readbuf, 100); data.willFlag = 0; data.MQTTVersion = 3; data.clientID.cstring = mqtt_client_id; data.username.cstring = MQTT_USER; data.password.cstring = MQTT_PASS; data.keepAliveInterval = 10; data.cleansession = 0; printf("Send MQTT connect ... "); ret = MQTTConnect(&client, &data); if(ret){ printf("error: %d\n\r", ret); DisconnectNetwork(&network); taskYIELD(); continue; } printf("done\r\n"); MQTTSubscribe(&client, "/esptopic", QOS1, topic_received); xQueueReset(publish_queue); while(1){ char msg[PUB_MSG_LEN - 1] = "\0"; while(xQueueReceive(publish_queue, (void *)msg, 0) == pdTRUE){ printf("got message to publish\r\n"); MQTTMessage message; message.payload = msg; message.payloadlen = PUB_MSG_LEN; message.dup = 0; message.qos = QOS1; message.retained = 0; ret = MQTTPublish(&client, "/beat", &message); if (ret != SUCCESS ){ printf("error while publishing message: %d\n", ret ); break; } } ret = MQTTYield(&client, 1000); if (ret == DISCONNECTED) break; } printf("Connection dropped, request restart\n\r"); DisconnectNetwork(&network); taskYIELD(); } }
inline void* svc(void* t) { auto task = (forall_task_t*)t; res = F(task->start,task->end,get_my_id(),res); return t; }