int main (void) { unsigned int i; /* Initialization */ SetupClock(); SetupPorts(); batSetup(); cmdSetup(); mcSetup(); SetupADC(); SwitchClocks(); sclockSetup(); radioInit(TXPQ_MAX_SIZE, RXPQ_MAX_SIZE); radioSetChannel(MY_CHAN); radioSetSrcPanID(PAN_ID); radioSetSrcAddr(SRC_ADDR); dfmemSetup(); camSetup(); cambuffSetup(); gyroSetup(); cmdResetSettings(); for (i = 0; i < 6; i++) { LED_GREEN = ~LED_GREEN; delay_ms(50); LED_RED = ~LED_RED; delay_ms(50); LED_ORANGE = ~LED_ORANGE; delay_ms(50); } LED_GREEN = 0; LED_RED = 0; LED_ORANGE = 0; /* Program */ while (1) { cmdHandleRadioRxBuffer(); radioProcess(); } }
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; }
void xbeeHandleAt(Payload rx_pld) { unsigned char frame; unsigned char length; // unsigned char test; //This should really be some sort of dynamic queue to be generalized unsigned char bytes[10]; //unsigned short int command; WordVal command; WordVal data; length = payGetPayloadLength(rx_pld); frame = rx_pld->pld_data[0]; //test = rx_pld->pld_data[1]; //test = rx_pld->pld_data[2]; /* command = rx_pld->pld_data[1]; command = command << 8; command = command + rx_pld->pld_data[2]; */ command.byte.HB = rx_pld->pld_data[1]; command.byte.LB = rx_pld->pld_data[2]; switch (command.val) { case AT_CHANNEL: if (length != 3) { radioSetChannel(rx_pld->pld_data[3]); } if (frame != 0) { bytes[0] = radioGetChannel(); xbeeHandleATR(frame, command, bytes, 1); } break; case AT_PAN_ID: if (length != 3) { data.byte.HB = rx_pld->pld_data[3]; data.byte.LB = rx_pld->pld_data[4]; radioSetSrcPanID(data.val); } if (frame != 0) { data.val = (unsigned int)radioGetSrcPanID(); bytes[0] = data.byte.HB; bytes[1] = data.byte.LB; xbeeHandleATR(frame, command, bytes, 2); } break; case AT_SRC_ADR: if (length != 3) { data.byte.HB = rx_pld->pld_data[3]; data.byte.LB = rx_pld->pld_data[4]; radioSetSrcAddr(data.val); } if (frame != 0) { data.val = radioGetSrcAddr(); bytes[0] = data.byte.HB; bytes[1] = data.byte.LB; xbeeHandleATR(frame, command, bytes, 2); } break; case AT_ACK_LAST: if (frame != 0) { bytes[0] = 0; bytes[1] = trxGetLastACKd(); xbeeHandleATR(frame, command, bytes, 2); } break; case AT_SNIFFER: if (length != 3) trxSetPromMode(rx_pld->pld_data[3]); //Put radio in sniffer mode break; } }
int main(void) { //wakeTime = 0; //dcCounter = 0; // Processor Initialization SetupClock(); SwitchClocks(); SetupPorts(); sclockSetup(); LED_1 = 0; LED_2 = 0; LED_3 = 0; cmdSetup(); radioInit(RADIO_TXPQ_MAX_SIZE, RADIO_RXPQ_MAX_SIZE); radioSetChannel(RADIO_CHANNEL); radioSetSrcPanID(RADIO_PAN_ID); radioSetSrcAddr(RADIO_SRC_ADDR); dfmemSetup(); uint64_t id = dfmemGetUnqiueID(); telemSetup(); //Timer 5, HW priority 4 mpuSetup(); imuSetup(); //Timer 4, HW priority 3 tiHSetup(); adcSetup(); //AMS Encoders //encSetup(); //"Open Loop" vibration & jitter generator, AP 2014 //olVibeSetup(); legCtrlSetup(); //Timer 1, HW priority 5 steeringSetup(); //Timer 5, HW priority 4 //Tail control is a special case //tailCtrlSetup(); //Camera is untested with current code base, AP 12/6/2012 //ovcamSetup(); LED_RED = 1; //Red is use an "alive" indicator LED_GREEN = 0; LED_YELLOW = 0; //Radio startup verification //if (phyGetState() == 0x16) { // LED_GREEN = 1; //} //Sleeping and low power options //_VREGS = 1; //gyroSleep(); /////FUNCTION TEST, NOT FOR PRODUCTION //olVibeStart(); //////////////////// while (1) { cmdHandleRadioRxBuffer(); radioProcess(); } }