Sceptic
-
Innlegg
272 -
Ble med
-
Besøkte siden sist
Innholdstype
Profiler
Forum
Hendelser
Blogger
Om forumet
Innlegg skrevet av Sceptic
-
-
Tja, ser vel mer komplisert ut enn det det er pga. kommentarene som bryter inn mellom koden antar jeg.
Her er deler av koden uten kommentarer:
// Ekstrakt telefonnr. for (i = 0; i<11; i++) sendernr[i] = smsbuffer[7+i];
Koden over er bare en enkel for løkke som kopierer data fra en buffer til en annen.// Ekstrakt melding for (i = 0, j = 0; i <= MAX_SMS_SIZE; i++) { if (smsbuffer[i] == 0x0a) { i++; while (smsbuffer[i] != 0 && i <= MAX_SMS_SIZE) { meldingsbuf[j++] = smsbuffer[i++]; } break; } if (i == MAX_SMS_SIZE) Serial.println("Fant ingen melding\n"); }
Koden over her er kanskje litt mer innvolvert da vi må finne starten av meldingen, men selve kopieringen er bare en variant av den forrige kodesnutten (while istedenfor for).Prøvde du å kjøre koden?
Sceptic
-
Her er ett eksempel på hvordan man kan ekstrahere informasjon fra en streng.
#include <string.h> //#define MAX_SMS_SIZE 160 // Funker ikke void setup() { Serial.begin(115200); Serial.print("Starting up...\n"); delay(1000); } void loop() { int i, j; static const int MAX_SMS_SIZE = 160; char smsbuffer[] = "+CMT: \"+4722222222\",\"\",\"14/0/0,19:19:23+0\"\n\rPassword led"; char sendernr[12]; char meldingsbuf[MAX_SMS_SIZE]; memset(sendernr, 0, sizeof(sendernr)); //Initialiser buffer med 0 memset(meldingsbuf, 0, sizeof(meldingsbuf)); //Initialiser buffer med 0 Serial.print("Før kopiering av chars...\n"); Serial.print("smsbuffer = "); Serial.println(smsbuffer); Serial.print("sendernr = "); Serial.println(sendernr); // Inneholder ingenting Serial.print("meldingsbuf = "); Serial.println(meldingsbuf); // Inneholder ingenting // Ekstrakt telefonnr. for (i = 0; i<11; i++) // Kopier 11 bytes fra smsbuffer (offset 7) over til sendernr-buffer og sendernr[i] = smsbuffer[7+i]; // la den 12te byte'n være 0 slik at strengen blir nullterminert // Ekstrakt melding for (i = 0, j = 0; i <= MAX_SMS_SIZE; i++) { if (smsbuffer[i] == 0x0a) { //Meldingen begynner rett etter LINEFEED i++; // Ikke kopier LF while (smsbuffer[i] != 0 && i <= MAX_SMS_SIZE) { // Iterer til vi er på slutten av strengen eller maks antall tegn i sms meldingsbuf[j++] = smsbuffer[i++]; // Kopier meldingen til meldingsbuffer } break; // Ingen vits å kjøre igjennom hele smsbuffer når meldingen er funnet og kopiert } if (i == MAX_SMS_SIZE) Serial.println("Fant ingen melding\n"); } Serial.print("\nEtter kopiering av chars...\n"); Serial.print("smsbuffer = "); Serial.println(smsbuffer); Serial.print("sendernr = "); Serial.println(sendernr); Serial.print("meldingsbuf = "); Serial.println(meldingsbuf); while (1) {}; }
Med forbehold om mulige bugs =)Jeg antar at formatet er det samme hver gang du mottar en sms, derav
sendernr[i] = smsbuffer[7+i];
hvor 7 er den 8nde byte'n i strengen (vi starter å telle fra null i for løkka).Merk at koden over ikke tar hensyn til andre lands tlf.nr. enn norges (og de land som tilfeldigvis har samme antall siffre i sitt nummere).
Hvis man f.eks tekster fra en mobil registrert på Hawaii, så vil landskoden være 1808 + x antall siffre og lengden på tlf.nr. vil sannsymligvis være forskjellig fra den norske.
En mulig løsning vil være å starte og kopiere fra byte 8 og iterere til man møter gåseøyne etter selve tlf.nr. i strengen.
For å ekstrahere selve meldingen må vi bruke en annen løsninig, da jeg kan se for meg at antall tegn for dato og tidssone kan variere.
F.eks:
+CMT: "+47********","","14/0/0,19:19:23+0"<CR><LF>Melding
kontra+CMT: "+xx(xx)********","??","14/10/11,19:19:23+11"<CR><LF>Melding
derfor søker vi etter LINEFEED som er den siste char før selve meldingen.Håper dette hjelper.
Sceptic
-
Hei,
Det hadde vært fint om du kunne spesifisere modellen nærmere.
Er den gammel?
Hva sier Fn + Fx? Vanligvis på bærbare er det en funksjonstast man kan (de)aktivere wifi med.
Eller er det en fysisk bryter (vanlig før) på en av sidene av maskinen som står i feil posisjon?
Ellers kan du prøve å oppdatere/reinstallere driverene for nettverkskortet.
Sceptic
-
Som Lycantrophe sier så hadde jeg gjort det på denne måten:
if (GPSLOG); { readGPS();
for denne:if (GPSLOG = true); { readGPS();
vil alltid være sann, dvs. koden i denne if blokka vil alltid kjøres.GPSLAG = true; int GPSLOGDATA = 100000; int count = 0;
GPSLAG ?Sceptic
-
Hei, koden varierer litt nå på grunn av testing.
Jeg tester en og en del av koder og tester noen teorier før jeg setter det sammen til en kode.
Prosjektet går ut på GPS tracking av hund, men muligheter til andre oppgaver også.
Spenningsmålingen er for at programmet kan se at spenningen på halsbandet blir for lavt og gir deg beskjed via sms, du kan og spørre etter batteri spenningen via sms.
SD kortet er et alternativ for de som ønsker å bruke halsbandet til tur logging og ikke kun gps tracking av hunden. Den kan og f.eks få i oppgave og logge hundens prosisjon hver time, en gang om dagen osv.
Utstyr i bruk nå:
SIM900 skaffet jeg fra ebay - SIM900 GSM
GPS enheten skaffet jeg fra adafruit - Ultimate GPS
SD kort enheten skaffet jeg fra adafruit - MicroSD
Alt er styrt via:
Arduino Mega2560 - Mega2560
eller
Arduino DUE - DUE
Jeg valgte disse komponentene på grunn av pris og god levering. Adafruit er ganske rask og veldig hjelpsome så det er vert å ta en titt der.
Driver fortsatt med tester og for å få litt valg muligheter ser det ut som jeg kommer til å bruke DUE kortet på grunn av multitaskingen.
Skal også endre mye av kodingen som sitter i SRAM til å bli flyttet over til Flash, dette er for å spare plass på SRAM som jeg trenger.
Hei igjen
Takker så mye for hintet for alternativ for hvor jeg kan skaffe SIM900-shield'et og DUE kortet skal også anskaffes, mest pga. DAC-funksjonalieten.
Har selv både et UNO kort og et Mega2560 + et ethernet-shield som jeg kjøpte i fjor en gang.
Desverre så har jeg ikke fått puslet så mye med dette enda, men fikk en ny giv når jeg kom over denne tråden.
Interessant prosjekt forresten. Håper du får det til.
Sceptic
-
Hei Kimlorentz,
Jeg har fulgt litt med på tråden her og er interessert i å anskaffe SIM900-modulen.
Er denne å få kjøpt i norge eller skaffet du den via epalsite?
Et annet spørsmål: Kan du beskrive bedre hva det er du prøver å oppnå med prosjektet ditt?
Etter det jeg ser av koden du har lagt ut til nå, så varierer det veldig med hvilke komponenter du tar i bruk (GSM/GPRS, spenningsmåler, SD-kort, GPS).
Skal du bruke alle komponentene i prosjektet ditt eller er det bare en måte å teste ut forskjellige teorier/metoder på?
Sceptic
-
-
-
Jeg ville heller gått for en slik en. https://www.komplett.no/sdm-sata-ide-bidirectional-adapter/477528
Funker veldig bra; Billigere er den også.
Sceptic
-
CastleLord,
Du må åpne et kommandovindu for å kjøre programmet.
Hvis du har lastet ned og pakket ut filene på desktop'en, prøv:
C:\dokumenter og innstillinger\bruker\skrivebord>movefile c:\brukere\markus\mine bilder\stuff\fil_som_skal_slettes.type ""
deretter restarter du PC'en.
Sceptic
-
Hei,
har aldri prøvd LockHunter, men kan anbefale movefile fra Windows Sysinternals.
Dette verktøyet sletter filer før filtypene blir referert til internt i OSet.
Funker hver gang
Sceptic
-
Hei,
Løsningen på problemet ditt står i meldingen du fikk.
Du trenger sannsynligvis også debuggingsymboler til ditt OS.
Sceptic
-
Hardware-failure da, som bare tilfeldigvis inntraff med Win Update? =/
Ser sånn ut gitt, kjipt det
Du får kjøpe et nettverkskort og dytte det i en ledig pci-port da.
Sceptic
-
Ok, på menyen øverst, klikk på Applications/Accessories/Terminal
I terminalen skriv: lspci | grep Ethernet
Det vil da eventuellt komme opp en linje noe ala dette her: 00:04.0 Ethernet controller: nVidia Corporation nForce2 Ethernet Controller (rev a1)
Du kan også prøve: lspci -vv
for mer info om pcienhetene i systemet ditt (du må muligens scrolle litt opp for å se info om Ethernet kontrolleren.
Dette er for å se om kontrolleren er 'oppdaget' av Ubuntu/systemet.
Hvis det dukker opp en kontroller, gå til System/Preference/Network connections
I Network connections' wired-fane står det normalt 'Auto eth0', klikk på denne og så Edit
I Editing dialogen skal Connect automatically være huket av.
Under IPv4Setting-fanen, sett Method til Automatic (DHCP) og klikk Apply
Eller hvis du har et symbol med pil opp og ned på meny-linja, høyreklikk på denne og aktiver nettverket.
Sceptic
-
Prøv dette i en terminal: lspci | grep Ethernet
Hva får du da?
Sceptic
-
Både porter på router og selve kabelen er i orden. Har testet at den fungerer med en annen PC. Nettverket er 100Mbit.
Ok.
100Mbit bruker kun parene 1-2 og 3-6 så da ser det ut som LAN-porten på HKet ditt er i orden det også
Sceptic
-
På mitt P5Q HK med Cat5e kabel får jeg:
1-2 Normal N/A Atheros Controller 0 3-6 Normal N/A 4-5 Short 10.0M 7-8 Short 10.0M
Kan se ut som enten kabelen eller porten er gåen.
Sceptic
Edit: Kobler du til en switch/router, kan du jo prøve en annen port f.eks.
Edit2: Er det 10/100Mbit eller Gbit nettverk du bruker?
-
-
De fleste HDD-produsentene har systemverktøy hvor man kan sjekke status på disken, full sjekk, reformatere, "sikker" sletting av all data osv.
Verdt et forsøk?
Sceptic
-
Er Realtek'en enablet i BIOS?
Du kan også sjekke LAN-kabelen via AI NET2 under Tools menyen i Bios.
Hvis den ikke feiler her, så er det høyst sannsynlig at det er noe med OS/driver.
Sceptic
-
Du kan bestemme hvordan Opera starter ved å taste CTRL+F12, og under general(generell på norsk?)taben har man en drop-down liste med oppstarts-valg.
Din er sansynligvis satt til 'Vis oppstartsdialog' eller noe sånt (har ikke norsk versjon av Opera)
Sceptic
-
Du trenger ikke bruke PIC på x86, det kommer bare til å gi deg en haug med trøbbel.
Nå var vel dette bare et eksempel på hvordan man 'oversetter' MOVE X(PC), D0 til x86, men jeg er enig, dette er skikkelig nasty programmering.
Hvis du putter inn x istedet for 0500h i eksempelet til Sceptic blir det ihvertfall feil.
Det kommer vel an på hva du vil med koden, eller hva?
Eksempel med variabel:
MOV EAX, EIP ;spar ip (pc) ADD EAX, [X] ;kalkuler adresse (ip + 07ffh) MOV EBX, [EAX] ;legg innholdet av adressen i eax til ebx . . . X DW 07ffh
Sceptic
-
D0 er bare et data-register. X86:
MOV eax, dword [X]
Du har rett i at D0 er et dataregister, men resten er feil.
MOVE X(PC), D0 instruksjonen flytter innholdet av (PC) + X inn i D0.
Ta f.eks:
$1000 MOVE.W $500(PC), D0;
I og med at PC (eller ip i x86 verden) peker på neste instruksjon, så er PC lik $1002.
Legg til $500 og man ender opp med adresse $1502.
Hvis adresse $1502 inneholder 0xbeef, så blir resultatet i D0 0xbeef.
Noe lignende i pseudo x86:
MOV EAX, EIP ;spar ip (pc) ADD EAX, 0500h ;kalkuler adresse MOV EBX, [EAX] ;legg innholdet av adressen i eax til ebx
Sceptic
-
Win95 har så vidt jeg vet ikke noe innebygget program som kan kommunisere på com-port.
Så vidt jeg vet så kom win95 med Hyperterminal.
Sceptic
Ja men kan du overføre filer med det?
Javisst kan du det!
Brukte Hyperterminalen i Win98 i fjor sommer da jeg fikk tak i en gammel laptop(IBM TP760ED) som jeg ville eksperimentere med, men den var uten USB og nettverksport.
Før jeg fikk tak i et PCMCIA nettverkskort, brukte jeg HT til å overføre div diagnoseprogrammer etc. via com-porten.
Som nevnt tidligere i tråden så tar det litt tid med overføring av filer pga den begrensede hastigheten på com-porten, men har man viktige data å redde f.eks, så driter man i hvor lang tid det tar
Sceptic
[Løst] Ubuntu kollapset - Må hente ut bilder :(
i Operativsystemer
Skrevet
Hei,
Jeg får samme feilmelding som deg, men Nautilus popper opp for det.
Kjører dog ikke fra LiveCD.
Du kan prøve å endre eierskap til filene først og kopiere dem dit du vil senere.
Noe ala (i LiveCD):
Sceptic