Ejemplo n.º 1
0
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;
}