Esempio n. 1
0
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);
			}
		}
	}
}
Esempio n. 2
0
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);
}