Ejemplo n.º 1
0
void
process_block(
        job_t *job) {
    const uint8_t *header_begin = job->header_begin;
    const uint8_t *header_end = job->header_end;
    const uint8_t *body_begin = job->body_begin;
    const uint8_t *body_end = job->body_end;
    const lookup_t *lookup = job->lookup;
    pthread_mutex_t *io_mutex = job->io_mutex;
    pthread_cond_t *condition = &job->condition;
    uint8_t *buffer = job->buffer;

    size_t size = reverse_complement(
            body_begin, body_end,
            lookup,
            buffer);

    pthread_mutex_lock(io_mutex);
    if (job->prev_job) {
        if (!job->prev_job->finished) {
            pthread_cond_wait(
                    &job->prev_job->condition, io_mutex);
        }
    }

    if (header_begin && header_end) {
        persistent_write(
                STDOUT, header_begin, header_end - header_begin);
    }
    persistent_write(STDOUT, buffer, size);
    job->finished = 1;
    pthread_cond_signal(condition);
    pthread_mutex_unlock(io_mutex);
}
Ejemplo n.º 2
0
static void setting_save_to_storage(e_settings_available setting)
{

    uint16_t crc;
    uint8_t  byte = 0U;
    uint16_t addr = PERSISTENT_DATA_START + ((uint16_t)setting * 6U);
    bool to_write = false;

    to_write |= setting_has_property(setting, SETTING_STATE_CHANGED);
    to_write |= (setting_has_property(setting, SETTING_STATE_VALID) == false) ? true : false;

    if (to_write == true)
    {

        /* changed, save it and compute the CRC value */
        persistent_write(addr++, setting_list[setting].u_setting_value.byte_array[byte++]);
        persistent_write(addr++, setting_list[setting].u_setting_value.byte_array[byte++]);
        persistent_write(addr++, setting_list[setting].u_setting_value.byte_array[byte++]);
        persistent_write(addr++, setting_list[setting].u_setting_value.byte_array[byte++]);

        /* Compute the CRC */
        crc = setting_compute_crc(setting);

        /* write the CRC */
        persistent_write(addr++, crc & 0xFF);
        persistent_write(addr++, (crc >> 8) & 0xFF);
    }
Ejemplo n.º 3
0
void
persistent_write (url dir, string key, string val,
                  url file, unsigned int code)
{
  string v= local_prefix (dir) * key;
  if (is_directory (file)) {
    persistent_update_key (dir, key, file, code);
    persistent_write (dir, key, val,
                      persistent_file [v], persistent_hash [v]);
  }
  else {
    hashmap<string,string> map ("");
    if (is_regular (file))
      map= persistent_read_map (file);
    map (key)= val;
    if (code == 0 || (N (map) <= MAX_INNER && total_size (map) <= MAX_SIZE))
      persistent_write_map (file, map);
    else {
      remove (file);
      mkdir (file);
      iterator<string> it= iterate (map);
      while (it->busy ()) {
        string skey= it->next ();
        string sval= map [skey];
        string sv  = local_prefix (dir) * skey;
        unsigned int scode= persistent_hash [sv];
        persistent_write (dir, skey, sval, file, scode);
      }
    }
  }
}
Ejemplo n.º 4
0
static void
loaded_msg_write(loaded_msg_t *lm)
{
  char *data = htsmsg_json_serialize_to_str(lm->lm_msg, 1);
  persistent_write("settings", lm->lm_key, data, strlen(data));
  free(data);
}
Ejemplo n.º 5
0
void
persistent_set (url dir, string key, string val) {
  string v= local_prefix (dir) * key;
  persistent_init_key (dir, key);
  persistent_write (dir, key, val, persistent_file [v], persistent_hash [v]);
  persistent_has   (v)= true;
  persistent_cache (v)= val;
}
Ejemplo n.º 6
0
/** store settings marked as persistent to flash
 * @return 0 on success
 */
int32_t settings_store(void) {
#if USE_PERSISTENT_SETTINGS
  if (settings_store_flag) {
    /* from generated/settings.h */
    persistent_settings_store();
    if (!persistent_write((uint32_t)&pers_settings, sizeof(struct PersistentSettings))) {
      /* persistent write was successful */
      settings_store_flag = TRUE;
      return 0;
    }
  }
#endif
  settings_store_flag = FALSE;
  return -1;
}
Ejemplo n.º 7
0
void settings_store(void) {
#if USE_PERSISTENT_SETTINGS
  persistent_settings_store();
  persistent_write((uint32_t)&pers_settings, sizeof(struct PersistentSettings));
#endif
}