int main(int argc, char **argv) { struct sigaction action; int i; action.sa_handler = signal_handler; sigaction(SIGABRT, &action, NULL); sigaction(SIGTERM, &action, NULL); for(i = 1; i < argc; i++){ if(!strcmp(argv[i], "-f")){ global_force = 1; }else if(!strcmp(argv[i], "-d")){ global_debug = 1; }else{ fprintf(stderr, "Usage: %s [-f] [-d]\n" " -f: Don't prompt for lsof and strace\n" " -d: Debug mode\n" , *argv); return 1; } } extra_init(); gui_init(); proclist = proc_init(); gui_run(proclist); gui_term(); proc_cleanup(proclist); return 0; }
/*f test_entry_point */ extern int test_entry_point() { int i, j, k, l; int error; int length; char buffer[256]; const t_command *cmd; t_command_chain cmd_chain, *chain; int argc; unsigned int args[MAX_ARGS]; #ifdef LINUX static int heap[65536]; fprintf(stderr,"256kB heap at %p\n",heap); #endif cmd_chain.cmds = monitor_cmds; cmd_chain.next = (t_command_chain *)0; chain_extra_cmds( &cmd_chain ); uart_init(); extra_init(); while (1) { /*b Display the prompt */ uart_tx_string( "\r\nOK > "); /*b Wait for incoming string, echoing each byte as it comes */ length = 0; while (1) { if (uart_rx_poll()) { char c; c = uart_rx_byte(); if (c<32) { uart_tx_nl(); break; } if (c==8) { if (length>0) { length--; uart_tx(c); } } if (length<(int)(sizeof(buffer))-1) { buffer[length++] = c; uart_tx(c); } } } buffer[length]=0; /*b Parse the string */ for (i=0; buffer[i]==' '; i++); cmd = (t_command *)0; for (chain = &cmd_chain; (!cmd) && chain; chain=chain->next) { for (j=0; (!cmd) && (chain->cmds[j].name); j++) { //fprintf(stderr,"Compare buffer %s with command %s\n", buffer, chain->cmds[j].name ); l = 1; for (k=0; chain->cmds[j].name[k]; k++) { if (chain->cmds[j].name[k] != buffer[i+k]) { l = 0; break; } } if (l) { cmd = &(chain->cmds[j]); break; } } } argc=0; if (cmd) { while (buffer[i] && (argc<MAX_ARGS)) { for (; (buffer[i]!=' ') && (buffer[i]); i++); // skip to white space for (; (buffer[i]==' ') && (buffer[i]); i++); // skip past white space if (buffer[i]) { args[argc] = 0; while ((buffer[i]!=' ') && (buffer[i])) { args[argc] = (args[argc]<<4) | ((buffer[i]>'9') ? ((buffer[i]&0xf)+9) : (buffer[i]&0xf)); i++; } argc++; } } } /*b Obey the string */ error = 1; if (cmd) { // fprintf(stderr,"Command %d\n", command); error = cmd->fn( argc, args ); } if (error) { uart_tx_string_nl( "\n\rError" ); } } }
int main() { uint8_t i = 0; uint8_t n = 0; uint8_t pos; char strbuf[64]; char timebuf[16]; uint8_t seconds_last = seconds; uint8_t minutes_last = minutes; unsigned int ch; // FILE uart_stream = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW); // stdin = stdout = &uart_stream; // always calibrate the internal RC oscillator using external 32Khz crystal do_calibration(); // OSCCAL = 55; rtc_init(); key_init(); extra_init(); ht1632_setup(1); // use ram #ifdef USE_UARTSYNC uart_init(); #else #ifdef USE_V0 uart_init( UART_BAUD_SELECT(9600,F_CPU) ); #else // uart_init( UART_BAUD_SELECT(38400,F_CPU) ); uart_init( UART_BAUD_SELECT(9600,F_CPU) ); #endif #endif sei(); // turn on interrupt handler // strncpy(strbuf, "ready: ", 7); // sprintf(&strbuf[7], "%d", OSCCAL); // ht1632_scrollstr(strbuf, 10, 10); int start = 5; ht1632_putchar(start,1,'L'); ht1632_putchar(start+6,1,'E'); ht1632_putchar(start+12,1,'D'); ht1632_putchar(start+18,1,'I'); delay_ms(5000); set_time(timebuf); disp_time(timebuf); // play tone to indicate we started play_tone(A5, 4); _delay_ms(5); play_tone(A5, 4); _delay_ms(10); while(1) { n = term_recvstr(BUF, BUFSIZE); if(n<0) { term_sendstr(PSTR("error occurred on uart\r\n")); } if(n>0) { MODE = term_check_mode(BUF,n); switch(MODE) { case MODE_TIMESET: mode_timeset(BUF,n); break; case MODE_DRAW: mode_draw(); break; case MODE_INVALID: default: mode_msg(BUF,n); break; } // just to be paranoid stop_led_sync_timer(); // hack to force time display minutes_last = minutes - 1; } if(last_button1state == 1) { demo_life(); // if we come out of demo_life, we show time set_time(timebuf); disp_time(timebuf); } if(seconds_last != seconds || last_buttonstate & BT_PRESS) { seconds_last = seconds; if(minutes_last != minutes) { minutes_last = minutes; set_time(timebuf); disp_time(timebuf); } disp_bindots(); } // fast cycle if(last_buttonstate & BT_HOLD) { while(!(PINC & (1<<BUTTON2))) { minutes++; update_datetime(1); set_time(timebuf); disp_time(timebuf); minutes_last = minutes; _delay_ms(20); } intcount = 0; } // while ((ASSR & (1<<OCR2BUB)) != 0) {} } }