void SendData(short n1,short n2) { BYTE data[5]; //根据相关信息修改 data[0] = 0x01; data[1] = LBYTE(n1); data[2] = HBYTE(n1); data[3] = LBYTE(n2); data[4] = HBYTE(n2); SendDataBuf(UART4,data,5); }
int winwstr(WINDOW *win, wchar_t *wstr) { int counter = 0; int cy = win->_cury; chtype *ptr = &(win->_y[cy][win->_curx]), *pmax = &(win->_y[cy][win->_maxx]); chtype *p1st = &(win->_y[cy][0]); wchar_t wc; int sw, s; char *cp, cbuf[CSMAX+1]; while (ISCBIT(*ptr) && (p1st < ptr)) ptr--; while (ptr < pmax) { wc = RBYTE(*ptr); sw = mbscrw((int)wc); (void) mbeucw((int)wc); cp = cbuf; for (s = 0; s < sw; s++, ptr++) { if ((wc = RBYTE(*ptr)) == MBIT) continue; /* LINTED */ *cp++ = (char) wc; if ((wc = LBYTE(*ptr) | MBIT) == MBIT) continue; /* LINTED */ *cp++ = (char) wc; } *cp = '\0'; if (_curs_mbtowc(&wc, cbuf, CSMAX) <= 0) break; *wstr++ = wc; } *wstr = (wchar_t)0; return (counter); }
int wbkgd(WINDOW *win, chtype nbkgd) { short maxx; int x, y; chtype *wcp, obkgda, obkgdc, nbkgda, nbkgdc, acolor, c; short *begch, *endch; /* if 'nbkgd' contains color information, but this is not a color */ /* terminal, erase that information. */ if ((nbkgd & A_COLOR) && (cur_term->_pairs_tbl == NULL)) nbkgd &= ~A_COLOR; if (nbkgd == win->_bkgd) return (OK); obkgdc = _CHAR(win->_bkgd); obkgda = _ATTR(win->_bkgd); nbkgdc = _CHAR(nbkgd); nbkgda = _ATTR(nbkgd); /* switch byte order if necessary */ if (ISCBIT(nbkgdc)) nbkgdc = _CHAR((RBYTE(nbkgdc) << 8) | (LBYTE(nbkgdc)|MBIT)) | CBIT; c = RBYTE(nbkgdc); if ((nbkgdc < ' ' || nbkgdc == _CTRL('?')) || _curs_scrwidth[TYPE(c)] > 1) nbkgdc = obkgdc; nbkgd = (nbkgdc & ~CBIT) | nbkgda; win->_bkgd = nbkgd; /* delete the old background from the attribute field and replace */ /* it with the new background. Note: if the same attribute was */ /* first set by wbkgd() and then by wattron(), or vice versa, it */ /* will be deleted, so the effect of wattron() will be lost. */ /* This applies to both video and color attributes. */ if ((acolor = (win->_attrs & A_COLOR)) != 0) { if (acolor == (obkgda & A_COLOR)) { win->_attrs = _ATTR((win->_attrs & ~obkgda) | nbkgda); } else { win->_attrs = _ATTR((win->_attrs & (~obkgda | A_COLOR)) | (nbkgda & ~A_COLOR)); } } else win->_attrs = _ATTR((win->_attrs & ~obkgda) | nbkgda); maxx = win->_maxx - 1; begch = win->_firstch; endch = win->_lastch; for (y = win->_maxy-1; y >= 0; --y, ++begch, ++endch) { for (x = maxx, wcp = win->_y[y]; x-- >= 0; ++wcp) { if ((c = _CHAR(*wcp)) == obkgdc) c = nbkgdc; if ((acolor = (*wcp & A_COLOR)) != 0) { if (acolor == (obkgda & A_COLOR)) *wcp = c | _ATTR((*wcp & ~obkgda) | nbkgda); else *wcp = c | _ATTR((*wcp & (~obkgda | A_COLOR)) | (nbkgda & ~A_COLOR)); } else *wcp = c | _ATTR((*wcp & ~obkgda) | nbkgda); } *begch = 0; *endch = maxx; } win->_flags |= _WINCHANGED; if (win->_sync) wsyncup(win); return (win->_immed ? wrefresh(win) : OK); }
//------------------------------------------------------------------------------ // Exported functions //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ //! \ingroup usb_std_req_hlr //! \brief Handles standard SETUP requests //! \param pClass Pointer to a class driver instance //------------------------------------------------------------------------------ void STD_RequestHandler(S_std_class *pClass) { S_usb_request *pSetup = USB_GetSetup(pClass->pUsb); TRACE_DEBUG_M("Std "); // Handle incoming request switch (pSetup->bRequest) { //---------------------- case USB_GET_DESCRIPTOR: //---------------------- TRACE_DEBUG_M("gDesc "); // The HBYTE macro returns the upper byte of a word switch (HBYTE(pSetup->wValue)) { //------------------------- case USB_DEVICE_DESCRIPTOR: //------------------------- TRACE_DEBUG_M("Dev "); STD_GetDeviceDescriptor(pClass, pSetup->wLength); break; //-------------------------------- case USB_CONFIGURATION_DESCRIPTOR: //-------------------------------- TRACE_DEBUG_M("Cfg "); STD_GetConfigurationDescriptor(pClass, pSetup->wLength); break; #if defined(HIGHSPEED) //----------------------------------- case USB_DEVICE_QUALIFIER_DESCRIPTOR: //----------------------------------- TRACE_DEBUG_M("Qua "); STD_GetQualifierDescriptor(pClass, pSetup->wLength); break; //-------------------------------------------- case USB_OTHER_SPEED_CONFIGURATION_DESCRIPTOR: //-------------------------------------------- TRACE_DEBUG_M("OSC "); STD_GetOSCDescriptor(pClass, pSetup->wLength); break; #endif //------------------------- case USB_STRING_DESCRIPTOR: //------------------------- TRACE_DEBUG_M("Str%d ", LBYTE(pSetup->wValue)); STD_GetStringDescriptor(pClass, pSetup->wLength, LBYTE(pSetup->wValue)); break; //------ default: //------ TRACE_WARNING( "W: STD_RequestHandler: Unknown GetDescriptor = 0x%02X\n\r", pSetup->bRequest ); USB_Stall(pClass->pUsb, 0); } break; //------------------- case USB_SET_ADDRESS: //------------------- TRACE_DEBUG_M("sAddr "); USB_SendZLP0(pClass->pUsb, (Callback_f) USB_SetAddress, (void *) pClass->pUsb); break; //------------------------- case USB_SET_CONFIGURATION: //------------------------- TRACE_DEBUG_M("sCfg "); STD_SetConfiguration(pClass, (char) pSetup->wValue); break; //------------------------- case USB_GET_CONFIGURATION: //------------------------- TRACE_DEBUG_M("gCfg "); STD_GetConfiguration(pClass); break; //--------------------- case USB_CLEAR_FEATURE: //--------------------- TRACE_DEBUG_M("cFeat "); switch (pSetup->wValue) { //--------------------- case USB_ENDPOINT_HALT: //--------------------- TRACE_DEBUG_M("Hlt "); USB_Halt(pClass->pUsb, LBYTE(pSetup->wIndex), USB_CLEAR_FEATURE); USB_SendZLP0(pClass->pUsb, 0, 0); break; //---------------------------- case USB_DEVICE_REMOTE_WAKEUP: //---------------------------- TRACE_DEBUG_M("RmWak "); pClass->wDeviceStatus &= ~REMOTE_WAKEUP; // Remote wakeup disabled USB_SendZLP0(pClass->pUsb, 0, 0); break; //------ default: //------ TRACE_DEBUG_H("Sta "); USB_Stall(pClass->pUsb, 0); } break; //------------------ case USB_GET_STATUS: //------------------ TRACE_DEBUG_H("gSta "); switch (USB_REQUEST_RECIPIENT(pSetup)) { //------------------------- case USB_RECIPIENT_DEVICE: //------------------------- TRACE_DEBUG_M("Dev "); STD_GetDeviceStatus(pClass); break; //--------------------------- case USB_RECIPIENT_ENDPOINT: //--------------------------- TRACE_DEBUG_M("Ept "); STD_GetEndpointStatus(pClass, LBYTE(pSetup->wIndex)); break; //------ default: //------ TRACE_WARNING( "W: STD_RequestHandler: Unsupported GetStatus = 0x%02X\n\r", pSetup->bmRequestType ); USB_Stall(pClass->pUsb, 0); } break; //------------------- case USB_SET_FEATURE: //------------------- TRACE_DEBUG_H("sFeat "); switch (pSetup->wValue) { //--------------------- case USB_ENDPOINT_HALT: //--------------------- USB_Halt(pClass->pUsb, LBYTE(pSetup->wIndex), USB_SET_FEATURE); USB_SendZLP0(pClass->pUsb, 0, 0); break; //---------------------------- case USB_DEVICE_REMOTE_WAKEUP: //---------------------------- pClass->wDeviceStatus |= REMOTE_WAKEUP; // Remote wakeup enabled USB_SendZLP0(pClass->pUsb, 0, 0); break; //------ default: //------ TRACE_WARNING( "W: STD_RequestHandler: Unsupported SetFeature=0x%04X\n\r", pSetup->wValue ); USB_Stall(pClass->pUsb, 0); } break; //------ default: //------ TRACE_WARNING( "W: STD_RequestHandler: Unsupported request: 0x%02X\n\r", pSetup->bRequest ); USB_Stall(pClass->pUsb, 0); } }