スマートコンセント PS-5204PSをmbedで
Dependencies: FatFileSystemCpp mbed TextLCD
Fork of BlueUSB by
Fusjitsu スマートコンセント FX-5204PSを利用できます。
BlueUSBを利用していますが、Bluetoothは兼用できません。
複数台利用するには、USBハブを使用してください。ただし相性があります。
・良ければ10台まで利用できるかも。
・稼働中に追加はできますが、外すことはできません。
LED1-3, スマートコンセント接続状態(3台まで表示)
LED4、点滅で正常動作
usps.cpp@2:32a2d06f4fe2, 2012-09-27 (annotated)
- Committer:
- yueee_yt
- Date:
- Thu Sep 27 13:04:36 2012 +0000
- Revision:
- 2:32a2d06f4fe2
- Parent:
- 1:3f2890d103fb
V1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yueee_yt | 1:3f2890d103fb | 1 | #include "mbed.h" |
yueee_yt | 1:3f2890d103fb | 2 | #include "USBHost.h" |
yueee_yt | 1:3f2890d103fb | 3 | #include "Utils.h" |
yueee_yt | 1:3f2890d103fb | 4 | |
yueee_yt | 1:3f2890d103fb | 5 | u8 ms_buf[0x1A]; // USPS Streaming Buffer |
yueee_yt | 1:3f2890d103fb | 6 | int nUSPS; |
yueee_yt | 1:3f2890d103fb | 7 | int dUSPS[10]; |
yueee_yt | 1:3f2890d103fb | 8 | int eUSPS[10]; |
yueee_yt | 2:32a2d06f4fe2 | 9 | int SerialNo[10]; |
yueee_yt | 2:32a2d06f4fe2 | 10 | float TempData[10]; |
yueee_yt | 2:32a2d06f4fe2 | 11 | float VoltData[10]; |
yueee_yt | 2:32a2d06f4fe2 | 12 | float FreqData[10]; |
yueee_yt | 2:32a2d06f4fe2 | 13 | float WattData1[10],WattData2[10],WattData3[10],WattData4[10]; |
yueee_yt | 1:3f2890d103fb | 14 | void usps_cmd(int device,int cmd,int val,int len,int evt); |
yueee_yt | 1:3f2890d103fb | 15 | void usps_measurement_mode(int device); |
yueee_yt | 1:3f2890d103fb | 16 | void USPS_Refresh(); |
yueee_yt | 1:3f2890d103fb | 17 | |
yueee_yt | 1:3f2890d103fb | 18 | bool usps_debug=true; |
yueee_yt | 1:3f2890d103fb | 19 | |
yueee_yt | 1:3f2890d103fb | 20 | /* protocol */ |
yueee_yt | 1:3f2890d103fb | 21 | #define USPS_CMD_START 0x01 |
yueee_yt | 1:3f2890d103fb | 22 | #define USPS_CMD_VALUE 0x20 |
yueee_yt | 1:3f2890d103fb | 23 | #define USPS_CMD_GET_FIRMWARE 0xc0 |
yueee_yt | 1:3f2890d103fb | 24 | #define USPS_CMD_GET_SERIAL 0xc1 |
yueee_yt | 1:3f2890d103fb | 25 | #define USPS_CMD_GET_VOLTAGE 0xb0 |
yueee_yt | 1:3f2890d103fb | 26 | #define USPS_CMD_GET_TEMP 0xb4 |
yueee_yt | 1:3f2890d103fb | 27 | #define USPS_CMD_GET_FREQ 0xa1 |
yueee_yt | 1:3f2890d103fb | 28 | |
yueee_yt | 1:3f2890d103fb | 29 | #define USPS_MODE_WATTAGE 0x10 |
yueee_yt | 1:3f2890d103fb | 30 | #define USPS_MODE_CURRENT 0x30 |
yueee_yt | 1:3f2890d103fb | 31 | |
yueee_yt | 1:3f2890d103fb | 32 | #define EVENT_GET_FIRMWARE 0x11 |
yueee_yt | 1:3f2890d103fb | 33 | #define EVENT_GET_SERIAL 0x12 |
yueee_yt | 1:3f2890d103fb | 34 | #define EVENT_GET_TEMP 0x21 |
yueee_yt | 1:3f2890d103fb | 35 | #define EVENT_GET_VOLT 0x22 |
yueee_yt | 1:3f2890d103fb | 36 | #define EVENT_GET_FREQ 0x23 |
yueee_yt | 1:3f2890d103fb | 37 | #define EVENT_GET_POWER 0x24 |
yueee_yt | 1:3f2890d103fb | 38 | #define EVENT_START 0x13 |
yueee_yt | 1:3f2890d103fb | 39 | #define EVENT_VALUE 0x14 |
yueee_yt | 1:3f2890d103fb | 40 | |
yueee_yt | 1:3f2890d103fb | 41 | float temp; |
yueee_yt | 1:3f2890d103fb | 42 | float volt; |
yueee_yt | 1:3f2890d103fb | 43 | float freq; |
yueee_yt | 1:3f2890d103fb | 44 | float power1,power2,power3,power4; |
yueee_yt | 1:3f2890d103fb | 45 | unsigned char cmdFlag; |
yueee_yt | 2:32a2d06f4fe2 | 46 | bool initFlag; |
yueee_yt | 1:3f2890d103fb | 47 | void InitUSPS() |
yueee_yt | 1:3f2890d103fb | 48 | { |
yueee_yt | 2:32a2d06f4fe2 | 49 | int i; |
yueee_yt | 1:3f2890d103fb | 50 | nUSPS=0; |
yueee_yt | 2:32a2d06f4fe2 | 51 | for(i=0; i<10; i++)SerialNo[i]=0; |
yueee_yt | 2:32a2d06f4fe2 | 52 | initFlag=false; |
yueee_yt | 1:3f2890d103fb | 53 | } |
yueee_yt | 1:3f2890d103fb | 54 | |
yueee_yt | 1:3f2890d103fb | 55 | void UspsEventCallback(int device, int endpoint, int status, u8* data, int len, void* userData) |
yueee_yt | 1:3f2890d103fb | 56 | { |
yueee_yt | 2:32a2d06f4fe2 | 57 | int i,i1,i2,sn; |
yueee_yt | 1:3f2890d103fb | 58 | int Flag=0; |
yueee_yt | 1:3f2890d103fb | 59 | if(status!=0) { |
yueee_yt | 2:32a2d06f4fe2 | 60 | i1=0; |
yueee_yt | 2:32a2d06f4fe2 | 61 | if(usps_debug) printf("USPS Callback Status %d \n\r",status); |
yueee_yt | 1:3f2890d103fb | 62 | for(i=0; i<nUSPS; i++) { |
yueee_yt | 1:3f2890d103fb | 63 | if(dUSPS[i]==device) { |
yueee_yt | 1:3f2890d103fb | 64 | i1=i; |
yueee_yt | 1:3f2890d103fb | 65 | Flag=1; |
yueee_yt | 1:3f2890d103fb | 66 | } |
yueee_yt | 1:3f2890d103fb | 67 | } |
yueee_yt | 1:3f2890d103fb | 68 | if(Flag==1) { |
yueee_yt | 1:3f2890d103fb | 69 | for(i=i1+1; i<nUSPS; i++) { |
yueee_yt | 1:3f2890d103fb | 70 | dUSPS[i-1]=dUSPS[i]; |
yueee_yt | 1:3f2890d103fb | 71 | eUSPS[i-1]=eUSPS[i]; |
yueee_yt | 2:32a2d06f4fe2 | 72 | SerialNo[i-1]=SerialNo[i]; |
yueee_yt | 2:32a2d06f4fe2 | 73 | TempData[i-1]=TempData[i]; |
yueee_yt | 2:32a2d06f4fe2 | 74 | VoltData[i-1]=VoltData[i]; |
yueee_yt | 2:32a2d06f4fe2 | 75 | FreqData[i-1]=FreqData[i]; |
yueee_yt | 2:32a2d06f4fe2 | 76 | WattData1[i-1]=WattData1[i]; |
yueee_yt | 2:32a2d06f4fe2 | 77 | WattData2[i-1]=WattData2[i]; |
yueee_yt | 2:32a2d06f4fe2 | 78 | WattData3[i-1]=WattData3[i]; |
yueee_yt | 2:32a2d06f4fe2 | 79 | WattData4[i-1]=WattData4[i]; |
yueee_yt | 1:3f2890d103fb | 80 | } |
yueee_yt | 1:3f2890d103fb | 81 | nUSPS--; |
yueee_yt | 1:3f2890d103fb | 82 | } |
yueee_yt | 1:3f2890d103fb | 83 | return; |
yueee_yt | 1:3f2890d103fb | 84 | } |
yueee_yt | 2:32a2d06f4fe2 | 85 | i2=(int)userData; |
yueee_yt | 2:32a2d06f4fe2 | 86 | switch(i2) { |
yueee_yt | 1:3f2890d103fb | 87 | case EVENT_GET_FIRMWARE: |
yueee_yt | 2:32a2d06f4fe2 | 88 | if(usps_debug) printf("USPS Device#%X Firmware VOL%X REL%X\r\n",device,data[0],data[1]); |
yueee_yt | 1:3f2890d103fb | 89 | break; |
yueee_yt | 2:32a2d06f4fe2 | 90 | |
yueee_yt | 1:3f2890d103fb | 91 | case EVENT_GET_SERIAL: |
yueee_yt | 2:32a2d06f4fe2 | 92 | i1=0; |
yueee_yt | 2:32a2d06f4fe2 | 93 | sn=data[0]<<16|data[1]<<8|data[2]; |
yueee_yt | 2:32a2d06f4fe2 | 94 | if(usps_debug) printf("USPS Device#%x SerialNo %X \r\n",device,sn); |
yueee_yt | 2:32a2d06f4fe2 | 95 | for(i=0; i<nUSPS; i++) { |
yueee_yt | 2:32a2d06f4fe2 | 96 | if(SerialNo[i]==sn) { |
yueee_yt | 2:32a2d06f4fe2 | 97 | i1=i; |
yueee_yt | 2:32a2d06f4fe2 | 98 | Flag=1; |
yueee_yt | 2:32a2d06f4fe2 | 99 | } |
yueee_yt | 2:32a2d06f4fe2 | 100 | } |
yueee_yt | 2:32a2d06f4fe2 | 101 | if(Flag==1) { |
yueee_yt | 2:32a2d06f4fe2 | 102 | for(i=i1+1; i<nUSPS; i++) { |
yueee_yt | 2:32a2d06f4fe2 | 103 | dUSPS[i-1]=dUSPS[i]; |
yueee_yt | 2:32a2d06f4fe2 | 104 | eUSPS[i-1]=eUSPS[i]; |
yueee_yt | 2:32a2d06f4fe2 | 105 | SerialNo[i-1]=SerialNo[i]; |
yueee_yt | 2:32a2d06f4fe2 | 106 | TempData[i-1]=TempData[i]; |
yueee_yt | 2:32a2d06f4fe2 | 107 | VoltData[i-1]=VoltData[i]; |
yueee_yt | 2:32a2d06f4fe2 | 108 | FreqData[i-1]=FreqData[i]; |
yueee_yt | 2:32a2d06f4fe2 | 109 | WattData1[i-1]=WattData1[i]; |
yueee_yt | 2:32a2d06f4fe2 | 110 | WattData2[i-1]=WattData2[i]; |
yueee_yt | 2:32a2d06f4fe2 | 111 | WattData3[i-1]=WattData3[i]; |
yueee_yt | 2:32a2d06f4fe2 | 112 | WattData4[i-1]=WattData4[i]; |
yueee_yt | 2:32a2d06f4fe2 | 113 | } |
yueee_yt | 2:32a2d06f4fe2 | 114 | nUSPS--; |
yueee_yt | 2:32a2d06f4fe2 | 115 | } |
yueee_yt | 2:32a2d06f4fe2 | 116 | for(i=0; i<nUSPS; i++) { |
yueee_yt | 2:32a2d06f4fe2 | 117 | if(dUSPS[i]==device)SerialNo[i]=sn; |
yueee_yt | 2:32a2d06f4fe2 | 118 | } |
yueee_yt | 2:32a2d06f4fe2 | 119 | for(i=0; i<nUSPS; i++) { |
yueee_yt | 2:32a2d06f4fe2 | 120 | if(usps_debug) printf( "Serial(%d) : %X \n\r",i,SerialNo[i]); |
yueee_yt | 2:32a2d06f4fe2 | 121 | } |
yueee_yt | 1:3f2890d103fb | 122 | break; |
yueee_yt | 2:32a2d06f4fe2 | 123 | |
yueee_yt | 1:3f2890d103fb | 124 | case EVENT_GET_TEMP: |
yueee_yt | 1:3f2890d103fb | 125 | i=data[1]<<8|data[0]; |
yueee_yt | 1:3f2890d103fb | 126 | temp=i/100.0; |
yueee_yt | 1:3f2890d103fb | 127 | if(usps_debug) printf("USPS Device#%x Temp %5.2f \r\n",device,temp); |
yueee_yt | 2:32a2d06f4fe2 | 128 | for(i=0; i<nUSPS; i++) { |
yueee_yt | 2:32a2d06f4fe2 | 129 | if(dUSPS[i]==device)TempData[i]=temp; |
yueee_yt | 2:32a2d06f4fe2 | 130 | } |
yueee_yt | 1:3f2890d103fb | 131 | break; |
yueee_yt | 2:32a2d06f4fe2 | 132 | |
yueee_yt | 1:3f2890d103fb | 133 | case EVENT_GET_VOLT: |
yueee_yt | 1:3f2890d103fb | 134 | volt=data[0]; |
yueee_yt | 2:32a2d06f4fe2 | 135 | if(usps_debug) printf("USPS Device#%x Volt %6.2f \r\n",device,volt); |
yueee_yt | 2:32a2d06f4fe2 | 136 | for(i=0; i<nUSPS; i++) { |
yueee_yt | 2:32a2d06f4fe2 | 137 | if(dUSPS[i]==device)VoltData[i]=volt; |
yueee_yt | 2:32a2d06f4fe2 | 138 | } |
yueee_yt | 1:3f2890d103fb | 139 | break; |
yueee_yt | 2:32a2d06f4fe2 | 140 | |
yueee_yt | 1:3f2890d103fb | 141 | case EVENT_GET_FREQ: |
yueee_yt | 1:3f2890d103fb | 142 | i=data[1]<<8|data[0]; |
yueee_yt | 1:3f2890d103fb | 143 | freq=2000000.0/i; |
yueee_yt | 1:3f2890d103fb | 144 | if(usps_debug) printf("USPS Device#%x Freq %5.2f \r\n",device,freq); |
yueee_yt | 2:32a2d06f4fe2 | 145 | for(i=0; i<nUSPS; i++) { |
yueee_yt | 2:32a2d06f4fe2 | 146 | if(dUSPS[i]==device)FreqData[i]=freq; |
yueee_yt | 2:32a2d06f4fe2 | 147 | } |
yueee_yt | 1:3f2890d103fb | 148 | break; |
yueee_yt | 2:32a2d06f4fe2 | 149 | |
yueee_yt | 1:3f2890d103fb | 150 | case EVENT_GET_POWER: |
yueee_yt | 1:3f2890d103fb | 151 | power4=(unsigned short)(data[0xf]<<8|data[0xe]); |
yueee_yt | 1:3f2890d103fb | 152 | power3=(unsigned short)(data[0xd]<<8|data[0xc]); |
yueee_yt | 1:3f2890d103fb | 153 | power2=(unsigned short)(data[0xb]<<8|data[0xa]); |
yueee_yt | 1:3f2890d103fb | 154 | power1=(unsigned short)(data[0x9]<<8|data[0x8]); |
yueee_yt | 1:3f2890d103fb | 155 | if(usps_debug) printf("USPS Device#%x:Power1 %5.0f[W]:Power2 %5.0f[W]:Power3 %5.0f[W]:Power4 %5.0f[W]\r\n",device,power1,power2,power3,power4); |
yueee_yt | 2:32a2d06f4fe2 | 156 | for(i=0; i<nUSPS; i++) { |
yueee_yt | 2:32a2d06f4fe2 | 157 | if(dUSPS[i]==device) { |
yueee_yt | 2:32a2d06f4fe2 | 158 | WattData1[i]=power1; |
yueee_yt | 2:32a2d06f4fe2 | 159 | WattData2[i]=power2; |
yueee_yt | 2:32a2d06f4fe2 | 160 | WattData3[i]=power3; |
yueee_yt | 2:32a2d06f4fe2 | 161 | WattData4[i]=power4; |
yueee_yt | 2:32a2d06f4fe2 | 162 | } |
yueee_yt | 2:32a2d06f4fe2 | 163 | } |
yueee_yt | 1:3f2890d103fb | 164 | break; |
yueee_yt | 2:32a2d06f4fe2 | 165 | |
yueee_yt | 1:3f2890d103fb | 166 | default: |
yueee_yt | 2:32a2d06f4fe2 | 167 | if(usps_debug) printf("usps response \r\n"); |
yueee_yt | 1:3f2890d103fb | 168 | if(usps_debug) printf("USPS %02X %02X %02X \r\n",device,status,len); |
yueee_yt | 1:3f2890d103fb | 169 | if(usps_debug) printfBytes("",data,len); |
yueee_yt | 2:32a2d06f4fe2 | 170 | break; |
yueee_yt | 1:3f2890d103fb | 171 | } |
yueee_yt | 1:3f2890d103fb | 172 | } |
yueee_yt | 1:3f2890d103fb | 173 | |
yueee_yt | 1:3f2890d103fb | 174 | // Add Usps Interface |
yueee_yt | 1:3f2890d103fb | 175 | void USPS_Refresh() |
yueee_yt | 1:3f2890d103fb | 176 | { |
yueee_yt | 2:32a2d06f4fe2 | 177 | static int i=0; |
yueee_yt | 2:32a2d06f4fe2 | 178 | static int k=0; |
yueee_yt | 1:3f2890d103fb | 179 | u8* dst = ms_buf; |
yueee_yt | 2:32a2d06f4fe2 | 180 | //for (i=0; i<nUSPS; i++) { |
yueee_yt | 2:32a2d06f4fe2 | 181 | if(nUSPS==0)return; |
yueee_yt | 2:32a2d06f4fe2 | 182 | if(initFlag==true) { |
yueee_yt | 2:32a2d06f4fe2 | 183 | for(i=0; i<nUSPS; i++) { |
yueee_yt | 2:32a2d06f4fe2 | 184 | if(SerialNo[i]==0) { |
yueee_yt | 2:32a2d06f4fe2 | 185 | usps_cmd(dUSPS[i],USPS_CMD_GET_SERIAL ,0,3,EVENT_GET_SERIAL); |
yueee_yt | 2:32a2d06f4fe2 | 186 | usps_measurement_mode(dUSPS[i]); |
yueee_yt | 2:32a2d06f4fe2 | 187 | } |
yueee_yt | 2:32a2d06f4fe2 | 188 | } |
yueee_yt | 2:32a2d06f4fe2 | 189 | k=0; |
yueee_yt | 2:32a2d06f4fe2 | 190 | for(i=0; i<nUSPS; i++)if(SerialNo[i]==0)k=1; |
yueee_yt | 2:32a2d06f4fe2 | 191 | if(k==0)initFlag=false; |
yueee_yt | 2:32a2d06f4fe2 | 192 | } else { |
yueee_yt | 2:32a2d06f4fe2 | 193 | if(i==nUSPS)i=0; |
yueee_yt | 2:32a2d06f4fe2 | 194 | switch(k) { |
yueee_yt | 2:32a2d06f4fe2 | 195 | case 0: |
yueee_yt | 2:32a2d06f4fe2 | 196 | usps_cmd(dUSPS[i],USPS_CMD_GET_TEMP ,0,2,EVENT_GET_TEMP); |
yueee_yt | 2:32a2d06f4fe2 | 197 | k++; |
yueee_yt | 2:32a2d06f4fe2 | 198 | break; |
yueee_yt | 2:32a2d06f4fe2 | 199 | case 1: |
yueee_yt | 2:32a2d06f4fe2 | 200 | usps_cmd(dUSPS[i],USPS_CMD_GET_VOLTAGE, 0, 1,EVENT_GET_VOLT); |
yueee_yt | 2:32a2d06f4fe2 | 201 | k++; |
yueee_yt | 2:32a2d06f4fe2 | 202 | break; |
yueee_yt | 2:32a2d06f4fe2 | 203 | case 2: |
yueee_yt | 2:32a2d06f4fe2 | 204 | usps_cmd(dUSPS[i],USPS_CMD_GET_FREQ, 0, 8,EVENT_GET_FREQ); |
yueee_yt | 2:32a2d06f4fe2 | 205 | k++; |
yueee_yt | 2:32a2d06f4fe2 | 206 | break; |
yueee_yt | 2:32a2d06f4fe2 | 207 | case 3: |
yueee_yt | 2:32a2d06f4fe2 | 208 | USBInterruptTransfer(dUSPS[i], eUSPS[i], dst,0x10, UspsEventCallback, (void*)EVENT_GET_POWER); |
yueee_yt | 2:32a2d06f4fe2 | 209 | k=0; |
yueee_yt | 2:32a2d06f4fe2 | 210 | i++; |
yueee_yt | 2:32a2d06f4fe2 | 211 | break; |
yueee_yt | 2:32a2d06f4fe2 | 212 | } |
yueee_yt | 1:3f2890d103fb | 213 | } |
yueee_yt | 2:32a2d06f4fe2 | 214 | //} |
yueee_yt | 1:3f2890d103fb | 215 | } |
yueee_yt | 1:3f2890d103fb | 216 | |
yueee_yt | 1:3f2890d103fb | 217 | void AddUspsInterface(int device, InterfaceDescriptor* id, EndpointDescriptor* ed,int len) |
yueee_yt | 1:3f2890d103fb | 218 | { |
yueee_yt | 1:3f2890d103fb | 219 | if ((ed->bmAttributes & 3) != ENDPOINT_INTERRUPT || !(ed->bEndpointAddress & 0x80)) |
yueee_yt | 1:3f2890d103fb | 220 | return; |
yueee_yt | 1:3f2890d103fb | 221 | dUSPS[nUSPS]=device; |
yueee_yt | 1:3f2890d103fb | 222 | eUSPS[nUSPS]=ed->bEndpointAddress; |
yueee_yt | 2:32a2d06f4fe2 | 223 | SerialNo[nUSPS]=0; |
yueee_yt | 1:3f2890d103fb | 224 | nUSPS++; |
yueee_yt | 2:32a2d06f4fe2 | 225 | if(usps_debug) printf("No of USPS :%d\n\r",nUSPS); |
yueee_yt | 2:32a2d06f4fe2 | 226 | initFlag=true; |
yueee_yt | 2:32a2d06f4fe2 | 227 | // usps_cmd(device,USPS_CMD_GET_FIRMWARE ,0,2,EVENT_GET_FIRMWARE); |
yueee_yt | 2:32a2d06f4fe2 | 228 | // usps_cmd(device,USPS_CMD_GET_SERIAL ,0,3,EVENT_GET_SERIAL); |
yueee_yt | 2:32a2d06f4fe2 | 229 | // usps_measurement_mode(device); |
yueee_yt | 1:3f2890d103fb | 230 | } |
yueee_yt | 1:3f2890d103fb | 231 | |
yueee_yt | 1:3f2890d103fb | 232 | void usps_measurement_mode(int device) |
yueee_yt | 1:3f2890d103fb | 233 | { |
yueee_yt | 1:3f2890d103fb | 234 | u8* dst = ms_buf; |
yueee_yt | 2:32a2d06f4fe2 | 235 | USBControlTransfer(device, 0x40, USPS_CMD_START ,0, 0, dst, 0,UspsEventCallback,(void*)EVENT_START); //UT_Vendor_Write |
yueee_yt | 2:32a2d06f4fe2 | 236 | USBControlTransfer(device, 0x40, USPS_CMD_VALUE ,USPS_MODE_WATTAGE , 0, dst, 0,UspsEventCallback,(void*)EVENT_VALUE); //UT_Vendor_Write |
yueee_yt | 1:3f2890d103fb | 237 | } |
yueee_yt | 1:3f2890d103fb | 238 | |
yueee_yt | 1:3f2890d103fb | 239 | void usps_cmd(int device,int cmd,int val,int len,int evt) |
yueee_yt | 1:3f2890d103fb | 240 | { |
yueee_yt | 1:3f2890d103fb | 241 | int i; |
yueee_yt | 1:3f2890d103fb | 242 | u8* dst = ms_buf; |
yueee_yt | 2:32a2d06f4fe2 | 243 | // printf("req\n\r"); |
yueee_yt | 1:3f2890d103fb | 244 | i= USBControlTransfer(device, 0xc0, cmd,val, 0, dst, len,UspsEventCallback,(void*)evt); |
yueee_yt | 1:3f2890d103fb | 245 | if(i!=-100) printf("status : %d \r\n",i); |
yueee_yt | 1:3f2890d103fb | 246 | } |
yueee_yt | 1:3f2890d103fb | 247 | // Detected USPS Device |
yueee_yt | 1:3f2890d103fb | 248 | int OnUspsInsert(int device) |
yueee_yt | 1:3f2890d103fb | 249 | { |
yueee_yt | 1:3f2890d103fb | 250 | u8 buffer[255]; |
yueee_yt | 1:3f2890d103fb | 251 | int err = GetDescriptor(device,DESCRIPTOR_TYPE_CONFIGURATION,0,buffer,255); |
yueee_yt | 1:3f2890d103fb | 252 | if (err < 0) |
yueee_yt | 1:3f2890d103fb | 253 | return err; |
yueee_yt | 1:3f2890d103fb | 254 | int len = buffer[2] | (buffer[3] << 8); |
yueee_yt | 1:3f2890d103fb | 255 | u8* d = buffer; |
yueee_yt | 1:3f2890d103fb | 256 | u8* end = d + len; |
yueee_yt | 1:3f2890d103fb | 257 | |
yueee_yt | 2:32a2d06f4fe2 | 258 | if(usps_debug) printf("OnUspsInsert %02X %02X\r\n",device,len); // |
yueee_yt | 1:3f2890d103fb | 259 | //printfBytes(" -->",d,len); |
yueee_yt | 1:3f2890d103fb | 260 | while (d < end) { |
yueee_yt | 1:3f2890d103fb | 261 | if (d[1] == DESCRIPTOR_TYPE_INTERFACE) { |
yueee_yt | 1:3f2890d103fb | 262 | InterfaceDescriptor* id = (InterfaceDescriptor*)d; |
yueee_yt | 1:3f2890d103fb | 263 | d += d[0]; |
yueee_yt | 1:3f2890d103fb | 264 | while (d < end) { |
yueee_yt | 1:3f2890d103fb | 265 | if (d[1] == DESCRIPTOR_TYPE_ENDPOINT) { |
yueee_yt | 1:3f2890d103fb | 266 | if(usps_debug) printfBytes("Usps Endpoint",d,d[0]); |
yueee_yt | 1:3f2890d103fb | 267 | AddUspsInterface(device,id,(EndpointDescriptor*)d,d[4]); |
yueee_yt | 1:3f2890d103fb | 268 | } |
yueee_yt | 1:3f2890d103fb | 269 | d += d[0]; |
yueee_yt | 1:3f2890d103fb | 270 | } |
yueee_yt | 1:3f2890d103fb | 271 | } |
yueee_yt | 1:3f2890d103fb | 272 | d += d[0]; |
yueee_yt | 1:3f2890d103fb | 273 | } |
yueee_yt | 1:3f2890d103fb | 274 | return 0; |
yueee_yt | 1:3f2890d103fb | 275 | } |