bool GetNodeInfoMsgEx::processIncoming(struct sockaddr_in* fromAddr, Socket* sock, char* respBuf, size_t bufLen, HighResolutionStats* stats) { LogContext log("GetNodeInfoMsg incoming"); std::string peer = fromAddr ? Socket::ipaddrToStr(&fromAddr->sin_addr) : sock->getPeername(); LOG_DEBUG_CONTEXT(log, 4, std::string("Received a GetNodeInfoMsg") + peer); GeneralNodeInfo info; App *app = Program::getApp(); getCPUInfo(&(info.cpuName), &(info.cpuSpeed), &(info.cpuCount)); getMemInfo(&(info.memTotal), &(info.memFree)); info.logFilePath = app->getConfig()->getLogStdFile(); Node *localNode = app->getLocalNode(); std::string nodeID = localNode->getID(); uint16_t nodeNumID = localNode->getNumID(); GetNodeInfoRespMsg getNodeInfoRespMsg(nodeID.c_str(), nodeNumID, info); getNodeInfoRespMsg.serialize(respBuf, bufLen); sock->sendto(respBuf, getNodeInfoRespMsg.getMsgLength(), 0, (struct sockaddr*) fromAddr, sizeof(struct sockaddr_in)); LOG_DEBUG_CONTEXT(log, 5, std::string("Sent a message with type: " ) + StringTk::uintToStr( getNodeInfoRespMsg.getMsgType() ) + std::string(" to admon")); app->getClientOpStats()->updateNodeOp(sock->getPeerIP(), MetaOpCounter_GETNODEINFO); return true; }
std::string getDate::getInfo(int types) { std::string retInfo; switch(types) { case cpuInfo: retInfo = getCpuInfo(); break; case memInfo: retInfo = getMemInfo(); break; case netInfo: retInfo = getNetInfo(); break; case diskInfo: retInfo = getDiskInfo(); break; } return retInfo; }
int main(int argc, char *argv[]) { int fd; void *mem_map, *ram_addr; unsigned int addr, size; uint32_t *pru0_mem; uint8_t *reg_read; /* PRU code only works if executed as root */ if (getuid() != 0) { fprintf(stderr, "This program needs to run as root.\n"); exit(EXIT_FAILURE); } /***** SHARED RAM SETUP *****/ printf("Allocating RAM buffer... "); fflush(stdout); /* Get shared RAM information */ getMemInfo(&addr, &size); if (size < BUFFER_SIZE) { printf("error.\n"); fprintf(stderr, "External RAM pool must be at least %d bytes.\n", BUFFER_SIZE); exit(EXIT_FAILURE); } /* Get access to device memory */ if ((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) { printf("error.\n"); perror("Failed to open memory!"); exit(EXIT_FAILURE); } /* Map shared RAM */ mem_map = mmap(0, RAM_BYTES, PROT_READ, MAP_SHARED, fd, addr & ~PAGE_MASK); /* Close file descriptor (not needed after memory mapping) */ close(fd); if (mem_map == (void *) -1) { printf("error.\n"); perror("Failed to map base address"); exit(EXIT_FAILURE); } /* Memory mapping must be page aligned */ ram_addr = mem_map + (addr & PAGE_MASK); printf("OK!\n"); /***** PRU SET UP *****/ printf("Setting up PRUs... "); fflush(stdout); if (pru_setup() != 0) { printf("error.\n"); fprintf(stderr, "Error setting up the PRU.\n"); pru_cleanup(); munmap(mem_map, RAM_SIZE); exit(EXIT_FAILURE); } /* Set up the PRU data RAMs */ pru_mmap(0, &pru0_mem); *(pru0_mem) = addr; printf("OK!\n"); /***** BEGIN MAIN PROGRAM *****/ printf("Starting main program.\n"); /* Start up PRU0 */ if (pru_start(PRU0, "pru/ads131e08_pru0.bin") != 0) { fprintf(stderr, "Error starting PRU0.\n"); pru_cleanup(); munmap(mem_map, RAM_SIZE); exit(EXIT_FAILURE); } /* Start up PRU1 */ if (pru_start(PRU1, "pru/ads131e08_pru1.bin") != 0) { fprintf(stderr, "Error starting PRU1.\n"); pru_cleanup(); munmap(mem_map, RAM_SIZE); exit(EXIT_FAILURE); } /* Wait for PRU_EVTOUT_0 and send shared RAM data */ prussdrv_pru_wait_event(PRU_EVTOUT_0); prussdrv_pru_clear_event(PRU_EVTOUT_0, PRU0_ARM_INTERRUPT); /* Print out ADS registers */ reg_read = (uint8_t *) ram_addr; printf("\nADS registers before write:\n"); printf("ID: %#04x (default = 0xD2)\n", *(reg_read + 0)); printf("CONFIG1: %#04x (default = 0x91)\n", *(reg_read + 1)); printf("CONFIG2: %#04x (default = 0xE0)\n", *(reg_read + 2)); /* Datasheet claims that CONFIG3 should end in 00, but it ends in 01. */ printf("CONFIG3: %#04x (default = 0x41)\n", *(reg_read + 3)); printf("FAULT: %#04x (default = 0x00)\n", *(reg_read + 4)); printf("CH1SET: %#04x (default = 0x10)\n", *(reg_read + 5)); printf("CH2SET: %#04x (default = 0x10)\n", *(reg_read + 6)); printf("CH3SET: %#04x (default = 0x10)\n", *(reg_read + 7)); printf("CH4SET: %#04x (default = 0x10)\n", *(reg_read + 8)); printf("CH5SET: %#04x (default = 0x10)\n", *(reg_read + 9)); printf("CH6SET: %#04x (default = 0x10)\n", *(reg_read + 10)); printf("CH7SET: %#04x (default = 0x10)\n", *(reg_read + 11)); printf("CH8SET: %#04x (default = 0x10)\n", *(reg_read + 12)); printf("FAULT_STATP: %#04x (default = 0x00)\n", *(reg_read + 13)); printf("FAULT_STATN: %#04x (default = 0x00)\n", *(reg_read + 14)); /* Datasheet claims that GPIO should be 0x0F, but it ends in 0x00. */ printf("GPIO: %#04x (default = 0x00)\n", *(reg_read + 15)); /* Wait for PRU_EVTOUT_0 and send shared RAM data */ prussdrv_pru_wait_event(PRU_EVTOUT_0); prussdrv_pru_clear_event(PRU_EVTOUT_0, PRU0_ARM_INTERRUPT); /* Print out ADS registers */ printf("\nADS registers after write:\n"); printf("ID: %#04x (0xD2)\n", *(reg_read + 0)); printf("CONFIG1: %#04x (0x95)\n", *(reg_read + 1)); printf("CONFIG2: %#04x (0xE3)\n", *(reg_read + 2)); /* Datasheet claims that CONFIG3 should end in 00, but it ends in 01. */ printf("CONFIG3: %#04x (0xC1)\n", *(reg_read + 3)); printf("FAULT: %#04x (0x00)\n", *(reg_read + 4)); printf("CH1SET: %#04x (0x13)\n", *(reg_read + 5)); printf("CH2SET: %#04x (0x23)\n", *(reg_read + 6)); printf("CH3SET: %#04x (0x13)\n", *(reg_read + 7)); printf("CH4SET: %#04x (0x23)\n", *(reg_read + 8)); printf("CH5SET: %#04x (0x13)\n", *(reg_read + 9)); printf("CH6SET: %#04x (0x23)\n", *(reg_read + 10)); printf("CH7SET: %#04x (0x13)\n", *(reg_read + 11)); printf("CH8SET: %#04x (0x23)\n", *(reg_read + 12)); printf("FAULT_STATP: %#04x (0x00)\n", *(reg_read + 13)); printf("FAULT_STATN: %#04x (0x00)\n", *(reg_read + 14)); /* Datasheet claims that GPIO should be 0x0F, but it ends in 0x00. */ printf("GPIO: %#04x (0x00)\n", *(reg_read + 15)); /* PRU CLEAN UP */ printf("\nStopping PRUs.\n"); pru_stop(PRU1); pru_stop(PRU0); pru_cleanup(); /* SHARED RAM CLEAN UP */ if (munmap(mem_map, RAM_SIZE) == -1) { perror("Failed to unmap memory"); exit(EXIT_FAILURE); } return(EXIT_SUCCESS); }