Example #1
0
static void check_leds(unsigned long arg)
{
	struct card *card = (struct card *)arg;
	struct channel *channel0 = &card->channels[0];
	static int blinker;

	update_led(channel0, ++blinker);
	if (has_two_ports(channel0->pdev))
		update_led(&card->channels[1], blinker);

	card->timer.expires = jiffies + HZ / 10;
	add_timer(&card->timer);
}
static void chargeled_update() {
    static int last_charge_status = BATTERY_STATUS_UNKNOWN;
    int charge_status;

    charge_status = get_charging_status();
    if (charge_status <= 0 || charge_status == last_charge_status)
        return;

    last_charge_status = charge_status;
    update_led(charge_status);
}
Example #3
0
// convenience routines for updating the pwm controlled led
void update_led_pwm()
{
  char input;
  char ch;
  int intensity;
  int i;

    //clear out the other LEDs
    update_led(0);

    alt_printf("On a scale of 0 to 9, enter the desired LED intensity\n");
    input = alt_getchar();
    alt_getchar();
    if (input == '0')
        intensity = 0;
    else if (input == '1')
        intensity = 4;
    else if (input == '2')
        intensity = 8;
    else if (input == '3')
        intensity = 16;
    else if (input == '4')
        intensity = 32;
    else if (input == '5')
        intensity = 64;
    else if (input == '6')
        intensity = 128;
    else if (input == '7')
        intensity = 256;
    else if (input == '8')
        intensity = 512;
    else if (input == '9')
        intensity = 1023;
    else {
        intensity = 0;
        alt_printf("INVALID ENTRY");
    }
    alt_printf("Setting PWM value to 0x%x  (Max value is 0x3ff)\n",intensity);
//    while ((ch = alt_getchar()) != '\n' && ch != EOF); // do this to flush the input buffer since fflush(stdin) is not recommended
    IOWR_SIMPLE_PWM(LED_PWM_BASE, intensity);
}
Example #4
0
//state machine of therm type     
//phase 0 : search the current channel and switch to it if apply, add delay, to phase 1, otherwise to phase 2
//phase 1:get the reading and update the display 
//phase 2: move to next channel
uchar therm_state()
{                  
        uchar i;
	if(phase > 2)
	        phase = 0;

	if(phase == 0)
	{                         
	        update_led(1);
		if( (sysdata.type_therm >= PRBTYPE_K) && (sysdata.type_therm <= PRBTYPE_R))
		{              
			scanner_set_channel(ch_to_search+1);	
			dlg_cnt = 6*ONESEC;
			onesec_cnt = 0;
			phase = 1;
			return 0;
		}else{
			rundata.temperature[ch_to_search] = -9999; //invalid data
			phase = 2;
		}
	}
	if(phase == 1)
	{
		rundata.reading[ch_to_search] = pickfrom5();//nav_read();//-sysdata.V0;
                //sprintf(strbuf,"%2d;%f;",ch_to_search+1,rundata.reading[ch_to_search]); //no work
                //prints(strbuf,strlen(strbuf),PORT_PC);
		
		rundata.temperature[ch_to_search] = MValueToTValue(rundata.reading[ch_to_search], sysdata.type_therm);

                //sprintf(strbuf,"%f;\r\n",rundata.temperature[ch_to_search]);
                //prints(strbuf,strlen(strbuf),PORT_PC);
		phase = 2;
	}
	if(phase == 2)
	{
		update_display();
		phase = 0;
	}
	return 1;       //one reading is updated
}
Example #5
0
void main(void)
{                         
   /********************************************************************/
   //               System Initialization
   /********************************************************************/          
   // Initialize MEGA8 PORT
   Init_PORT();   
      // Initialize SPI to communicate with CH453
   CH453_I2C_Init();

   // Initialize Global Variable: 
   // "Init_Vars()" has to be placed after "bReadDataFromEeprom()" because
   Init_Vars();
      
   // Initialize UART, 8 data, 1 stop, no parity. Boardrate is 2400.                   
   UART_Init(); 
      // Timer (Interrupt) initialization
   safesys();
   digi_cprint("88888888",0,8);

                
   init_digi_Led();
   Init_Timers();
   // initialize golbal interrupt.
   #asm("sei")  

    //init the DMM
    nav_command(NAV_INIT);              
    sleepms(200*ONEMS);                                
    navto1v();
    nav_command(NAV_SLOWMODE);
    sleepms(200*ONEMS);
    nav_command(NAV_AFLTON);
    sleepms(200*ONEMS);
                     
    update_led(0);
    
    
    sysdata.R0 = 0;
	 while(1)
	 {
	        if(keycode != KEY_INVALID)
	        {
                        HandleKey(keycode);
                        keycode = KEY_INVALID;
                        continue;
                }
         
		if(dlg_cnt > 1)
		{         
       			dlg_cnt--;
			continue;
		}
                timer_tick();		
		if(IS_THERM_MODE)                    
		{
        	        if(therm_state() == 0)
		                continue;     
                }
		if(IS_BORE_MODE)
		{
	        	if(bore_state() == 0)
		                continue;
		}     
			
                //shift to next channel 
                       
                if(sysdata.chan == CHAN_1)
                       ch_to_search = 0;
                else if(sysdata.chan == CHAN_2)
                       ch_to_search = 1;                                
                else 
                     ch_to_search = 1 - ch_to_search&0x01;                                
        }                      
}
Example #6
0
uchar bore_state()
{
        uchar i;
	if(phase > 5)
	        phase = 0;
        i = sysdata.type_bore;
	if(phase == 0)
	{                               
	        update_led(1);
		if((i <= PRBTYPE_PT1000) && (i >= PRBTYPE_PT100))
		{
			scanner_set_channel(ch_to_search+1);	
			SET_PKTT;
			SET_TORS;                            
                        
			if(i == PRBTYPE_PT100)
			{                       
			        SET_TOPT100;
			        SET_TO1MA;			     
			}
			if(i == PRBTYPE_PT25)
			{
			        SET_TOPT100;
			        SET_TO1MA;
			}
			if(i == PRBTYPE_PT1000)
			{
			        SET_TOP1MA;
       			        SET_TOPT1000;
			}
			dlg_cnt =  ONESEC * sysdata.ktime;
			onesec_cnt = 0;
			if(IS_MODE_KTT)
				phase = 1;
			else
				phase = 2;
       			return 0;
		}else{                           
			rundata.temperature[ch_to_search] = -9999;
			phase = 5;
		}

	}
	if(phase == 1)  //-stdV in ktt mode
	{                                                
		rundata.stdV = mabs(pickfrom5());
		SET_NKTT;
		dlg_cnt =  ONESEC * sysdata.ktime;
		onesec_cnt = 0;
		phase = 2;
		return 0;
	}
	if(phase == 2) //final stdV 
	{
		if(IS_MODE_KTT)
		{          
			rundata.stdV = (rundata.stdV + mabs(pickfrom5()));
			phase = 3;
		}else{                       
			rundata.stdV = mabs(pickfrom5());
			phase = 4;
		}                              
		SET_TORX;     
		
		dlg_cnt = ONESEC * sysdata.ktime;      
		onesec_cnt = 0;
		return 0;	
	}
	if(phase == 3)  //-V on rx in ktt mode
	{                             
		valuep = mabs(pickfrom5());
		SET_PKTT;
		dlg_cnt = ONESEC * sysdata.ktime;
		onesec_cnt = 0;
		phase = 4;
		return 0;	
	}
	if(phase == 4) // final V on rx
	{
		if(IS_MODE_KTT){       
			valuep = (valuep + mabs(pickfrom5()));
/* auto switch voltage range			
			if((valuep > 0.21) && (valuep < 2) && (nav1v == 0))
			{
        		        navto1v();     
			}            
			if((valuep < 0.21) && (valuep > 0.0002) && (nav1v == 1))
			{
			        navto120mv();
			}
*/			
		}else{               
			valuep = mabs(nav_read());                      
/* auto switch voltage range			
			if((valuep > 0.105) && (valuep < 1) && (nav1v == 0))
			{
        		        navto1v();     
			}            
			if((valuep < 0.105) && (valuep > 0.0001) && (nav1v == 1))
			{
			        navto120mv();
			}
*/			
		}
		if(rundata.stdV != 0)
		{                           
                        if(i == PRBTYPE_PT1000)                       
              			rundata.reading[ch_to_search] = valuep*sysdata.Rs2/rundata.stdV - sysdata.R0;
                        else
        			rundata.reading[ch_to_search] = valuep*sysdata.Rs1/rundata.stdV - sysdata.R0;
			if(rundata.reading[ch_to_search] > 0)
			{
                                //sprintf(strbuf,"%2d;%f;",ch_to_search+1,rundata.Rx);
                                //prints(strbuf,strlen(strbuf),PORT_PC);

			        rundata.temperature[ch_to_search] = RValueToTValue(rundata.reading[ch_to_search],i,sysdata.type_bore);
                                rundata.Rx = rundata.reading[ch_to_search];
                                //sprintf(strbuf,"%f;\r\n",rundata.temperature[ch_to_search]);
                                //prints(strbuf,strlen(strbuf),PORT_PC);
			}
		}else{  
		        rundata.temperature[ch_to_search] = -9999;
		}
		phase = 5;
	}
	if(phase == 5) //got one reading
	{
		update_display();//pgmain_handler(MSG_REFRESH);
		phase = 0;
	}                 
	return 1;
}