Example #1
0
/* ************************************************** */
int init(call_t *c, void *params) {
    struct entitydata *entitydata = malloc(sizeof(struct entitydata));
    param_t *param;
    double frequency = 868;

    /* default values */
    entitydata->pathloss   = 2.0;
    entitydata->deviation  = 4.0;
    entitydata->dist0      = 1.0;
    entitydata->last_rxdBm = 9999;
    entitydata->Pr0        = 0.0;

    /* get parameters */
    das_init_traverse(params);
    while ((param = (param_t *) das_traverse(params)) != NULL) {
        if (!strcmp(param->key, "pathloss")) {
            if (get_param_distance(param->value, &(entitydata->pathloss))) {
                goto error;
            }
        }
        if (!strcmp(param->key, "frequency_MHz")) {
            if (get_param_double(param->value, &(frequency))) {
                goto error;
            }
        }
        if (!strcmp(param->key, "deviation")) {
            if (get_param_double(param->value, &(entitydata->deviation))) {
                goto error;
            }
        }
        if (!strcmp(param->key, "dist0")) {
            if (get_param_double(param->value, &(entitydata->dist0))) {
                goto error;
            }
        }
    }
    
    /* update factor */
    entitydata->factor = 300 / (4 * M_PI * frequency);

    set_entity_private_data(c, entitydata);
    return 0;

 error:
    free(entitydata);
    return -1;
}
/* ************************************************** */
int init(call_t *c, void *params) {
    struct entitydata *entitydata = malloc(sizeof(struct entitydata));
    param_t *param;
    double frequency = 868;

    /* default values */
    entitydata->ht          = 1;
    entitydata->hr          = 1;
    entitydata->pathloss    = 2.0;
    entitydata->deviation   = 4.0;
    entitydata->dist0       = 1.0;
    entitydata->last_rxdBm  = 9999;
    entitydata->Pr0         = 0.0;
    entitydata->propagation = FREESPACE;
    entitydata->m           = 1.0;
    entitydata->period      = 0;      // coorelation time
    /* get parameters */
    das_init_traverse(params);
    while ((param = (param_t *) das_traverse(params)) != NULL) {
        if (!strcmp(param->key, "propagation")) {
	  if (!strcmp(param->value, "freespace")) {
	      entitydata->propagation = FREESPACE;
	  }
	  else if (!strcmp(param->value, "tworayground")) {
	      entitydata->propagation = TWORAYGROUND;
	  }
	  else if (!strcmp(param->value, "logdistance")) {
	      entitydata->propagation = LOGDISTANCE;
	  }
	  else if (!strcmp(param->value, "shadowing")) {
	      entitydata->propagation = LOGNORMAL;
	  }
	  else {
	      fprintf(stderr,"\n[nakagami_fading] Unknown propagation type (%s) !\n", param->value);
	      fprintf(stderr,"[nakagami_fading] Possible propagation models are: freespace, tworayground, logdistance and shadowing\n\n");
	      goto error;
	  }
        }
        if (!strcmp(param->key, "pathloss")) {
            if (get_param_distance(param->value, &(entitydata->pathloss))) {
                goto error;
            }
        }
        if (!strcmp(param->key, "frequency_MHz")) {
            if (get_param_double(param->value, &(frequency))) {
                goto error;
            }
        }
        if (!strcmp(param->key, "deviation")) {
            if (get_param_double(param->value, &(entitydata->deviation))) {
                goto error;
            }
        }
        if (!strcmp(param->key, "dist0")) {
            if (get_param_double(param->value, &(entitydata->dist0))) {
                goto error;
            }
        }
	if (!strcmp(param->key, "m")) {
            if (get_param_double(param->value, &(entitydata->m))) {
                goto error;
            }
        }
    }

    /* update factor */
    entitydata->factor = 300 / (4 * M_PI * frequency);
    entitydata->crossover_distance = entitydata->ht * entitydata->hr / entitydata->factor;

    set_entity_private_data(c, entitydata);
    return 0;

 error:
    free(entitydata);
    return -1;
	printf("Parameters for nakagmi-m model are error.\n");
}