whmjack
驱动小牛
驱动小牛
  • 注册日期2003-09-17
  • 最后登录2007-04-26
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望29点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
阅读:1103回复:2

d12固件编程与驱动开发中smart board程序的一个问题

楼主#
更多 发布于:2005-03-17 10:34
小弟最近有一个问题弄不明白:是关于D12的smart board的固件中有一个指针的。现在提出来,请各位大侠解答!谢谢。
在程序里面,设备的所有描述符是放在code区域里面的,例如下面的:
code USB_DEVICE_DESCRIPTOR DeviceDescr=
{
  12,01,....
}
这样,DeviceDescr是应该定义在了程序区里面。
但是在程序:void code_transmit(unsigned char code *pData,unsigned short len)里面,参数用的是unsigned char code 类型的指针。这个程序里面包含了一个D12_WriteEndpoint()程序,
但是在D12_WriteEndpoint(unsigned char endp,unsinged char len,unsigned char * buf)程序里面,参数用的是unsigned char * buf,
我想问一下,在使用的时候,例如传送DeviceDescr数据的时候:
调用:code_transmit(&DeviceDescr,10),然后在程序里面是D12_WriteEndpoint(),两个指针的类型都不一样,怎么去使用同一个指针呢?
whmjack
驱动小牛
驱动小牛
  • 注册日期2003-09-17
  • 最后登录2007-04-26
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望29点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-17 10:35
void code_transmit(unsigned char code * pRomData, unsigned short len)
{
ControlData.wCount = 0;
if(ControlData.wLength > len)
{
ControlData.wLength = len;
}
ControlData.pData = pRomData;
if( ControlData.wLength >= EP0_PACKET_SIZE)
{ // 如果发送代码大于包长度
D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);
ControlData.wCount += EP0_PACKET_SIZE;

DISABLE;
bEPPflags.bits.control_state = USB_TRANSMIT;
ENABLE;
}
else
{ //发送代码小于包长度
D12_WriteEndpoint(1, ControlData.wLength, pRomData);
ControlData.wCount += ControlData.wLength;
DISABLE;
bEPPflags.bits.control_state = USB_IDLE;
ENABLE;
}
}
whmjack
驱动小牛
驱动小牛
  • 注册日期2003-09-17
  • 最后登录2007-04-26
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望29点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-17 10:36
unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)
{
unsigned char i;

if(bEPPflags.bits.in_isr == 0)
{
DISABLE;
}
//---------------------
outportcmd(endp); //选择端点
inportb(); //读入满/空状态

outportcmd(0xF0); //写缓冲区命令
outportdata(0);
outportdata(len);

for(i=0; i<len; i++)
{
outportdata(*(buf+i));
}
outportcmd(0xFA); //驶购冲区有效

//--------------------------------
if(bEPPflags.bits.in_isr == 0)
{
ENABLE;
}
return len;
}
游客

返回顶部