Beispiel #1
0
//char text[] = "{\"msg_type\":\"ctr\",\"deviceid\":\"113344\",\"bcm_fun_trunklock\":\"ON\"}";
static void thread_sim900_rx_entry(void *parg)
{
    INT8U err;
    uint8_t start = 0;
    uint8_t thischar = 0;

    parg = parg;

    printf("Enter: %s\r\n", __func__);
    while(1) {
        OSSemPend(rx_semaphore, 0, &err);
        if(err != OS_NO_ERR)
            continue;

        while(rb_get(&rx_rb, &thischar, 1) == TRUE) {
            printf("%c", thischar);
            if(status == STATUS_CONNECTED) {
                if(thischar == '{') {
                    clear_rx_buf();
                    start = 1;
                    rx_buffer[rx_offset ++] = thischar;
                } else if(thischar == '}') {
                    rx_buffer[rx_offset ++] = thischar;
                    start = 0;
                    if(rx_offset >= 10) {
                        if(recvFunc != NULL)
                            recvFunc((uint8_t *)rx_buffer);
                    }
                } else {
                    if(start)
                        rx_buffer[rx_offset ++] = thischar;
                }
            } else		// init part
            {
                rx_buffer[rx_offset ++] = thischar;
            }
        }
    }
}
Beispiel #2
0
void sim900_connect(void)
{
    uint8_t i = 0;
    uint8_t retry = 3;

    printk("connect...\r\n");

    while(1) {
        switch(status) {
            case STATUS_POWERON:
                sim900_poweron();
                clear_rx_buf();

                printk("wait for at done\r\n");
                for(i = 0; i < retry; i++) {
                    sim900_write("AT\r\n", 4);
                    //sim900_wait(5000000);
                    OSTimeDlyHMSM(0, 0, 0, 400);
                    if(!check_at()) {
                        status = STATUS_CONFIG;
                        break;
                    }
                    clear_rx_buf();
                }
                break;

                //case STATUS_INIT:
            case STATUS_CONFIG:
                printk("wait for config done\r\n");
                OSTimeDlyHMSM(0, 0, 10, 0);
                sim900_write("AT+CREG?\r\n", 10);
                OSTimeDlyHMSM(0, 0, 0, 100);
                sim900_write("AT+CIPMODE=1\r\n", 14);
                OSTimeDlyHMSM(0, 0, 0, 100);
                sim900_write("AT+CGATT?\r\n", 11);
                OSTimeDlyHMSM(0, 0, 0, 100);
                sim900_write("AT+CSTT=\"CMNET\"\r\n", 17);
                OSTimeDlyHMSM(0, 0, 0, 100);
                sim900_write("AT+CIICR\r\n", 10);
                OSTimeDlyHMSM(0, 0, 2, 0);
                printk("try to get ip address\r\n");
                sim900_write("AT+CIFSR\r\n", 10);
                OSTimeDlyHMSM(0, 0, 0, 100);
                sim900_write("AT+CGATT=1\r\n", 12);
                OSTimeDlyHMSM(0, 0, 0, 100);
                sim900_write("AT+CGSN\r\n", 9);
                OSTimeDlyHMSM(0, 0, 0, 100);
                status = STATUS_CONNECTING;
                break;
            case STATUS_CONNECTING:
                printk("wait for connecting...\r\n");
                sim900_write("AT+CIPSTATUS\r\n", 14);
                OSTimeDlyHMSM(0, 0, 2, 0);
                for(i = 0; i < 1; i++) {
                    clear_rx_buf();
                    sim900_write(connect_cmd, strlen((char *)&connect_cmd[0]));
                    OSTimeDlyHMSM(0, 0, 3, 0);
                    if(!check_at())  {
                        status = STATUS_CONNECTED;
                        break;
                    }
                    clear_rx_buf();
                }
                if(i >= 1) {		//retry failed
                    sim900_write("+++\r\n", 5);
                    OSTimeDlyHMSM(0, 0, 1, 0);
                    sim900_write("AT+CIPCLOSE\r\n", 13);
                    OSTimeDlyHMSM(0, 0, 1, 0);
                    sim900_write("AT+CIPSHUT\r\n", 12);
                    OSTimeDlyHMSM(0, 0, 1, 0);
                    status = STATUS_CONFIG;
                }
                break;
            case STATUS_CONNECTED:
                printk("Connect done!\r\n");
                clear_buf();
                return;
            default:
                break;
        }
    }
}
Beispiel #3
0
static int Send_Selecting(unsigned char *p, int length)
/****************************************************************/
{
	int i = 0;
	int st;
	int result = 0;
	//unsigned char text[32];
	int sendRetry = 0;
	struct timespec ts;

	ts.tv_sec = 0;
	ts.tv_nsec = 500000000; //0.5sec
	
	if(g_dbgShow) 
		printf(" -S-  SELECTING\n");
		
	st = SEL_START_MSG;
	for(;;)
	{
		switch (st)
		{
			case SEL_START_MSG:
				//if(g_dbgShow) printf(" -S-  SEL_START_MSG\n");
				clear_rx_buf();
				comm_start_msg(TYPE_SEL);		// selecting protocol
				st = SEL_RECEIVE_START_ACK;
				break;
	
			case SEL_RECEIVE_START_ACK:
				//if(g_dbgShow) printf(" -S-  SEL_RECEIVE_START_ACK\n");
				//sleep(1);
				//nanosleep(&ts, NULL);
				//IfaceGhpSelectSleep(0, 50);

				// jong2ry 2011_0303
				//IfaceGhpSelectSleep(0, 500);
				IfaceGhpSelectSleep(0, 100);

				
				clear_rx_buf();
				//result = RecvUart2(rxbuf, sizeof(rxbuf));
				result = OnReadIn();
				if ( g_dbgShow )
					printf(" -S- Get Ack result = %d, %x\n", result, rxbuf[0]);		
				//for (i = 0; i < result; i++)
				//	printf("%c ",rxbuf[i]);
				//printf("\n############################\n");
							
				if (result == 1 && rxbuf[0] == 0x06)
				//if (result = 1 && rxbuf[0] == 0x06)
				//if (rxbuf[result - 1] == 0x06)
				{
					st = SEL_SEND_TEXT;
					break;				
				}
				else
				{
					if (sendRetry > 5)
					{
						comm_eot_msg();
						return SEL_RETRY;
					}
					else
					{
						st = SEL_START_MSG;
						sendRetry++;
						//sleep(1);
						IfaceGhpSelectSleep(1, 0);
					}
					break;				
				}
				break;
				
			case SEL_SEND_TEXT:
				if(g_dbgShow) 
					printf(" -S-  SEL_SEND_TEXT\n");
				//SendUart2(p, length);					
				OnWriteOut(p, length);
				if ( g_dbgShow ) {
					for (i = 0; i < length; i++)
						printf("%c ",p[i]);
					printf("\n");
				}
				st = SEL_RECEIVE_TEXT_ACK;
				break;
	
			case SEL_RECEIVE_TEXT_ACK:
				//if(g_dbgShow) printf(" -S-  SEL_RECEIVE_TEXT_ACK\n");
				//sleep(1);
				//nanosleep(&ts, NULL);
				
				// jong2ry 2011_0303
				//IfaceGhpSelectSleep(0, 500);
				IfaceGhpSelectSleep(0, 100);

				
				clear_rx_buf();
				//result = RecvUart2(rxbuf, sizeof(rxbuf));
				result = OnReadIn();
				//for (i = 0; i < result; i++)
				//	printf("%x ",rxbuf[i]);
				//printf("\n");
				st = SEL_SEND_EOT;
				break;
	
			case SEL_SEND_EOT:
				if(g_dbgShow) 
					printf(" -S-  SEL_SEND_EOT\n");
				comm_eot_msg();
				return SEL_OK;
		}
	}
}
Beispiel #4
0
int iface_ghp_main(void)
/****************************************************************/
{
	//int i = 0;
	//unsigned char tempVal = 0;
    //	int j = 0;
	int st = 0;
	int result = 0;
	//DEL point_info point;
	//int pollingCount = 0;

	IfaceGhpSelectSleep(3, 0);
	
	/* initialize ghp interface */
	init_data();
	clear_tx_buf();		// clear tx buffer.
	clear_rx_buf();		// clear rx buffer.
	set_pcm_number();	// set pcm nummber.
	init_uart();		// init uart2 channel.
	init_poll();
	get_sddc();			// get sddc number. 
	get_unit_cnt();		// get indoor unit count. 
	get_ghp_data();		// get ghp-point data.
	init_queue();
	
	g_CntHaksaInit = 0;

	/*
	 Test Code.
	 반드시 현장에서 지워야 한다. 
	*/
	while( 1 ) {
		IfaceGhpSelectSleep(3, 0);
	}

	/*
	uart2 통신에 의한 Delay가 발생하는 상황을 재현하고자 한다.
	Test가 끝나면 반드시 주석으로 막아 실행되지 않도록 한다.
	*/
#if 0	
	printf("Test Code\n");
	memset(txbuf, 0, sizeof(txbuf));
	for (i = 0; i < 256; i++) {
		txbuf[i] = tempVal++;
	}

	printf("init poll\n");
	init_poll();
	while(1)
	{
		result = OnReadIn();
		if ( 0 < result ) {
			printf("Rx (%d)\n", result);
			/*
			for (i = 0; i < result; i++) {
			printf("%x ", rxbuf[i]);
			}
			printf("\n\n");
			*/
			printf("Write\n");
			OnWriteOut(rxbuf, result);
			printf("scehdule\n");
			Check_Schedule(g_unitCnt);
		}
		
	}
#endif	
	
#if 0
	while( 1 ) {
		IfaceGhpSelectSleep(1, 0);
		Chk_Group_Control();

		// 전체 정지 모드 
		Set_AllStopMode(g_unitCnt);

		// 실내기 온도 제한 
		Set_Temperature(g_unitCnt);
	}
#endif

 	//super loop
	st = ST_GET_POLLING;
 	do{

		// 전체 정지 모드 
		Set_AllStopMode(g_unitCnt);
		
		// 실내기 온도 제한 
		Set_Temperature(g_unitCnt);
		
		Get_RunUnit(g_unitCnt);
				
		// 각 동의 층별제어 및 실내기 타입별 온도제어를 한다.
		Chk_Group_Control();	
			
		// jong2ry test.
		// It is scheduler function.
		Check_Schedule(g_unitCnt);
		//sleep(1);
		//continue;
		
		
		Set_AllHaksaMode(g_unitCnt);

		switch(st)
		{
			case ST_GET_POLLING:
				//if(g_dbgShow) printf("ST_GET_POLLING\n");

				result = Send_Polling();
				//printf("result = %d\n", result);
				switch(result)
				{
					case POLL_REQUIRE_STARTUP:	
						st = ST_STARTUP;	
						break;
					
					case POLL_EMPTY_DATA:
					case POLL_OK:		
						if (Send_Polling() == POLL_REQUIRE_STARTUP) {
							st = ST_STARTUP;	
							break;
						}
						else {
							st = ST_CHK_USER_CONTROL;
							break;
						}
					
					default: 
						//if(g_dbgShow) printf(">>> POLLING ERROR\n");
						st = ST_CHK_USER_CONTROL;
						break;
				}
				break;

			case ST_CHK_USER_CONTROL:
				CheckUserControl();
				st = ST_GET_USER_CONTROL;
				break;

			case ST_GET_USER_CONTROL:
				//if(g_dbgShow) printf("ST_GET_USER_CONTROL\n");

				while(Do_User_Control()) {

					if (Send_Polling() == POLL_REQUIRE_STARTUP) {
						st = ST_STARTUP;	
						break;
					}
	
					// 전체 정지 모드 
					Set_AllStopMode(g_unitCnt);
					
					// 실내기 온도 제한 
					Set_Temperature(g_unitCnt);
					
					Get_RunUnit(g_unitCnt);
							
					// 각 동의 층별제어 및 실내기 타입별 온도제어를 한다.
					Chk_Group_Control();						
				}


				st = ST_GET_GHP_UNIT;
				break;

			case ST_GET_GHP_UNIT:
				//if(g_dbgShow) printf("ST_GET_GHP_UNIT\n");
				Get_Ghp_Unit();

				if (Send_Polling() == POLL_REQUIRE_STARTUP) {
					st = ST_STARTUP;	
					break;
				}   

				//if(g_dbgShow) printf("\n\n");	
				st = ST_GET_POLLING;
				break;

			case ST_STARTUP:
				//if(g_dbgShow) printf("ST_STARTUP\n");
				Startup_SDDC();
				st = ST_GET_POLLING;
				break;

			default:
				//if(g_dbgShow) printf("default\n");
				st = ST_GET_POLLING;
				break;
		}
	}while(1);
	
	//exit(1);
	system("killall duksan");
}
Beispiel #5
0
static int Send_Polling(void)
/****************************************************************/
{
	int st;
	int result = 0;
	int length = 0;
	int i = 0;
	//unsigned char text[256];
	struct timespec ts;

	ts.tv_sec = 0;
	ts.tv_nsec = 500000000; //0.5sec
	
	st = POLL_START_MSG;
	if(g_dbgShow) 
		printf(" -P-  POLLLING\n");	
	for(;;)
	{
		switch (st)
		{
			case POLL_START_MSG:
				//if(g_dbgShow) printf(" -P-  POLL_START_MSG\n");
				clear_rx_buf();
				comm_start_msg(TYPE_POLL);		// polling protocol
				st = POLL_RECEIVE_TEXT;
				break;
	
			case POLL_RECEIVE_TEXT:
				//if(g_dbgShow) printf(" -P-  POLL_RECEIVE_TEXT\n");
				//sleep(1);
				//nanosleep(&ts, NULL);
				
				// jong2ry 2011_0303
				//IfaceGhpSelectSleep(0, 500);
				IfaceGhpSelectSleep(0, 100);

				//length = RecvUart2(rxbuf, sizeof(rxbuf));
				length = OnReadIn();
				
				if ( g_dbgShow ) {
					printf(" -P-  length = %d\n", length);	
					for (i = 0; i < length; i++)
						printf("%c ",rxbuf[i]);
					printf("\n======================\n");
				}
				
				if (length == -1) {
					//st = POLL_EOT_MSG;	
					comm_eot_msg();
					return POLL_EMPTY_DATA;
				}
				else if (rxbuf[0] == 0x04)
				{
					if ( g_dbgShow )
						printf("return...\n");
					return POLL_OK;
				}
				else
					st = POLL_DATA_HANDLER;
				break;
	
			case POLL_DATA_HANDLER:
				//if(g_dbgShow) printf(" -P-  POLL_DATA_HANDLER\n");
				//printf("Check >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
				//printf("result = %d\n", result);					
				result = RecvDataParsing(rxbuf, length);
				//printf(" -P-  result = %d\n", length);					
				st = POLL_ACK_MSG;
				break;
	
			case POLL_ACK_MSG:
				//if(g_dbgShow) printf(" -P-  POLL_ACK_MSG\n");
				comm_ack_msg();
				st = POLL_RECEIVE_EOT;
				break;
	
			case POLL_RECEIVE_EOT:
				if(g_dbgShow) 
					printf(" -P-  POLL_RECEIVE_EOT\n");
				clear_rx_buf();
				//length = RecvUart2(text, sizeof(text));
				length = OnReadIn();
				if ( g_dbgShow )
					printf(" -P-  length = %d, %x\n", length, rxbuf[0]);					
				//if(length == 1 && text[0] == 0x04)
				if(length == 1 && rxbuf[0] == 0x04)
				{	
					if (result == POLL_REQUIRE_STARTUP)
						return POLL_REQUIRE_STARTUP;
					else if (result == POLL_ERROR)
						return POLL_ERROR;
					else 
						return POLL_OK;
				}
				else
					st = POLL_EOT_MSG;	
					
			case POLL_EOT_MSG:
				if(g_dbgShow) 
					printf(" -P-  POLL_EOT_MSG\n");
				comm_eot_msg();
				if (result == POLL_REQUIRE_STARTUP)
					return POLL_REQUIRE_STARTUP;
				else if (result == POLL_ERROR)
					return POLL_ERROR;					
				else 
					return POLL_OK;
	
			case POLL_WAIT_15SEC:			
				if(g_dbgShow) 
					printf(" -P-  POLL_WAIT_15SEC\n");
				if (result == POLL_REQUIRE_STARTUP)
					return POLL_REQUIRE_STARTUP;
				else 
					return POLL_NG;
		}
	}
}