Пример #1
0
    ULONG iobase = SHArg(IOBASE) ? *SHArg(IOBASE) : SAGA_SD_BASE;
    ULONG pattern = SHArg(PATTERN) ? *SHArg(PATTERN) : 0x5af00000;
    BOOL readTest = SHArg(READ);
    BOOL writeTest = SHArg(WRITE);
    ULONG retry = SHArg(RETRY) ? *SHArg(RETRY) : 5;
    int i;
    ULONG test_block;
    UBYTE err;
    struct sdcmd sd = {};

    setBases(SysBase, DOSBase);

    DebugLevel = SHArg(DEBUG) ? *SHArg(DEBUG) : 0;
    Printf("DebugLevel: %ld\n", DebugLevel);

    sd.iobase = iobase;
    sd.retry.read = retry;
    sd.retry.write = retry;
    sd.func.log = sdcmd_log;

    err = sdcmd_detect(&sd);

    if (!err) {
        Printf("SD Card Detected on $0x%lx:\n", iobase);
        Printf("Block Size: %ld\n", sd.info.block_size);
        Printf("Blocks: %ld\n", sd.info.blocks);
        Printf("Capacity: ");
        if (sd.info.blocks < 1024*2) {
            Printf("%ldK\n", (sd.info.blocks + 1) / 2);
        } else if (sd.info.blocks < 1024*1024*2) {
            Printf("%ldM\n", (sd.info.blocks + 1024*2-1) / 1024 / 2);
        } else {
            Printf("%ldG\n", (sd.info.blocks + 1024*1024*2-1) / 1024 / 1024 / 2);
        }

        Printf("OCR: %08lx\n", sd.info.ocr);
        Printf("CID:");
        for (i = 0; i < 16; i++)
            Printf(" %02lx", sd.info.cid[i]);
        Printf("\n");
        Printf("CSD:");
        for (i = 0; i < 16; i++)
            Printf(" %02lx", sd.info.csd[i]);
        Printf("\n");
    } else {
        Printf("SD Card Detection Error: %lx\n", err);
        return RETURN_FAIL; 
    }

    test_block = sd.info.blocks - 16;

    if (writeTest) {
        for (i = 0; i < ARRAY_SIZE(write_buffer); i++)
            write_buffer[i] = pattern + i;

        Printf("WRITE Test: %ld bytes, at block %ld: ",
                512, test_block);

        err = sdcmd_write_block(&sd, test_block, (UBYTE *)&write_buffer[0]);
        if (err) {
            Printf("FAILED WRITE, err=0x%02lx\n", err);
            return RETURN_FAIL;
        }

        err = sdcmd_read_block(&sd, test_block, (UBYTE *)&read_buffer[0]);
        if (err) {
            Printf("FAILED READBACK, err=0x%02lx\n", err);
            return RETURN_FAIL;
        }
       
        err = 0;
        for (i = 0; i < 512/sizeof(ULONG); i++) {
            if (read_buffer[i] != write_buffer[i]) {
                if (!err) {
                    Printf("FAILED DATA:\n");
                }
                err++;
                Printf("$%04lx: $%08lx [expected $%08lx]\n", i*sizeof(ULONG),
                        read_buffer[i], write_buffer[i]);
            }
        }
        if (err)
            return RETURN_FAIL;
        Printf("PASSED\n");

        Printf("WRITE Test: %ld bytes, at block %ld: ",
                512*15, test_block);

        err = sdcmd_write_blocks(&sd, test_block+1, (UBYTE *)&write_buffer[512/sizeof(ULONG)], 15);
        if (err) {
            Printf("FAILED WRITE, err=0x%02lx\n", err);
            return RETURN_FAIL;
        }

        err = sdcmd_read_blocks(&sd, test_block+1, (UBYTE *)&read_buffer[512/sizeof(ULONG)], 15);
        if (err) {
            Printf("FAILED READBACK, err=0x%02lx\n", err);
            return RETURN_FAIL;
        }
       
        err = 0;
        for (i = 0; i < 15 * 512/sizeof(ULONG); i++) {
            if (read_buffer[512/sizeof(ULONG) + i] !=
                write_buffer[512/sizeof(ULONG) + i]) {
                if (!err) {
                    Printf("FAILED DATA:\n");
                }
                err++;
                Printf("$%04lx: $%08lx [expected $%08lx]\n", i*sizeof(ULONG),
                        read_buffer[512/sizeof(ULONG) + i], write_buffer[512/sizeof(ULONG) + i]);
            }
        }
        if (err)
            return RETURN_FAIL;

        Printf("PASSED\n");
    }

    if (readTest) {
        Printf("READ Test: %ld bytes, at block %ld: ",
                512, test_block);

        err = sdcmd_read_block(&sd, test_block, (UBYTE *)&read_buffer[0]);
        if (err) {
            Printf("FAILED READ, err=0x%02lx\n", err);
            return RETURN_FAIL;
        }
       
        Printf("PASSED\n");

        Printf("READ Test: %ld bytes, at block %ld: ",
                512*15, test_block);

        err = sdcmd_read_blocks(&sd, test_block+1, (UBYTE *)&read_buffer[512/sizeof(ULONG)], 15);
        if (err) {
            Printf("FAILED READ, err=0x%02lx\n", err);
            return RETURN_FAIL;
        }
       
        Printf("PASSED\n");
    }

    return RETURN_OK;

    AROS_SHCOMMAND_EXIT
}
Пример #2
0
#include <proto/dos.h>
#include <string.h>

#define SH_GLOBAL_SYSBASE       1       /* for kprintf() */
#include <aros/shcommands.h>

AROS_SH2(KEcho, 41.1,
AROS_SHA(STRPTR *, , STRINGS, /M,   NULL),
AROS_SHA(BOOL,     , NOLINE, /S,   FALSE))
{
    AROS_SHCOMMAND_INIT

    LONG error = 0;
    STRPTR *a;

    a = SHArg(STRINGS);

    if (a) while (*a != NULL)
    {
        kprintf("%s", *a);
	a++;
        if (*a)
            kprintf(" ");
    }

    if (!SHArg(NOLINE))
        kprintf("\n");

    return error;

    AROS_SHCOMMAND_EXIT
Пример #3
0
static void printProcess(struct DosLibrary *DOSBase, BOOL full, BOOL tcb,
                         struct Process *process);
static void PrintF(struct DosLibrary *DOSBase, STRPTR format, ...);

AROS_SH5(Status,41.1,
         AROS_SHA(LONG *, ,PROCESS,/N,NULL),
         AROS_SHA(BOOL, , FULL,/S,FALSE),
         AROS_SHA(BOOL, , TCB,/S,FALSE),
         AROS_SHA(BOOL,CLI=,ALL,/S,FALSE),
         AROS_SHA(STRPTR,COM=,COMMAND,/K,NULL))
{
    AROS_SHCOMMAND_INIT

    struct RootNode *root = ((struct DosLibrary *)DOSBase)->dl_Root;
    int    retval = RETURN_OK;
    BOOL   full   = SHArg(FULL);
    BOOL   tcb    = SHArg(TCB);
    BOOL   all    = SHArg(ALL);
    ULONG  processNum = 0;
    STRPTR command    = SHArg(COMMAND);


    if (SHArg(PROCESS) != NULL)
    {
        processNum = *SHArg(PROCESS);
    }

    if (!full && !tcb && processNum == 0 && command == NULL)
    {
        all = TRUE;
    }