bs11_config:
* fix serial port initialization
* add bs11_state enum and work accordingly

diff --git a/src/bs11_config.c b/src/bs11_config.c
index e05c609..0be7f7b 100644
--- a/src/bs11_config.c
+++ b/src/bs11_config.c
@@ -180,10 +180,8 @@
 			   sizeof(struct abis_om_hdr))
 		fprintf(stderr, "Invalied header byte 1(len): %u\n",
 			msg->data[1]);
-	printf("length = %u\n", msg->data[1]);
 
 	while (msg->len < 2 + msg->data[1]) {
-		printf("msg->len(%u), waiting for %u\n", msg->len, 2 + msg->data[1] - msg->len);
 		rc = read(serial_fd, msg->tail, 2 + msg->data[1] - msg->len);
 		if (rc < 0) {
 			perror("reading from serial port");
@@ -235,7 +233,8 @@
 		if (file_is_readable(fname_safety))
 			abis_nm_software_load(g_bts, fname_safety, 8);
 		else
-			fprintf(stderr, "No valid Safety Load file\n");
+			fprintf(stderr, "No valid Safety Load file \"%s\"\n",
+				fname_safety);
 		break;
 	case BS11_STATE_WAIT_MIN_CFG:
 	case BS11_STATE_WAIT_MIN_CFG_2:
@@ -248,7 +247,8 @@
 		if (file_is_readable(fname_software))
 			abis_nm_software_load(g_bts, fname_software, 8);
 		else
-			fprintf(stderr, "No valid Software file\n");
+			fprintf(stderr, "No valid Software file \"%s\"\n",
+				fname_software);
 		break;
 	case BS11_STATE_NORMAL:
 		printf("Normal...\n");
@@ -319,10 +319,18 @@
 	}
 }
 
+enum bs11_state {
+	STATE_NONE,
+	STATE_LOGON_WAIT,
+	STATE_LOGON_ACK,
+	STATE_SWLOAD,
+};
+
 int main(int argc, char **argv)
 {
 	struct gsm_network *gsmnet;
 	struct termios tio;
+	enum bs11_state state = STATE_NONE;
 	int rc;
 
 	handle_options(argc, argv);
@@ -341,7 +349,11 @@
 	}
 	cfsetispeed(&tio, B19200);
 	cfsetospeed(&tio, B19200);
-	tio.c_cflag |= CREAD | CLOCAL;
+	tio.c_cflag |=  (CREAD | CLOCAL | CS8);
+	tio.c_cflag &= ~(PARENB | CSTOPB | CSIZE | CRTSCTS);
+	tio.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
+	tio.c_iflag |=  (INPCK | ISTRIP);
+	tio.c_iflag &= ~(ISTRIP | IXON | IXOFF | IGNBRK | INLCR | ICRNL | IGNCR);
 	rc = tcsetattr(serial_fd, TCSADRAIN, &tio);
 	if (rc < 0) {
 		perror("tcsetattr()");
@@ -368,6 +380,12 @@
 		oh = (struct abis_om_hdr *) msgb_l2(rx_msg);
 		foh = (struct abis_om_fom_hdr *) oh->data;
 		switch (foh->msg_type) {
+		case NM_MT_BS11_FACTORY_LOGON_ACK:
+			printf("FACTORY LOGON: ACK\n");
+			if (state == STATE_NONE)
+				state = STATE_LOGON_ACK;
+			rc = 0;
+			break;
 		case NM_MT_BS11_GET_STATE_ACK:
 			rc = handle_state_resp(foh->data[2]);
 			break;
@@ -380,6 +398,17 @@
 		}
 		if (rc == 1)
 			break;
+
+		switch (state) {
+		case STATE_NONE:
+			abis_nm_bs11_factory_logon(g_bts, 1);
+			break;
+		case STATE_LOGON_ACK:
+			abis_nm_bs11_get_state(g_bts);
+			break;
+		default:
+			break;
+		}
 	}
 
 	abis_nm_bs11_factory_logon(g_bts, 0);