void SD_task(void) { if(gps_avlb) { if(gps_msg_ready) { gps_msg_ready++; if(sd_avlb) { if(timer1_flag && gpsraw_flag == 2) { timer1_flag++; write_gps_msg(); } else { //if(gpsraw_flag == 0) if(gpsraw_flag == 0 && gps_state == 'A') { new_logfile(); write_gps_head(); write_gps_msg(); timer1_start(); } } } } } }
/* * $logctl(NEW) * $logctl(REFNUMS [ACTIVE|INACTIVE|ALL]) * $logctl(REFNUM log-desc) * $logctl(ADD log-desc [target]) * $logctl(DELETE log-desc [target]) * $logctl(GET <refnum> [LIST]) * $logctl(SET <refnum> [ITEM] [VALUE]) * $logctl(MATCH [pattern]) * $logctl(PMATCH [pattern]) * * [LIST] and [ITEM] are one of the following * REFNUM The refnum for the log (GET only) * NAME The logical name for the log * FILENAME The filename this log writes to * SERVER The server this log associates with (-1 for any) * TARGETS All of the targets for this log * LEVEL The Lastlog Level for this log * REWRITE The rewrite rule for this log * MANGLE The mangle rule for this log * STATUS 1 if log is on, 0 if log is off. * TYPE Either "TARGET", "WINDOW", or "SERVER" */ char *logctl (char *input) { char *refstr; char *listc; int val; Logfile *log; GET_FUNC_ARG(listc, input); if (!my_strnicmp(listc, "NEW", 3)) { log = new_logfile(); RETURN_INT(log->refnum); } else if (!my_strnicmp(listc, "LAST_CREATED", 12)) { RETURN_INT(last_logref); } else if (!my_strnicmp(listc, "REFNUMS", 7)) { char * retval = NULL; int active; GET_FUNC_ARG(refstr, input); if (!my_stricmp(refstr, "ACTIVE")) active = 1; else if (!my_stricmp(refstr, "INACTIVE")) active = 0; else if (!my_stricmp(refstr, "ALL")) active = -1; else RETURN_EMPTY; for (log = logfiles; log; log = log->next) { if (active != -1 && active != log->active) continue; malloc_strcat_word(&retval, space, ltoa(log->refnum), DWORD_NO); } RETURN_MSTR(retval); } else if (!my_strnicmp(listc, "REFNUM", 6)) { GET_FUNC_ARG(refstr, input); if (!(log = get_log_by_desc(refstr))) RETURN_EMPTY; RETURN_INT(log->refnum); } else if (!my_strnicmp(listc, "ADD", 2)) { GET_FUNC_ARG(refstr, input); if (!(log = get_log_by_desc(refstr))) RETURN_EMPTY; logfile_add(log, &input); RETURN_INT(1); } else if (!my_strnicmp(listc, "DELETE", 2)) { GET_FUNC_ARG(refstr, input); if (!(log = get_log_by_desc(refstr))) RETURN_EMPTY; logfile_remove(log, &input); RETURN_INT(1); } else if (!my_strnicmp(listc, "GET", 2)) { GET_FUNC_ARG(refstr, input); if (!(log = get_log_by_desc(refstr))) RETURN_EMPTY; GET_FUNC_ARG(listc, input); if (!my_strnicmp(listc, "REFNUM", 3)) { RETURN_INT(log->refnum); } else if (!my_strnicmp(listc, "NAME", 3)) { RETURN_STR(log->name); } else if (!my_strnicmp(listc, "FILENAME", 3)) { RETURN_STR(log->filename); } else if (!my_strnicmp(listc, "SERVER", 3)) { RETURN_INT(log->servref); } else if (!my_strnicmp(listc, "TARGETS", 3)) { char *ret = logfile_get_targets(log); RETURN_MSTR(ret); } else if (!my_strnicmp(listc, "LEVEL", 3)) { const char *ret = mask_to_str(&log->mask); RETURN_STR(ret); } else if (!my_strnicmp(listc, "REWRITE", 3)) { RETURN_STR(log->rewrite); } else if (!my_strnicmp(listc, "MANGLE", 3)) { RETURN_STR(log->mangle_desc); } else if (!my_strnicmp(listc, "STATUS", 3)) { RETURN_INT(log->active); } else if (!my_strnicmp(listc, "TYPE", 3)) { RETURN_STR(logtype[log->type]); } else if (!my_strnicmp(listc, "ACTIVITY", 1)) { RETURN_INT(log->activity); } } else if (!my_strnicmp(listc, "SET", 1)) { GET_FUNC_ARG(refstr, input); if (!(log = get_log_by_desc(refstr))) RETURN_EMPTY; GET_FUNC_ARG(listc, input); if (!my_strnicmp(listc, "NAME", 3)) { logfile_name(log, &input); RETURN_INT(1); } else if (!my_strnicmp(listc, "FILENAME", 3)) { logfile_filename(log, &input); RETURN_INT(1); } else if (!my_strnicmp(listc, "SERVER", 3)) { logfile_server(log, &input); RETURN_INT(1); } else if (!my_strnicmp(listc, "TARGETS", 3)) { clean_log_targets(log); logfile_add(log, &input); RETURN_INT(1); } else if (!my_strnicmp(listc, "LEVEL", 3)) { logfile_level(log, &input); RETURN_INT(1); } else if (!my_strnicmp(listc, "REWRITE", 3)) { logfile_rewrite(log, &input); RETURN_INT(1); } else if (!my_strnicmp(listc, "MANGLE", 3)) { logfile_mangle(log, &input); RETURN_INT(1); } else if (!my_strnicmp(listc, "STATUS", 3)) { GET_INT_ARG(val, input); if (val) logfile_on(log, &input); else logfile_off(log, &input); RETURN_INT(1); } else if (!my_strnicmp(listc, "TYPE", 3)) { logfile_type(log, &input); RETURN_INT(1); } else if (!my_strnicmp(listc, "ACTIVITY", 1)) { logfile_activity(log, &input); RETURN_INT(1); } } else if (!my_strnicmp(listc, "MATCH", 1)) { RETURN_EMPTY; /* Not implemented for now. */ } else if (!my_strnicmp(listc, "PMATCH", 1)) { RETURN_EMPTY; /* Not implemented for now. */ } else if (!my_strnicmp(listc, "CURRENT", 1)) { RETURN_INT(current_log_refnum); } else RETURN_EMPTY; RETURN_EMPTY; }
static Logfile * logfile_new (Logfile *log, char **args) { return new_logfile(); }
/* * PPRZ-message: ABCxxxxxxxDE A PPRZ_STX (0x99) B LENGTH (A->E) C PPRZ_DATA 0 SENDER_ID 1 MSG_ID 2 MSG_PAYLOAD . DATA (messages.xml) D PPRZ_CHECKSUM_A (sum[B->C]) E PPRZ_CHECKSUM_B (sum[ck_a]) */ void parse_single_byte(unsigned char byte) { switch (parser.state) { case SearchingPPRZ_STX: if (byte == PPRZ_STX) { //printf("Got PPRZ_STX\n"); parser.crc_a = 0; parser.crc_b = 0; parser.counter = 1; parser.state = ParsingLength; } break; case ParsingLength: parser.length = byte; parser.crc_a += byte; parser.crc_b += parser.crc_a; parser.counter++; parser.state = ParsingSenderId; break; case ParsingSenderId: parser.sender_id = byte; parser.crc_a += byte; parser.crc_b += parser.crc_a; parser.counter++; parser.state = ParsingMsgId; break; case ParsingMsgId: parser.msg_id = byte; parser.crc_a += byte; parser.crc_b += parser.crc_a; parser.counter++; parser.state = ParsingMsgPayload; break; case ParsingMsgPayload: parser.payload[parser.counter-4] = byte; parser.crc_a += byte; parser.crc_b += parser.crc_a; parser.counter++; if (parser.counter == parser.length - 2) { parser.state = CheckingCRCA; } break; case CheckingCRCA: //printf("CRCA: %d vs %d\n", byte, parser.crc_a); if (byte == parser.crc_a) { parser.state = CheckingCRCB; } else { parser.state = SearchingPPRZ_STX; } break; case CheckingCRCB: //printf("CRCB: %d vs %d\n", byte, parser.crc_b); if (byte == parser.crc_b && parser.msg_id == 31) { /*printf("MSG ID: %d \t" "SENDER_ID: %d\t" "LEN: %d\t" "SETTING: %d\n", parser.msg_id, parser.sender_id, parser.length, parser.payload[0]);*/ //printf("Request confirmed\n"); /* Check what to do next if the command was received */ if (global_state == WaitingForIndexRequestConfirmation && parser.payload[0] == setting) { global_state = ReadingIndexBlock; index_cnt = 0; } if (global_state == GotIndex && parser.payload[0] == setting) { global_state = Downloading; new_logfile(); index_cnt = 0; } } parser.state = SearchingPPRZ_STX; break; default: /* Should never get here */ break; } }