#include #include #include #include #include #include #include #include #include #include #include #include #include uint32_t g_count = 256; int g_size = 0x4; unsigned long g_paddr = 0xC001B000; volatile unsigned int *din; int key_down(void) { int key; key = *din; key = key>>31; if(!key) { usleep(20000); key = *din; key = key>>31; } return !key; } int main(int argc, char **argv) { int i, j=0; int rtn, errno; volatile unsigned int *inout; volatile unsigned int *pad; int rec_st = 0; int fd; void * mem; void * aligned_vaddr; unsigned long aligned_paddr; uint32_t aligned_size; unsigned int tmp; /* Align address to access size */ g_paddr &= ~(g_size - 1); aligned_paddr = g_paddr & ~(4096 - 1); aligned_size = g_paddr - aligned_paddr + (g_count * g_size); aligned_size = (aligned_size + 4096 - 1) & ~(4096 - 1); if ((fd = open("/dev/mem", O_RDWR, 0)) < 0) { printf("open /dev/mem failed\r\n"); return 1; } aligned_vaddr = mmap(NULL, aligned_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, aligned_paddr); if (aligned_vaddr == NULL) { printf("Error mapping address\n"); close(fd); return 1; } mem = (void *)((uint32_t)aligned_vaddr + (g_paddr - aligned_paddr)); inout = (volatile unsigned int *)(mem+0x4); //pull = (volatile unsigned int *)(mem+0x); pad = (volatile unsigned int *)(mem+0x24); din = (volatile unsigned int *)(mem+0x18); tmp = *inout; tmp &= ~0xC0000000; *inout = tmp; //B30 B31 input tmp = *pad; tmp &= ~0xF0000000; *pad = tmp; //B30 B31 input //system("touch /tmp/rec"); system("echo ""REC OFF"" > /tmp/rec"); while(1) { if(key_down()) { if(rec_st) { printf("kill record process\n"); system("pkill.sh ffmpeg"); system("pkill.sh write_ts"); system("echo ""REC OFF"" > /tmp/rec"); //system("/usr/exe/out/bin/pkill.sh write_ts"); //system("/usr/exe/out/bin/pkill.sh write_ts"); } else { system("/mnt/write_ts &"); system("echo ""REC ON"" > /tmp/rec"); } rec_st = !rec_st; sleep(1); } usleep(20000); } munmap(aligned_vaddr, aligned_size); close(fd); return 0; }