示例#1
0
void __attribute__((interrupt, no_auto_psv)) _T2Interrupt(void) {
    MacPacket rx_packet;
    Payload rx_payload;

    if (!radioRxQueueEmpty())
    {
        // Check for unprocessed packet
        rx_packet = radioDequeueRxPacket();
        if(rx_packet == NULL) return;

        // Retrieve payload
        rx_payload = macGetPayload(rx_packet);

        // Switch on packet type
        Test* test = (Test*) malloc(sizeof(Test));
        if(!test) return;

        test->packet = rx_packet;
        switch(payGetType(rx_payload))
        {
            case RADIO_TEST:
                test->tf = &test_radio;
                queuePush(fun_queue, test);
                break;
            case GYRO_TEST:
                test->tf = &test_gyro;
                queuePush(fun_queue, test);
                break;
		case HALL_TEST:
 			test->tf = &test_hall;
                queuePush(fun_queue, test);
                break;
            case ACCEL_TEST:
                test->tf = &test_accel;
                queuePush(fun_queue, test);
                break;
            case DFLASH_TEST:
                test->tf = &test_dflash;
                queuePush(fun_queue, test);
                break;
            case MOTOR_TEST:
                test->tf = &test_motor;
                queuePush(fun_queue, test);
                break;
            case SMA_TEST:
                test->tf = &test_sma;
                queuePush(fun_queue, test);
                break;
            default:    // temporary to check out what is happening to packets
		     test->tf = &test_radio;
                queuePush(fun_queue, test);
                break;
        }
    }
    _T2IF = 0;
}
示例#2
0
文件: main.c 项目: cankoc95/roach_JG
int main() {

    // Processor Initialization
    SetupClock();
    SwitchClocks();
    SetupPorts();
    sclockSetup();

    LED_1 = 1;
    LED_2 = 1;
    LED_3 = 1;

    // Message Passing
    fun_queue = carrayCreate(FUN_Q_LEN);
    cmdSetup();

    // Radio setup
    radioInit(RADIO_RXPQ_MAX_SIZE, RADIO_TXPQ_MAX_SIZE);
    radioSetChannel(RADIO_CHANNEL);
    radioSetSrcAddr(RADIO_SRC_ADDR);
    radioSetSrcPanID(RADIO_PAN_ID);

    uart_tx_packet = NULL;
    uart_tx_flag = 0;
    //uartInit(&cmdPushFunc);
    tactileInit();

    // Need delay for encoders to be ready
    delay_ms(100);
    amsEncoderSetup();
    mpuSetup();
    tiHSetup();
    dfmemSetup();
    telemSetup();
    adcSetup();
    pidSetup();



    LED_1 = 0;
    LED_3 = 1;
    while(1){
        // Send outgoing radio packets
        radioProcess();

        /*
        // Send outgoing uart packets
        if(uart_tx_flag) {
            uartSendPacket(uart_tx_packet);
            uart_tx_flag = 0;
        }*/

        checkTactileBuffer();

        // move received packets to function queue
        while (!radioRxQueueEmpty()) {
            // Check for unprocessed packet
            rx_packet = radioDequeueRxPacket();
            if(rx_packet != NULL) {
                cmdPushFunc(rx_packet);
            }
        }

        // process commands from function queue
        while(!carrayIsEmpty(fun_queue)) {
            rx_packet = carrayPopHead(fun_queue);
            unsigned int rx_src_addr = rx_packet->src_addr.val;
            if(rx_packet != NULL) {
               rx_payload = macGetPayload(rx_packet);
               if(rx_payload != NULL) {
                   rx_function = (test_function)(rx_payload->test);
                   if(rx_function != NULL) {
                       LED_2 = ~LED_2;
                       (rx_function)(payGetType(rx_payload), payGetStatus(rx_payload), payGetDataLength(rx_payload), payGetData(rx_payload), rx_src_addr);
                   }
               }
               ppoolReturnFullPacket(rx_packet);
            }
        }
    }
    return 0;
}