From 93cf9f9e7234526de90452592465a360fd264496 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jurij=20Podgor=C5=A1ek?= Date: Mon, 16 Sep 2024 00:07:59 +0200 Subject: [PATCH] Popravljen sprejemnik za linux (monitor mode) --- linux-receiver/bin/receiver | Bin 17208 -> 17936 bytes linux-receiver/main.c | 149 ++++++++++++++++++++-------------- linux-receiver/monitor_off.sh | 9 ++ linux-receiver/monitor_on.sh | 21 +++++ linux-receiver/pozeni.sh | 4 +- linux-receiver/prep.sh | 10 --- 6 files changed, 123 insertions(+), 70 deletions(-) create mode 100755 linux-receiver/monitor_off.sh create mode 100755 linux-receiver/monitor_on.sh delete mode 100755 linux-receiver/prep.sh diff --git a/linux-receiver/bin/receiver b/linux-receiver/bin/receiver index 5e24fe22a2819c8d84b2b5a87fdc9bb1dabf6cf6..17267e3693793be69c8f297a5a85ded1878a8c10 100755 GIT binary patch literal 17936 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 J#GphJ{|S@n^u_=H delta 3460 zcmZ8k4Qx}_6~6cRC$R~{HZit?lh^@<`N?wrAo;ysBxg9<`;Y|~Qd}n3f(o@!eMGOO$zQ3r}rfe~4$_58j zJsT7;)FrWrF@-)_WN9^s(Iz-VUH)4oVsxu^hNN-~=jlazz%ND_32|kse^mO8N?%=; z%K1ydV%VCu=2YIRvmP&6|KP3QAFmJn?dXaH-#iKj3<2j{jLBv(^Vo-YKNrp$7SpeT z-RPoj-v1i5n_M&p_4$xz%%dTW#&{oQJtS8dxn&>6I(h#I_xc{!*YaLvJ&Z;KH^uC5 z+T=Fv#(9h3tda*uvdZCV)+$eP%Z~QFWXIl?SDHv`Tk}ipyU2@8FYajF55erhIpt~v z`O2Er4UJpN)zAuf&-`o`Aqp|zqZnrVQDT&cu<~yc$E?ro_7>1=|GHhEZZ23)mqV)MC1Q# z&xs~#PvIc7B%MyDc4Bwcv=)BsC|nYa-P5A+&TH|G52A_4wP-9E&K)8>rYaVh0liTK zOo1S%PS?g>X9>gU=J!z0Q_WLarKZ6yci!j$g&+ z>YmNg899f(B=x5!-0fE?M)oR~RaoQn&RZ!Ntd6OeVC)r)Z>w+u853AU7K1ZFg5ed6 zr7GNWdY$i1XM8@zXSo5F^4wYR%b3KS5~!Kyb?%zZ0>L`)l=XTE96?smbXKEaEq}^t zD1n>E8k;pOr-%RLGv0&}XMys?a#-&2I{T&*-V%f(j6i<|&p8XazB=8$9_`2xF5FS3)CDnj3QWGdD5Sc}^r(m%|ugJ_&@6EnkmH})qYQx`&UOjGWIEr`b>ld;apkeJ~D z4|HjGRLn3xGlO5wP=Fp6S%#_4AHm}JfvzwQF%j#W5D}i25ynJ>A-s7+j#s%hk~;T@ z<+$+}=2Cx7+X~m@8%T&p#$%o1B4U<|_*W5eXC`7NYG$^IyB@(u^Or67 zEw@}6{!9?(Wr&Sj8%enzL9us*@*n`4yo(C&;`PP6cTA?!dR<)01a@>1e(7CQa}G@+ z6|&!s>ztG>NyP8YOKcpE_P$1NXU0Effv#ZUci%}wCQ#opIp{6;hk_T-4dZd24Vrx$ zpx)<(k9_s8$p4&pLlJn%|D}@2f2Gqsm~!gh>GXRjCsA%f`RRB%eGTQeCh*=sne|0F zoeh`#i|HG1+aEOVM!#_ag~i3yrRajGWttbY&G>J}5QkZ{>gU)FD~+?whC_y&tZc&U z2k?L2LpWHR?>d3%e{hzitO6P8qQRdR+h-lm>F~(cfqwln7HfS3?vxbTH@n5qBLo=* zk6J{>Agl(J(&mTK ze1pzAUfK%RO5IA2#zup_vH)GZPQHXh5JG&YC?uD3&%i?x*R$67t5KmOpJ>om?y~Ez zINf>x>dWz^UY<=y;gj;9r(YA6en}WYNr|1QM-s^+t~f{l z&W7q}9o!GihlMNhJQesY<0Br@t?5i5Ti{cJi*~bq`wwx6?U>`XdSSyMZzoZ)p|2)! z36s-^Grq4;AVz8UDdG;rM)VTt`~g1K2fY6?@5gy>g_kQ_)XVxZ74u{+h5GFP4U%Nc^Z%0R6ZYti3Pe%v{5y(skL+8Le`iidAhvRYxwYk$y?dI0 z)|9~dnx*E}rna`0Hh8;6g9kPKL4R!vg`{E}Jod~ss@$URpiZ@)#;+yTbg4j@7POy{ zcb6^$@Uj-Pj!6_x@foes>XwHa&-NXyGIQkhqmMU1dHq2JZ?A!R)nb#Cv%&59s?5(5 zy`JGLC~r`$`WD{ohCL0>(#3GLA!vE}>*01om3_Bg #include @@ -45,18 +45,34 @@ $ sudo ifconfig wlp5s0 up #include "lo/lo_lowlevel.h" #include "lo/lo_osc_types.h" -#define PACKET_LENGTH 400 //Approximate +// OSC destination; localhost supercollider running @ default port (57121) +// @TODO get this from argv? +lo_address osc_dest; + + //Approximate +#define PACKET_LENGTH 400 #define MAX_PACKET_LEN 1000 -// ESPNOW data payload starts at byte 60 -#define ESP_DATA_OFFSET 57 - -// Sensor message -#include "../src/sensor_msg.h" - // Maksimalno stevilo #define ST_SPREJEMNIKOV 10 +// Receiver MAC start at byte 52 +#define WLAN_DA_OFFSET 52 +/*our MAC address*/ +uint8_t sprejemnikMac[] = { 0x9c, 0xb6, 0xd0, 0xc4, 0xe8, 0xb9 }; +uint8_t wlan_da[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; + +// ESPNOW packet identifier +#define ESP_ID_OFFSET 82 +uint8_t esp_id[] = { 0x18, 0xfe, 0x34, 0x04 }; +uint8_t pkg_header[] = { 0x0, 0x0, 0x0, 0x0 }; + +// ESPNOW data payload starts at byte 87 +#define ESP_DATA_OFFSET 87 + +// Sensor message +#include "../src/sensor_msg.h" + uint8_t odcitekId; sensor_msg odcitki[ST_SPREJEMNIKOV]; bool poslji[ST_SPREJEMNIKOV]; @@ -66,9 +82,6 @@ struct timeval cas; struct timeval zdaj; int eps = 0; -/*our MAC address*/ -//{0xF8, 0x1A, 0x67, 0xB7, 0xeB, 0x0B}; - /*ESP8266 host MAC address*/ //{0x84,0xF3,0xEB,0x73,0x55,0x0D}; @@ -102,17 +115,52 @@ static struct sock_filter bpfcode[FILTER_LENGTH] = { }; void print_packet(uint8_t *data, int len) { - /* - char macNaslov[18]; - snprintf(macNaslov, sizeof(macNaslov), "%02x:%02x:%02x:%02x:%02x:%02x", - mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); + // Beri samo primerne pakete! + memcpy(&wlan_da, data + WLAN_DA_OFFSET, 6); +#ifdef DEBUG + printf("Dest MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", wlan_da[0],wlan_da[1],wlan_da[2],wlan_da[3],wlan_da[4],wlan_da[5]); +#endif + + /* DEBUG - print whole raw packet */ +#ifdef DEBUG + for (int i = 0; i < len; i++) { + printf("0x%02x ", data[i]); + } + printf("\n"); +#endif + + // Ignoriraj pakete, ki so namenjeni drugam + for (int i = 0; i < 6; i++) { + if (wlan_da[i] != sprejemnikMac[i]) { + return; + } + } + + // Ignoriraj pakete, ki niso ESP paketi! + memcpy(&pkg_header, data + ESP_ID_OFFSET, 4); + for (int i = 0; i < 4; i++) { + if (pkg_header[i] != esp_id[i]) { + return; + } + } + + // Stetje paketov na sekundo + eps += 1; + gettimeofday(&zdaj, NULL); + + if (zdaj.tv_sec != cas.tv_sec) { + printf("Paketov na sekundo: %i\n", eps); + eps = 0; + gettimeofday(&cas, NULL); + } - printf("%s\n", macNaslov); - */ - //printf("Prejel podatke dolzine %i \n", len); // ID senzorja - odcitekId = (uint8_t) data[ESP_DATA_OFFSET]; + memcpy(&odcitekId, data + ESP_DATA_OFFSET, 1); + +#ifdef DEBUG + printf("Odcitek ID: %i\n", odcitekId); +#endif // Vrednosti memcpy(&odcitki[odcitekId], data + ESP_DATA_OFFSET, sizeof(sensor_msg)); @@ -130,18 +178,6 @@ void print_packet(uint8_t *data, int len) { printf("bat: %f \n", odcitki[odcitekId].bat); #endif - - - - eps += 1; - gettimeofday(&zdaj, NULL); - - if (zdaj.tv_sec != cas.tv_sec) { - printf("Paketov na sekundo: %i\n", eps); - eps = 0; - gettimeofday(&cas, NULL); - } - return; // @TODO locen thread za posiljanje? char glava[32]; @@ -176,6 +212,7 @@ void print_packet(uint8_t *data, int len) { sporocilo = lo_bundle_serialise(svezenj, NULL, &dolzina); lo_bundle_pp(svezenj); + lo_send_bundle(osc_dest, svezenj); printf("%s\n", sporocilo); lo_bundle_free(svezenj); @@ -183,12 +220,6 @@ void print_packet(uint8_t *data, int len) { //free(sporocilo); } } - /* DEBUG - print whole raw packet - for (int i = 0; i < len; i++) { - printf("0x%02x ", data[i]); - } - printf("\n"); - */ } int create_raw_socket(char *dev, struct sock_fprog *bpf) @@ -221,33 +252,33 @@ int create_raw_socket(char *dev, struct sock_fprog *bpf) return fd; } -int main(int argc, char **argv) -{ - assert(argc == 2); +int main(int argc, char **argv) { + assert(argc == 2); - uint8_t buff[MAX_PACKET_LEN] = {0}; - int sock_fd; - char *dev = argv[1]; - struct sock_fprog bpf = {FILTER_LENGTH, bpfcode}; + uint8_t buff[MAX_PACKET_LEN] = {0}; + int sock_fd; + char *dev = argv[1]; + struct sock_fprog bpf = {FILTER_LENGTH, bpfcode}; - sock_fd = create_raw_socket(dev, &bpf); /* Creating the raw socket */ + sock_fd = create_raw_socket(dev, &bpf); /* Creating the raw socket */ - printf("\n Waiting to receive packets ........ \n"); + // @TODO get this from args? + osc_dest = lo_address_new("localhost", "57121"); - gettimeofday(&cas, NULL); + printf("\n Waiting to receive packets ........ \n"); + gettimeofday(&cas, NULL); - while (1) - { - int len = recvfrom(sock_fd, buff, MAX_PACKET_LEN, MSG_TRUNC, NULL, 0); + while (1) { + int len = recvfrom(sock_fd, buff, MAX_PACKET_LEN, MSG_TRUNC, NULL, 0); - if (len < 0) { - perror("Socket receive failed or error"); - break; - } else { - //printf("len:%d\n", len); - print_packet(buff, len); - } + if (len < 0) { + perror("Socket receive failed or error"); + break; + } else { + //printf("len:%d\n", len); + print_packet(buff, len); } - close(sock_fd); - return 0; + } + close(sock_fd); + return 0; } diff --git a/linux-receiver/monitor_off.sh b/linux-receiver/monitor_off.sh new file mode 100755 index 0000000..0fedd37 --- /dev/null +++ b/linux-receiver/monitor_off.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +rmmod ath10k_pci +rmmod ath10k_core + +modprobe ath10k_core +modprobe ath10k_pci + +systemctl start NetworkManager diff --git a/linux-receiver/monitor_on.sh b/linux-receiver/monitor_on.sh new file mode 100755 index 0000000..dbed0d9 --- /dev/null +++ b/linux-receiver/monitor_on.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +dev=${1:-wlp3s0} +chan=${2:-1} + +rmmod ath10k_pci +rmmod ath10k_core + +systemctl stop NetworkManager + +sleep 1 + +modprobe ath10k_core awmode=1 cryptmode=1 +sleep 1 +modprobe ath10k_pci +sleep 1 + +ifconfig $dev down +iwconfig $dev mode monitor +ifconfig $dev up +iwconfig $dev channel $chan diff --git a/linux-receiver/pozeni.sh b/linux-receiver/pozeni.sh index df49dc1..eceb19e 100755 --- a/linux-receiver/pozeni.sh +++ b/linux-receiver/pozeni.sh @@ -1,3 +1,5 @@ #!/bin/bash -sudo ./bin/receiver wlxd0aeec558360 +dev=${1:-wlp3s0} + +sudo ./bin/receiver $dev diff --git a/linux-receiver/prep.sh b/linux-receiver/prep.sh deleted file mode 100755 index b8b775c..0000000 --- a/linux-receiver/prep.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -dev="wlxd0aeec558360" -chan="1" -# sudo bash prep.sh *iface* *channel* -# sudo bash prep.sh wlp1s0 8 -ifconfig $dev down -iwconfig $dev mode monitor -ifconfig $dev up -iwconfig $dev channel $chan