Пример #1
0
unsigned char _ADBOpen()
{
	u32 wait=0;
	
	h = ADBOpen("tcp:2000", &ADBreceive);
	while ((wait<1000)&&(!ADBChannelReady(h))) 
		{
			ADBTasks();
			Delayms(1);
			wait++;
		}
	if (wait<1000) return TRUE;
	else return FALSE;
}
int main() {
    CFGCONbits.JTAGEN = 0; // turn off JTAG, get back those pins for IO use
    // set PIC32to max computing power
    DEBUGLED = 0;
    // enable multi-vector interrupts
    INTEnableSystemMultiVectoredInt();
    INTEnableInterrupts();
    PIC32MX250_setup_pins();
    SYSTEMConfigPerformance(SYS_FREQ);

    setTimer2(OUTPUT_FREQ); //
    setupTimer3(BUFFER_FREQ);
    initPWM(); //Initializing PWM on OC3.

    // Initialize texture buffer and index to zero

    int i;
    tBuff.Index = 0; //init to zero
    tBuff.On = 0; //turn off
    tBuff.Length0 = 0; //start with zero length
    tBuff.Length1 = 0; //start with zero length
    tBuff.Front = 0;
    for (i = 0; i < MAX_BUFFER_LENGTH; i++) {
        tBuff.Buff0[i] = 0; //init entire buffer to zero
        tBuff.Buff1[i] = 0; //init entire buffer to zero
    }


    // Initialize the USB host
    ConnectionInit();
    DEBUGLED = 1;

    //Main USB State Machine
    while (1) {
        // Keep the USB connection running;
        // Handle incoming data and manage outgoing data.
        ConnectionTasks();
        // Main state machine
        switch (state) {
            case STATE_INIT:

                state = STATE_WAITING;
                h = INVALID_CHANNEL_HANDLE;
                break;

            case STATE_WAITING:
                DEBUGLED = 0;
                if (ADBAttached()) {
                    state = STATE_CONNECTING;
                }
                break;

            case STATE_CONNECTING:

                if (ADBConnected()) {
                    // Open a channel to the Android device
                    // See "adb.h" in libadb for more details
                    // (I don't think the name tcp:4545 matters)
                    h = ADBOpen("tcp:4545", &ADBCallback);

                    if (h != INVALID_CHANNEL_HANDLE) {
                        state = STATE_CONNECTED;
                        WriteCoreTimer(0);
                        // Send plaintext and let the recipient do formatting
                        ADBWrite(h & 0xFF, "Hello from TPAD!", 17);
                    }
                }
                break;

            case STATE_CONNECTED:
                DEBUGLED = 1;

                if (!ADBAttached()) {
                    state = STATE_INIT;
                }
                if (ADBChannelReady(h)) {

                    // Execute tasks that rely on the Android-PIC32 connection
                    // Here we will just wait for messages to come in and be handled below
                }
                // Timeout timer. If the coretimer is not reset by a keepalive command from the Android, the PIC will reset the USB communications
                if (ReadCoreTimer() > 200000000) {
                    state = STATE_INIT;
                }

                break;
        } // end state machine
    } // end while loop

    return 0;
}
Пример #3
0
CHANNEL_HANDLE ConnectionOpenChannelAdb(const char *name, ChannelCallback cb) {
  assert(ADBConnected());
  return ADBOpen(name, cb) | (CHANNEL_TYPE_ADB << 8);
}
Пример #4
0
int main() {
  ADB_FILE_HANDLE f;
  ADB_CHANNEL_HANDLE h;
#ifdef SIGNAL_AFTER_BAD_RESET
  if (RCON & 0b1100001001000000) {
    SignalRcon();
  }
#endif
  log_init();
  log_printf("Hello from Bootloader!!!");
  InitializeSystem();
  BootloaderConnInit();

  while (1) {
    BOOL connected = BootloaderConnTasks();
    mLED_0 = (state == MAIN_STATE_ERROR) ? (led_counter++ >> 13) : !connected;
    if (!connected) {
      state = MAIN_STATE_WAIT_CONNECT;
    }

    switch(state) {
      case MAIN_STATE_WAIT_CONNECT:
        if (connected) {
          log_printf("Device connected!");
          if (ADBAttached()) {
            log_printf("ADB attached - attempting firmware upgrade");
            state = MAIN_STATE_WAIT_ADB_READY;
          } else {
            log_printf("ADB not attached - skipping boot sequence");
            state = MAIN_STATE_RUN_APP;
          }
        }
        break;

      case MAIN_STATE_WAIT_ADB_READY:
        if (ADBConnected()) {
            log_printf("ADB connected - starting boot sequence");
            manager_path = DUMPSYS_BUSY;
            DumpsysInit();
            h = ADBOpen("shell:dumpsys package ioio.manager", &RecvDumpsys);
            state = MAIN_STATE_FIND_PATH;
        }
        break;

      case MAIN_STATE_FIND_PATH_DONE:
        fingerprint_size = 0;
        strcpy(filepath, manager_path);
        strcat(filepath, "/files/" PLATFORM_ID ".fp");
        f = ADBFileRead(filepath, &FileRecvFingerprint);
        state = MAIN_STATE_WAIT_RECV_FP;
        break;

      case MAIN_STATE_FP_FAILED:
#ifdef BYPASS_SECURITY
        state = MAIN_STATE_AUTH_PASSED;
        break;
#endif
        auth_result = AUTH_BUSY;
        AuthInit();
        f = ADBFileRead("/data/system/packages.xml", &FileRecvPackages);
        state = MAIN_STATE_AUTH_MANAGER;
        break;

      case MAIN_STATE_AUTH_PASSED:
        if (!EraseFingerprint()) {
          state = MAIN_STATE_ERROR;
        } else {
          IOIOFileInit();
          strcpy(filepath, manager_path);
          strcat(filepath, "/files/" PLATFORM_ID ".ioio");
          f = ADBFileRead(filepath, &FileRecvImage);
          state = MAIN_STATE_WAIT_RECV_IMAGE;
        }
        break;

      case MAIN_STATE_RECV_IMAGE_DONE:
        if (WriteFingerprint()) {
          state = MAIN_STATE_RUN_APP;
        } else {
          state = MAIN_STATE_ERROR;
        }
        break;

      case MAIN_STATE_RUN_APP:
        BootloaderConnResetUSB();
        pass_usb_to_app = 1;
        log_printf("Running app...");
        __asm__("goto __APP_RESET");

      default:
        break;  // do nothing
    }
  }
  return 0;
}
Пример #5
0
static int ADBConOpenChannel(ChannelCallback cb, int_or_ptr_t open_arg,
                             int_or_ptr_t cb_args) {
  return ADBOpen((const char *) open_arg.p, cb, cb_args);
}