int emmc_write(char *side, char **value) { int fd, i; char buf[MACADDR_LEN]; long long size, start_addr; fd = open(EMMC_PARTITION, O_RDWR | O_SYNC); if(fd < 0) { fprintf(stderr, "Could not open emmc device: %s\n", EMMC_PARTITION); exit(1); return -1; } if (get_start_address(&size, &start_addr) < 0) { close(fd); exit(1); } if (WAN_OFFSET+MACADDR_LEN >= size) { fprintf(stderr, "exceed than the maximum size: %llx\n", size); close(fd); exit(1); } lseek(fd, start_addr+keyfromstring(side), SEEK_SET); for (i = 0; i < MACADDR_LEN; i++) buf[i] = strtol(value[i], NULL, 16); if (write(fd, buf, MACADDR_LEN) != MACADDR_LEN) { fprintf(stderr, "write() %s failed\n", EMMC_PARTITION); close(fd); return -1; } close(fd); return 0; }
int emmc_read(char *side) { int fd, pos_emmc, pos_file, i; char mac_addr[MACADDR_LEN]; long long size, start_addr; fd = open(EMMC_PARTITION, O_RDWR | O_SYNC); if(fd < 0) { fprintf(stderr, "Could not open emmc device: %s\n", EMMC_PARTITION); exit(1); return -1; } if (get_start_address(&size, &start_addr) < 0) { close(fd); exit(1); } lseek(fd, start_addr+keyfromstring(side), SEEK_SET); if(read(fd, mac_addr, MACADDR_LEN) != MACADDR_LEN){ printf("read() failed\n"); close(fd); return -1; } for (i = 0; i < MACADDR_LEN; i++) { printf("%02X", mac_addr[i]); if (i < MACADDR_LEN-1) printf(":"); else printf("\n"); } close(fd); return 0; }
int mtd_read(char *side) { int fd = mtd_open(MTD_FACTORY, O_RDWR | O_SYNC); int i = 0; unsigned char mac_addr[MACADDR_LEN]; if(fd < 0) { printf("Could not open mtd device: %s\n", MTD_FACTORY); return -1; } lseek(fd, keyfromstring(side), SEEK_SET); if(read(fd, mac_addr, MACADDR_LEN) != MACADDR_LEN){ printf("read() failed\n"); close(fd); return -1; } for (i = 0; i < MACADDR_LEN; i++) { printf("%02X", mac_addr[i]); if (i < MACADDR_LEN-1) printf(":"); else printf("\n"); } close(fd); return 0; }
int mtd_write(char *side, char **value) { int sz = 0; int i; struct mtd_info_user mtdInfo; struct erase_info_user mtdEraseInfo; int fd = mtd_open(MTD_FACTORY, O_RDWR | O_SYNC); unsigned char *buf, *ptr; if(fd < 0) { fprintf(stderr, "Could not open mtd device: %s\n", MTD_FACTORY); return -1; } if(ioctl(fd, MEMGETINFO, &mtdInfo)) { fprintf(stderr, "Could not get MTD device info from %s\n", MTD_FACTORY); close(fd); return -1; } mtdEraseInfo.length = sz = mtdInfo.erasesize; buf = (unsigned char *)malloc(sz); if(NULL == buf){ printf("Allocate memory for sz failed.\n"); close(fd); return -1; } if(read(fd, buf, sz) != sz){ fprintf(stderr, "read() %s failed\n", MTD_FACTORY); goto write_fail; } mtdEraseInfo.start = 0x0; for (mtdEraseInfo.start; mtdEraseInfo.start < mtdInfo.size; mtdEraseInfo.start += mtdInfo.erasesize) { ioctl(fd, MEMUNLOCK, &mtdEraseInfo); if(ioctl(fd, MEMERASE, &mtdEraseInfo)){ fprintf(stderr, "Failed to erase block on %s at 0x%x\n", MTD_FACTORY, mtdEraseInfo.start); goto write_fail; } } ptr = buf + keyfromstring(side); for (i = 0; i < MACADDR_LEN; i++, ptr++) *ptr = strtoul(value[i], NULL, 16); lseek(fd, 0, SEEK_SET); if (write(fd, buf, sz) != sz) { fprintf(stderr, "write() %s failed\n", MTD_FACTORY); goto write_fail; } close(fd); free(buf); return 0; write_fail: close(fd); free(buf); return -1; }
void parseCMD(int *clntSocket, char *buffer) { mxml_node_t *tree; printf("The xml was: %s\n", (char *) buffer); tree = mxmlLoadString(NULL, buffer, MXML_NO_CALLBACK); mxml_node_t *node = mxmlFindElement(tree, tree, "cmd", NULL, NULL, MXML_DESCEND); mxml_node_t *n_node = mxmlFindElement(node, tree, "name", NULL, NULL, MXML_DESCEND); mxml_node_t *arg1_node = mxmlFindElement(node, tree, "arg1", NULL, NULL, MXML_DESCEND); char * cmd = mxmlGetText(n_node, 0); char * arg = mxmlGetText(arg1_node, 0); printf("The cmd was: %s and has argument: %s\n", cmd, arg); int key = keyfromstring(cmd); switch (key) { case PULL: /* ... */ downloadFileCMD(); break; case PUSH: /* ... */ break; case MSG: /* ... */ break; case QUIT: /* ... */ break; default: printf("The cmd was %s", (char *)cmd); break; } //char *newMsg = ""; //send(*clntSocket, newMsg, strlen(newMsg), 0); }