int main(void) { char c; uint8_t i; for (i = 0; i < 8; i++) msg.b[i] = i + 3; can_init(); DDRB = _BV(LED_PIN); uart_init(9600); while (1) { c = uart_getchar(); if (buffer_append(&buffer, c)) { buffer_split(&buffer); if (strncmp(buffer.b + 3, "GLL", 3) == 0) { msg.l[0] = dmmtoint(buffer.f[0], buffer.f[1]); msg.l[1] = dmmtoint(buffer.f[2], buffer.f[3]); can_send(0x201, msg.b, 8); } else if (strncmp(buffer.b + 3, "RMC", 3) == 0) { msg.l[0] = dmmtoint(buffer.f[2], buffer.f[3]); msg.l[1] = dmmtoint(buffer.f[4], buffer.f[5]); can_send(0x201, msg.b, 8); } else if (strncmp(buffer.b + 3, "HDT", 3) == 0) { msg.s[0] = atof(buffer.f[0]) * 100; can_send(0x202, msg.b, 2); } else if (strncmp(buffer.b + 3, "ROT", 3) == 0) { msg.s[0] = atof(buffer.f[0]) * 100; can_send(0x203, msg.b, 2); } else if (strncmp(buffer.b + 3, "VTG", 3) == 0) { msg.us[0] = atof(buffer.f[0]) * 100; msg.us[1] = atof(buffer.f[4]) * 100; if (*buffer.f[5] == 'M') msg.us[2] = 1000; else msg.us[2] = 1852; can_send(0x204, msg.b, 6); } else if (strncmp(buffer.b + 3, "DBT", 3) == 0) { msg.s[0] = atof(buffer.f[2]) * 100; can_send(0x205, msg.b, 2); } else if (strncmp(buffer.b + 3, "VBW", 3) == 0) { msg.s[0] = atof(buffer.f[0]) * 100; msg.s[1] = atof(buffer.f[1]) * 100; can_send(0x206, msg.b, 4); } else if (strncmp(buffer.b + 3, "MWV", 3) == 0) { msg.us[0] = atof(buffer.f[0]) * 100; msg.us[1] = atof(buffer.f[2]) * 100; if (*buffer.f[3] == 'M') msg.us[2] = 1000; else msg.us[2] = 1852; can_send(0x208, msg.b, 6); } } } }
int agent_store_erroneous_container(worker_t *worker, GError **error) { GError *error_local = NULL; gchar ns_name[LIMIT_LENGTH_NSNAME], broken_element[2048], **tokens; request_t *req = NULL; namespace_data_t *ns_data = NULL; TRACE_POSITION(); memset(ns_name, 0x00, sizeof(ns_name)); memset(broken_element, 0x00, sizeof(broken_element)); if (!flag_manage_broken) return __respond_message(worker, 0, "Broken elements not managed", error); /*extract the fields packed in the request's parameter*/ req = (request_t*)worker->data.session; tokens = buffer_split( req->arg, req->arg_size, ":", 2); if (!tokens) { GSETERROR(&error_local, "Invalid format (0)"); return 0; } else if (!tokens[0] || !tokens[1]) { g_strfreev(tokens); return __respond_message(worker, 0, "Invalid REQUEST format", error); } g_strlcpy(ns_name, tokens[0], sizeof(ns_name)-1); g_strlcpy(broken_element, tokens[1], sizeof(broken_element)-1); g_strfreev(tokens); tokens = NULL; DEBUG("[NS=%s] broken element received [%s]", ns_name, broken_element); /* Get an initiated namespace data */ ns_data = get_namespace(ns_name, NULL); if (!ns_data || !ns_data->configured) return __respond_message(worker, 0, "NAMESPACE not found/ready", error); if (!broken_holder_check_element_format( ns_data->conscience->broken_elements, broken_element)) return __respond_message(worker, 0, "Invalid ELEMENT format", error); /*Element seems OK, keep it*/ ns_data->list_broken = g_slist_prepend(ns_data->list_broken, g_strdup(broken_element)); return __respond_message(worker, 1, "OK", error); }