int main(int argc, char ** argv) { int res; printf("Start rpiCC2500\n"); TICC *cc = (TICC *) malloc(sizeof(TICC)); res = CC_Init(cc, "/dev/spidev0.0", 25 /*GNO0-pin Not yet used*/); if (res < 0) { printf("Failed to init TICC."); return 1; } perror("SPI init"); usleep(30000); TI_CC_SPIStrobe( cc->fd, TI_CCxxx0_SRES); printf("Wait for RF to be Ready\n"); usleep(40); printf("RF ok\n"); writeRFSettings(cc); printf("BurstReg\n"); TI_CC_SPIWriteBurstReg(cc->fd, TI_CCxxx0_PATABLE, paTable, paTableLen); printf("Strobe\n"); //TI_CC_SPIStrobe(cc->fd, TI_CCxxx0_SRX); // Initialize CCxxxx in RX mode. // When a pkt is received, it will // signal on GDO0 char rxBuffer[50]; printf("entering LOOP\n"); printf("Part No.: %d\n",TI_CC_SPIReadStatus(cc->fd, TI_CCxxx0_PARTNUM)); printf("Version No.: %d\n",TI_CC_SPIReadStatus(cc->fd, TI_CCxxx0_VERSION)); char len = 50; int j,i; for(j=0;j<10;j++){ // for now send every 500ms a message and check for received packages rxBuffer[0] =3; rxBuffer[1] =0x01; rxBuffer[2] =12; rxBuffer[3] =rxBuffer[1]^rxBuffer[2]^0x01; printf("Send Package\n"); RFSendPacket(cc, rxBuffer, 4); usleep(500000); printf("Check for Package\n"); while(RFReceivePacket(cc, rxBuffer, &len)){ printf("Got A Package %d\n",len); for(i =0; i< len; i++){ printf("%d ",rxBuffer[i]); } printf("\n"); //Receiveddata are stored in rxBuffer //Put some intelligence here len = 50; } } printf("exiting LOOP\n"); CC_dispose(cc); free(cc); return 0; }
__interrupt void port2_ISR (void) { char len=2; // Len of pkt to be RXed (only addr // plus data; size byte not incl b/c // stripped away within RX function) if (RFReceivePacket(rxBuffer,&len)) // Fetch packet from CCxxxx TI_CC_LED_PxOUT ^= rxBuffer[1]; // Toggle LEDs according to pkt data TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // Clear flag }
void MiraTrama(void) { char len; if (TramaRebuda) { TramaRebuda = 0; len=LengthDATA+1; // Longitud de les dades mçes l'adreça de xarxa if(RadioMode == RX_Mode) { if (RFReceivePacket(rxBuffer1,&len)) { // Fetch packet from CCxxxx ProcessaTrama((unsigned char *)rxBuffer1); } } } }
__interrupt void PORT2_ISR() { // if GDO fired if(TI_CC_GDO0_PxIFG & TI_CC_GDO0_PIN) { char len=11; // Len of rx packet expected if (RFReceivePacket(rxBuffer,&len)) // Check for a received packet { if(rxBuffer[DATA_REQUEST_RX_INDEX] == OPERATE_SENSOR){// if the packet indicates that the sensor should read data... water_level_request = 1; // set flag to indicate a request is received. } } TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // After pkt RX, this flag is set. } }
__interrupt void PORT2_ISR() { // if GDO fired if(TI_CC_GDO0_PxIFG & TI_CC_GDO0_PIN) // Verify that the interrupt is from the radio { char len=11; // Len of rx packet expected if (RFReceivePacket(rxBuffer,&len)) // RFReceive checks the radio for new data and fills rxBuffer { // Fetch packet from CC110 P2OUT |= (rxBuffer[1]) ? BIT4 : 0; // turn on an LED if the water level is valid rx_water_level_data = 1; // set flag to indicate that sensor data has been received } } TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // After pkt RX, this flag is set. }
__interrupt void Port2_ISR(void) { // if GDO fired if(TI_CC_GDO0_PxIFG & TI_CC_GDO0_PIN) { char len=2; // Len of pkt to be RXed (only addr // plus data; size byte not incl b/c // stripped away within RX function) if (RFReceivePacket(rxBuffer,&len)) // Fetch packet from CCxxxx TI_CC_LED_PxOUT ^= rxBuffer[1]; // Toggle LEDs according to pkt data } j = 0; IE2 |= UCA0TXIE; // Enable USCI_A0 TX interrupt UCA0TXBUF = string1[j++]; TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // After pkt RX, this flag is set. }
__interrupt void port1_ISR (void) { char len=2; // Len of pkt to be RXed (only addr // plus data; size byte not incl b/c // stripped away within RX function) switch(__even_in_range(P1IV,16)) { case 0: break; case 2: break; // Vector P1IFG.0 case 4: break; // Vector P1IFG.1 case 6: break; // Vector P1IFG.2 case 8: break; // Vector P1IFG.3 case 10: break; // Vector P1IFG.4 case 12: break; // Vector P1IFG.5 case 14: break; // Vector P1IFG.6 case 16: // Vector P1IFG.7 if (RFReceivePacket(rxBuffer,&len)) // Fetch packet from CCxxxx TI_CC_LED_PxOUT ^= rxBuffer[1]; // Toggle LEDs according to pkt data break; } }
__interrupt void port1_ISR (void) { if(P1IFG & (TI_CC_SW1 + TI_CC_SW2)) { // Build packet txBuffer[0] = 2; // Packet length txBuffer[1] = 0x01; // Packet address txBuffer[2] = (~TI_CC_SW_PxIN) & 0x0F; // Load four switch inputs RFSendPacket(txBuffer, 3); // Send value over RF } else if(P1IFG & TI_CC_GDO0_PIN) { char len=2; // Len of pkt to be RXed (only addr // plus data; size byte not incl b/c // stripped away within RX function) if (RFReceivePacket(rxBuffer,&len)) // Fetch packet from CCxxxx TI_CC_LED_PxOUT ^= rxBuffer[1]; // Toggle LEDs according to pkt data } // P1IFG &= ~(TI_CC_SW1+TI_CC_SW2+TI_CC_SW3+TI_CC_SW4);//Clr flag that caused int TI_CC_SW_PxIFG &= ~(TI_CC_SW1+TI_CC_SW2); // Clr flag that caused int TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // After pkt TX, this flag is set. } // Clear it.