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