int program_change_action(int channel, int value) { // printf("PgC CH %2d,VALUE %3d \n",channel,value); switch (value){ case 3: printf("RDSCMD: %2.2x %4.4x %4.4x\n",value,group,cmd03_ontime2*cmd03_ontime1); LS_CMD( value, group, cmd03_ontime2*cmd03_ontime1); break; case 4: printf("RDSCMD: %2.2x %4.4x %4.4x\n",value,group,cmd04_delayoff2*cmd04_delayoff1); LS_CMD( value, group, cmd04_delayoff2*cmd04_delayoff1); break; case 6: printf("RDSCMD: %2.2x %4.4x %4.4x\n",value,group,cmd06_tonethreshhold); LS_CMD( value, group, cmd06_tonethreshhold); break; case 7: printf("RDSCMD: %2.2x %4.4x %4.4x\n",value,group,cmd07_hysteresis); LS_CMD( value, group, cmd07_hysteresis); break; case 9: printf("RDSCMD: %2.2x %4.4x 0000\n",value,group); LS_CMD( value, group, 0); break; case 10: printf("RDSCMD: %2.2x %4.4x 0000\n",value,group); LS_CMD( value, group, 0); break; case 11: printf("RDSCMD: %2.2x %4.4x %2.2x%2.2x\n",value,group,cmd0b_attacktime,cmd0b_decaytime); LS_CMD( value, group, cmd0b_attacktime*0x100+cmd0b_decaytime); break; case 12: printf("RDSCMD: %2.2x %4.4x 0000\n",value,group); LS_CMD( value, group, 0); break; case 13: printf("RDSCMD: %2.2x %4.4x %2.2x%2.2x\n",value,group,cmd0d_ontime,cmd0d_offtime); //0D LS_CMD( value, group, cmd0d_ontime*0x100+cmd0d_offtime); break; case 14: printf("RDSCMD: %2.2x %4.4x %2.2x%2.2x\n",value,group,cmd0e_ontimeramp,cmd0e_offtime); //0E LS_CMD( value, group, cmd0e_ontimeramp*0x100+cmd0e_offtime); break; case 15: printf("RDSCMD: %2.2x %4.4x %2.2x%2.2x\n",value,group,cmd0f_ontimeseed,cmd0f_offtimeseed); //0F LS_CMD( value, group, cmd0f_ontimeseed*0x100+cmd0f_offtimeseed); break; case 16: printf("RDSCMD: %2.2x %4.4x %2.2x%2.2x\n",value,group,cmd10_ontimeramp,cmd10_offtime); //10 LS_CMD( value, group, cmd10_ontimeramp*0x100+cmd10_offtime); break; case 17: printf("RDSCMD: %2.2x %4.4x 0000\n",value,group); //11 LS_CMD( value, group, 0); break; } return(0); }
int main(int argc, char **argv) { /// interval cannot be more that 999 int interval= RDS_PACKET_INTERVAL *NANOSEC_PER_MILLISEC; Mode mode; mode = transmit; int cmd_option; // Parse Options while((cmd_option=getopt(argc, argv, "i:m")) != EOF) switch(cmd_option) { default: case 'i': interval=atoi(optarg)*NANOSEC_PER_MILLISEC; break; case 'm': mode=testing; break; // really just for me when not using transmitter } if(mode==transmit) { if (gpioSetup() != OK) { dbgPrint(DBG_INFO, "gpioSetup failed. Exiting\n"); return 1; } LS_CMD(10,0xffff,0); sleep(1); LS_CMD(10,0xffff,0); sleep(1); RDS_CONFIG(); sleep(1); RDS_ENABLE_UDG1(); sleep(1); } struct itimerspec timspec; bzero(&timspec, sizeof(timspec)); timspec.it_interval.tv_sec = 0; timspec.it_interval.tv_nsec = interval; timspec.it_value.tv_nsec =1; int timerfd = timerfd_create(CLOCK_MONOTONIC,0); timerfd_settime(timerfd, 0, &timspec, 0); struct pollfd ufds; ufds.fd = timerfd; ufds.events = POLLIN; uint64_t loopcount=0; int rv; uint32_t fake_data=0; for(;;) { rv = poll(&ufds,1,5); // 5 sec timeout.... if (rv == -1) { perror("poll"); // error occurred in poll() } else if (rv == 0) { // Do Nothing } else { if (ufds.revents & POLLIN) { read(timerfd, &loopcount, sizeof(uint64_t)); // reset Time if(mode==transmit) { LS_RAW(20,fake_data,0); } else {fprintf(stderr,"RDS COMMAND \n");} fake_data++; } } } return 0; }