Timo Dritschler 3 years ago
parent
commit
09f148c9ab
1 changed files with 23 additions and 2 deletions
  1. 23 2
      ethernetBridge.c

+ 23 - 2
ethernetBridge.c

@@ -1,12 +1,18 @@
 #include <stdio.h>
 #include <stdlib.h>
+#include <stdint.h>
 
 #include <pcilib.h>
 #include <pcilib/bar.h>
 
 #include <libsocket/libinetsocket.h>
 
+#define REG_FREQ_7BIT 0x91A4
 
+#pragma inline
+void write_reg_32(volatile void *bar, int addr, uint32_t value) {
+    *((volatile uint32_t *) (((char*)bar) + addr)) = value;
+}
 
 
 int main(int argc, char *argv[]) {
@@ -40,7 +46,7 @@ int main(int argc, char *argv[]) {
     int peer_socket;
     char *peer_addr = calloc(16,1);
 
-    peer_socket = accept_inet_stream_socket(socket, peer_addr, 0, 0, 0, 0, 0);
+    peer_socket = accept_inet_stream_socket(socket, peer_addr, 16, 0, 0, 0, 0);
 
     if (peer_socket < 0) {
         printf("Failed to accpet client connection\n");
@@ -51,10 +57,25 @@ int main(int argc, char *argv[]) {
     printf("Got connection from: %s\n", peer_addr);
 
 
+    unsigned char *buf = calloc(1, 1);
+
+    //THERE IS A BUG WHERE WHEN THE REMOTE CLIENT CLOSES THE SOCKET
+    //"read" BECOMES NON-BLOCKING AND RETURNS THE SAME RESULT OVER
+    //AND OVER AGAIN!
+    while (1) {
+        ret = read (peer_socket, buf, 1);
+
+        printf("Received: %u\n", (*buf)&0xff);
+
+        uint32_t val = (*buf)&0xff;
+        write_reg_32(bar, REG_FREQ_7BIT, val);
+
+    }
+
     destroy_inet_socket(socket);
 
     printf("All went well\n");
-    pcilib_close(pci);
+    //pcilib_close(pci);
     return 0;
 }