Exploring the world by bicycle! cyclingsilk.wordpress.com
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
Exploring the world by bicycle! cyclingsilk.wordpress.com
edit: een ascii is dus 1 byte (zie el psycho), klein rekenfoutje van mij (tis al laat hé
[ Voor 13% gewijzigd door NetForce1 op 14-09-2004 23:59 ]
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
Wat voor soort string verwacht je eigenlijk uit je programma? Want die string van 10 characters die je hier quote zou wel es gewoon de output kunnen zijn.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Verwijderd
[DC3] 0 Y [ETB] :Ofwel, vrije interpretatie: let op device3, "0 Y", einde datablock, release de bus.
Tsja, verder kan dit wel van alles betekenen en voor doel hebben. Wat voor stukje software/hardware spuugt dit uit? Welk protocol?
[ Voor 8% gewijzigd door Verwijderd op 14-09-2004 23:59 ]
Opzich wel leuk om te weten hoe je daar aan komtVerwijderd schreef op 14 september 2004 @ 23:58:
<pre>[DC3] 0 Y [ETB] :</pre>Ofwel, vrije interpretatie: let op device3, "0 Y", einde datablock, release de bus.
Tsja, verder kan dit wel van alles betekenen en voor doel hebben. Wat voor stukje software/hardware spuugt dit uit? Welk protocol?
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
1
2
| Host Adapter Identifier. This field contains a 16-byte ASCII string describing the SCSI Host adapter. |
Ook kan ik de Manager ID uitlezen:
1
2
| SCSI Manager ID. This field contains a 16-byte ASCII string describing the SCSI manager. For ASPI for Win32 the string "ASPI for WIN32" shall be returned. |
Ik kan deze waardes dus allemaal netjes uitlezen. Ik krijg het alleen terug in getallen zoals in mijn eerste post beschreven staat.
De waardes die ik terugkrijg voor:
Host adapter Identifier: 1885434977
Manager ID: 1330791758
Deze waardes moet ik dus omzetten in begrijpelijke tekst. Als iemand me daarmee kan helpen ben ik erg blij
[ Voor 1% gewijzigd door IJnte op 15-09-2004 00:10 . Reden: typo ]
Exploring the world by bicycle! cyclingsilk.wordpress.com
Verwijderd
Nou, door de [DC3] en [ETB] moest ik moest denken aan variaties van 1 wire protocols. Daar wordt dan eerst een startbyte gegeven met daarin je devicenummer (waarvan je aandacht wilt / of die de gegevens gaat sturen op de bus), daarna worden de gegevens verzonden gevolgd door een stopbyte en een release. In dit voorbeeld zou het dan device 3 zijn die met meet/statusgegevens "0 Y" komt.wel leuk om te weten hoe je daar aan komt
Voor de rest: zie Reptile209
Maar goed, dat is in geval dus niet van toepassing, zie de posting hierboven mij
[ Voor 43% gewijzigd door Verwijderd op 15-09-2004 00:15 ]
* Reptile209 kopt 'm wel even in:NetForce1 schreef op 15 september 2004 @ 00:03:
[...]
Opzich wel leuk om te weten hoe je daar aan komtVooral voor TS denk ik we zijn niet allemaal die-hard CME-er
Splits de string in blokjes van 2 cijfers (1 byte = 0-255 decimaal ofwel 00-ff hexadecimaal): 13 30 79 17 58. Interpreteer die mbv de link van NetForce1 (kolom 2 - Hex) naar de crap die euss schreef. Maar dat zijn dus niet de door de TS beloofde 16 bytes...
Laaaat, veeeel te laaaat
Edit2:
Op de twee getallen die je noemt, kan je hetzelfde doen:
1885434977 = 0x70617461 (hexadecimaal)
70 61 74 61 via die ascii-tabel is "pata"
Hetzelfde met 1330791758 = 4F52454E = "OREN"
En omdat dit soort strings meestal van achter naar voren worden opgebouwd zeg ik: "atap NERO" ofzo.
In C++ kan je dit met behulp van unions heel gemakkelijk splisten naar een leesbare string. Uit het blote bolletje:
1
2
3
4
5
6
7
8
9
10
11
| union { dword waarde; char woord[4]; } Woot; ... Woot w00t; w00t.waarde := 1330791758; for(int i:=3; i>=0; i--){ putch(w00t.woord[i]); } |
Please forgive my French if you code C
[ Voor 37% gewijzigd door Reptile209 op 15-09-2004 00:22 ]
Zo scherp als een voetbal!
Verwijderd
http://members.aol.com/plscsi/aspisdk/docs/aspidos.txt
http://www.zianet.com/jgray/dat/files/ASPI32.pdf
http://850gs.ath.cx/pub/w...oit/CDROM/ASPI/ASPI32.DOC
http://www.hochfeiler.it/alvise/ASPI_0.HTM
[ Voor 30% gewijzigd door Verwijderd op 15-09-2004 00:28 ]
In al die documenten die euss aandraagt, staat hetzelfde, namelijk dat het een 16bytes ASCII waarde is.
Exploring the world by bicycle! cyclingsilk.wordpress.com
Oftewel laat es de relevante code zien die tot dit resultaat leidt.
Edit:
atap als start van Atapi drive en NERO als start van NERO Imagedrive zeker... maar als dat klopt heeft ts nog maar 4 van de 16 bytes die ts verwachtReptile209 schreef op 15 september 2004 @ 00:11:
En omdat dit soort strings meestal van achter naar voren worden opgebouwd zeg ik: "atap NERO" ofzo.
[ Voor 64% gewijzigd door El Psycho op 15-09-2004 00:36 ]
Edit2 dus in [rml]Reptile209 in "[ C++] ASCII naar begrijpelijke tekst"[/rml]
Zo scherp als een voetbal!
Thnx je hebt gelijk!Reptile209 schreef op 15 september 2004 @ 00:11:
[...]
Anders is het zoiets als alle letters van een A4-tje op een hoop vegen en dan de oorspronkelijke tekst raden.
edit:
Laaaat, veeeel te laaaat
euss
Edit2:
Op de twee getallen die je noemt, kan je hetzelfde doen:
1885434977 = 0x70617461 (hexadecimaal)
70 61 74 61 via die ascii-tabel is "pata"
Hetzelfde met 1330791758 = 4F52454E = "OREN"
En omdat dit soort strings meestal van achter naar voren worden opgebouwd zeg ik: "atap NERO" ofzo.
In C++ kan je dit met behulp van unions heel gemakkelijk splisten naar een leesbare string. Uit het blote bolletje:
C:
1 2 3 4 5 6 7 8 9 10 11 union { dword waarde; char woord[4]; } Woot; ... Woot w00t; w00t.waarde := 1330791758; for(int i:=3; i>=0; i--){ putch(w00t.woord[i]); }
Please forgive my French if you code C
1
2
3
4
5
6
7
8
9
10
11
12
| pfnSendASPI32Command( (LPSRB)&srbHAInquiry); if (srbHAInquiry.SRB_Status != SS_COMP) // Als er een error optreed { ShowMessage("Error"); } dwManagerID = *(DWORD *)(srbHAInquiry.HA_ManagerId); ShowMessage(dwManagerID); // Laat manager ID zien dwIdentifier = *(DWORD *)(srbHAInquiry.HA_Identifier); ShowMessage(dwIdentifier); //Laat Identifier zien dwUnique = *(DWORD *)(srbHAInquiry.HA_Unique); ShowMessage(dwUnique); //Laat Unique zien |
srbHAInquiry is de naam van een struct die als volgt gedefinieerd is(Zit standaard in ASPI):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| typedef struct { BYTE SRB_Cmd; BYTE SRB_Status; BYTE SRB_HaId; BYTE SRB_Flags; DWORD SRB_Hdr_Rsvd; BYTE HA_Count; BYTE HA_SCSI_ID; BYTE HA_ManagerId[16]; // 0A/010 String describing the manager BYTE HA_Identifier[16]; // 1A/026 String describing the host adapter BYTE HA_Unique[16]; // 2A/042 Host Adapter Unique parameters WORD HA_Rsvd1; } SRB_HAInquiry; |
mmmmm BYTE zie ik nu staan.... Zou dat een deel verklaren waarom ik geen 16 bytes krijg maar slechts 4?
Ik heb nog even gekeken op school. Daar krijg ik de volgende waardes:
1230000961 = 49 50 53 41 = IPSA = ASPI;
1129142611 = 43 4D 59 53 = CMYS = symc;
Volgens mij gaat het de goede kant op.
Exploring the world by bicycle! cyclingsilk.wordpress.com
Deze regels betekenen dat HA_ManagerId, HA_Identifier en HA_Unique elk arrays zijn met 16 elementen van het type byte. Dus inderdaad een string van 15 characters (plus de trailing '\0')IJnte schreef op 15 september 2004 @ 09:26:
C++:
1 2 3 BYTE HA_ManagerId[16]; // 0A/010 String describing the manager BYTE HA_Identifier[16]; // 1A/026 String describing the host adapter BYTE HA_Unique[16]; // 2A/042 Host Adapter Unique parameters
De fout zit em volgens mij in de type casts die jij later doet:
Jij cast die pointer naar een character array namelijk naar een pointer naar een word (is 4 bytes) en die dereferentieer je dan en sla je op in dwManagerID, dwIdentifier en dwUnique welke te oordelen naar de naam ook echt words zijn.IJnte schreef op 15 september 2004 @ 09:26:
C++:
1 2 3 4 5 6 dwManagerID = *(DWORD *)(srbHAInquiry.HA_ManagerId); ShowMessage(dwManagerID); // Laat manager ID zien dwIdentifier = *(DWORD *)(srbHAInquiry.HA_Identifier); ShowMessage(dwIdentifier); //Laat Identifier zien dwUnique = *(DWORD *)(srbHAInquiry.HA_Unique); ShowMessage(dwUnique); //Laat Unique zien
De oplossing zou dan makkelijk zijn:
1
2
3
4
5
6
7
8
9
10
| char *strManagerID; // String describing the manager char *strIdentifier; // String describing the host adapter char *strUnique; // Host Adapter Unique parameters strManagerID = (char*)(srbHAInquiry.HA_ManagerId); ShowMessage(strManagerID); // Laat manager ID zien strIdentifier = (char*)(srbHAInquiry.HA_Identifier); ShowMessage(strIdentifier); //Laat Identifier zien strUnique = (char*)(srbHAInquiry.HA_Unique); ShowMessage(strUnique); //Laat Unique zien |
En dan lijkt me zelfs nog de (char*) cast die ik bij elke regel zet overbodig, maar ja, better safe than sorry in dit geval
Exploring the world by bicycle! cyclingsilk.wordpress.com