Round the returned baudrate in ftdi_to_clkbits and adjust the changed values in test...
authorUwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
Tue, 6 Sep 2011 12:09:26 +0000 (14:09 +0200)
committerThomas Jarosch <thomas.jarosch@intra2net.com>
Wed, 7 Sep 2011 08:51:32 +0000 (10:51 +0200)
src/ftdi.c
test/baudrate.cpp

index a2337ed..fba5288 100644 (file)
@@ -1112,7 +1112,11 @@ static int ftdi_to_clkbits(int baudrate, unsigned int clk, int clk_div, unsigned
             best_divisor = divisor/2;
         if(best_divisor > 0x20000)
             best_divisor = 0x1ffff;
-        best_baud = clk*8/clk_div/best_divisor;
+        best_baud = clk*16/clk_div/best_divisor;
+        if (best_baud & 1) /* Decide if to round up or down*/
+            best_baud = best_baud /2 +1;
+        else
+            best_baud = best_baud /2;
         *encoded_divisor = (best_divisor >> 3) | (frac_code[best_divisor & 0x7] << 14);
     }
     return best_baud;
index 248b4a6..b7d0282 100644 (file)
@@ -160,6 +160,7 @@ BOOST_AUTO_TEST_CASE(TypeBMFixedBaudrates)
 
     map<int, calc_result> baudrates;
     baudrates[183] = calc_result(183, 16383, 7, 48);
+    baudrates[184] = calc_result(184, 16304, 4, 48);
     baudrates[300] = calc_result(300, 10000, 0, 48);
     baudrates[600] = calc_result(600,  5000, 0, 48);
     baudrates[1200] = calc_result(1200, 2500, 0, 48);
@@ -168,14 +169,14 @@ BOOST_AUTO_TEST_CASE(TypeBMFixedBaudrates)
     baudrates[9600] = calc_result(9600, 312, 1, 48);
     baudrates[19200] = calc_result(19200, 156, 2, 48);
     baudrates[38400] = calc_result(38400, 78, 3, 48);
-    baudrates[57600] = calc_result(57553, 52, 3, 48);
-    baudrates[115200] = calc_result(115384, 26, 0, 48);
+    baudrates[57600] = calc_result(57554, 52, 3, 48);
+    baudrates[115200] = calc_result(115385, 26, 0, 48);
     baudrates[230400] = calc_result(230769, 13, 0, 48);
     baudrates[460800] = calc_result(461538,  6, 1, 48);
-    baudrates[921600] = calc_result(923076,  3, 2, 48);
+    baudrates[921600] = calc_result(923077,  3, 2, 48);
     baudrates[1000000] = calc_result(1000000, 3, 0, 48);
     baudrates[1050000] = calc_result(1043478, 2, 7, 48);
-    baudrates[1400000] = calc_result(1411764, 2, 3, 48);
+    baudrates[1400000] = calc_result(1411765, 2, 3, 48);
     baudrates[1500000] = calc_result(1500000, 2, 0, 48);
     baudrates[2000000] = calc_result(2000000, 1, 0, 48);
     baudrates[3000000] = calc_result(3000000, 0, 0, 48);
@@ -207,9 +208,9 @@ BOOST_AUTO_TEST_CASE(TypeHFixedBaudrates)
     baudrates[38400] = calc_result(38400, 312, 1, 120);
     baudrates[57600] = calc_result(57588, 208, 4, 120);
     baudrates[115200] = calc_result(115246, 104, 3, 120);
-    baudrates[230400] = calc_result(230215, 52, 3, 120);
+    baudrates[230400] = calc_result(230216, 52, 3, 120);
     baudrates[460800] = calc_result(461538, 26, 0, 120);
-    baudrates[921600] = calc_result(923076, 13, 0, 120);
+    baudrates[921600] = calc_result(923077, 13, 0, 120);
     baudrates[1000000] = calc_result(1000000, 12, 0, 120);
     baudrates[1000000] = calc_result(1000000, 12, 0, 120);
     baudrates[6000000] = calc_result(6000000, 2, 0, 120);