Subversion Repositories freemyipod

Rev

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

Rev 71 Rev 85
Line 27... Line 27...
27
#include "usb_ch9.h"
27
#include "usb_ch9.h"
28
#include "usbdrv.h"
28
#include "usbdrv.h"
29
#include "thread.h"
29
#include "thread.h"
30
#include "console.h"
30
#include "console.h"
31
#include "util.h"
31
#include "util.h"
32
#include "i2c.h"
-
 
33
#include "contextswitch.h"
32
#include "contextswitch.h"
34
#include "power.h"
33
#include "power.h"
35
#include "mmu.h"
34
#include "mmu.h"
36
#include "shutdown.h"
35
#include "shutdown.h"
-
 
36
#ifdef HAVE_I2C
-
 
37
#include "i2c.h"
-
 
38
#endif
37
 
39
 
38
 
40
 
39
static uint8_t ctrlresp[2] CACHEALIGN_ATTR;
41
static uint8_t ctrlresp[2] CACHEALIGN_ATTR;
40
static uint32_t dbgrecvbuf[0x80] CACHEALIGN_ATTR;
42
static uint32_t dbgrecvbuf[0x80] CACHEALIGN_ATTR;
41
static uint32_t dbgsendbuf[0x80] CACHEALIGN_ATTR;
43
static uint32_t dbgsendbuf[0x80] CACHEALIGN_ATTR;
Line 319... Line 321...
319
            dbgsendbuf[0] = 1;
321
            dbgsendbuf[0] = 1;
320
            size = 16;
322
            size = 16;
321
            switch (dbgrecvbuf[1])
323
            switch (dbgrecvbuf[1])
322
            {
324
            {
323
            case 0:  // GET VERSION INFO
325
            case 0:  // GET VERSION INFO
-
 
326
                dbgsendbuf[1] = VERSION_SVN_INT;
324
                dbgsendbuf[1] = VERSION_MAJOR | (VERSION_MINOR << 8)
327
                dbgsendbuf[2] = VERSION_MAJOR | (VERSION_MINOR << 8)
325
                              | (VERSION_PATCH << 16) | (1 << 24);
328
                              | (VERSION_PATCH << 16) | (1 << 24);
326
                dbgsendbuf[2] = PLATFORM_ID;
329
                dbgsendbuf[3] = PLATFORM_ID;
327
                dbgsendbuf[3] = VERSION_SVN_INT;
-
 
328
                break;
330
                break;
329
            case 1:  // GET PACKET SIZE INFO
331
            case 1:  // GET PACKET SIZE INFO
330
                dbgsendbuf[1] = 0x02000200;
332
                dbgsendbuf[1] = 0x02000200;
331
                dbgsendbuf[2] = usb_drv_get_max_out_size();
333
                dbgsendbuf[2] = usb_drv_get_max_out_size();
332
                dbgsendbuf[3] = usb_drv_get_max_in_size();
334
                dbgsendbuf[3] = usb_drv_get_max_in_size();
Line 372... Line 374...
372
        case 7:  // WRITE DMA
374
        case 7:  // WRITE DMA
373
            dbgsendbuf[0] = 1;
375
            dbgsendbuf[0] = 1;
374
            size = 16;
376
            size = 16;
375
            usb_drv_recv(dbgendpoints[2], (void*)dbgrecvbuf[1], dbgrecvbuf[2]);
377
            usb_drv_recv(dbgendpoints[2], (void*)dbgrecvbuf[1], dbgrecvbuf[2]);
376
            break;
378
            break;
-
 
379
#ifdef HAVE_I2C
377
        case 8:  // READ I2C
380
        case 8:  // READ I2C
378
            if (set_dbgaction(DBGACTION_I2CRECV, dbgrecvbuf[1] >> 24)) break;
381
            if (set_dbgaction(DBGACTION_I2CRECV, dbgrecvbuf[1] >> 24)) break;
379
            dbgi2cbus = dbgrecvbuf[1] & 0xff;
382
            dbgi2cbus = dbgrecvbuf[1] & 0xff;
380
            dbgi2cslave = (dbgrecvbuf[1] >> 8) & 0xff;
383
            dbgi2cslave = (dbgrecvbuf[1] >> 8) & 0xff;
381
            dbgactionaddr = (dbgrecvbuf[1] >> 16) & 0xff;
384
            dbgactionaddr = (dbgrecvbuf[1] >> 16) & 0xff;
Line 387... Line 390...
387
            dbgi2cslave = (dbgrecvbuf[1] >> 8) & 0xff;
390
            dbgi2cslave = (dbgrecvbuf[1] >> 8) & 0xff;
388
            dbgactionaddr = (dbgrecvbuf[1] >> 16) & 0xff;
391
            dbgactionaddr = (dbgrecvbuf[1] >> 16) & 0xff;
389
            dbgactionlength = dbgrecvbuf[1] >> 24;
392
            dbgactionlength = dbgrecvbuf[1] >> 24;
390
            memcpy(dbgasyncsendbuf, &dbgsendbuf[4], dbgactionlength);
393
            memcpy(dbgasyncsendbuf, &dbgsendbuf[4], dbgactionlength);
391
            break;
394
            break;
-
 
395
#endif
392
        case 10:  // READ CONSOLE
396
        case 10:  // READ CONSOLE
393
            dbgconsoleattached = true;
397
            dbgconsoleattached = true;
394
            int bytes = dbgconsendwriteidx - dbgconsendreadidx;
398
            int bytes = dbgconsendwriteidx - dbgconsendreadidx;
395
            if (bytes >= sizeof(dbgconsendbuf)) bytes -= sizeof(dbgconsendbuf);
399
            if (bytes >= sizeof(dbgconsendbuf)) bytes -= sizeof(dbgconsendbuf);
396
            if (bytes)
400
            if (bytes)
Line 546... Line 550...
546
            }
550
            }
547
        if (dbgaction != DBGACTION_IDLE)
551
        if (dbgaction != DBGACTION_IDLE)
548
        {
552
        {
549
            switch (dbgaction)
553
            switch (dbgaction)
550
            {
554
            {
-
 
555
#ifdef HAVE_I2C
551
            case DBGACTION_I2CSEND:
556
            case DBGACTION_I2CSEND:
552
                i2c_send(dbgi2cbus, dbgi2cslave, dbgactionaddr,
557
                i2c_send(dbgi2cbus, dbgi2cslave, dbgactionaddr,
553
                         (uint8_t*)dbgasyncsendbuf, dbgactionlength);
558
                         (uint8_t*)dbgasyncsendbuf, dbgactionlength);
554
                dbgasyncsendbuf[0] = 1;
559
                dbgasyncsendbuf[0] = 1;
555
                usb_drv_send_nonblocking(dbgendpoints[1], dbgasyncsendbuf, 16);
560
                usb_drv_send_nonblocking(dbgendpoints[1], dbgasyncsendbuf, 16);
Line 558... Line 563...
558
                i2c_recv(dbgi2cbus, dbgi2cslave, dbgactionaddr,
563
                i2c_recv(dbgi2cbus, dbgi2cslave, dbgactionaddr,
559
                         (uint8_t*)(&dbgasyncsendbuf[4]), dbgactionlength);
564
                         (uint8_t*)(&dbgasyncsendbuf[4]), dbgactionlength);
560
                dbgasyncsendbuf[0] = 1;
565
                dbgasyncsendbuf[0] = 1;
561
                usb_drv_send_nonblocking(dbgendpoints[1], dbgasyncsendbuf, 16 + dbgactionlength);
566
                usb_drv_send_nonblocking(dbgendpoints[1], dbgasyncsendbuf, 16 + dbgactionlength);
562
                break;
567
                break;
-
 
568
#endif
563
            case DBGACTION_POWEROFF:
569
            case DBGACTION_POWEROFF:
564
                if (dbgactiontype) shutdown();
570
                if (dbgactiontype) shutdown();
565
                power_off();
571
                power_off();
566
                break;
572
                break;
567
            case DBGACTION_RESET:
573
            case DBGACTION_RESET:
Line 598... Line 604...
598
    dbgconsendwriteidx = 0;
604
    dbgconsendwriteidx = 0;
599
    dbgconrecvreadidx = 0;
605
    dbgconrecvreadidx = 0;
600
    dbgconrecvwriteidx = 0;
606
    dbgconrecvwriteidx = 0;
601
    wakeup_init(&dbgconsendwakeup);
607
    wakeup_init(&dbgconsendwakeup);
602
    wakeup_init(&dbgconrecvwakeup);
608
    wakeup_init(&dbgconrecvwakeup);
603
    dbgconsoleattached = false;;
609
    dbgconsoleattached = false;
604
    thread_create("Debugger", dbgthread, dbgstack, sizeof(dbgstack), 255, SYSTEM_THREAD, true);
610
    thread_create("Debugger", dbgthread, dbgstack, sizeof(dbgstack), 255, SYSTEM_THREAD, true);
605
    usb_drv_init();
611
    usb_drv_init();
606
}
612
}
607
 
613
 
608
int dbgconsole_getfree() ICODE_ATTR;
614
int dbgconsole_getfree() ICODE_ATTR;