bool DTVConfParser::ParseConfQAM(const QStringList &tokens) { DTVChannelInfo chan; DTVMultiplex mux; QStringList::const_iterator it = tokens.begin(); PARSE_SKIP(unknown); PARSE_UINT(mux.frequency); PARSE_CONF(mux.inversion); PARSE_UINT(mux.symbolrate); PARSE_CONF(mux.fec); PARSE_CONF(mux.modulation); PARSE_SKIP(unknown); PARSE_SKIP(unknown); PARSE_UINT(chan.serviceid); AddChannel(mux, chan); return true; }
int8_t sms_process_memory_message(int8_t index) { int t = 0, len = 0; char *token; char *msg = getSMSBufferHelper(); char state[16]; char ok[8]; char phoneNumber[32]; char *phone; char answer = 0; uart_txf("+CMGR=%d", index); int8_t uart_state = uart_getTransactionState(); if (uart_state != UART_SUCCESS) return uart_state; PARSE_FINDSTR_RET(token, COMMAND_RESULT_CMGR, UART_FAILED); PARSE_FIRSTSTRING(token, state, sizeof(state), ",\n", UART_FAILED); PARSE_NEXTSTRING(token, phoneNumber, sizeof(phoneNumber), ",\n", UART_FAILED); len = strlen(phoneNumber); for (t = 0; t < len; t++) if (phoneNumber[t] == '\"') phoneNumber[t] = 0; PARSE_SKIP(token, "\n", UART_FAILED); PARSE_NEXTSTRING(token, msg, MAX_SMS_SIZE, "\n", UART_FAILED); // Jump first \n to get the OK PARSE_SKIP(token, "\n", UART_FAILED); ok[0] = 0; PARSE_NEXTSTRING(token, ok, sizeof(ok), "\n", UART_FAILED); if (ok[0] != 'O' || ok[1] != 'K') return UART_FAILED; phone = &phoneNumber[1]; switch (msg[0]) { case '1': sms_send_data_request(phone); // Send the phone without the \" break; case 'R': case '2': sms_send_message_number(phone, "Rebooting..."); delallmsg(); for (t = 0; t < 10; t++) { lcd_printf(LINEC, "REBOOT DEVICE"); lcd_printf(LINE2, " *** %d *** ", (10 - t)); lcd_progress_wait(1000); } //reset the board by issuing a SW BOR system_reboot("NET_COMMAND"); return UART_SUCCESS; case 'E': events_send_data(phone); break; case 'C': config_send_configuration(phone); break; case 'U': event_force_event_by_id(EVT_SUBSAMPLE_TEMP, 5); event_force_event_by_id(EVT_SAVE_SAMPLE_TEMP, 10); event_force_event_by_id(EVT_UPLOAD_SAMPLES, 15); answer = 1; break; case 'A': state_alarm_on("SMS_TRIGGER"); answer = 1; break; default: if (msg[0] != '$') return UART_SUCCESS; if (config_parse_configuration(msg) == UART_SUCCESS) answer = 1; else { sms_send_message_number(phone, "FAILED"); return UART_SUCCESS; } break; } if (answer) sms_send_message_number(phone, "ACK"); return UART_SUCCESS; }
bool DTVConfParser::ParseVDR(const QStringList &tokens, int channelNo) { DTVChannelInfo chan; DTVMultiplex mux; QStringList::const_iterator it = tokens.begin(); chan.lcn = channelNo; // BBC ONE:754166:I999B8C34D34M16T2G32Y0:T:27500:600:601, 602:0:0:4168:0:0:0 PARSE_SKIP(unknown); PARSE_UINT_1000(mux.frequency); if (it == tokens.end()) return false; QString params = (*it++); while (!params.isEmpty()) { QString ori = params; int s = (int) (params.toAscii().constData()[0]); params = params.mid(1); switch (s) { case 'I': mux.inversion.ParseVDR(params); break; case 'B': mux.bandwidth.ParseVDR(params); break; case 'C': mux.hp_code_rate.ParseVDR(params); break; case 'D': mux.lp_code_rate.ParseVDR(params); break; case 'M': mux.modulation.ParseVDR(params); break; case 'T': mux.trans_mode.ParseVDR(params); break; case 'G': mux.guard_interval.ParseVDR(params); break; case 'Y': mux.hierarchy.ParseVDR(params); break; case 'V': case 'H': case 'R': case 'L': mux.polarity.ParseVDR(ori); break; case 'S': mux.mod_sys.ParseVDR(params); break; case 'O': mux.rolloff.ParseVDR(params); break; default: return false; } } for (uint i = 0; i < 6; i++) PARSE_SKIP(unknown); PARSE_UINT(chan.serviceid); AddChannel(mux, chan); return true; }