From 9b23d8a620e8992bf80c3bfef9c4e1ce50d40a8f Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Sat, 26 Nov 2016 16:49:03 +0100 Subject: [PATCH] Started linux port --- software/linux/.clang_complete | 1 + software/linux/Makefile | 40 ++++++++++++ software/linux/bin/libsss7.so | Bin 0 -> 13352 bytes software/linux/bin/sss7core/sss7.o | Bin 0 -> 4384 bytes software/linux/bin/test | Bin 0 -> 13064 bytes software/linux/bin/test.o | Bin 0 -> 1240 bytes software/linux/libsss7.c | 96 +++++++++++++++++++++++++++++ software/linux/libsss7.h | 21 +++++++ software/linux/test.c | 11 ++++ 9 files changed, 169 insertions(+) create mode 100644 software/linux/.clang_complete create mode 100644 software/linux/Makefile create mode 100755 software/linux/bin/libsss7.so create mode 100644 software/linux/bin/sss7core/sss7.o create mode 100755 software/linux/bin/test create mode 100644 software/linux/bin/test.o create mode 100644 software/linux/libsss7.c create mode 100644 software/linux/libsss7.h create mode 100644 software/linux/test.c diff --git a/software/linux/.clang_complete b/software/linux/.clang_complete new file mode 100644 index 0000000..92bd311 --- /dev/null +++ b/software/linux/.clang_complete @@ -0,0 +1 @@ +-I../sss7core diff --git a/software/linux/Makefile b/software/linux/Makefile new file mode 100644 index 0000000..200be47 --- /dev/null +++ b/software/linux/Makefile @@ -0,0 +1,40 @@ +VERSION = 0.1 + +HEADERS = ../sss7core/sss7.h libsss7.h +OBJDIR = bin + +CC = clang + +CFLAGS = -I ../sss7core/ -Os -Wall -Wstrict-prototypes -fPIC +LDFLAGS = -Wl,--gc-sections + +all: start $(OBJDIR)/libsss7.so $(OBJDIR)/test + @echo ":: Done !" + +start: + @echo " SSS7 linux port $(VERSION)" + @echo "==========================" + +$(OBJDIR)/test : $(OBJDIR)/test.o $(OBJDIR)/sss7core/sss7.o $(OBJDIR)/libsss7.so + +$(OBJDIR)/%.o : %.c $(HEADERS) Makefile + @mkdir -p $$(dirname $@) + $(CC) $(CFLAGS) -c $< -o $@ + +$(OBJDIR)/sss7core/%.o : ../sss7core/%.c $(HEADERS) Makefile + @mkdir -p $$(dirname $@) + $(CC) $(CFLAGS) -c $< -o $@ + +$(OBJDIR)/%.so : $(OBJDIR)/%.o + @mkdir -p $$(dirname $@) + $(CC) $+ -shared $(LDFLAGS) -o $@ + +$(OBJDIR)/$(TARGET) : $(TARGET).o + $(CC) $(LDFLAGS) $+ -o $@ + + +clean : + @rm -rf $(OBJDIR) + +test: all + $(OBJDIR)/test diff --git a/software/linux/bin/libsss7.so b/software/linux/bin/libsss7.so new file mode 100755 index 0000000000000000000000000000000000000000..a314a4ba36b2cade606131e6568ef454b758c5af GIT binary patch literal 13352 zcmeHOeQX@X6`%9P!H~q~n2>~oGz%o)RP?YD#dShM?(8_ZP$y8^A!#9O&UfpN_UyCn z*2WH1W8{>^xS>({AwWpbimz6x8dV6TNKFkvXDqXYCftU+nNPyayi(_Ji6u}KyV1ByH!Otkpb|jMB8D)1y*)g9`Lt$Rw zxDhwKVJGLH{BXzty!=+B$DDMDz5+XH??0s~rP!+4D>c4|8W(fbZLu2mYm^TIe32>> zqpn|x;|d&V_$UccBY&MA3inDJ^KfvCuSR(>j>~XV<6xrLT#92Aj?XFZD)8kvE><$J zr8uZxr6}mBxB&8J&58M_zfiNGSo3LKqVP+=X$o>YFH$(ON)#?<0eqQO_AAo(4WEj; z5F~CxuYMRpHKKT>nlC(_!xGmuo${OTqsNvtK9v3!i$jLNkmPsZ*H54NQZ43-J*r(c z`Xl@-6idW+l^=+bo>%x`5B?q0`uVq@?>FAX!2R@puKeHQ@&BOIpC{^7Kl%Is7KZGZ z`{#txk0^aQzeLvp_v_DNsPn@=1y1LsM){$6Ky)D{P!-~HuVF};f0n~P#qEf~`MUlU z6v)p!<%i}t(WkOMON!3dYp5fAc@d&a*B8+bq3;*BKcJ5E^QwbTlXOuD{dbkVQ2Hbj zrE&QA50&t93-k>fUfK+Ozj)qJ0>7~Yz7~!RuXD(&OX#x2&X7POEY%owY<~qR&o=R8L1X zoBg7hh@)FpU$OvnS+<$65?0S3tXZo&o-GDlW+a%M@t%}sC5Kz^k+swPBHeHGiGC}S zNoPdHiYGo=$a!hVwI<@EQ##8>U(f*Kb7)8m>;EG>K@q zeqWAhxc=^RlZNZ>D0?)V-piQwY53M`rzUqq%FmEY(?2&N<)=udQY*%c}x!Bkn zvC(stgO?yogVj!$F5H`+>I|*iBE;U46qU|!Xyrk+k4pRX8y)-eWdHQ}U~KGc?CI&v zvB0U=OXuySaCWD1Hs5jP*n9nrYGWOy0gOEqh1qRBeA3>>ZV&pnuKlk=;a84hA z#q<=w<8;n3#Ur;wZ;P5IW8(|nsxmOX(G4Q>gNc&>%I^aZdQwpFQ55eMP+il|KeH-jG}7NLi^$M#Ctb5&@KUqZB#RKv$Ez&Rka(K#h*62SGDE$2S_g z`skg-u+s)T-VNuG-k;9cWD-~&ylxLTP4d(y`8O>0C)Hi%^1p4}Oj_^-# z)C1R_mxM1uM{0oc8U@fS%|>800<#gAjlgUKW+N~gf!PSmMqoAqvk~~8M}YSod7qIx z#A_+q!z7{&5F*}h=RGa{&P3kPekJc+@%|>Q4T-pZjw1?MI}-64>~Y%J z0VyUXo#mih%M!j!$-KtnH63jrNiqz{l$vNz{%M^?#Cv)C-SD_t%rV}eHc7dkBg&rl zPPsiS_vllLSgI33wG-|f(+_lE2$F_c*v9`9ZzP4dqtw^NeeO<<& zmC5#``;2wr4dGg&#*TMouWfB^X^yrvo9i~zUMs)mtnrS*EeEl~&ht~R31VNL=cOAD z3ZB1ie2(CG;Ks`f^T&ZzPC>t_a368&FBE+LaO2fta)qHovK&Mfg5UfM zVz-CCo9ISCfgKw)pWOIj!Sl?G7k}ra`k>5s&^4WJGjqgyc{l3ZR|EKB>Fqz=Ps`{l zu_yj?UnM-^!NUso-p6TgEr9RWht#?e)zcnQPN%b4d7(){awL=HcI`* zMeX?EzmR@HqGlm`aQLq!UK|Ii_4D&Psb73vUXgh5d4HW8`OL%jrG9aK#d(Pr&j;Gu zGf?NHTHroYST_y1S(tmM3?<}Ezzr>64Kpq0_mj}Xm8ix%- z_6ll}Xz$#wpDzIS8}Hvr=>HQqwd>6TnTrQA#mAcmvIw}L`k=EbmA*F*qz<@We;P~l zGphV}^FVe=KgD?-aL?u^2661kKtQN-qqvAqczcm*<>W2R#k+tLaMX)Wwv zTg#1&(H8T@ty|lg+s*c9V@osKenu9IObMCE*x+mwSBi>EXNg4gqzajc;f7Q$hRlp{ zvSB>+G9yQ(esDU66gbfXrzC5+O=Rba@=YkI#jWR`Pf|!X@uUVx?LxANY(vY0;RwiF z8ktNolRv|Cu3Q~G`GghpRGmT+jJwaes?6CbQBC0hgV2`65;G{uO06Iw=)j!<`UxBEyBs+KBzbxDMR6| zzJaiMt#=6~>M~X;P6n#fpRz?*_9={FxGN3OwubO4CtWy`mU%*9t6N=|-AOoM$uV`V zP{)GHUr#^{&BS|q66izPCig%n=_rhxBN4{Eq8Hb{&zW#SRoG7HrS!Ddr<3;>Y9Pt?V0>Ltb|==Y0k8 zPv3pL@rwhaCU_r%_feSh{sUAb@p)tURupu5UdJ(?VnxOI8O^-QW6$e7=G1gVCup-PRs@p}Muls}*@v%)%x^ZUK}EHi%`wzRZndtL{hUI7rq zdX6+BGyViBsEcgR>&?l3W6%C5-ufOkA$!Oi& zkm795{27mZVV!O`1|tqD{IVVM=TM`!&+GXS!!cn!cHos?LIq(wK7Ox1WH=T)PDgU? zHC!g{tV@Nc)j^cmewznZ;go%*Dq1dc+q&xZYaGd0-_F#qJtHLZ+-HpVq~Sp0v7m{3!Jvs)8%V0AP-1${?9Lp+(laJbx;yXv zX5PH_=FPk9!TN@EGc--HXlk{()nlsE&azwWpxq3r67V#7@50`oji^&Kl=e~czcu#a8fJ9yFxdho9?;f|a z*$-s6>x`YdK_iug+|`^*7KbLzhq`{&>eGIh5<`wXOsQCUP0duQz(_74?>+COuYTYI274LTXae4;{m0UJa%f=EhE)ngV8Leb6%lnq&c=v3)r& zt`Vmm$DXBC>6zLAF`|aTKom8$%IIB!4L!3FV%jIBXX=XY^gmp$rcS5pRh>UxFzE5X z5F>Tgw|z%H&5p(U7)=;dwTFwkCYQzU?e%4cU|;)+bG4#5i{oK>1}=*|?W*F$e53EO zmsjEU7VG7OhkX+xU6-}AuOC;LS0b(9_T3eG&3GajYp+-qs0~zBEVRPA6H6QG8|p(_ z>YJ9;RxWLcwuf66L6EyCkoIDu(mMUx{L(_-Q8-FJ@cYQNjx@4LYM&&H)60NGcPMs}3iRiyK&D9q(mz6&{0159JwtmNaWBQ;Jz+{PP9=r1a{=sgc*@luS+t|D zegoRbF&8Km_FJhBKu_oYR32Up0dZblH=ox$;24K9!TR|;aSjsa^|0PSaX{I^dQ%>L zk>ao)Ys}+x`+71DFNT4<276+9{SJCMPRF5&z>c4;zq5|8FY;2s=R+F>c?mr1{}4hD z;SDC+9>FYHNzbDg@Sw*Jj^#B1VJv>`Ls>%^lug%_rh^vg3I-MCAeJA z*MiIS{2;gvZH|9Q@Y#Z25gdOL*#9r$SZ8wuzbW`Vg7d#1mfqtg3CJDCb+BHEq8JL{unOK-_M;c&fm!{7w7Nl+b+)E zZIwtQRyK9SV-YivXtFwQ@5eh;Aa1sX1D4rosX!#w)@HU_j!(2bN-e9isUwzfXk4^& zQKOMPWVWJhW-MtnMPkWz%Zxi?VEnFROAB`)gsU5CZ8j5@n}#D+bg#)Y&>pkQ!1_&F zmn5ukWKS+~YZyi%NQUE9QwPkwYrkdQZnlYS-)%}eL;_bQ1Lkv0E%9(0jZB#B%}xv) z5jP_yEQJVcrzIS172QZYq5^@XnCeI@ZrY6ipoA5-!n;84Z?mUgXm+K6aGC`O(ik|6*V`e+cwZ^!j(6+@i^`;1OR{h*AIoO*QIl-keG9>< z)6f;os;OADwN9(=XcLJ_rCM)z1jQj`CfJH+5($Ra48U13zGH}`z2)Fg>ZabiVCX~lZ9Vg zD9#s?fE3~K%Nn94$8=P=X6jIScF;mxl?5hHS>Trp(+f=)ZJ337NR-+eFMh?E^l7Il zG8Muj0kWgMo}42^&@GZ-s;PeLQ_*B7EkYJGOj7ORG0+~8yb_;FOCh^oN`to=ZQ+s zmaMvI@*!r4Jr>-YTC;NWr$fI~%o24<-=n-y+k|&0oMST&_;fK%Jfy~hQWx`;{sR{M zL8;GLB|R2|)>@ZqT@UM_2e=$5z=GRVW{ zz<(j}5^-#bUuwTD??U_@l;ZP{dR`v?&nf&TmN<~zbiCz#4nH^{*2=pOM?j}z1o(>m z3Q=ThOFND2SS)r0MzbKQ8=ZP%u%$KJAoRwT_7)S2cIuJVhH%W#x5gVA!%-0rMh(3w z40(qU7P{Wl7HQXG2BErH*%4Qj(rZUF5(>v+dbHDYNT$(nDBQ9Q4XG}`KGKmPz?rGc z#)dLRJ7`q;MaP06175ge5=FlaaulLDx(wYTUUjc6*wQZaa6`}tq5{uu;(*#4(mvHw zuB)x7TCG=jE4)i7Vz#V5o_U1k*1iLX=T`iJ7EHkcagiD~gY&jX3!3lzP6;@ffz!O@ zGMa(YJmylS-aoAiG{?DkGH_ZuxGc!P)xQo|<;%cn9pa)TK5}UH7X7KrBeY!yjDpmF zmUz+8$JHXW^eI%O=0Aywrk zb!y4?w#|M9-eh-6H$P7msbh_hHuq648@(()NA;VuogYgFy<>Jb(2^&$-oaIx z?Vxse%$S+>HkG}(=D`nKqW!L`hGuz$h?j1H;b1$SVDrJEzXGzImMuLm@DEf=tP=5} z;Rj)tc6N#kQUjZZZih|d?mDgKDjEob!(#}-fx*`$xv@{{DLM*o{j&2A4nZh?x!VEu z1+bFoW#*5}+|A4#lIg4MDf%(EK%!C@Q(@W&;h?bfx!lFIJ=2=0%C*pjiny#0<*$~H z1S&2s#VX?3e<*qA@W;u|c7AprIx*5~bFCRmo;f^}JhXF!5dTO&pi_lo@z=D}3tHl= zJN_a(6~dFh+ZX7UQv<*!=cRjIj5^tK2Q#CnJSg@)zZVXNUiu=H+Bovnzr=cW^y zuS2wmBcwGjsCMmlm#5YzU#sc;dtt48&YdtTf4QonWZqK_*Zxz_cWu?(ZuA?CiQ)MO#cS}r!WN&5 zhj<0-uv1k+ei$-d=uLf_Hew_d?St5bcfC&Qne#L7_fAcmu^Sr_X9|ql5@&3#T~EMg z`3Zmb0w{l1+KxRx25hkQpQ%*8ou(&hnot9s;qBm;NG%#8>%p1harhSWYBogI{^bXy zg-=>k4i-r_@FIp+Xg!PON}cue#y+1x>MN(1`ai=08{J!Q#-f zi0HT&SHq}I$?Oq-{SS8Hu+&~a%2rWq-MOWCHidI@}uz& z%?AnG9M~MVC7}219$$Y>_t9fwja94aVxz5Nv0?1EJ|Kh-GhiCl0lwBi-iqrnT(;Tv zD;p3ZTHCwPjeVd;K)XN(5X>W>gPKLz zL0GpSS^DLUP2 zon_a!rfzq1iB%U|dD)UnFD97m*Wfw{zhwjjoNgk7-;9g!wFIa_xPfafp7kjPK?$cB z_6%_OTMd2^7}nH>CvhD?EM5mC{{d%N!0AcY??OGg%VtXw3=}P~~*rUr^;N`+>dM>FFt~axS>9NOSt`nxr`^6UFPD{;0Du;PeHY3#yzR z=s~~A>5%QNM9fdZ54tf?CL%Bqfr$uAL|`HU6A_q*z(fQlA}|qwi3m(YU?Kt&5%@16 z(4o#j>J(*D^?5^mw>Qu3sE)qbQz`)cK~EK3AQsWd3G^y& zcc8-cg{CMv3;dF!kCRl~MSe-?J0q1cyI;~N@-D<8)p7o&FTatXZl%JI5}ydQ z2HTrF+rrUUOQhYi#Jk+<^DHoeO|iurs%xtQ8>{st%YBP+!WL{@Xzfov*^bd#S>Vs9 zvg7U6=f&;m@s(+0$3X*+t8Ba|J^r%sNh05Svt#t|`_9&P2p%`t_~i8X%Et4YOG3ep zubXu${@MB^>3ofBJomhq>g_n~-h<;KYq8_Ro%0Mb>+CqS^G(aAUz(op+4|E3&+}{? zC-y3TA{(EP&a24AX9_+S%*M|XLe1lBe3tO%#d%haYtuX|6sJ<-h{@5s&WBU3fsHZ_ zEdBQYFTm?wq^TmfW^7%hT6(To};sc47=8T`y63@-A z7*#kOS7w$%1ki@B$kz4E%+tt?k4FYPclA*eaBWB$%0-mqk#S$+OblgoPEbl_BQn)q${qxo@8u})e0eV)DE&t*evV81JpXqnZ^RoCp{Nlvkmmwc*RNThaa10s^5xuE3vNhPMHyDvBN7lbHsy=EiFS>uXj6%+QjVJ%I2VNUzp(vjJ_*2BEL3 zy{;-yt6#Tv?Z)bQy*^M?TTPA1gqu(-o}ELa(rRRm&Ul^?i=k-9Ou&hyQ*oe_Wz*6Y zjv%in6p6RvEu_CT(V}g#z6nyzLPq>`BnYD9&%sXgvhzj(6* z9d*%gYmf{S*U@SSuZ)`42zP>)xn|yIMCN6A!_8{+H#fkRCDX#32Brn`-w8nt-h*u| zm=jGAIK<5>TR}917xS?Vb4)H{|MQLZd-zw7{y)gS%Q?T7_j}wB>1LKoAkZEQ%aAPm z`@U?K=znkOY43OCt7|1iwYh!uvOtX?>?XB-`_Tpv-RSkE#w+ z8^p3bum7unkt*BszST_zD7;TKCDRAJtEul{^Dx2@x4qbbAMTnX+7#`&&e|H zLz$PzV-Rrlzo-b<9+jhvfq+nk6%+c@!JlJ;;Pis z-x+*r}8GxD}(ayCZ=~-?D_Y=9%cUtKe+P2cI+}?vFGn1 z52+6){C$A+E$&28*>n7Pf3`>2FJMDOt@aOC?0Fx@dE^aWV*j|sp7(n`^`YlZ%Y^0k z&u)JO#)(T!m-POF^UAIIEHnKBY$?x@?Roz=ItL&M>zUHH%y=&pMO?NFsc|c`P2e%eH{+UM_!x^qp)088>(7qEO&->6phhoSagP#dx*8Gv)#1!uhMtS!x#PH|(TKjYX_!q($uc4xvDROjIOHXmF^ z!NG{wBO!=Iunx=m65^~uFaM!8P+zh7q(hy5f;8ok8m*no1QAn-yY9hI2aibf*{^e_Y!M#fX`c0Rts3ilAQ zR^CBxKh}W<#!HNHfr^dpBTj-8l$o7X5d;z8S-Nbg2(P-0*D#^_V(Yt{w!nAratN!)gdtE^QyU%+Le zL}1LCzJN3+VES}GOpVg1(Y_^@Vli!z|UvfK0X5HT<50ZPL`;{X5v literal 0 HcmV?d00001 diff --git a/software/linux/libsss7.c b/software/linux/libsss7.c new file mode 100644 index 0000000..ea0fd6a --- /dev/null +++ b/software/linux/libsss7.c @@ -0,0 +1,96 @@ +#include "libsss7.h" + +#include +#include +#include +#include +#include +#include + +uint8_t uart_rx_byte; +uint8_t uart_tx_byte, uart_has_tx_byte; + +int serial_fd; + +int libsss7_start(char *serialport) { + sss7_init(); + + serial_fd = open(serialport, O_RDWR | O_NOCTTY | O_NDELAY); + if (serial_fd == -1) { + perror("Error: Unable to open serialport"); + return -1; + } + + //Switch to blocking mode + fcntl(serial_fd, F_SETFL, 0); + + struct termios options; + cfsetispeed(&options, B9600); + cfsetospeed(&options, B9600); + + // 8N1 + options.c_cflag = (CLOCAL | CREAD); + options.c_cflag |= CS8; + + // Raw mode, no features + options.c_lflag = 0; + + // No parity checks, no flow control + options.c_iflag = 0; + + // No output processing + options.c_oflag = 0; + + options.c_cc[VTIME] = 20; + options.c_cc[VMIN] = 0; + tcsetattr(serial_fd, TCSAFLUSH, &options); + + int res = 0; + while(1) { + res = read(serial_fd, &uart_rx_byte, 1); + if(res == 1) { + sss7_process_rx(); + } + + if(uart_has_tx_byte) { + uart_has_tx_byte = 0; + write(serial_fd, &uart_has_tx_byte, 1); + sss7_process_tx(); + } + } + + return 0; +} + +int libsss7_can_send(void) { + return sss7_can_send(); +} + +void libsss7_send(uint8_t msg[SSS7_PAYLOAD_SIZE]) { + +} + +int libsss7_send_failed(void) { + return sss7_send_failed(); +} + +int libsss7_has_received(void) { + return sss7_has_received(); +} + +void libsss7_get_received(uint8_t msg[SSS7_PAYLOAD_SIZE]) { + return sss7_get_received(msg); +} + +void libsss7_stop() { + close(serial_fd); +} + +uint8_t uart_get_byte(void) { + return uart_rx_byte; +} + +void uart_put_byte(uint8_t byte) { + uart_has_tx_byte = 1; + uart_tx_byte = byte; +} diff --git a/software/linux/libsss7.h b/software/linux/libsss7.h new file mode 100644 index 0000000..e26f3ac --- /dev/null +++ b/software/linux/libsss7.h @@ -0,0 +1,21 @@ +#ifndef _LIBSSS7_H_ +#define _LIBSSS7_H_ + +#include "sss7.h" + + +int libsss7_start(char *serialport); + +int libsss7_can_send(void); + +void libsss7_send(uint8_t msg[SSS7_PAYLOAD_SIZE]); + +int libsss7_send_failed(void); + +int libsss7_has_received(void); + +void libsss7_get_received(uint8_t msg[SSS7_PAYLOAD_SIZE]); + +void libsss7_stop(); + +#endif diff --git a/software/linux/test.c b/software/linux/test.c new file mode 100644 index 0000000..7374678 --- /dev/null +++ b/software/linux/test.c @@ -0,0 +1,11 @@ +#include +#include + +#include "libsss7.h" + +int main(int argc, char const *argv[]) { + libsss7_start("/tmp/ttyVA"); + + libsss7_stop(); + return 0; +}