int main(int argc, char **argv) { int fd = -1; int retval = EXIT_SUCCESS; if(argc < 2) { fprintf(stderr, "%s version %s-%s\n" "\nUsage:\n" "\tread addr: address\n" "\twrite addr: address value\n" "\tset slow DAC: -sdac AO0 AO1 AO2 AO3 [V]\n", argv[0], VERSION_STR, REVISION_STR); return EXIT_FAILURE; } if((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) FATAL; /* Read from command line */ unsigned long addr; unsigned long *val = NULL; int access_type = 'w'; ssize_t val_count = 0; parse_from_argv(argc, argv, &addr, &access_type, &val, &val_count); /* Map one page */ map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, addr & ~MAP_MASK); if(map_base == (void *) -1) FATAL; if (addr != 0) { if (val_count == 0) { read_value(addr); } else { write_values(addr, access_type, val, val_count); } } if (map_base != (void*)(-1)) { if(munmap(map_base, MAP_SIZE) == -1) FATAL; map_base = (void*)(-1); } if (map_base != (void*)(-1)) { if(munmap(map_base, MAP_SIZE) == -1) FATAL; } if (fd != -1) { close(fd); } return retval; }
int main(int argc, char **argv) { int fd = -1; int retval = EXIT_SUCCESS; if(argc < 2) { fprintf(stderr, "%s version %s-%s\n" "\nUsage:\n" "\tread addr: address\n" "\twrite addr: address value\n" "\tread analog mixed signals: -ams\n" "\tset slow DAC: -sdac AO0 AO1 AO2 AO3 [V]\n", argv[0], VERSION_STR, REVISION_STR); return EXIT_FAILURE; } if((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) FATAL; /* Read from standard input */ if (strncmp(argv[1], "-ams", 4) == 0) { uint32_t addr = c_addrAms; amsReg_t* ams=NULL; // Map one page map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, addr & ~MAP_MASK); if(map_base == (void *) -1) FATAL; ams = map_base + (addr & MAP_MASK); AmsList(ams); if (map_base != (void*)(-1)) { if(munmap(map_base, MAP_SIZE) == -1) FATAL; map_base = (void*)(-1); } } else if (strncmp(argv[1], "-sdac", 5) == 0) { uint32_t addr = c_addrAms; amsReg_t* ams=NULL; double *val = NULL; ssize_t val_count = 0; parse_from_argv_par(argc, argv, &val, &val_count); if(val_count>SLOW_DAC_NUM){ val_count=SLOW_DAC_NUM; } // Map one page map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, addr & ~MAP_MASK); if(map_base == (void *) -1) FATAL; ams = map_base + (addr & MAP_MASK); if (val_count == 0) { DacRead(ams); } else{ DacWrite(ams, val, val_count); } if (map_base != (void*)(-1)) { if(munmap(map_base, MAP_SIZE) == -1) FATAL; map_base = (void*)(-1); } } else if (strncmp(argv[1], "-", 1) == 0) { unsigned long addr; unsigned long *val = NULL; int access_type = 'w'; ssize_t val_count = 0; while ( parse_from_stdin(&addr, &access_type, &val, &val_count) != -1) { if (addr == 0) { continue; } /* Map one page */ map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, addr & ~MAP_MASK); if(map_base == (void *) -1) FATAL; if (val_count == 0) { read_value(addr); } else { write_values(addr, access_type, val, val_count); } if (map_base != (void*)(-1)) { if(munmap(map_base, MAP_SIZE) == -1) FATAL; map_base = (void*)(-1); } #if DEBUG_MONITOR printf("addr/type: %lu/%c\n", addr, access_type); printf("val (%ld):", val_count); for (ssize_t i = 0; i < val_count; ++i) { printf("%lu ", val[i]); } if (val != NULL) { free(val); val = NULL; } printf("\n"); #endif } goto exit; } /* Read from command line */ else { unsigned long addr; unsigned long *val = NULL; int access_type = 'w'; ssize_t val_count = 0; parse_from_argv(argc, argv, &addr, &access_type, &val, &val_count); /* Map one page */ map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, addr & ~MAP_MASK); if(map_base == (void *) -1) FATAL; if (addr != 0) { if (val_count == 0) { read_value(addr); } else { write_values(addr, access_type, val, val_count); } } if (map_base != (void*)(-1)) { if(munmap(map_base, MAP_SIZE) == -1) FATAL; map_base = (void*)(-1); } #if DEBUG_MONITOR printf("addr/type: %lu/%c\n", addr, access_type); printf("val (%ld):", val_count); for (ssize_t i = 0; i < val_count; ++i) { printf("%lu ", val[i]); } if (val != NULL) { free(val); val = NULL; } printf("\n"); #endif } exit: if (map_base != (void*)(-1)) { if(munmap(map_base, MAP_SIZE) == -1) FATAL; } if (fd != -1) { close(fd); } return retval; }