Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion erfordert derzeit den Zugriff auf die Seite über den integrierten Safari-Browser.
Ich kenne das Tool nicht aber es klingt so ein wenig danach, als ob es auf irgendein Device unter /dev/ zugreifen muss.Derzeit funktioniert der Zugriff nur, wenn ich die Programme (welle.io, rtl433, gqrx und Co) per sudo starte.
FreeBSD_13% rtl_433Ich kenne das Tool nicht aber es klingt so ein wenig danach, als ob es auf irgendein Device unter /dev/ zugreifen muss.
Ein Lösungsweg wäre zunächst nachzugucken welches Gerät das denn überhaupt ist und wie die Rechte/User/Gruppen bei der zugehörigen dev-Gerätedatei gesetzt sind.
Was heißt eigentlich "funktioniert nur" ? Gibts irgendeine Fehlermeldung oder so wenn Du es als non-root-User startest?
Eine Änderung von 755 auf 777 brachte keine ÄnderungGib deinem User mal die nötigen Berechtigungen auf das entsprechende /dev/ugen* Device.
Ergänzung dazu:Gib deinem User mal die nötigen Berechtigungen auf das entsprechende /dev/ugen* Device.
usbconfig
kriegt man auch alle USB-Geräte aufgelistet. Mit devd könnte man auch ne Regel erstellen damit der eigene User Zugriff auf das Gerät bekommt. So a-la:notify 100 {
match "system" "USB";
match "subsystem" "INTERFACE";
match "type" "ATTACH";
match "vendor" "0xbda";
match "product" "0x2838";
action "chown myuser /dev/$cdev";
};
Denk dran, das die Device-"Files" /dev/ugen* nur Symlinks sind. Wenn Du darauf ein chmod machst änderst Du nur die Symlinks nicht die dahinter liegende Datei.Eine Änderung von 755 auf 777 brachte keine Änderung
EinDenk dran, das die Device-"Files" /dev/ugen* nur Symlinks sind. Wenn Du darauf ein chmod machst änderst Du nur die Symlinks nicht die dahinter liegende Datei.
Mit der oben genanten Methode werde ich mich garantiert noch eingehend befassen.Man könnte das jetzt noch "pimpen" mit der oben vorgeschlagenen Methode. Weil so wie es jetzt ist hat ja jeder Zugriff drauf. Das könnte man dann sinnvoll einschränken auf eine bestimmte Benutzergruppe oder Deinen Nutzer. Außerdem ist es dann "dauerhaft" und Du musst es nicht erneut z.B. nach einem Reboot setzen.
Du musst eigentlich nur mit usbconfig (Infos mit allen Details:Mit der oben genanten Methode werde ich mich garantiert noch eingehend befassen.
usbconfig dump_device_desc
) nachgucken, welche vendor-id und welche Product-id das Gerät hat und entsprechend eintragen (auch die action musst Du natürlich auf Dein Usernamen anpassen). Dann modifizierst Du den oben genannten Eintrag entsprechend und packst in in eine conf-Datei unterhalb von /usr/local/etc/devd/. Der Dateiname ist egal. Den kannst du frei wählen. Wichtig ist nur, das es auf .conf endet.Nicht wirklich.Hat einer von euch ein bisschen Erfahrung mit SDR Sticks? Gleich ein Kit von Nooelec kaufen, damit man sich später nicht mit untauglichen Buchsen, Temperaturverhalten des Empfängers, fehlenden Adaptern und Antennen rumschlägt? Bin kein Funkamateur, aber ein bisschen was aus dem Physik Studium ist hängengeblieben.
Danke, ich habe es hinbekommen.Du musst eigentlich nur mit usbconfig (Infos mit allen Details:usbconfig dump_device_desc
) nachgucken, welche vendor-id und welche Product-id das Gerät hat und entsprechend eintragen (auch die action musst Du natürlich auf Dein Usernamen anpassen). Dann modifizierst Du den oben genannten Eintrag entsprechend und packst in in eine conf-Datei unterhalb von /usr/local/etc/devd/. Der Dateiname ist egal. Den kannst du frei wählen. Wichtig ist nur, das es auf .conf endet.
Detaillierte Infos zum Dateiformat: man devd.conf(5)
Für SDR-Anfänger ist der "RTL-SDR Blog V3" und der ADALM-PLUTO (auch PlutoSDR genannt) ein guter Einstieg in die Welt der SDR's und ermöglicht den kostengünstigen Empfang von schmalbandigen Funksignalen. Der RTL-SDR eignet sich für den Empfang von niederfrequenten Funksignalen bis rund 1 GHz. Für den Empfang von hochfrequenten Funksignalen über 1 GHz eignet sich der ADALM-PLUTO.Hat einer von euch ein bisschen Erfahrung mit SDR Sticks? Gleich ein Kit von Nooelec kaufen, damit man sich später nicht mit untauglichen Buchsen, Temperaturverhalten des Empfängers, fehlenden Adaptern und Antennen rumschlägt? Bin kein Funkamateur, aber ein bisschen was aus dem Physik Studium ist hängengeblieben.
// The purpose of this program is to provide a rudimentary spectrum plot.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define FFTSIZE 256
double omega_r[2048];
double omega_i[2048];
double tmp_r[2048];
double tmp_i[2048];
#define PERMUTE8(i) (((i & 0x001) << 7) | ((i & 0x002) << 5) | ((i & 0x004) << 3) \
| ((i & 0x008) << 1) | ((i & 0x010) >> 1) | ((i & 0x020) >> 3) \
| ((i & 0x040) >> 5) | ((i & 0x080) >> 7))
#define PERMUTE9(i) (((i & 0x001) << 8) | ((i & 0x002) << 6) | ((i & 0x004) << 4) \
| ((i & 0x008) << 2) | ((i & 0x010) << 0) | ((i & 0x020) >> 2) \
| ((i & 0x040) >> 4) | ((i & 0x080) >> 6) | ((i & 0x100) >> 8))
#define PERMUTE10(i) (((i & 0x001) << 9) | ((i & 0x002) << 7) | ((i & 0x004) << 5) \
| ((i & 0x008) << 3) | ((i & 0x010) << 1) | ((i & 0x020) >> 1) \
| ((i & 0x040) >> 3) | ((i & 0x080) >> 5) | ((i & 0x100) >> 7) \
| ((i & 0x200) >> 9))
#define PERMUTE11(i) (((i & 0x001) << 10) | ((i & 0x002) << 8) | ((i & 0x004) << 6) \
| ((i & 0x008) << 4) | ((i & 0x010) << 2) | ((i & 0x020) >> 0) \
| ((i & 0x040) >> 2) | ((i & 0x080) >> 4) | ((i & 0x100) >> 6) \
| ((i & 0x200) >> 8) | ((i & 0x400) >> 10))
void inittwiddle(int n)
{
int i;
for (i=0;i<n;i++)
{
omega_r[i]=cos(2*M_PI*i/n);
omega_i[i]=-sin(2*M_PI*i/n);
}
}
void minfft(int n,signed short* block,double* out)
{
int i;
int sigma;
int alpha;
int beta;
int betainc;
int omega;
int omegainc;
int omegamask;
int notmask;
int mask;
double xr,xi;
double yr,yi;
int sigmas=0;
switch(n)
{
case 256:
sigmas=8;
omegamask=0x7f;
notmask=0x1ff;
break;
case 512:
sigmas=9;
omegamask=0xff;
notmask=0x3ff;
break;
case 1024:
sigmas=10;
omegamask=0x1ff;
notmask=0x7ff;
break;
// case 2048:
default:
sigmas=11;
omegamask=0x3ff;
notmask=0xfff;
break;
}
for (i=0;i<n;i++)
{
switch(n)
{
case 256:
tmp_r[i]=block[2*PERMUTE8(i)+0];
tmp_i[i]=block[2*PERMUTE8(i)+1];
break;
case 512:
tmp_r[i]=block[2*PERMUTE9(i)+0];
tmp_i[i]=block[2*PERMUTE9(i)+1];
break;
case 1024:
tmp_r[i]=block[2*PERMUTE10(i)+0];
tmp_i[i]=block[2*PERMUTE10(i)+1];
break;
case 2048:
tmp_r[i]=block[2*PERMUTE11(i)+0];
tmp_i[i]=block[2*PERMUTE11(i)+1];
break;
}
}
betainc=1;
omegainc=n/2;
mask=0;
for (i=0;i<n/2;i++)
{
alpha=(i<<1);
beta=alpha | 0x01;
xr=tmp_r[alpha];xi=tmp_i[alpha];
yr=tmp_r[beta]; yi=tmp_i[beta];
tmp_r[alpha]=yr+xr;tmp_i[alpha]=yi+xi;
tmp_r[beta] =xr-yr;tmp_i[beta] =xi-yi;
}
for (sigma=1;sigma<sigmas;sigma++)
{
double omegar;
double omegai;
double mulr;
double muli;
omega=0;
betainc<<=1;
omegainc>>=1;
mask=(mask<<1)|0x01;
notmask=notmask<<1;
for (i=0;i<n/2;i++)
{
alpha=((i¬mask)<<1) | (i&mask);
beta=alpha|betainc;
omegar=omega_r[omega];
omegai=omega_i[omega];
xr=tmp_r[alpha];xi=tmp_i[alpha];
yr=tmp_r[beta]; yi=tmp_i[beta];
mulr=omegar*yr-omegai*yi;
muli=omegar*yi+omegai*yr;
tmp_r[alpha]=(xr+mulr);tmp_i[alpha]=(xi+muli);
tmp_r[beta] =(xr-mulr);tmp_i[beta] =(xi-muli);
omega += omegainc;
omega &= omegamask;
}
}
for (i=0;i<n;i++)
{
out[2*i+0]=tmp_r[i];
out[2*i+1]=tmp_i[i];
}
}
//export PS1="\e[1;30m#\e[0;34m#\e[0;32m#\e[0;36m#\e[1;32m#\e[1;36m#\e[1;33m#\e[1;37m#"
const char *colors[8]={"1;30","0;34","0;32","0;36","1;32","1;36","1;33","1;37"};
const char symbols[4]={'.','o','O','#'};
void printenergy(double* energy,int fftsize,int columns)
{
int i;
double min,max;
double delta;
// TODO : reduce energy[fftsize] to energy[columns]
min=max=energy[0];
for (i=0;i<fftsize;i++)
{
if (energy[i]>max) max=energy[i];
if (energy[i]<min) min=energy[i];
}
delta=max-min;
if (delta==0) delta=1;
for (i=0;i<columns;i++)
{
double intensity;
int y;
intensity=32*(energy[i]-min)/delta;
y=intensity;
if (y>=31) y=31;
if (y<=0) y=0;
printf("\x1b[%sm%c",colors[y/4],symbols[y%4]);
}
printf("\x1b[0m\n");
}
int main(int argc,char** argv)
{
int i;
signed short input[FFTSIZE*2];
double fftout[FFTSIZE*2];
double energy[FFTSIZE];
int n;
int cnt;
int p;
int interval;
if (argc!=2)
{
fprintf(stderr,"please run with\n");
fprintf(stderr,"cat INPUT.iq | %s INTERVALL\n",argv[0]);
exit(1);
}
interval=atoi(argv[1]);
cnt=0;
inittwiddle(FFTSIZE);
for (i=0;i<FFTSIZE;i++) energy[i]=0;
while (!feof(stdin))
{
n=0;
while (n<(FFTSIZE*2) && !feof(stdin))
{
n+=fread(&input[n],sizeof(short),FFTSIZE*2,stdin);
}
minfft(FFTSIZE,input,fftout);
for (i=0;i<FFTSIZE;i++)
{
if (i<FFTSIZE/2) p=i+FFTSIZE/2;
else p=i-FFTSIZE/2;
energy[p]+=sqrt(fftout[i*2+0]*fftout[i*2+0]+fftout[i*2+1]*fftout[i*2+1]);
}
cnt++;
if (cnt>=interval)
{
printenergy(energy,FFTSIZE,FFTSIZE);
cnt=0;
for (i=0;i<FFTSIZE;i++) energy[i]=0;
}
}
}
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen