1: uhs_status_t Usbh_Cdc_SetLineCoding(
void* pContext,
2:
PCDC_LINE_CODING pstData)
3: {
4:
PCDC_DEVICE pCdcDevice;
5: usb_device_request_t* pRequest;
6: CDC_FUNC_STATUS nRetval;
7: uhs_ubit8_t *pu8SetBuff;
8: uhs_ubit8_t u8CntDeviceId;
9: uhs_status_t nRetStatus;
10: uhs_status_t nRetvalResorce;
11:
12:
13:
14:
15:
if( pContext == NULL ){
16: CIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_PARAM_ERROR );
17:
return(
USBCDC_API_PARAM_ERROR );
18: }
19:
20:
21:
22:
23:
if( g_pCdcDriver == NULL ) {
24: CIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_NOT_INIT );
25:
return(
USBCDC_API_SYS_SYSTEM_ERROR );
26: }
27:
28:
29:
30:
31:
32: nRetStatus = Usbh_Cdc_CheckDeviceStatus(pContext, &pCdcDevice, &u8CntDeviceId, ID_CLSREQ_DET);
33:
if(nRetStatus !=
USBCDC_API_SUCCESS){
34: CIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_SYSTEM_ERROR );
35:
return(nRetStatus);
36: }
37:
38:
39:
40:
41:
42:
if( pstData == NULL ) {
43:
44:
45: (
void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pClsReqDetAccessLock[u8CntDeviceId] );
46: CIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_PARAM_ERROR );
47:
return(
USBCDC_API_PARAM_ERROR );
48: }
49:
if( pstData->u32BaudRate == 0 ) {
50:
51:
52: (
void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pClsReqDetAccessLock[u8CntDeviceId] );
53: CIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_PARAM_ERROR );
54:
return(
USBCDC_API_PARAM_ERROR );
55: }
56:
if( (pstData->StopBit != LINE_CODING_STOPBIT_1) &&
57: (pstData->StopBit != LINE_CODING_STOPBIT_15) &&
58: (pstData->StopBit != LINE_CODING_STOPBIT_2) ) {
59:
60:
61: (
void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pClsReqDetAccessLock[u8CntDeviceId] );
62: CIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_PARAM_ERROR );
63:
return(
USBCDC_API_PARAM_ERROR );
64: }
65:
if( (pstData->Parity != LINE_CODING_PARITY_NONE) &&
66: (pstData->Parity != LINE_CODING_PARITY_ODD) &&
67: (pstData->Parity != LINE_CODING_PARITY_EVEN) &&
68: (pstData->Parity != LINE_CODING_PARITY_MARK) &&
69: (pstData->Parity != LINE_CODING_PARITY_SPACE) ) {
70:
71:
72: (
void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pClsReqDetAccessLock[u8CntDeviceId] );
73: CIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_PARAM_ERROR );
74:
return(
USBCDC_API_PARAM_ERROR );
75: }
76:
if( (pstData->DataBit != LINE_CODING_DATABIT_5) &&
77: (pstData->DataBit != LINE_CODING_DATABIT_6) &&
78: (pstData->DataBit != LINE_CODING_DATABIT_7) &&
79: (pstData->DataBit != LINE_CODING_DATABIT_8) &&
80: (pstData->DataBit != LINE_CODING_DATABIT_16) ) {
81:
82:
83: (
void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pClsReqDetAccessLock[u8CntDeviceId] );
84: CIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_PARAM_ERROR );
85:
return(
USBCDC_API_PARAM_ERROR );
86: }
87:
88:
89:
90:
91:
if( (pCdcDevice->nDeviceStat == CDC_DEVICE_STAT_CONNECTING) ||
92: (pCdcDevice->nDeviceStat == CDC_DEVICE_STAT_REGIST) ) {
93:
94:
95: (
void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pClsReqDetAccessLock[u8CntDeviceId] );
96: CIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_NOT_USE );
97:
return(
USBCDC_API_NOT_READY );
98: }
99:
else if( pCdcDevice->nDeviceStat == CDC_DEVICE_STAT_NO_SUPPORT ) {
100:
101:
102: (
void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pClsReqDetAccessLock[u8CntDeviceId] );
103: CIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_NO_SUPPORT );
104:
return(
USBCDC_API_NO_SUPPORT );
105: }
106:
else {
107: ;
108: }
109:
110:
111:
112:
113: pRequest = CdcUtils_Malloc(
sizeof(usb_device_request_t));
114:
if(pRequest == NULL) {
115: (
void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pClsReqDetAccessLock[u8CntDeviceId] );
116: CIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_OUT_OF_RESOURCE );
117:
return(
USBCDC_API_SYS_OUT_OF_RESOURCE );
118: }
119:
120:
121:
122:
123: pu8SetBuff = CdcUtils_Malloc(7);
124:
if(pu8SetBuff == NULL) {
125: (
void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pClsReqDetAccessLock[u8CntDeviceId] );
126: CdcUtils_Free(pRequest);
127: CIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_OUT_OF_RESOURCE );
128: CIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_OUT_OF_RESOURCE );
129:
return(
USBCDC_API_SYS_OUT_OF_RESOURCE );
130: }
131:
132:
133:
134:
135: pRequest->bmRequestType = 0x21;
136: pRequest->bRequest = 0x20;
137: pRequest->wValue0 = 0x00;
138: pRequest->wValue1 = 0x00;
139: pRequest->wIndex0 = 0x00;
140: pRequest->wIndex1 = 0x00;
141: pRequest->wLength0 = UNPACK16_LITTLE_ENDIAN_LSB( 0x0007 );
142: pRequest->wLength1 = UNPACK16_LITTLE_ENDIAN_MSB( 0x0007 );
143:
144:
145:
146:
147: pu8SetBuff[0] = UNPACK32_LITTLE_ENDIAN_LSB( pstData->u32BaudRate );
148: pu8SetBuff[1] = UNPACK32_LITTLE_ENDIAN_LSBM( pstData->u32BaudRate );
149: pu8SetBuff[2] = UNPACK32_LITTLE_ENDIAN_MSBM( pstData->u32BaudRate );
150: pu8SetBuff[3] = UNPACK32_LITTLE_ENDIAN_MSB( pstData->u32BaudRate );
151: pu8SetBuff[4] = (uhs_ubit8_t)(pstData->StopBit);
152: pu8SetBuff[5] = (uhs_ubit8_t)(pstData->Parity);
153: pu8SetBuff[6] = (uhs_ubit8_t)(pstData->DataBit);
154:
155:
156:
157:
158: nRetval = Usbh_Cdc_ForCommand(pCdcDevice, pRequest, pu8SetBuff, NULL);
159:
if(nRetval != CDC_FUNC_STATUS_SUCCESS){
160: CdcUtils_Free(pu8SetBuff);
161: CdcUtils_Free(pRequest);
162:
163:
164: (
void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pClsReqDetAccessLock[u8CntDeviceId] );
165: CIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_FAILED_CLSREQ );
166:
return(
USBCDC_API_TRANS_CLSREQ_FAILED );
167: }
168:
169:
170:
171:
172: CdcUtils_Free(pu8SetBuff);
173:
174:
175:
176:
177: CdcUtils_Free(pRequest);
178:
179:
180:
181:
182: nRetvalResorce = CdcUtils_ReleaseSemaphore( g_pCdcDriver->pClsReqDetAccessLock[u8CntDeviceId] );
183:
if(nRetvalResorce != TRUE){
184:
185: CIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_OUT_OF_RESOURCE );
186:
return(
USBCDC_API_SYS_OUT_OF_RESOURCE );
187: }
188:
189:
return(
USBCDC_API_SUCCESS );
190: }