Ejemplo n.º 1
0
int main(void)
{
	union uKeyRoster scan;
    init();    

    while (1)
    {
		wait_for_press();
		// Result is stored in prev_keys & keys and hopefully keys2

		SET_LED_1();
		scan = pack_array( keys );
		build_key_list   ( keys );

		if (isConfigured(MODE_SEND_ROSTER)==0)		{
			can_prep_button_roster_msg( &msg1, scan );
			can_send_msg_no_wait( CAN_TRANSMIT_CHANNEL1, &msg1 );
		}
		if (isConfigured(MODE_SEND_PRESSED)==0)		{
			can_prep_button_pressed_msg( &msg2 );
			can_send_msg_no_wait( CAN_TRANSMIT_CHANNEL2, &msg2 );
	    }
		RESET_LED_1();
    }
    return(0);
} 
Ejemplo n.º 2
0
static json_t *pack(scanner_t *s, va_list *ap)
{
    switch(s->token) {
        case '{':
            return pack_object(s, ap);

        case '[':
            return pack_array(s, ap);

        case 's': /* string */
        {
            const char *str = va_arg(*ap, const char *);
            if(!str) {
                set_error(s, "<args>", "NULL string argument");
                return NULL;
            }
            if(!utf8_check_string(str, -1)) {
                set_error(s, "<args>", "Invalid UTF-8 string");
                return NULL;
            }
            return json_string_nocheck(str);
        }

        case 'n': /* null */
            return json_null();

        case 'b': /* boolean */
            return va_arg(*ap, int) ? json_true() : json_false();

        case 'i': /* integer from int */
            return json_integer(va_arg(*ap, int));

        case 'I': /* integer from json_int_t */
            return json_integer(va_arg(*ap, json_int_t));

        case 'f': /* real */
            return json_real(va_arg(*ap, double));

        case 'O': /* a json_t object; increments refcount */
            return json_incref(va_arg(*ap, json_t *));

        case 'o': /* a json_t object; doesn't increment refcount */
            return va_arg(*ap, json_t *);

        default:
            set_error(s, "<format>", "Unexpected format character '%c'",
                      s->token);
            return NULL;
    }
}
Ejemplo n.º 3
0
quint8 *MsgPackPrivate::pack(const QVariant &v, quint8 *p, bool wr, QVector<QByteArray> &user_data)
{
    QMetaType::Type t = (QMetaType::Type)v.type();
    if (v.isNull() && !v.isValid())
        p = pack_nil(p, wr);
    else if (t == QMetaType::Int)
        p = pack_int(v.toInt(), p, wr);
    else if (t == QMetaType::UInt)
        p = pack_uint(v.toUInt(), p, wr);
    else if (t == QMetaType::Bool)
        p = pack_bool(v, p, wr);
    else if (t == QMetaType::QString)
        p = pack_string(v.toString(), p, wr);
    else if (t == QMetaType::QVariantList)
        p = pack_array(v.toList(), p, wr, user_data);
    else if (t == QMetaType::QStringList)
        p = pack_stringlist(v.toStringList(), p, wr);
    else if (t == QMetaType::LongLong)
        p = pack_longlong(v.toLongLong(), p, wr);
    else if (t == QMetaType::ULongLong)
        p = pack_ulonglong(v.toULongLong(), p, wr);
    else if (t == QMetaType::Double)
        p = pack_double(v.toDouble(), p, wr);
    else if (t == QMetaType::Float)
        p = pack_float(v.toFloat(), p, wr);
    else if (t == QMetaType::QByteArray)
        p = pack_bin(v.toByteArray(), p, wr);
    else if (t == QMetaType::QVariantMap)
        p = pack_map(v.toMap(), p, wr, user_data);
    else {
        if (t == QMetaType::User)
            t = (QMetaType::Type)v.userType();
        QReadLocker locker(&packers_lock);
        bool has_packer = user_packers.contains(t);
        if (has_packer)
            has_packer &= user_packers[t].packer != 0;
        locker.unlock();
        if (has_packer)
            p = pack_user(v, p, wr, user_data);
        else
            qWarning() << "MsgPack::pack can't pack type:" << t;
    }

    return p;
}
Ejemplo n.º 4
0
//***** main *****************************************************
int main(void)
{
	union uKeyRoster scan;
	
    chip_init();    // Chip initialization
	can_init();		/* Enables Mob0 for Reception! */
	can_init_test_msg();
	byte result = CANSTMOB;
	
	send_test_msgs();
	/* TEST A)  Initial Board Alive test, call this below.  Watch LEDs go. 
	led_test_pattern();	*/
	/* B) Enable Receive Interrupts and call Show_byte() in the ISR.
		ALL CODE IS IN ISR()	*/
	while (1) {};
	
    while (1)
    {  	  
		wait_for_press();
		
		// Result is stored in prev_keys & keys and hopefully keys2
		scan = pack_array( keys );
		can_prep_button_roster_msg( &msg1, scan );
        can_send_msg( 0, &msg1 );
		show_byte( scan.array[0], 1 );

//		result = CANEN2;		// shows MOb n in use   mob1 is staying "in use" after 1 can_tx()
//		result = CANSTMOB;		// shows TXOK or ERRs   BERR staying on instead of TXOK 
//		result = CANGSTA;		// shows TXOK or ERRs   TXBSY blinking (retires?)
//		result = 0x83;
//		result = scan.array[0];	
//		show_byte( a, 1 );
		// [0] upper nibble is front row
		// [0] lower        is top row
		// [1] upper nibble is 2nd row
		// [1] lower        is 3rd row
		// [2] upper nibble is 4th row
      /*  for (int j=0; j<4; j++)
        {
        	show_result_toggle(result);
        	delay (one_second/2);
        }  */
    }
    return(0);
} 
Ejemplo n.º 5
0
/*
 *  process the reply string
 */
void
chat_send(char *s)
{
    if (say_next) {
	say_next = 0;
	s = clean(s,0);
	write(STDERR_FILENO, s, strlen(s));
        free(s);
	return;
    }

    if (hup_next) {
        hup_next = 0;
	if (strcmp(s, "OFF") == 0)
           signal(SIGHUP, SIG_IGN);
        else
           signal(SIGHUP, sighup);
        return;
    }

    if (echo_next) {
	echo_next = 0;
	echo = (strcmp(s, "ON") == 0);
	return;
    }

    if (abort_next) {
	char *s1;
	
	abort_next = 0;
	
	if (n_aborts >= MAX_ABORTS)
	    fatal(2, "Too many ABORT strings");
	
	s1 = clean(s, 0);
	
	if (strlen(s1) > strlen(s)
	    || strlen(s1) + 1 > sizeof(fail_buffer))
	    fatal(1, "Illegal or too-long ABORT string ('%v')", s);

	abort_string[n_aborts++] = s1;

	if (verbose)
	    chat_logf("abort on (%v)", s);
	return;
    }

    if (clear_abort_next) {
	char *s1;
	int   i;
        int   old_max;
	int   pack = 0;
	
	clear_abort_next = 0;
	
	s1 = clean(s, 0);
	
	if (strlen(s1) > strlen(s)
	    || strlen(s1) + 1 > sizeof(fail_buffer))
	    fatal(1, "Illegal or too-long CLR_ABORT string ('%v')", s);

        old_max = n_aborts;
	for (i=0; i < n_aborts; i++) {
	    if ( strcmp(s1,abort_string[i]) == 0 ) {
		free(abort_string[i]);
		abort_string[i] = NULL;
		pack++;
		n_aborts--;
		if (verbose)
		    chat_logf("clear abort on (%v)", s);
	    }
	}
        free(s1);
	if (pack)
	    pack_array(abort_string,old_max);
	return;
    }

    if (report_next) {
	char *s1;
	
	report_next = 0;
	if (n_reports >= MAX_REPORTS)
	    fatal(2, "Too many REPORT strings");
	
	s1 = clean(s, 0);
	
	if (strlen(s1) > strlen(s) || strlen(s1) > sizeof fail_buffer - 1)
	    fatal(1, "Illegal or too-long REPORT string ('%v')", s);
	
	report_string[n_reports++] = s1;
	
	if (verbose)
	    chat_logf("report (%v)", s);
	return;
    }

    if (clear_report_next) {
	char *s1;
	int   i;
	int   old_max;
	int   pack = 0;
	
	clear_report_next = 0;
	
	s1 = clean(s, 0);
	
	if (strlen(s1) > strlen(s) || strlen(s1) > sizeof fail_buffer - 1)
	    fatal(1, "Illegal or too-long REPORT string ('%v')", s);

	old_max = n_reports;
	for (i=0; i < n_reports; i++) {
	    if ( strcmp(s1,report_string[i]) == 0 ) {
		free(report_string[i]);
		report_string[i] = NULL;
		pack++;
		n_reports--;
		if (verbose)
		    chat_logf("clear report (%v)", s);
	    }
	}
        free(s1);
        if (pack)
	    pack_array(report_string,old_max);
	
	return;
    }

    if (timeout_next) {
	timeout_next = 0;
	timeout = atoi(s);
	
	if (timeout <= 0)
	    timeout = DEFAULT_CHAT_TIMEOUT;

	if (verbose)
	    chat_logf("timeout set to %d seconds", timeout);

	return;
    }

    if (strcmp(s, "EOT") == 0)
	s = strdup("^D\\c");
    else if (strcmp(s, "BREAK") == 0)
	s = strdup("\\K\\c");

    if (!put_string(s))
	fatal(1, "Failed");
}
Ejemplo n.º 6
0
int serve(int serv_sock, const char *dest)
{
    size_t response_size;
    char *response_data = build_redirect(dest, &response_size);

    struct Client *connections[MAX_PENDING_REQUESTS];
    size_t i;
    for(i = 0; i < MAX_PENDING_REQUESTS; ++i)
        connections[i] = NULL;

    while(1)
    {
        int greatest;
        fd_set fds;
        FD_ZERO(&fds);
        FD_SET((SOCKET)serv_sock, &fds);
        greatest = serv_sock;

        for(i = 0; i < MAX_PENDING_REQUESTS && connections[i] != NULL; ++i)
        {
            int s = connections[i]->sock;
            FD_SET((SOCKET)s, &fds);
            if(s > greatest)
                greatest = s;
        }

        select(greatest + 1, &fds, NULL, NULL, NULL);

        if(FD_ISSET(serv_sock, &fds))
        {
            /* If all connections are taken */
            if(connections[MAX_PENDING_REQUESTS - 1] != NULL)
            {
                my_closesocket(connections[0]->sock);
                free(connections[0]);
                connections[0] = NULL;
                pack_array((void**)connections, MAX_PENDING_REQUESTS);
            }
            /* Accept the new connection */
            {
                struct sockaddr_in clientsin;
                socklen_t size = sizeof(clientsin);
                int sock = accept(serv_sock,
                                  (struct sockaddr*)&clientsin, &size);
                if(sock != -1)
                {
                    for(i = 0; i < MAX_PENDING_REQUESTS; ++i)
                        if(connections[i] == NULL)
                            break;
                    connections[i] = malloc(sizeof(struct Client));
                    connections[i]->sock = sock;
                    connections[i]->state = 0;
                }
            }
        }
        else for(i = 0; i < MAX_PENDING_REQUESTS && connections[i] != NULL; ++i)
        {
            int s = connections[i]->sock;
            if(FD_ISSET(s, &fds))
            {
                int *const state = &connections[i]->state;
                int j;
                /* Read stuff */
                static char buffer[RECV_BUFFER_SIZE];
                int len = recv(s, buffer, RECV_BUFFER_SIZE, 0);

                /* Decode HTTP request (really just wait for "\r\n\r\n") */
                for(j = 0; j < len; ++j)
                {
                    if(buffer[j] == '\r')
                    {
                        if(*state == 0 || *state == 2)
                            ++*state;
                        else
                            *state = 1;
                    }
                    else if(buffer[j] == '\n')
                    {
                        if(*state < 2)
                            *state = 2;
                        else
                        {
                            *state = 4;
                            break;
                        }
                    }
                    else
                        *state = 0;
                }
                if(*state == 4)
                    /* Print redirect */
                    send(s, response_data, response_size, 0);

                /* Client closed the connection OR request complete */
                if(len <= 0 || *state == 4)
                {
                    my_closesocket(s);
                    free(connections[i]);
                    connections[i] = NULL;
                    pack_array((void**)connections, MAX_PENDING_REQUESTS);
                }
            }
        }
    }

    free(response_data);

    return 0;
}