X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=libaltos%2Flibaltos_windows.c;h=f91859ac51e7e3859863965ccaa4b48958f7f5e4;hb=9db486f6d78b8a2ae855168338e0ea7d6ee4231f;hp=03c2958f52bc1a63b1a0dc71c01eb43a82472e8a;hpb=45f7b91ea126f8f9e607a8ee53df655d992590f2;p=fw%2Faltos diff --git a/libaltos/libaltos_windows.c b/libaltos/libaltos_windows.c index 03c2958f..f91859ac 100644 --- a/libaltos/libaltos_windows.c +++ b/libaltos/libaltos_windows.c @@ -59,12 +59,12 @@ log_message(char *fmt, ...) char buffer[4096]; GetLocalTime(&time); - sprintf (buffer, "%4d-%02d-%02d %2d:%02d:%02d. ", + __ms_sprintf (buffer, "%4d-%02d-%02d %2d:%02d:%02d. ", time.wYear, time.wMonth, time.wDay, time.wHour, time.wMinute, time.wSecond); va_start(a, fmt); - vsprintf(buffer + strlen(buffer), fmt, a); + __ms_vsprintf(buffer + strlen(buffer), fmt, a); va_end(a); fputs(buffer, log); @@ -131,6 +131,16 @@ altos_ftdi_list_start(void) return list; } +static struct { + unsigned int vid, pid; + char *name; +} name_map[] = { + { .vid = 0xfffe, .pid = 0x000d, .name = "EasyTimer" }, + { .vid = 0xfffe, .pid = 0x0028, .name = "EasyMega" }, + { .vid = 0xfffe, .pid = 0x002c, .name = "EasyMotor" }, + { .name = NULL }, +}; + PUBLIC int altos_list_next(struct altos_list *list, struct altos_device *device) { @@ -148,6 +158,7 @@ altos_list_next(struct altos_list *list, struct altos_device *device) DWORD friendlyname_len; char instanceid[1024]; DWORD instanceid_len; + int i; dev_info_data.cbSize = sizeof (SP_DEVINFO_DATA); while(SetupDiEnumDeviceInfo(list->dev_info, list->index, @@ -177,11 +188,11 @@ altos_list_next(struct altos_list *list, struct altos_device *device) if (result != 0) { altos_set_last_windows_error(); } else { - sscanf((char *) symbolic + sizeof("\\??\\USB#VID_") - 1, + __ms_sscanf((char *) symbolic + sizeof("\\??\\USB#VID_") - 1, "%04X", &vid); - sscanf((char *) symbolic + sizeof("\\??\\USB#VID_XXXX&PID_") - 1, + __ms_sscanf((char *) symbolic + sizeof("\\??\\USB#VID_XXXX&PID_") - 1, "%04X", &pid); - sscanf((char *) symbolic + sizeof("\\??\\USB#VID_XXXX&PID_XXXX#") - 1, + __ms_sscanf((char *) symbolic + sizeof("\\??\\USB#VID_XXXX&PID_XXXX#") - 1, "%d", &serial); } if (vid == 0 || pid == 0 || serial == 0) { @@ -190,11 +201,11 @@ altos_list_next(struct altos_list *list, struct altos_device *device) instanceid, sizeof (instanceid), &instanceid_len)) { - sscanf((char *) instanceid + sizeof("USB\\VID_") - 1, + __ms_sscanf((char *) instanceid + sizeof("USB\\VID_") - 1, "%04X", &vid); - sscanf((char *) instanceid + sizeof("USB\\VID_XXXX&PID_") - 1, + __ms_sscanf((char *) instanceid + sizeof("USB\\VID_XXXX&PID_") - 1, "%04X", &pid); - sscanf((char *) instanceid + sizeof("USB\\VID_XXXX&PID_XXXX\\") - 1, + __ms_sscanf((char *) instanceid + sizeof("USB\\VID_XXXX&PID_XXXX\\") - 1, "%d", &serial); } else { altos_set_last_windows_error(); @@ -230,6 +241,23 @@ altos_list_next(struct altos_list *list, struct altos_device *device) altos_set_last_windows_error(); continue; } + + char *space = friendlyname; + while (*space) { + if (*space == ' ') { + *space = '\0'; + break; + } + space++; + } + + for (i = 0; name_map[i].name; i++) { + if (name_map[i].vid == vid && name_map[i].pid == pid) { + strcpy(friendlyname, name_map[i].name); + break; + } + } + device->vendor = vid; device->product = pid; device->serial = serial; @@ -639,7 +667,7 @@ static void ba2str(BTH_ADDR ba, char *str) { - sprintf(str, "%02X:%02X:%02X:%02X:%02X:%02X", + __ms_sprintf(str, "%02X:%02X:%02X:%02X:%02X:%02X", get_byte(ba, 0), get_byte(ba, 1), get_byte(ba, 2), @@ -653,7 +681,7 @@ str2ba(char *str) { unsigned int bytes[6]; - sscanf(str, "%02x:%02x:%02x:%02x:%02x:%02x", + __ms_sscanf(str, "%02x:%02x:%02x:%02x:%02x:%02x", &bytes[0], &bytes[1], &bytes[2], @@ -729,6 +757,7 @@ altos_bt_open(struct altos_bt_device *device) struct altos_file_windows *file; SOCKADDR_BTH sockaddr_bth; int ret; + int channel = 0; file = calloc(1, sizeof (struct altos_file_windows)); if (!file) { @@ -747,7 +776,12 @@ altos_bt_open(struct altos_bt_device *device) memset(&sockaddr_bth, '\0', sizeof (sockaddr_bth)); sockaddr_bth.addressFamily = AF_BTH; sockaddr_bth.btAddr = str2ba(device->addr); - sockaddr_bth.port = altos_bt_port(device); + + channel = altos_bt_port(device); + if (channel == 0) + channel = BT_PORT_DEFAULT; + + sockaddr_bth.port = channel; ret = connect(file->socket, (SOCKADDR *) &sockaddr_bth, sizeof (sockaddr_bth));