Ejemplo n.º 1
0
/**
 * Draw the GUI screen header
 *
 * @param item  unused
 * @param value text to draw at start of header (CPM usually)
 *
 */
void update_item_head(screen_item &item,const void *value) {

  uint16_t new_header_color;
  if(system_geiger->is_cpm_valid()) new_header_color = HEADER_COLOR_NORMAL;
                               else new_header_color = HEADER_COLOR_CPMINVALID;

  if(new_header_color != header_color) {
    draw_text(0,0,"                ",new_header_color);
  }
  header_color = new_header_color;

  int len = strlen((char *) value);
  char v[TEMP_STR_LEN];
  strcpy(v,(char *) value);
  for(int n=len;(n<6) && (n<(TEMP_STR_LEN-1));n++) {
    v[n  ] = ' ';
    v[n+1]=0;
  }
  if(len > 6) v[6]=0;

  draw_text(0,0,v,header_color);//HEADER_COLOR);

  // a hack!
  render_battery(0,128-24,power_battery_level(),power_charging());
    

  uint8_t hours,min,sec,day,month;
  uint16_t year;
  realtime_getdate_local(hours,min,sec,day,month,year);
  month+=1;
  year+=1900;
  if(year >= 2000) {year-=2000;} else
  if(year <  2000) {year-=1900;}

  char time[TEMP_STR_LEN];
  char date[TEMP_STR_LEN];
  sprintf(time,"%02u:%02u:%02u",hours,min,sec);
  sprintf(date,"%02u/%02u/%02u",month,day,year);
  if(year == 0) { sprintf(date,"%02u/%02u/00",month,day); }

  // pad out time and date
  int tlen = strlen(time);
  for(int n=tlen;(n<8) && (n<(TEMP_STR_LEN-1));n++) {
    time[n  ] = ' ';
    time[n+1]=0;
  }

  int dlen = strlen(date);
  for(int n=dlen;(n<8) && (n<(TEMP_STR_LEN-1));n++) {
    date[n  ] = ' ';
    date[n+1]=0;
  }

  display_draw_tinytext(128-75,2,time,header_color);//HEADER_COLOR);
  display_draw_tinytext(128-75,9,date,header_color);//HEADER_COLOR);
//  display_draw_tinytext(0,128-5,OS100VERSION,FOREGROUND_COLOR);
}
Ejemplo n.º 2
0
/**
 * Displays battery level on OLED for 100 seconds,
 * updates once per second
 */
void cmd_batinfodisp(char *line) {
  for(int n=0;n<100;n++) {
    int bat = power_battery_level();
    char s[20];
    sprintf(s,"%d   ",bat);

    display_draw_text(0,0,s,0);
    delay_us(1000000);
  }
}
Ejemplo n.º 3
0
int main(void) {


    Geiger g;
    power_initialise();
    if(power_battery_level() < 1) {
      power_standby();
    }

    flashstorage_initialise();
    buzzer_initialise();
    realtime_initialise();
    g.initialise();

    uint8_t *private_key = ((uint8_t *) &_binary___binary_data_private_key_data_start);
    if(private_key[0] != 0) delay_us(1000);

    delay_us(10000);  // can be removed?

    #ifndef DISABLE_ACCEL
    accel_init();
    #endif

    Controller c(g);
    switch_initialise();

    // if we woke up on an alarm, we're going to be sending the system back.
    #ifndef NEVERSLEEP
    if(power_get_wakeup_source() == WAKEUP_RTC) {
      c.m_sleeping = true;
    } else {
      buzzer_nonblocking_buzz(0.05);
      display_initialise();
      const char *devicetag = flashstorage_keyval_get("DEVICETAG");
      char revtext[10];
      sprintf(revtext,"VERSION: %s ",OS100VERSION);
      display_splashscreen(devicetag,revtext);
      delay_us(3000000);
      display_clear(0);
    }
    #endif
    #ifdef NEVERSLEEP
      buzzer_nonblocking_buzz(0.05);
      display_initialise();
    #endif


    GUI m_gui(c);
    bool full = flashstorage_log_isfull();
    if((full == true) && (c.m_sleeping == false)) {
      m_gui.show_dialog("Flash Log","is full",0,0,0);
    }

    c.set_gui(m_gui);
    UserInput  u(m_gui);
    u.initialise();
    serial_initialise();
  
    int8_t utcoffsetmins_n = 0;
    const char *utcoffsetmins = flashstorage_keyval_get("UTCOFFSETMINS");
    if(utcoffsetmins != 0) {
      unsigned int c;
      sscanf(utcoffsetmins, "%u", &c);
      utcoffsetmins_n = c;

      realtime_setutcoffset_mins(utcoffsetmins_n);
    }


    // Need to refactor out stored settings
    if(c.m_sleeping == false) {   
      const char *sbright = flashstorage_keyval_get("BRIGHTNESS");
      if(sbright != 0) {
        unsigned int c;
        sscanf(sbright, "%u", &c);
        display_set_brightness(c);
      }
 
      const char *sbeep = flashstorage_keyval_get("GEIGERBEEP");
      if(sbeep != 0) {
        if(strcmp(sbeep,"true") == 0) { g.set_beep(true); tick_item("Geiger Beep",true); }
                                 else g.set_beep(false);
      }

      const char *scpmcps = flashstorage_keyval_get("CPMCPSAUTO");
      if(scpmcps != 0) {
        if(strcmp(scpmcps,"true") == 0) { c.m_cpm_cps_switch = true; tick_item("CPM/CPS Auto",true); }
      }

      const char *language = flashstorage_keyval_get("LANGUAGE");
      if(language != 0) {
        if(strcmp(language,"English" ) == 0) { m_gui.set_language(LANGUAGE_ENGLISH);  tick_item("English"  ,true); } else
        if(strcmp(language,"Japanese") == 0) { m_gui.set_language(LANGUAGE_JAPANESE); tick_item("Japanese" ,true); }
      } else {
        m_gui.set_language(LANGUAGE_ENGLISH);
        tick_item("English",true); 
      }

      const char *svrem = flashstorage_keyval_get("SVREM");
      if(strcmp(svrem,"REM") == 0) { tick_item("Roentgen",true); }
                              else { tick_item("Sievert",true);}
    }


    m_gui.jump_to_screen(1);
    m_gui.push_stack(0,1);
    for(;;) {
      if(power_battery_level() < 1) {
        power_standby();
      }

      //display_draw_text(0,110,"preupdate",0);
      c.update();
      //display_draw_text(0,110,"prerender",0);
      m_gui.render();

      //display_draw_text(0,110,"preserial",0);
      serial_eventloop();

      //display_draw_text(0,110,"preserial",0);
      // It might be a good idea to move the following code to Controller.
      // Hack to check that captouch is ok, and reset it if not.
      bool c = cap_check();
      if(c == false) {
        display_draw_text(0,90,"CAPFAIL",0);
        cap_init(); 
      }

      // Screen lock code
      uint32_t release1_time = cap_last_press(KEY_BACK);
      uint32_t   press1_time = cap_last_release(KEY_BACK);
      uint32_t release2_time = cap_last_press(KEY_SELECT);
      uint32_t   press2_time = cap_last_release(KEY_SELECT);
      uint32_t current_time = realtime_get_unixtime();
      if((release1_time != 0) &&
         (release2_time != 0) &&
         ((current_time-press1_time) > 3) &&
         ((current_time-press2_time) > 3) &&
         cap_ispressed(KEY_BACK  ) &&
         cap_ispressed(KEY_SELECT)) {
        system_gui->toggle_screen_lock();
        cap_clear_press();
      }

      power_wfi();
    }

    // should never get here
    for(int n=0;n<60;n++) {
      delay_us(100000);
      buzzer_blocking_buzz(1000);
    }
    return 0;
}