void gprs_send_data_log() {
	
	if(gprs_log_buf.head != gprs_log_buf.temp_tail) {
		gps_logging_enabled = 0;	//Disable gps request commands, enabled again in post request callback.
		gprs_log_buf.ready = 0;
	
		char send_string[HTTP_PACKAGE_STRING_LENGTH];
		uint16_t pos = 0;
		log_entry entry;
		char tempVar[15];
		uint8_t i = 0;
		
		//Only for debug:
		if(gprs_log_buf.head > 200) {
			volatile uint8_t testVar = 1;
		}

		memset(send_string, '\0', HTTP_PACKAGE_STRING_LENGTH);	//Clear buffer
	
		json_begin_object(send_string, &pos, !i);
	
		sprintf(tempVar, "%d", gprs_log_buf.data.device);
		json_add_variable(send_string, &pos, "Device", tempVar, 1);
	
		json_add_variable(send_string, &pos, "Entries", '\0', 0);
	
		json_begin_array(send_string, &pos, 1);
	
		while(i < HTTP_PACKAGE_MAX_LOG_ENTRIES && gprs_log_buf.head != gprs_log_buf.temp_tail) {
		
			entry = gprs_buf_temp_pull(&gprs_log_buf);
		
			json_begin_object(send_string, &pos, !i);
		
			sprintf(tempVar, "%d", entry.time);
			json_add_variable(send_string, &pos, "t", tempVar, 1);
		
			sprintf(tempVar, "%.5f", entry.lat);
			json_add_variable(send_string, &pos, "la", tempVar, 0);
		
			sprintf(tempVar, "%.5f", entry.lng);
			json_add_variable(send_string, &pos, "ln", tempVar, 0);
		
			sprintf(tempVar, "%.1f", entry.speed);
			json_add_variable(send_string, &pos, "s", tempVar, 0);
		
			sprintf(tempVar, "%d", entry.cadence);
			json_add_variable(send_string, &pos, "c", tempVar, 0);
		
			sprintf(tempVar, "%d", entry.inclination);
			json_add_variable(send_string, &pos, "i", tempVar, 0);
		
			sprintf(tempVar, "%.1f", entry.g_force);
			json_add_variable(send_string, &pos, "g", tempVar, 0);
		
			sprintf(tempVar, "%d", entry.upload_interval);
			json_add_variable(send_string, &pos, "f", tempVar, 0);
		
			json_close_object(send_string, &pos);
		
			i++;
		}
	
		json_close_array(send_string, &pos);
		json_close_object(send_string, &pos);
	
		i = 0;
	
		// ONLY FOR DEBUG USE:
		char *completeString;
		volatile uint16_t len;
		completeString = &send_string;
		len = strlen(completeString);
	
		// TODO: Send post request to server:
		command cmd;
		char cmd_name[25];
	
		sprintf(cmd_name, "AT+HTTPDATA=%d,30000", strlen(send_string));
		cmd.cmd = cmd_name;
		cmd.expected_response = "DOWNLOAD";
		cmd.callback_enabled = 0;
	
		sim808_send_command(cmd);
		delay_ms(200);
		//if(sim808_parse_response_wait(SIM808_RECEIVE_DELAY_NORMAL)) {
			printf(send_string);
			last_command.expected_response = "OK";
			last_command.callback_enabled = 1;
			last_command.response_cb = SIM808_response_gprs_send_post_request;
			//sim808_parse_response_wait(SIM808_RECEIVE_DELAY_NORMAL);
		//}		
	}
}
Beispiel #2
0
void json_test(int argc, char **argv)
{
	int num;
	int fmt;
	char text[] =
	    "{\n     \"precision\": \"zip\",\n       \"Latitude\":  37668,\n       \"Longitude\": -12259,\n     \"Address\":   \"\",\n  \"City\":      \"SAN FRANCISCO\",\n     \"State\":     \"CA\",\n        \"Zip\":       \"94107\",\n     \"Country\":   \"US\"\n                                                                                                    }";
	char complex_obj[] =
	    "{ \"glossary\": { \"title\": \"example glossary\", \"GlossDiv\": { \"title\": \"S\", 		\"GlossList\": { \"GlossEntry\": { \"ID\": \"SGML\", \"SortAs\": \"SGML\",\"GlossTerm\": \"Standard Generalized Markup Language\", \"Acronym\": \"SGML\", 	\"Abbrev\": \"ISO 8879:1986\", 	\"GlossDef\": { \"para\": \"language\",	\"GlossSeeAlso\": \"XML\" },	\"GlossSee\": \"markup\"  } } } } }";

	debug("#### json_parser ####\n");

	json_object_init(&tmp, text);

	if (!json_get_val_str(&tmp, "Country", str, MAX_JSON_STR_LEN)) {
		if (!strcmp(str, "US")) {
			debug("***Json_parser ---str_get match\n");
		} else {
			debug("***Err ---str_get mismatch\n");
			goto ERROR;
		}
	} else {
		debug("***Err ---str_get failed\n");
		goto ERROR;
	}

	if (!json_get_val_int(&tmp, "Longitude", &num)) {
		if (num == -12259) {
			debug("***Json_parser ---int_get match\n");
		} else {
			debug("***Err ---int_get mismatch\n");
			goto ERROR;
		}
	} else {
		debug("***Err ---int_get failed\n");
		goto ERROR;
	}

	fmt = 1;
	debug("***Json_parser ---Simple Set Example\n");
	json_str_init(&jstr, tmpstr, sizeof(tmpstr), fmt);
	json_start_object(&jstr);
	json_set_val_str(&jstr, "name", "John Galt");
	json_set_val_int(&jstr, "age", 29);
	json_set_val_str(&jstr, "numberstr", "123");
	json_close_object(&jstr);
	debug("The JSON String is :%s:\n", jstr.buff);

	debug("***Json_parser --- Complex object Set Example\n");
	json_str_init(&jstr_c, tmpstr, sizeof(tmpstr), fmt);
	json_start_object(&jstr_c);
	json_push_object(&jstr_c, "menu");
	json_set_val_str(&jstr_c, "pictures", "tmp");

	json_push_object(&jstr_c, "Image");
	json_set_val_str(&jstr_c, "name", "sun");
	json_set_val_int(&jstr_c, "length", 1000);
	json_set_val_str(&jstr_c, "size", "1600pi");

	json_pop_object(&jstr_c);	/* Close Image */

	json_push_object(&jstr_c, "text");
	json_set_val_str(&jstr_c, "style", "bold");
	json_set_val_str(&jstr_c, "alignment", "center");
	json_set_val_str(&jstr_c, "name", "text1");

	json_pop_object(&jstr_c);	/* Close text */
	json_set_val_str(&jstr_c, "object", "close");
	json_pop_object(&jstr_c);	/* Close menu */
	json_close_object(&jstr_c);	/* Close main */

	debug("The JSON String is *%s*\n", jstr_c.buff);

	struct json_object obj;
	json_object_init(&obj, jstr_c.buff);
	if (!json_get_composite_object(&obj, "text")) {
		if (!json_get_val_int(&obj, "length", &num))
			debug("val is %d \n", num);
		else
			debug("***Json_parser ---passed, no such member\n");

		if (!json_get_val_str(&obj, "style", str, MAX_JSON_STR_LEN)) {
			if (!strcmp(str, "bold")) {
				debug
				    ("***Json_parser ---composite_str_get match\n");
				debug("member->style:val->%s\n", str);
			} else {
				debug("***Err ---composite_str_get mismatch\n");
				goto ERROR;
			}
		} else {
			debug("***Err ---composite_str_get failed\n");
			goto ERROR;
		}

	} else {
		debug("***Err ---get_object_offsets failed\n");
		goto ERROR;
	}

	json_release_composite_object(&obj);

	json_object_init(&obj, complex_obj);
	if (!json_get_composite_object(&obj, "GlossEntry")) {
		if (!json_get_val_str(&obj, "GlossSee", str, 64)) {
			if (!strcmp(str, "markup")) {
				debug
				    ("***Json_parser ---composite_str_get match\n");
				debug("member->GlossEntry:val->%s\n", str);
			} else {
				debug("***Err ---composite_str_get mismatch\n");
				goto ERROR;
			}
		} else {
			debug("***Err ---composite_str_get failed\n");
			goto ERROR;
		}
	} else {
		debug("***Err ---get_object_offsets failed\n");
		goto ERROR;
	}

	json_release_composite_object(&obj);
	goto SUCCESS;
ERROR:
	wmprintf("Error");
SUCCESS:
	wmprintf("Success");
}