コード例 #1
0
ファイル: main.c プロジェクト: bitwigglers/scpi-parser
int main(int argc, char** argv) {
    (void) argc;
    (void) argv;
    int rc;

    int listenfd;
    char smbuffer[10];

    // user_context will be pointer to socket
    scpi_context.user_context = NULL;

    SCPI_Init(&scpi_context);

    listenfd = createServer(5025);

    while (1) {
        int clifd;
        struct sockaddr_in cliaddr;
        socklen_t clilen;

        clilen = sizeof (cliaddr);
        clifd = accept(listenfd, (struct sockaddr *) &cliaddr, &clilen);

        if (clifd < 0) continue;

        printf("Connection established %s\r\n", inet_ntoa(cliaddr.sin_addr));

        scpi_context.user_context = &clifd;

        while (1) {
            rc = waitServer(clifd);
            if (rc < 0) { // failed
                perror("  recv() failed");
                break;
            }
            if (rc == 0) { // timeout
                SCPI_Input(&scpi_context, NULL, 0);
            }
            if (rc > 0) { // something to read
                rc = recv(clifd, smbuffer, sizeof (smbuffer), 0);
                if (rc < 0) {
                    if (errno != EWOULDBLOCK) {
                        perror("  recv() failed");
                        break;
                    }
                } else if (rc == 0) {
                    printf("Connection closed\r\n");
                    break;
                } else {
                    SCPI_Input(&scpi_context, smbuffer, rc);
                }
            }
        }

        close(clifd);
    }

    return (EXIT_SUCCESS);
}
コード例 #2
0
ファイル: newcunittest.c プロジェクト: vjine/discotmc
void TEST_COMMAND_MATCH(char *data, char* output)
{
    SCPI_Input(&scpi_context, data, strlen(data));
    SCPI_Input(&scpi_context, NULL, 0);
    printf("obuf=<%s>\n", obuf);
    CU_ASSERT_STRING_EQUAL(output, obuf);
    output_buffer_clear();
}
コード例 #3
0
ファイル: scpi_server.c プロジェクト: richardhmm/scpi-parser
static int processIo(user_data_t * user_data) {
    struct netbuf *inbuf;
    char* buf;
    u16_t buflen;    

    if (netconn_recv(user_data->io, &inbuf) != ERR_OK) {
        goto fail1;
    }
    if (netconn_err(user_data->io) != ERR_OK) {
        goto fail2;
    }
    
    netbuf_data(inbuf, (void**) &buf, &buflen);

    if (buflen > 0) {
        SCPI_Input(&scpi_context, buf, buflen);
    } else {
        //goto fail2;
    }
    
    netbuf_delete(inbuf);
    
    return 0;
    
fail2:
    netbuf_delete(inbuf);
fail1:
    closeIo(user_data);
    
    return 0;
}
コード例 #4
0
ファイル: main.c プロジェクト: WCP52/firmware
int main(int argc, char** argv) {
    (void) argc;
    (void) argv;
    int rc;
    
    user_data_t user_data = {
        .io_listen = -1,
        .io = -1,
        .control_io_listen = -1,
        .control_io = -1,
        .fio = NULL,
    };

    // user_context will be pointer to socket
    scpi_context.user_context = &user_data;
    
    SCPI_Init(&scpi_context);

    user_data.io_listen = createServer(5025);
    user_data.control_io_listen = createServer(CONTROL_PORT);
    
    while(1) {
        rc = waitServer(&user_data);
        
        if (rc < 0) { // failed
            perror("select failed");
            exit(-1);
        }
        
        if (rc == 0) { // timeout
            SCPI_Input(&scpi_context, NULL, 0);
        }
        
        if ((user_data.io_listen >= 0) && FD_ISSET(user_data.io_listen, &user_data.fds)) {
            processIoListen(&user_data);
        }

        if ((user_data.control_io_listen >= 0) && FD_ISSET(user_data.control_io_listen, &user_data.fds)) {
            processSrqIoListen(&user_data);
        }
        
        if ((user_data.io >= 0) && FD_ISSET(user_data.io, &user_data.fds)) {
            processIo(&user_data);
        }
        
        if ((user_data.control_io >= 0) && FD_ISSET(user_data.control_io, &user_data.fds)) {
            processSrqIo(&user_data);
        }
        
    }
    
    return (EXIT_SUCCESS);
}
コード例 #5
0
ファイル: task_scpi.c プロジェクト: asanza/keithley_199
void scpi_task(void* param){
    SCPI_Init(&scpi_context, 
        scpi_commands, 
        &scpi_interface, 
        scpi_units_def,
        SCPI_IDN1, SCPI_IDN2, SCPI_IDN3, SCPI_IDN4,
        scpi_input_buffer, SCPI_INPUT_BUFFER_LENGTH,
        scpi_error_queue_data, SCPI_ERROR_QUEUE_SIZE
    );
    while(1){
        int rec = usb_uart_readline(buff, 50);
        SCPI_Input(&scpi_context, buff, rec);
    }
}
コード例 #6
0
ファイル: main.c プロジェクト: WCP52/firmware
static int processIo(user_data_t * user_data) {
    int rc;
    char smbuffer[10];
    rc = recv(user_data->io, smbuffer, sizeof(smbuffer), 0);
    if (rc < 0) {
        if (errno != EWOULDBLOCK) {
            closeIo(user_data);
            perror("  recv() failed");
        }
    } else if (rc == 0) {
        closeIo(user_data);
        printf("Connection closed\r\n");
    } else {
        SCPI_Input(&scpi_context, smbuffer, rc);
    }
}
コード例 #7
0
ファイル: scpi_server.c プロジェクト: richardhmm/scpi-parser
static void scpi_server_thread(void *arg) {
    int rc;

    (void)arg;

    user_data.evtQueue = xQueueCreate(10, sizeof(uint32_t));
    
    // user_context will be pointer to socket
    scpi_context.user_context = &user_data;
    
    SCPI_Init(&scpi_context);

    user_data.io_listen = createServer(DEVICE_PORT);
    user_data.control_io_listen = createServer(CONTROL_PORT);
    
    while(1) {
        rc = waitServer(&user_data);
        
        if (rc < 0) { // failed
            iprintf("select failed");
            break;
        }

        if (rc == 0) { // timeout
            SCPI_Input(&scpi_context, NULL, 0);
        }        
        
        if ((user_data.io_listen != NULL) && (rc == SCPI_MSG_IO_LISTEN)) {
            processIoListen(&user_data);
        }

        if ((user_data.control_io_listen != NULL) && (rc == SCPI_MSG_CONTROL_IO_LISTEN)) {
            processSrqIoListen(&user_data);
        }
        
        if ((user_data.io != NULL) && (rc == SCPI_MSG_IO)) {
            processIo(&user_data);
        }
        
        if ((user_data.control_io != NULL) && (rc == SCPI_MSG_CONTROL_IO)) {
            processSrqIo(&user_data);
        }
        
    }
    
    vTaskDelete(NULL);
}
コード例 #8
0
ファイル: main.c プロジェクト: Gulzt/RedPitaya
int main(int argc, char** argv) {
    (void) argc;
    (void) argv;
    int result;

    SCPI_Init(&scpi_context);

    //printf("%.*s %s\r\n",  3, "asdadasdasdasdas", "b");
    printf("SCPI Interactive demo\r\n");
    char smbuffer[10];
    while (1) {
         fgets(smbuffer, 10, stdin);
         SCPI_Input(&scpi_context, smbuffer, strlen(smbuffer));
    }


    return (EXIT_SUCCESS);
}
コード例 #9
0
ファイル: main.c プロジェクト: j123b567/scpi-parser
int main(int argc, char** argv) {
    (void) argc;
    (void) argv;
    int rc;

#ifdef __cplusplus
    user_data_t user_data = {
        /*.io_listen =*/ -1,
        /*.io =*/ -1,
        /*.control_io_listen =*/ -1,
        /*.control_io =*/ -1,
        /*.fio =*/ NULL,
        /*.fds =*/ 0,
    };
#else
    user_data_t user_data = {
        .io_listen = -1,
        .io = -1,
        .control_io_listen = -1,
        .control_io = -1,
        .fio = NULL,
    };
#endif

    /* user_context will be pointer to socket */
    SCPI_Init(&scpi_context,
            scpi_commands,
            &scpi_interface,
            scpi_units_def,
            SCPI_IDN1, SCPI_IDN2, SCPI_IDN3, SCPI_IDN4,
            scpi_input_buffer, SCPI_INPUT_BUFFER_LENGTH,
            scpi_error_queue_data, SCPI_ERROR_QUEUE_SIZE);
    scpi_context.user_context = &user_data;

    user_data.io_listen = createServer(5025);
    user_data.control_io_listen = createServer(CONTROL_PORT);

    while (1) {
        rc = waitServer(&user_data);

        if (rc < 0) { /* failed */
            perror("select failed");
            exit(-1);
        }

        if (rc == 0) { /* timeout */
            SCPI_Input(&scpi_context, NULL, 0);
        }

        if ((user_data.io_listen >= 0) && FD_ISSET(user_data.io_listen, &user_data.fds)) {
            processIoListen(&user_data);
        }

        if ((user_data.control_io_listen >= 0) && FD_ISSET(user_data.control_io_listen, &user_data.fds)) {
            processSrqIoListen(&user_data);
        }

        if ((user_data.io >= 0) && FD_ISSET(user_data.io, &user_data.fds)) {
            processIo(&user_data);
        }

        if ((user_data.control_io >= 0) && FD_ISSET(user_data.control_io, &user_data.fds)) {
            processSrqIo(&user_data);
        }

    }

    return (EXIT_SUCCESS);
}