first cut at turnon scripts for EasyTimer v2
[fw/altos] / libaltos / libaltos_common.c
index 713a775c6f70c9acee6011705b5aa6256cd06bc2..a2f257358ab973b11dca67e01fdc1413b6e90842 100644 (file)
@@ -49,12 +49,17 @@ PUBLIC int
 altos_getchar(struct altos_file *file, int timeout)
 {
        int     ret;
+
+       file->busy = 1;
        while (file->in_read == file->in_used) {
                ret = altos_fill(file, timeout);
                if (ret)
-                       return ret;
+                       goto done;
        }
-       return file->in_data[file->in_read++];
+       ret = file->in_data[file->in_read++];
+done:
+       file->busy = 0;
+       return ret;
 }
 
 PUBLIC int
@@ -84,10 +89,10 @@ static const struct bt_vendor_map altos_bt_vendor_map[] = {
        { .vendor = "00:12:6f:", 1 },   /* Rayson */
        { .vendor = "8c:de:52:", 6 },   /* ISSC */
        { .vendor = "d8:80:39:", 6 },   /* Microchip */
+       { .vendor = "04:91:62:", 6 },   /* New Microchip */
 };
 
 #define NUM_BT_VENDOR_MAP      (sizeof altos_bt_vendor_map / sizeof altos_bt_vendor_map[0])
-#define BT_PORT_DEFAULT                1
 
 static inline int
 ao_tolower(int c) {
@@ -109,12 +114,15 @@ int altos_bt_port(struct altos_bt_device *device) {
                                break;
                }
        }
-       return BT_PORT_DEFAULT;
+       return 0;
 }
 
 PUBLIC void
 altos_free(struct altos_file *file)
 {
+       int i;
        altos_close(file);
+       for (i = 0; i < 10 && file->busy; i++)
+               altos_pause_one_second();
        free(file);
 }