/* ************************************************** */ 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"); }