void mySetLineCodingHandler(void) { //If the request is not in a valid range if(cdc_notice.GetLineCoding.dwDTERate.Val > 115200) { //NOTE: There are two ways that an unsupported baud rate could be //handled. The first is just to ignore the request and don't change //the values. That is what is currently implemented in this function. //The second possible method is to stall the STATUS stage of the request. //STALLing the STATUS stage will cause an exception to be thrown in the //requesting application. Some programs, like HyperTerminal, handle the //exception properly and give a pop-up box indicating that the request //settings are not valid. Any application that does not handle the //exception correctly will likely crash when this requiest fails. For //the sake of example the code required to STALL the status stage of the //request is provided below. It has been left out so that this demo //does not cause applications without the required exception handling //to crash. //--------------------------------------- //USBStallEndpoint(0,1); } else { //Update the baudrate info in the CDC driver CDCSetBaudRate(cdc_notice.GetLineCoding.dwDTERate.Val); } }
void mySetLineCodingHandler(void) { if (cdc_notice.GetLineCoding.dwDTERate.Val > 115200) { // invalid range! stall the request's STATUS stage, which will throw an // exception in the requesting application: USBStallEndpoint(0,1); } else CDCSetBaudRate(cdc_notice.GetLineCoding.dwDTERate.Val); }
void mySetLineCodingHandler(void) { //If the request is not in a valid range if(cdc_notice.GetLineCoding.dwDTERate.Val > 115200) { //NOTE: There are two ways that an unsupported baud rate could be //handled. The first is just to ignore the request and don't change //the values. That is what is currently implemented in this function. //The second possible method is to stall the STATUS stage of the request. //STALLing the STATUS stage will cause an exception to be thrown in the //requesting application. Some programs, like HyperTerminal, handle the //exception properly and give a pop-up box indicating that the request //settings are not valid. Any application that does not handle the //exception correctly will likely crash when this requiest fails. For //the sake of example the code required to STALL the status stage of the //request is provided below. It has been left out so that this demo //does not cause applications without the required exception handling //to crash. //--------------------------------------- //USBStallEndpoint(0,1); } else { DWORD_VAL dwBaud; //Update the baudrate info in the CDC driver CDCSetBaudRate(cdc_notice.GetLineCoding.dwDTERate.Val); //Update the baudrate of the UART #if defined(__18CXX) dwBaud.Val = (DWORD)(GetSystemClock()/4)/line_coding.dwDTERate.Val-1; SPBRG = dwBaud.v[0]; SPBRGH = dwBaud.v[1]; #elif defined(__C30__) #if defined(__dsPIC33EP512MU810__) || defined (__PIC24EP512GU810__) dwBaud.Val = ((GetPeripheralClock()/(unsigned long)(16 * line_coding.dwDTERate.Val)))- 1; #else dwBaud.Val = (((GetPeripheralClock()/2)+(BRG_DIV2/2*line_coding.dwDTERate.Val))/BRG_DIV2/line_coding.dwDTERate.Val-1); #endif U2BRG = dwBaud.Val; #elif defined(__C32__) U2BRG = ((GetPeripheralClock()+(BRG_DIV2/2*line_coding.dwDTERate.Val))/BRG_DIV2/line_coding.dwDTERate.Val-1); //U2MODE = 0; U2MODEbits.BRGH = BRGH2; //U2STA = 0; #endif } }
void mySetLineCodingHandler(void) { //If the request is not in a valid range if(cdc_notice.GetLineCoding.dwDTERate.Val > 115200) { USBStallEndpoint(0,1); } else { DWORD_VAL dwBaud; CDCSetBaudRate(cdc_notice.GetLineCoding.dwDTERate.Val); dwBaud.Val = (CLOCK_FREQ/4)/line_coding.dwDTERate.Val-1; SPBRG = dwBaud.v[0]; SPBRGH = dwBaud.v[1]; } }
void USB_init(void) { USBDeviceInit(); USBDeviceAttach(); CDCSetBaudRate(115200); }