Subversion Repositories freemyipod

Rev

Rev 25 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 25 Rev 26
Line 352... Line 352...
352
            dbgi2clen = dbgrecvbuf[1] >> 24;
352
            dbgi2clen = dbgrecvbuf[1] >> 24;
353
            memcpy(dbgasyncsendbuf, &dbgsendbuf[4], dbgi2clen);
353
            memcpy(dbgasyncsendbuf, &dbgsendbuf[4], dbgi2clen);
354
            break;
354
            break;
355
        case 10:  // READ CONSOLE
355
        case 10:  // READ CONSOLE
356
            dbgconsoleattached = true;
356
            dbgconsoleattached = true;
357
            wakeup_signal(&dbgconsendwakeup);
-
 
358
            int bytes = dbgconsendwriteidx - dbgconsendreadidx;
357
            int bytes = dbgconsendwriteidx - dbgconsendreadidx;
359
            if (bytes >= sizeof(dbgconsendbuf)) bytes -= sizeof(dbgconsendbuf);
358
            if (bytes >= sizeof(dbgconsendbuf)) bytes -= sizeof(dbgconsendbuf);
360
            if (bytes)
359
            if (bytes)
361
            {
360
            {
362
                if (bytes < 0) bytes += sizeof(dbgconsendbuf);
361
                if (bytes < 0) bytes += sizeof(dbgconsendbuf);
Line 371... Line 370...
371
                    outptr = &outptr[readbytes];
370
                    outptr = &outptr[readbytes];
372
                    readbytes = bytes - readbytes;
371
                    readbytes = bytes - readbytes;
373
                }
372
                }
374
                if (readbytes) memcpy(outptr, &dbgconsendbuf[dbgconsendreadidx], readbytes);
373
                if (readbytes) memcpy(outptr, &dbgconsendbuf[dbgconsendreadidx], readbytes);
375
                dbgconsendreadidx += readbytes;
374
                dbgconsendreadidx += readbytes;
-
 
375
                wakeup_signal(&dbgconsendwakeup);
376
            }
376
            }
377
            dbgsendbuf[0] = 1;
377
            dbgsendbuf[0] = 1;
378
            dbgsendbuf[1] = bytes;
378
            dbgsendbuf[1] = bytes;
379
            dbgsendbuf[2] = sizeof(dbgconsendbuf);
379
            dbgsendbuf[2] = sizeof(dbgconsendbuf);
380
            dbgsendbuf[3] = dbgconsendwriteidx - dbgconsendreadidx;
380
            dbgsendbuf[3] = dbgconsendwriteidx - dbgconsendreadidx;
381
            size = 16 + dbgrecvbuf[1];
381
            size = 16 + dbgrecvbuf[1];
382
            break;
382
            break;
-
 
383
        case 11:  // WRITE CONSOLE
-
 
384
            bytes = dbgconrecvreadidx - dbgconrecvwriteidx - 1;
-
 
385
            if (bytes < 0) bytes += sizeof(dbgconrecvbuf);
-
 
386
            if (bytes)
-
 
387
            {
-
 
388
                if (bytes > dbgrecvbuf[1]) bytes = dbgrecvbuf[1];
-
 
389
                int writebytes = bytes;
-
 
390
                char* readptr = (char*)&dbgrecvbuf[4];
-
 
391
                if (dbgconrecvwriteidx + bytes >= sizeof(dbgconrecvbuf))
-
 
392
                {
-
 
393
                    writebytes = sizeof(dbgconrecvbuf) - dbgconrecvwriteidx;
-
 
394
                    memcpy(&dbgconrecvbuf[dbgconrecvwriteidx], readptr, writebytes);
-
 
395
                    dbgconrecvwriteidx = 0;
-
 
396
                    readptr = &readptr[writebytes];
-
 
397
                    writebytes = bytes - writebytes;
-
 
398
                }
-
 
399
                if (writebytes) memcpy(&dbgconrecvbuf[dbgconrecvwriteidx], readptr, writebytes);
-
 
400
                dbgconrecvwriteidx += writebytes;
-
 
401
                wakeup_signal(&dbgconrecvwakeup);
-
 
402
            }
-
 
403
            dbgsendbuf[0] = 1;
-
 
404
            dbgsendbuf[1] = bytes;
-
 
405
            dbgsendbuf[2] = sizeof(dbgconrecvbuf);
-
 
406
            dbgsendbuf[3] = dbgconrecvreadidx - dbgconrecvwriteidx - 1;
-
 
407
            size = 16;
-
 
408
            break;
383
        default:
409
        default:
384
            dbgsendbuf[0] = 2;
410
            dbgsendbuf[0] = 2;
385
            size = 16;
411
            size = 16;
386
        }
412
        }
387
        usb_setup_dbg_listener();
413
        usb_setup_dbg_listener();
Line 523... Line 549...
523
 
549
 
524
void dbgconsole_puts(const char* string)
550
void dbgconsole_puts(const char* string)
525
{
551
{
526
    dbgconsole_write(string, strlen(string));
552
    dbgconsole_write(string, strlen(string));
527
}
553
}
-
 
554
 
-
 
555
int dbgconsole_getavailable() ICODE_ATTR;
-
 
556
int dbgconsole_getavailable()
-
 
557
{
-
 
558
    int available = dbgconrecvwriteidx - dbgconrecvreadidx;
-
 
559
    if (available < 0) available += sizeof(dbgconrecvbuf);
-
 
560
    return available;
-
 
561
}
-
 
562
 
-
 
563
int dbgconsole_getc(int timeout)
-
 
564
{
-
 
565
    if (!dbgconsole_getavailable())
-
 
566
    {
-
 
567
        wakeup_wait(&dbgconrecvwakeup, TIMEOUT_NONE);
-
 
568
        if (!dbgconsole_getavailable())
-
 
569
        {
-
 
570
            wakeup_wait(&dbgconrecvwakeup, timeout);
-
 
571
            if (!dbgconsole_getavailable()) return -1;
-
 
572
        }
-
 
573
    }
-
 
574
    int byte = dbgconrecvbuf[dbgconrecvreadidx++];
-
 
575
    if (dbgconrecvreadidx >= sizeof(dbgconrecvbuf))
-
 
576
        dbgconrecvreadidx -= sizeof(dbgconrecvbuf);
-
 
577
    return byte;
-
 
578
}
-
 
579
 
-
 
580
int dbgconsole_read(char* buffer, size_t length, int timeout)
-
 
581
{
-
 
582
    if (!length) return 0;
-
 
583
    int available = dbgconsole_getavailable();
-
 
584
    if (!available)
-
 
585
    {
-
 
586
        wakeup_wait(&dbgconrecvwakeup, TIMEOUT_NONE);
-
 
587
        int available = dbgconsole_getavailable();
-
 
588
        if (!available)
-
 
589
        {
-
 
590
            wakeup_wait(&dbgconrecvwakeup, timeout);
-
 
591
            int available = dbgconsole_getavailable();
-
 
592
            if (!available) return 0;
-
 
593
        }
-
 
594
    }
-
 
595
    if (available > length) available = length;
-
 
596
    int left = available;
-
 
597
    if (dbgconrecvreadidx + available >= sizeof(dbgconrecvbuf))
-
 
598
    {
-
 
599
        int bytes = sizeof(dbgconrecvbuf) - dbgconrecvreadidx;
-
 
600
        memcpy(buffer, &dbgconrecvbuf[dbgconrecvreadidx], bytes);
-
 
601
        dbgconrecvreadidx = 0;
-
 
602
        buffer = &buffer[bytes];
-
 
603
        left -= bytes;
-
 
604
    }
-
 
605
    if (left) memcpy(buffer, &dbgconrecvbuf[dbgconrecvreadidx], left);
-
 
606
    dbgconrecvreadidx += left;
-
 
607
    return available;
-
 
608
}