Beispiel #1
0
int main (int argc, const char *argv[])
{
  int sock;
  int i = 0;

  if (argc >1){
    ip = malloc(sizeof(char) * strlen(argv[1]));
    strcpy(ip,argv[1]);
      if (argc >2){
        port = malloc(sizeof(char) * strlen(argv[2]));
        strcpy(port,argv[2]);
        if (argc >3){

          wsName = malloc(sizeof(char) * strlen(argv[3]));
          strcpy(wsName,argv[3]);
        }
      }
  }
  fullDir = buildAddress();
  trace(1, fullDir);
  memset(glob, 0, sizeof(*glob));

  if (!create_listen_sock(FPM_DEFAULT_PORT, &glob->server_sock)) {
    exit(1);
  }

  /*
   * Server forever.
   */
  while (1) {
    glob->sock = accept_conn(glob->server_sock);
    fpm_serve();
    trace(1, "Done serving client");
  }
}
Beispiel #2
0
void create_listen_thread(int port, char *addr, int main_sock) {
    int sock, newfd;
    int opt = 1;
    socklen_t s_size;
    pthread_t th;
    struct th_data *th_d1 = (struct th_data*) malloc(sizeof(struct th_data));
    struct sockaddr_in struct_addr;
    
    if(main_sock == 0) 
        sock = create_listen_sock(port, addr);
    else
        sock = main_sock;

    int s_len = sizeof(struct_addr);
    getsockname(sock, (struct sockaddr*) &struct_addr, &s_len);
   
    s_size = sizeof(struct_addr);
    if((newfd = accept(sock, (struct sockaddr *) &struct_addr, &s_size)) == -1) {
        perror("accept");
        //exit(EXIT_FAILURE);
    }

    setsockopt(newfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));

    th_d1->port = port;
    th_d1->sock = newfd;
   
    pthread_create(&th, NULL, th_listen, (void*) th_d1);
}
Beispiel #3
0
int main(int argc, char **argv) {
    int sock, port;
    void *status;
    char addr[INET_ADDRSTRLEN];
    pthread_t *ptr_th;

    memcpy(addr, BIND_ADDR, INET_ADDRSTRLEN);

    port = PORT;
    sock = create_listen_sock(port, addr);
    while(1) {
        create_listen_thread(port, addr, sock);
    }

    pthread_exit(NULL);
    return 0;
}
Beispiel #4
0
int jtagHostLoop()
{


    apr_status_t rv;
    apr_pool_t *mp;
    apr_pollset_t *pollset;
    apr_int32_t num;
    const apr_pollfd_t *ret_pfd;

    apr_initialize();
    apr_pool_create(&mp, NULL);

    serv_ctx_t *channel_contexts[IPDBG_CHANNELS];


    apr_pollset_create(&pollset, DEF_POLLSET_NUM, mp, 0);
    for(uint8_t ch = 0; ch < IPDBG_CHANNELS; ++ch)
    {
        serv_ctx_t *serv_ctx = apr_palloc(mp, sizeof(serv_ctx_t));
        channel_contexts[ch] = serv_ctx;
        serv_ctx->channel_number = ch;
        serv_ctx->channel_state = listening;
        serv_ctx->up_buf_level = 0;
        serv_ctx->down_buf_level = 0;

        if(ch == 0) serv_ctx->valid_mask = IPDBG_LA_VALID_MASK;
        if(ch == 1) serv_ctx->valid_mask = IPDBG_IOVIEW_VALID_MASK;
        if(ch == 2) serv_ctx->valid_mask = IPDBG_GDB_VALID_MASK;
        if(ch == 3) serv_ctx->valid_mask = IPDBG_WFG_VALID_MASK;

        apr_socket_t *listening_sock = create_listen_sock(mp, ch);
        assert(listening_sock);

        apr_pollfd_t pfd = { mp, APR_POLL_SOCKET, APR_POLLIN, 0, { NULL }, serv_ctx };
        pfd.desc.s = listening_sock;
        apr_pollset_add(pollset, &pfd);
    }

    // reset JtagCDC
    uint16_t val;
    ipdbgJTAGtransfer(&val, 0xf00);

    while (1)
    {
        size_t transfers = 0;
        for(size_t ch = 0 ; ch < IPDBG_CHANNELS ; ++ch)
        {
            for(size_t idx = 0 ; idx < channel_contexts[ch]->down_buf_level; ++idx)
            {
                uint16_t val;
                ipdbgJTAGtransfer(&val, channel_contexts[ch]->down_buf[idx] | channel_contexts[ch]->valid_mask);
                transfers++;

                distribute_to_up_buffer(val, channel_contexts);
            }
            channel_contexts[ch]->down_buf_level = 0;
        }
        for(size_t k = transfers ; k < MIN_TRANSFERS ; ++k)
        {
            uint16_t val;
            ipdbgJTAGtransfer(&val, 0x000);
            distribute_to_up_buffer(val, channel_contexts);
        }

        rv = apr_pollset_poll(pollset, DEF_POLL_TIMEOUT, &num, &ret_pfd);
        if (rv == APR_SUCCESS)
        {
            int i;
            /* scan the active sockets */
            for (i = 0; i < num; i++)
            {
                serv_ctx_t *serv_ctx = ret_pfd[i].client_data;
                if(serv_ctx)
                {
                    if (serv_ctx->channel_state == listening)
                    {
                        apr_socket_t *listening_sock = ret_pfd[i].desc.s;
                         /* the listen socket is readable. that indicates we accepted a new connection */
                        do_accept(serv_ctx, pollset, listening_sock, mp);
                        apr_socket_close(listening_sock);
                        apr_pollset_remove(pollset, &ret_pfd[i]);
                    }
                    else
                    {
                        int ret = TRUE;
                        if(ret_pfd[i].rtnevents & (APR_POLLIN | APR_POLLHUP))
                        {
                            ret = connection_rx_cb(serv_ctx, pollset, ret_pfd[i].desc.s);
                        }
                        else // (ret_pfd[i].rtnevents & APR_POLLOUT)
                        {
                            ret = connection_tx_cb(serv_ctx, pollset, ret_pfd[i].desc.s);
                        }
                        if (ret == FALSE)
                        {
                            //printf("closing connection %d", serv_ctx->channel_number);
                            apr_socket_t *sock = ret_pfd[i].desc.s;

                            apr_socket_close(sock);
                            apr_pollset_remove(pollset, &ret_pfd[i]);

                            apr_socket_t *listening_sock = create_listen_sock(mp, serv_ctx->channel_number);
                            serv_ctx->channel_state = listening;

                            apr_pollfd_t pfd = { mp, APR_POLL_SOCKET, APR_POLLIN, 0, { NULL }, serv_ctx };
                            pfd.desc.s = listening_sock;
                            apr_pollset_add(pollset, &pfd);
                        }
                    }
                }
            }
        }
    }

    return 0;
}
Beispiel #5
0
/**
 * @remark Error checks omitted
 */
int main(int argc, const char *argv[])
{
    urj_chain_t *chain = ipdbgJtagAllocChain();
    if(!chain)
    {
        printf("failed to allocate chain");
        return -1;
    }
    printf("ipdbgJtagInit2\n");
    char cable[200];

    int vidNumber;
    int pidNumber;
    char feed;
    unsigned int freq = 100000;

    printf("::Use Default Settings? [y/n]\n::cable:ft2232\n::vid:0x0403\n::pid:0x6010\n::freq:2MHz\n");
    scanf("%c", &feed);

    if(feed == 'y'|| feed == 'Y')
    {
        cable[0] = 'f';
        cable[1] = 't';
        cable[2] = '2';
        cable[3] = '2';
        cable[4] = '3';
        cable[5] = '2';
        cable[6] = '\0';
        vidNumber = 0x0403;
        pidNumber = 0x6010;
        freq = 2000000;

    }
    else if (feed == 'n'||feed == 'N')
    {
        printf("select the cable:");
        scanf("%s", cable);

        printf("select vid(in hex):");
        scanf("%x", &vidNumber);

        printf("select pid:");
        scanf("%x", &pidNumber);

        printf("select frequency [Hz]: ");
        scanf("%d", &freq);
    }

    char vid[200];
    char pid[200];
    sprintf(vid, "vid=0x%x", vidNumber);
    sprintf(pid, "pid=0x%x", pidNumber);

    /// select cable
    //char *Programmer_params[] = {"ft2232", "vid=0x0403", "pid=0x6010", 0};
    char *Programmer_params[] = {cable, vid, pid, 0};
    if(urj_tap_chain_connect(chain, Programmer_params[0], &(Programmer_params[1])) != 0)
    {
        printf("connect failed!\n");
        return -1;
    }

    urj_tap_reset(chain);




    urj_tap_cable_set_frequency(chain->cable, freq);




    /// detect devices in chain
    const int maxIrLen = 0;
#ifdef __unix__
    int numberOfParts = urj_tap_detect_parts(chain, "/usr/share/urjtag", maxIrLen);
#else
    int numberOfParts = urj_tap_detect_parts(chain, "urjtag", maxIrLen);
#endif
    printf("number of parts detected = %d\n", numberOfParts);
    if ( numberOfParts == 0)
    {
        printf("detection of chain failed\n");
        return -2;
    }

    int active_part = 0;
    if ( numberOfParts > 1)
    {
        /// select active part in chain
        printf("select the active part in chain: \n");

        scanf("%d", &active_part);

        printf("selected part: %d\n", active_part);
    }


    if(ipdbgJtagInit(chain, active_part) != 0 )
    {
        printf("failed to initialize chain");
        return -1;
    }



    apr_status_t rv;
    apr_pool_t *mp;
    apr_pollset_t *pollset;
    apr_int32_t num;
    const apr_pollfd_t *ret_pfd;

    apr_initialize();
    apr_pool_create(&mp, NULL);

    serv_ctx_t *channel_contexts[IPDBG_CHANNELS];


    apr_pollset_create(&pollset, DEF_POLLSET_NUM, mp, 0);
    for(uint8_t ch = 0; ch < IPDBG_CHANNELS; ++ch)
    {
        serv_ctx_t *serv_ctx = apr_palloc(mp, sizeof(serv_ctx_t));
        channel_contexts[ch] = serv_ctx;
        serv_ctx->channel_number = ch;
        serv_ctx->chain = chain;
        serv_ctx->channel_state = listening;
        serv_ctx->up_buf_level = 0;
        serv_ctx->down_buf_level = 0;

        if(ch == 0) serv_ctx->valid_mask = IPDBG_LA_VALID_MASK; ///
        if(ch == 1) serv_ctx->valid_mask = IPDBG_IOVIEW_VALID_MASK; ///
        if(ch == 2) serv_ctx->valid_mask = IPDBG_GDB_VALID_MASK; ///
        if(ch == 3) serv_ctx->valid_mask = IPDBG_WFG_VALID_MASK; ///

        apr_socket_t *listening_sock = create_listen_sock(mp, ch);
        assert(listening_sock);

        apr_pollfd_t pfd = { mp, APR_POLL_SOCKET, APR_POLLIN, 0, { NULL }, serv_ctx };
        pfd.desc.s = listening_sock;
        apr_pollset_add(pollset, &pfd);
    }

    // reset JtagCDC
    uint16_t val;
    ipdbgJTAGtransfer(chain, &val, 0xf00);

    while (1)
    {
        size_t transfers = 0;
        for(size_t ch = 0 ; ch < IPDBG_CHANNELS ; ++ch)
        {
            for(size_t idx = 0 ; idx < channel_contexts[ch]->down_buf_level; ++idx)
            {
                uint16_t val;
                ipdbgJTAGtransfer(chain, &val, channel_contexts[ch]->down_buf[idx] | channel_contexts[ch]->valid_mask);
                transfers++;

                distribute_to_up_buffer(val, channel_contexts);
            }
            channel_contexts[ch]->down_buf_level = 0;
        }
        for(size_t k = transfers ; k < MIN_TRANSFERS ; ++k)
        {
            uint16_t val;
            ipdbgJTAGtransfer(chain, &val, 0x000);
            distribute_to_up_buffer(val, channel_contexts);
        }

        rv = apr_pollset_poll(pollset, DEF_POLL_TIMEOUT, &num, &ret_pfd);
        if (rv == APR_SUCCESS)
        {
            int i;
            /* scan the active sockets */
            for (i = 0; i < num; i++)
            {
                serv_ctx_t *serv_ctx = ret_pfd[i].client_data;
                if(serv_ctx)
                {
                    if (serv_ctx->channel_state == listening)
                    {
                        apr_socket_t *listening_sock = ret_pfd[i].desc.s;
                         /* the listen socket is readable. that indicates we accepted a new connection */
                        do_accept(serv_ctx, pollset, listening_sock, mp);
                        apr_socket_close(listening_sock);
                        apr_pollset_remove(pollset, &ret_pfd[i]);
                    }
                    else
                    {
                        int ret = TRUE;
                        if(ret_pfd[i].rtnevents & (APR_POLLIN | APR_POLLHUP))
                        {
                            ret = connection_rx_cb(serv_ctx, pollset, ret_pfd[i].desc.s);
                        }
                        else // (ret_pfd[i].rtnevents & APR_POLLOUT)
                        {
                            ret = connection_tx_cb(serv_ctx, pollset, ret_pfd[i].desc.s);
                        }
                        if (ret == FALSE)
                        {
                            printf("closing connection %d", serv_ctx->channel_number);
                            apr_socket_t *sock = ret_pfd[i].desc.s;

                            apr_socket_close(sock);
                            apr_pollset_remove(pollset, &ret_pfd[i]);

                            apr_socket_t *listening_sock = create_listen_sock(mp, serv_ctx->channel_number);
                            serv_ctx->channel_state = listening;

                            apr_pollfd_t pfd = { mp, APR_POLL_SOCKET, APR_POLLIN, 0, { NULL }, serv_ctx };
                            pfd.desc.s = listening_sock;
                            apr_pollset_add(pollset, &pfd);
                        }
                    }
                }
            }
        }
    }

    return 0;
}