OpenCores
URL https://opencores.org/ocsvn/funbase_ip_library/funbase_ip_library/trunk

Subversion Repositories funbase_ip_library

[/] [funbase_ip_library/] [trunk/] [TUT/] [ip.swp.api/] [openmcapi/] [1.0/] [demo/] [hi.c] - Blame information for rev 145

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 145 lanttu
#include <assert.h>
2
#include <limits.h>
3
#include <stdlib.h>
4
#include <stdio.h>
5
#include <unistd.h>
6
#include <sys/stat.h>
7
#include <sys/types.h>
8
#include <fcntl.h>
9
#include <errno.h>
10
#include <time.h>
11
 
12
#include <mcapi.h>
13
 
14
#define WAIT_TIMEOUT 0xFFFFFFFF
15
 
16
#define mcapi_assert_success(s) \
17
        if (s != MCAPI_SUCCESS) { printf("%s:%d status %d\n", __FILE__, __LINE__, s); abort(); }
18
 
19
const int tx_port = 1000;
20
const int rx_port = 1001;
21
 
22
mcapi_pktchan_recv_hndl_t       send_handle;
23
mcapi_pktchan_recv_hndl_t       recv_handle;
24
 
25
static void connect(int local, int remote)
26
{
27
        mcapi_endpoint_t local_send_endpoint;
28
        mcapi_endpoint_t local_recv_endpoint;
29
        mcapi_endpoint_t remote_recv_endpoint;
30
        mcapi_request_t  request;
31
        mcapi_request_t  send_request;
32
        mcapi_request_t  recv_request;
33
        mcapi_status_t   status;
34
        size_t           size;
35
 
36
        printf("Node %d: Creating tx port %d\n", local, tx_port);
37
        local_send_endpoint = mcapi_create_endpoint(tx_port, &status);
38
        mcapi_assert_success(status);
39
 
40
        printf("Node %d: Creating rx port %d\n", local, rx_port);
41
        local_recv_endpoint = mcapi_create_endpoint(rx_port, &status);
42
        mcapi_assert_success(status);
43
 
44
        remote_recv_endpoint = mcapi_get_endpoint(remote, rx_port, &status);
45
        mcapi_assert_success(status);
46
 
47
        printf("Node %d: Connecting %d:%d to %d:%d\n",local, local, tx_port,
48
               remote, rx_port);
49
        mcapi_connect_pktchan_i(local_send_endpoint, remote_recv_endpoint,
50
                                &request, &status);
51
        mcapi_assert_success(status);
52
 
53
        mcapi_wait(&request, &size, &status, WAIT_TIMEOUT);
54
        mcapi_assert_success(status);
55
 
56
        printf("Node %d: Connection complete\n", local);
57
 
58
        printf("Node %d: Opening send endpoint\n", local);
59
        mcapi_open_pktchan_send_i(&send_handle, local_send_endpoint, &send_request,
60
                                                          &status);
61
 
62
        printf("Node %d: Opening receive endpoint\n", local);
63
        mcapi_open_pktchan_recv_i(&recv_handle, local_recv_endpoint, &recv_request,
64
                                                          &status);
65
 
66
        mcapi_wait(&send_request, &size, &status, WAIT_TIMEOUT);
67
        mcapi_assert_success(status);
68
 
69
        mcapi_wait(&recv_request, &size, &status, WAIT_TIMEOUT);
70
        mcapi_assert_success(status);
71
 
72
        printf("Node %d: MCAPI negotiation complete! \n", local);
73
}
74
 
75
void startup(unsigned int local, unsigned int remote)
76
{
77
        mcapi_status_t status;
78
        mcapi_version_t version;
79
 
80
        printf("Node %d: MCAPI Initialized\n",local);
81
        mcapi_initialize(local, &version, &status);
82
        mcapi_assert_success(status);
83
 
84
        connect(local, remote);
85
}
86
 
87
void demo(unsigned int node, int loop)
88
{
89
        char outgoing[16];
90
        char *incoming;
91
        size_t bytes;
92
        mcapi_status_t status;
93
 
94
        do {
95
                memset(outgoing, 0, 16);
96
                sprintf(outgoing, "hi from node %d", node);
97
 
98
                mcapi_pktchan_send(send_handle, outgoing, strlen(outgoing)+1,
99
                        &status);
100
                mcapi_assert_success(status);
101
 
102
                mcapi_pktchan_recv(recv_handle, (void *)&incoming, &bytes,
103
                        &status);
104
                printf("received message: %s\n", incoming);
105
 
106
                mcapi_pktchan_free(incoming, &status);
107
                mcapi_assert_success(status);
108
 
109
                sleep(1);
110
        } while (loop);
111
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.