int main(void) { // Make the watchdog timer cause an interrupt rather than system reset and // use C/256K prescaler. MCUSR &= ~_BV(WDRF); wdt_disable(); WDTCR |= _BV(WDTIF) | _BV(WDP2) | _BV(WDP1) | _BV(WDP0); // Configure all pins as outputs except the temperature input pin and the // TX pin (which is tri-stated until we transmit). DDRB = 0xFF ^ _BV(TEMP_SENSE_INPUT_DIG_PIN) ^ _BV(TX_PIN); // Disable digital input buffer on the analog input pin. DIDR0 |= _BV(TEMP_SENSE_INPUT_DIG_PIN); // Enable interrupts. sei(); while (1) { manchester_union.manchester_packet.node_id = NODE_ID; manchester_union.manchester_packet.seq_no += 1; manchester_union.manchester_packet.reading_type = READING_TYPE_TEMP; manchester_union.manchester_packet.reading = read_temperature(); transmit(); deep_sleep(); } return (1); // should never happen }
int main (void) { save_power(); USART0Init(); buttons_init(); tone_init(); int useless_steps = 0; int state = STATE_GO_OFF; while (1) { if (useless_steps >= 1000) { useless_steps = 0; state = STATE_GO_OFF; } if (state == STATE_GO_OFF) { state = STATE_IS_OFF; USART0SendString(""); USART0BacklightOff(); deep_sleep(); } tick(); if (toggle_state() == 0) { useless_steps = 0; USART0BacklightOn(); write_next_chore(); while (toggle_state() == 0) { tick(); } // Wait for button to be released int seconds = 0; int miliseconds = 0; while (1) { if (toggle_state() == 0) { state = STATE_GO_OFF; notone(); break; } if (timer_state() == 0) { miliseconds = 0; seconds = 0; notone(); } miliseconds++; if (miliseconds >= 1000) { seconds++; miliseconds = 0; } if (seconds == TIMER_LENGTH) { tone(4400); } else if (seconds > 1000) { seconds = (TIMER_LENGTH + 1); } tick(); } } else { useless_steps++; } } }
int sc8825_enter_lowpower(void) { int status, ret = 0; unsigned long flags, time; unsigned int cpu = smp_processor_id(); #ifdef CONFIG_SPRD_PM_DEBUG __raw_writel(0xfdffbfff, SPRD_INTC0_BASE + 0xc);//intc0 __raw_writel(0x02004000, SPRD_INTC0_BASE + 0x8);//intc0 __raw_writel(0xffffffff, SPRD_INTC0_BASE + 0x100c);//intc1 #endif time = get_sys_cnt(); if (!hw_irqs_disabled()) { flags = read_cpsr(); printk("##: Error(%s): IRQ is enabled(%08lx)!\n", "wakelock_suspend", flags); } /*TODO: * we need to known clock status in modem side */ #ifdef FORCE_DISABLE_DSP status = 0; #else #ifdef CONFIG_NKERNEL status = sc8825_get_clock_status(); #else /* * TODO: get clock status in native version, force deep sleep now */ status = 0; #endif #endif if (status & DEVICE_AHB) { /*printk("###### %s, DEVICE_AHB ###\n", __func__ );*/ set_sleep_mode(SLP_MODE_ARM); arm_sleep(); } else if (status & DEVICE_APB) { /*printk("###### %s, DEVICE_APB ###\n", __func__ );*/ set_sleep_mode(SLP_MODE_MCU); mcu_sleep(); } else { /*printk("###### %s, DEEP ###\n", __func__ );*/ set_sleep_mode(SLP_MODE_DEP); gic_save_context( ); scu_save_context(); ret = deep_sleep( ); scu_restore_context(); flush_cache_all(); gic_restore_context( ); gic_cpu_enable(cpu); gic_dist_enable( ); #if 1 void notrace __update_sched_clock(void); __update_sched_clock(); #endif } time_add(get_sys_cnt() - time, ret); return ret; }
int main(int argc, char **argv) { char *x, *me = argv[0]; char *last_msg = "\\c"; errmsg_iam(me); if (argc<2) { help: errmsg_iam(0); carp(Kill_Help); _exit(1); } argv++; x = argv[0]; if (x[0]=='-' && x[1]=='h') goto help; /* -h... --help */ opendevconsole(); /* ignore next signals */ set_sa(SIGQUIT); set_sa(SIGCHLD); set_sa(SIGHUP ); set_sa(SIGTSTP); set_sa(SIGTTIN); set_sa(SIGTTOU); while (argv[0] && argv[0][0]=='-') { int sig=0, cfg_wall=0; char *y = argv[0] + 1; if ((unsigned int)(*y - '0') < 10) { sig = x_atoi(y); goto again; } switch(*y) { case 'v': cfg_verbose++; if (y[1]=='v') cfg_verbose++; break; case 'q': set_sa(SIGINT); break; case 's': chk_opt(argv,x); deep_sleep(x); break; case 'W': ++cfg_wall; case 'M': chk_opt(argv,x); if (x[0] == '%' && x[1] == 0) x = last_msg; else last_msg = x; print_escape(x, cfg_wall); break; case 'E': chk_opt(argv,x); *argv = x; execve(argv[0], argv, environ); carp("Unable to exec: ", argv[0]); _exit(1); default: #ifdef NSVC_SIGNAL_CODED { unsigned char *S, *Sig = (unsigned char *)NSVC_SIGNAL_CODED; for (S=Sig; *S; S += 2) if ((unsigned char)*y == *S) { sig = S[1]; goto again; } } #else #define kk(C,S) case C: sig=S; break kk('t',SIGTERM); kk('a',SIGALRM); kk('p',SIGSTOP); kk('c',SIGCONT); kk('h',SIGHUP); kk('i',SIGINT); kk('k',SIGKILL); #endif goto help; } again: if (sig > 0) { sync(); if (cfg_verbose) msg("Sending signal: ", y); if (kill(-1, sig)) carp("Unable to send signal: ", y); } argv++; } sync(); return 0; }