void usbToUartService() { uint8 signals; // Data while(usbComRxAvailable() && uart1TxAvailable()) { uart1TxSendByte(usbComRxReceiveByte()); } while(uart1RxAvailable() && usbComTxAvailable()) { usbComTxSendByte(uart1RxReceiveByte()); } // Control lines controlled by computer. P1_0 = !(usbComRxControlSignals() & ACM_CONTROL_LINE_DTR); P1_1 = !(usbComRxControlSignals() & ACM_CONTROL_LINE_RTS); P1DIR |= (1<<0) | (1<<1); // Control lines controlled by device. signals = 0; if (!P1_2){ signals |= ACM_SERIAL_STATE_TX_CARRIER; } // TX Carrier = DSR if (!P1_3){ signals |= ACM_SERIAL_STATE_RX_CARRIER; } // RX Carrier = CD usbComTxControlSignals(signals); }
void usbToRadioService() { uint8 signals; // Data while(usbComRxAvailable() && radioComTxAvailable()) { radioComTxSendByte(usbComRxReceiveByte()); } while(radioComRxAvailable() && usbComTxAvailable()) { usbComTxSendByte(radioComRxReceiveByte()); } // Control Signals radioComTxControlSignals(usbComRxControlSignals() & 3); // Need to switch bits 0 and 1 so that DTR pairs up with DSR. signals = radioComRxControlSignals(); usbComTxControlSignals( ((signals & 1) ? 2 : 0) | ((signals & 2) ? 1 : 0)); }
void usbToUartService() { uint8 signals; // Data while(usbComRxAvailable() && !spi0MasterBusy()) { spi0MasterSendByte(usbComRxReceiveByte()); } while(!spi0MasterBusy() && usbComTxAvailable()) { usbComTxSendByte(spi0MasterReceiveByte()); } ioTxSignals(usbComRxControlSignals()); // Need to switch bits 0 and 1 so that DTR pairs up with DSR. signals = ioRxSignals(); usbComTxControlSignals( ((signals & 1) ? 2 : 0) | ((signals & 2) ? 1 : 0)); // TODO: report framing, parity, and overrun errors to the USB host here }
void processByte(uint8 c) { uint8 XDATA *tmt; switch(c) { // these cases handle encoder readings; a better // implementation would use sscanf in the processBytesUart0 // function case '0': usbComTxSendByte(c); break; case '1': usbComTxSendByte(c); break; case '2': usbComTxSendByte(c); break; case '3': usbComTxSendByte(c); break; case '4': usbComTxSendByte(c); break; case '5': usbComTxSendByte(c); break; case '6': usbComTxSendByte(c); break; case '7': usbComTxSendByte(c); break; case '8': usbComTxSendByte(c); break; case '9': usbComTxSendByte(c); break; case '\r': usbComTxSendByte(c); break; case '\n': usbComTxSendByte(c); break; // just in case we can't print anything to screen // this command allows for a visual that we are // at least getting serial commands case COMMAND_TOGGLE_YELLOW_LED: yellowLedOn ^= 1; break; case COMMAND_RESET_DSPIC: tmt = radioLinkTxCurrentPacket(); if(tmt != NULL) { tmt[0] = 1; // payload length tmt[1] = COMMAND_RESET_DSPIC; // payload data radioLinkTxSendPacket(0); } break; case COMMAND_ENABLE_QEI: tmt = radioLinkTxCurrentPacket(); if(tmt != NULL) { tmt[0] = 1; // payload length tmt[1] = COMMAND_ENABLE_QEI; // payload data radioLinkTxSendPacket(0); } break; case COMMAND_DISABLE_QEI: tmt = radioLinkTxCurrentPacket(); if(tmt != NULL) { tmt[0] = 1; // payload length tmt[1] = COMMAND_DISABLE_QEI; // payload data radioLinkTxSendPacket(0); } break; case COMMAND_READ_QEI: tmt = radioLinkTxCurrentPacket(); if(tmt != NULL) { tmt[0] = 1; // payload length tmt[1] = COMMAND_READ_QEI; // payload data radioLinkTxSendPacket(0); } break; case COMMAND_SEND_T: tmt = radioLinkTxCurrentPacket(); if(tmt != NULL) { tmt[0] = 1; // payload length tmt[1] = COMMAND_SEND_T; // payload data radioLinkTxSendPacket(0); } break; case COMMAND_RUN_MOTOR: tmt = radioLinkTxCurrentPacket(); if(tmt != NULL) { tmt[0] = 1; // payload length tmt[1] = COMMAND_RUN_MOTOR; // payload data radioLinkTxSendPacket(0); } break; case COMMAND_HALT_MOTOR: tmt = radioLinkTxCurrentPacket(); if(tmt != NULL) { tmt[0] = 1; // payload length tmt[1] = COMMAND_HALT_MOTOR; // payload data radioLinkTxSendPacket(0); } break; case COMMAND_RUN_FASTER: tmt = radioLinkTxCurrentPacket(); if(tmt != NULL) { tmt[0] = 1; // payload length tmt[1] = COMMAND_RUN_FASTER; // payload data radioLinkTxSendPacket(0); } break; case COMMAND_RUN_SLOWER: tmt = radioLinkTxCurrentPacket(); if(tmt != NULL) { tmt[0] = 1; // payload length tmt[1] = COMMAND_RUN_SLOWER; // payload data radioLinkTxSendPacket(0); } break; case COMMAND_INVERT_DIRECTION: tmt = radioLinkTxCurrentPacket(); if(tmt != NULL) { tmt[0] = 1; // payload length tmt[1] = COMMAND_INVERT_DIRECTION; // payload data radioLinkTxSendPacket(0); yellowLedOn ^= 1; } break; case COMMAND_READ_ADC: tmt = radioLinkTxCurrentPacket(); if(tmt != NULL) { tmt[0] = 1; // payload length tmt[1] = COMMAND_READ_ADC; // payload data radioLinkTxSendPacket(0); yellowLedOn ^= 1; } break; } }
void putchar(char c) { //if (usb_connected) usbComTxSendByte(c); }