Elektroonikafoorum.com
CRC25 - kuidas ? - Printerisõbralik versioon

+- Elektroonikafoorum.com (https://elektroonikafoorum.com)
+-- Foorum: Arutelud (https://elektroonikafoorum.com/forum-3.html)
+--- Foorum: Programmeerimine (https://elektroonikafoorum.com/forum-5.html)
+--- Teema: CRC25 - kuidas ? (/thread-592.html)

Lehed: 1 2 3


RE: CRC25 - kuidas ? - felch - 29-01-2015

(29-01-2015, 09:49 AM)A.R. Kirjutas: Olen nüüd sealmaal et võtsin ette selle Kassi C teksti.
(ELFAs võeti peale kassidest rääkimist ära sõnaõigus.
Seal on nüüd üks mees steperiga hädas.
Meenutaks noorust ja malemängu aga...)


Kena, Sinu jadas on sees nullid
const unsigned char string[] = {
0x09, 0x4E, 0x01, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x02,
0x03, 0x51, 0x04, 0x00, 0x32};
Kas on selline massiiv? HEX arvud?

strlen() annab vale pikkuse - esimese NULLINI
Ütlesin et on 15 baiti.
Saan nüüd mitmesuguseid CRCsid.
See algoritm on vägev lubab CRC 1ja 32 vahel suvalist numbrit bitte.
Üritan ikka veel 16 ga aga tekst on ju aastast 2003!!!
kas siis CRC25 oli olemas?
Keetsin kannu kohvi, vast läheb paremaks.
____________________________________________
Vaatasin seda JAVAt, saab nii ja peaaegu sama mis C.
Aga seal pole seda kokkuvõtmise programmi.
Tee kõigi elementidega ja liida kokku -umbes nii.
Aga proovime.

Kas ELFA on ikka veel olemas ... ?
Jada eelviimane on 0x03:
09 4E 01 01 00 00 00 00 00 02 03 51 04 03 32 - > CRC=7F1C
On võimalik, et liitmist alusatakse lõpust. Ja veel on võimalik, et viimane bait 0x32 liidetakse viimasena ehk alustad 03 04 51 03 02 jne ja lõpuks võtad 0x32.
Häkkerite dokumentatsioon on mannetu...

Näidisjada algallikas koos lühikese seletusega: http://eastbay-rc.blogspot.com/2013/04/mavlink-protocol-notes-packet-decoding.html


RE: CRC25 - kuidas ? - A.R. - 29-01-2015

Tsitaat:
Kas ELFA on ikka veel olemas ... ?
On on olemas
Tsitaat:
Jada eelviimane on 0x03:
094E 01 01 00 00 00 00 00 02 03 51 04 03 32 - > CRC=7F1C
On võimalik, et liitmist alusatakse lõpust. Ja veel on võimalik, et viimane bait 0x32 liidetakse viimasena ehk alustad 03 04 51 03 02 jne ja lõpuks võtad 0x32.
Häkkerite dokumentatsioon on mannetu...

Näidisjada algallikas koos lühikese seletusega: http://eastbay-rc.blogspot.com/2013/04/mavlink-protocol-notes-packet-decoding.html
Panin selle kassi ja Java kokku. Nii nagu javast aru sain.
Selle korduva vaatamise tegin nagu arvasin õigeks.
Nüüd näitab tulemusiiga bait järel aga Täpselt sama "loll"
Vaatan seda näidist veel natuke ja katsun ka teistpidi arvutada.
Ega siis ometigi nii .... ei ole?


RE: CRC25 - kuidas ? - A.R. - 29-01-2015

Proovisin selles jadas ükshaaval vahetada kõik koodid 0 kuni ff
kontrollisi kas on 1c7f või 7f1c
oli mõned 7f ja mõned 1c aga koos ei ühtegi
Midagi on mäda.

oli mingi kivi selleks CRCks?
Vast on midagi teisti?


RE: CRC25 - kuidas ? - felch - 30-01-2015

(29-01-2015, 07:00 PM)A.R. Kirjutas: Proovisin selles jadas ükshaaval vahetada kõik koodid 0 kuni ff
kontrollisi kas on 1c7f või 7f1c
oli mõned 7f ja mõned 1c aga koos ei ühtegi
Midagi on mäda.

oli mingi kivi selleks CRCks?
Vast on midagi teisti?

Eraldi kivi ei ole, prose teeb ise kõik ära. Ma ka ei suuda kuidagi õiget vastust leida, katsetan edasi.
Kas saaksid seletada, kuidas toimivad baidi akumuleerimise koodi read:
Kood:
static inline void crc_accumulate(uint8_t data, uint16_t *crcAccum)
{
        /*Accumulate one byte of data into the CRC*/
        uint8_t tmp;

        tmp=data ^ (uint8_t)(*crcAccum &0xff);
        tmp^= (tmp<<4);
        *crcAccum = (*crcAccum>>8) ^ (tmp<<8) ^ (tmp <<3) ^ (tmp>>4);
}
Mingi näide konkreetse baidi ja aku sisuga ehk ? Siin on kuidagi 16 ja 8-bitised muutujad segi ja neid käsitletakse lõdvalt läbisegi !?


RE: CRC25 - kuidas ? - madis - 30-01-2015

(30-01-2015, 09:40 PM)felch Kirjutas:
(29-01-2015, 07:00 PM)A.R. Kirjutas: Proovisin selles jadas ükshaaval vahetada kõik koodid 0 kuni ff
kontrollisi kas on 1c7f või 7f1c
oli mõned 7f ja mõned 1c aga koos ei ühtegi
Midagi on mäda.

oli mingi kivi selleks CRCks?
Vast on midagi teisti?

Eraldi kivi ei ole, prose teeb ise kõik ära. Ma ka ei suuda kuidagi õiget vastust leida, katsetan edasi.
Kas saaksid seletada, kuidas toimivad baidi akumuleerimise koodi read:
Kood:
static inline void crc_accumulate(uint8_t data, uint16_t *crcAccum)
{
        /*Accumulate one byte of data into the CRC*/
        uint8_t tmp;

        tmp=data ^ (uint8_t)(*crcAccum &0xff);
        tmp^= (tmp<<4);
        *crcAccum = (*crcAccum>>8) ^ (tmp<<8) ^ (tmp <<3) ^ (tmp>>4);
}
Mingi näide konkreetse baidi ja aku sisuga ehk ? Siin on kuidagi 16 ja 8-bitised muutujad segi ja neid käsitletakse lõdvalt läbisegi !?

Krt see on nagu c-obfuscation võistlus. miks mitte kirjutada inimese moodi kood lahti ?


RE: CRC25 - kuidas ? - admin - 04-02-2015

(30-01-2015, 09:40 PM)felch Kirjutas: static inline void crc_accumulate(uint8_t data, uint16_t *crcAccum)
{
/*Accumulate one byte of data into the CRC*/
uint8_t tmp;

tmp=data ^ (uint8_t)(*crcAccum &0xff);
tmp^= (tmp<<4);
*crcAccum = (*crcAccum>>8) ^ (tmp<<8) ^ (tmp <<3) ^ (tmp>>4);
}
[/code]
Mingi näide konkreetse baidi ja aku sisuga ehk ? Siin on kuidagi 16 ja 8-bitised muutujad segi ja neid käsitletakse lõdvalt läbisegi !?

data on järgmine bait buffrist, *crcAccum on hetke crc väärtus ja uus väärtus kirjutatakse sinna ka tagasi.

Sinu postitatud buffri crc tuleb 0x7F1C.
crc = 0xFFFF;
crc_accumulate(buffer[0], crc); // 0x09, crc=0x9246
crc_accumulate(buffer[1], crc); // 0x4E, crc=0x8CDA
...
crc_accumulate(buffer[14], crc); // 0x32, crc = 0x7F1C,

edit: index 15 oli vale, 14 on õige


RE: CRC25 - kuidas ? - A.R. - 04-02-2015

(04-02-2015, 02:48 PM)admin Kirjutas: data on järgmine bait buffrist, *crcAccum on hetke crc väärtus ja uus väärtus kirjutatakse sinna ka tagasi.

Sinu postitatud buffri crc tuleb 0x7F1C.
crc = 0xFFFF;
crc_accumulate(buffer[0], crc); // 0x09, crc=0x9246
crc_accumulate(buffer[1], crc); // 0x4E, crc=0x8CDA
...
crc_accumulate(buffer[15], crc); // 0x32, crc = 0x7F1C,
Näidisjada
http://eastbay-rc.blogspot.com/2013/04/mavlink-protocol-notes-packet-decoding.html
oli selline
_0__1__2__3__4__5__6__7__8__9__a__b__c__d__e__f_10
FE_09_4E_01_01_00_00_00_00_00_02_03_51_04_03_1C_7F 1. näidis
____0__1__2__3__4__5__6__7__8__9_10_11_12_13 jada elemendid 0 kuni ...
FE_09_9E_01_01_00_00_00_00_00_02_03_51_04_03_7A_6C 2.näidis
___09_4E_01_01_00_00_00_00_00_02_03_51_04_03_32 3. Mina, ei tea kust võetud 32.

Küsimused:
1. Kust tulid 14. ja 15. element?
2. Mis programmiga see asi lahendatud on?
LabView anndvat ok tulemused.
Aga C-s transleeritud programm ei lange kokku isegi peale esimest ringi.

MIDAGI ON KUSKIL MÄDA.
_______________________________
Mudisin natuke neid nelja rida ja sain esimese rea tulemuse samaks.
Muutujate kirjeldused, & käsud.
Aga juba teine rida ikka ei klapi.


RE: CRC25 - kuidas ? - admin - 04-02-2015

(04-02-2015, 05:28 PM)A.R. Kirjutas: Näidisjada
http://eastbay-rc.blogspot.com/2013/04/mavlink-protocol-notes-packet-decoding.html
oli selline
_0__1__2__3__4__5__6__7__8__9__a__b__c__d__e__f_10
FE_09_4E_01_01_00_00_00_00_00_02_03_51_04_03_1C_7F 1. näidis
____0__1__2__3__4__5__6__7__8__9_10_11_12_13 jada elemendid 0 kuni ...
FE_09_9E_01_01_00_00_00_00_00_02_03_51_04_03_7A_6C 2.näidis
___09_4E_01_01_00_00_00_00_00_02_03_51_04_03_32 3. Mina, ei tea kust võetud 32.

Küsimused:
1. Kust tulid 14. ja 15. element?
2. Mis programmiga see asi lahendatud on?
LabView anndvat ok tulemused.
Aga C-s transleeritud programm ei lange kokku isegi peale esimest ringi.

MIDAGI ON KUSKIL MÄDA.
_______________________________
Mudisin natuke neid nelja rida ja sain esimese rea tulemuse samaks.
Muutujate kirjeldused, & käsud.
Aga juba teine rida ikka ei klapi.
my bad... index 15 oli vale, õige on 14.
14 ehk viimane bait on siit:
https://github.com/marhar/eastbay-mavlink/blob/master/demos/parse-stream.py#L46

Kogu programmi käik
Kood:
buffer [09 4e 01 01 00 00 00 00 00 02 03 51 04 03 32], length=15
idx, data -> crc
[ 0] [09] -> [9246]
[ 1] [4e] -> [8cda]
[ 2] [01] -> [68d2]
[ 3] [01] -> [e47e]
[ 4] [00] -> [9a1d]
[ 5] [00] -> [cbfe]
[ 6] [00] -> [1e3a]
[ 7] [00] -> [9ec7]
[ 8] [00] -> [b22d]
[ 9] [02] -> [d947]
[10] [03] -> [04f9]
[11] [51] -> [2946]
[12] [04] -> [613f]
[13] [03] -> [fb8e]
[14] [32] -> [7f1c]
Minu programm on lahendatud php's.
Kui sa teed bittide nihutamist, siis pead kandma hoolt, et väärtusel oleks kasutuses õige arv bitte (tmp puhul 8 ja crc puhul 16)

Kuna php's ei ole Xbitiseid muutujaid, siis kahes kohas toimub ületäitumine ja ülemised bitid peab nullima.
Kood:
$tmp = $data ^ ($crc & 0xff);
$tmp = ($tmp ^ ($tmp << 4)) & 0xFF; <-- jäta alles 8bitti
$crc = ($crc >> 8) ^ ($tmp << 8) ^ ($tmp << 3) ^ ($tmp >> 4);
$crc = $crc & 0xFFFF; <-- jäta alles 16 bitti



RE: CRC25 - kuidas ? - A.R. - 04-02-2015

Nojahh, jälle ei saa peeglist mööda minna kui ei taha lolli näha.

EI OLE
typedef unsigned int uint8_t;
typedef unsigned short uint16_t;

VAID on
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;

Oehhh.

Aga kust tuli see 0x32 see on veel (eel)viimane probleem.


RE: CRC25 - kuidas ? - admin - 04-02-2015

(04-02-2015, 08:50 PM)A.R. Kirjutas: Aga kust tuli see 0x32 see on veel (eel)viimane probleem.

sõnumi ID järgi valid MAVLINK_MESSAGE_CRCS massiivist.
Käesoleva sõnumi ID on 0, seega massiivist võtad index 0 pealt väärtuse 50 (0x32 hexis). MAVLINK_MESSAGE_CRCS väärtust kasutad ainult crc kalkuleerimisel ja saadetavas (vastuvõetavas) sõnumisse seda ei panda.
Kood:
MAVLINK_MESSAGE_CRCS=[
50,124,137,0,237,217,104,119,0,0,0,89,0,0,0,0,0,0,0,0,214,159,220,168,
24,23,170,144,67,115,39,246,185,104,237,244,222,212,9,254,230,28,28,
132,221,232,11,153,41,39,214,223,141,33,15,3,100,24,239,238,30,240,183,
130,130,0,148,21,0,243,124,0,0,0,20,0,152,143,0,0,127,106,0,0,0,0,0,0,
0,231,183,63,54,0,0,0,0,0,0,0,175,102,158,208,56,93,0,0,0,0,235,93,124,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,
241,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,49,
170,44,83,46,0]
https://github.com/marhar/eastbay-mavlink/blob/master/demos/parse-stream.py#L46