還記得之前的SerialDriver 用 VID/PID 對照表,決定使用的驅動程式嗎?
最早我以為 arduino spec 上寫著他是用FTDI 的 IC (windows arduino IDE 裡面有 FTDI 的driver) ,所以我連續好多天都在爬 FTDI serial driver 的內容&參數。直到某天把USB device 描述爬出來後,在對應serial driver source code中的下面這段,才知道他一直採用的是 CDC driver , arduino USB CDC driver 中看到有 3 組interface ( control (1)/ Burk (2)/ HID (1)) , 合計 4 個 endpoint
public static Map<Integer, int[]> getSupportedDevices() {
final Map<Integer, int[]> supportedDevices = new LinkedHashMap<Integer, int[]>();
supportedDevices.put(Integer.valueOf(UsbId.VENDOR_ARDUINO),
// 這邊定義 Arduino device 的 VIP 跟 PID
new int[] {
UsbId.ARDUINO_UNO,
UsbId.ARDUINO_UNO_R3,
UsbId.ARDUINO_MEGA_2560,
UsbId.ARDUINO_MEGA_2560_R3,
UsbId.ARDUINO_SERIAL_ADAPTER,
UsbId.ARDUINO_SERIAL_ADAPTER_R3,
UsbId.ARDUINO_MEGA_ADK,
UsbId.ARDUINO_MEGA_ADK_R3,
UsbId.ARDUINO_LEONARDO,
});
supportedDevices.put(Integer.valueOf(UsbId.VENDOR_VAN_OOIJEN_TECH),
new int[] {
UsbId.VAN_OOIJEN_TECH_TEENSYDUINO_SERIAL,
});
supportedDevices.put(Integer.valueOf(UsbId.VENDOR_ATMEL),
new int[] {
UsbId.ATMEL_LUFA_CDC_DEMO_APP,
});
supportedDevices.put(Integer.valueOf(UsbId.VENDOR_LEAFLABS),
new int[] {
UsbId.LEAFLABS_MAPLE,
});
return supportedDevices;
}
}
爬過 CDC serial driver 後,發現他原本的 setBaudRate 根本沒寫完,順手依照 setParameters() 的格式完如下:
@Override
public int setBaudRate(int baudRate) throws IOException {
// TODO Auto-generated method stub
//return 0;
setParameters(
baudRate, //baudRate
8, //dataBits
1, //stopBits
0 //parity
);
return baudRate;
}
}
重新打包 JAR libaray & App push install 後 .... 還是收不到資料 XD
看來有得玩了,繼續K USB CDC spec 看看能不能找出端倪好了
我們明天見!