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); }
// 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); }
//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 }
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; } }
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; }