コード例 #1
0
ファイル: battery.c プロジェクト: jionfull/record4cir
int get_battery_volt() {

	int fd_ad = -1;
	char ad_val[32];
	int volt = -1;

	fd_ad = open(AD_NAME, O_RDONLY);
	if (fd_ad >= 0) {
		int size = read(fd_ad, ad_val, 32);

		if (size > 0) {
			int val = atoi(ad_val);
			volt = val * VREF / AD_MAX;
			if (volt < BATTERY_ALARM_VOLT) {
				set_sys_state(BIT6_BATTERY, STATE_BATTERY_FAIL);
				light_battery_alarm(1);
			} else {
				set_sys_state(BIT6_BATTERY, STATE_BATTERY_OK);
				light_battery_alarm(0);
			}
		}

		close(fd_ad);
	}

	return volt;
}
コード例 #2
0
ファイル: process_control.c プロジェクト: jionfull/record4cir
static void * proc_control(void *args) {
	struct frame_manager *manager = get_frame_manager(CONTROL_MANAGER);
	struct record_manager * record_manager=get_record_manager();
	struct block_filter *filter = NULL;

	struct frame *pframe = NULL;
	struct block * pblock = NULL;
	char buffer[64];
	int length;
	char dest_addr = 0;
	char src_addr = 0;
	char operation = 0;
	char cmd = 0;
	char tmp;

	if (manager == NULL)
		return NULL;
	filter = get_frame_filter(manager);
	while (1) {
		pblock = get_block(filter, TIMEOUT_MAIN_UNIT, BLOCK_FULL);
		if (pblock != NULL) {
			set_sys_state(BIT5_MAIN_UNIT,STATE_MAINUNIT_OK);
			light_on(0);
			light_main_alarm(0);
			pframe = (struct frame*) pblock->data;
			pframe->length = pblock->data_length;
			dest_addr = destination_of_frame(pframe);
			src_addr = pframe->data[4];
			cmd = command_of_frame(pframe);
			operation = operation_of_frame(pframe);

			if (src_addr == MASTER_ADDRESS) {

				switch (dest_addr) {
				case RADIO_450M_ADDRESS:
					if ((operation == 0x03) && (cmd == 0x20)) { //向450M发送机车号
						char * cab_id = get_id();

						get_frame_real_data(pframe, buffer, &length);

						buffer[8] = 0;
						tmp = buffer[3];
						buffer[3] = 0;
						int cab_type = atoi(buffer);

						buffer[3] = tmp;

						sprintf(cab_id, "%s-%s", get_cab_code(cab_type),
								buffer + 3);

					}
					break;
				case ALL_MMI_ADDRESS:
					if ((operation == 0x03) && (cmd == 0x46)) { //关机命令

						flush_all_data(record_manager);
					}
					break;
				}

			}

			if (dest_addr == RECORD_ADDRESS) {

				switch (operation) {
				case 1: //维护信息
					// echo off
					tmp = 0;
					if (src_addr == 0x01) {
						tmp = 0x01;
					} else if ((src_addr == 0x03) || (src_addr == 0x04)) {
						tmp = 0x41;
					}
					send_frame(manager, RECORD_ADDRESS, src_addr, 1, tmp,
							pframe->data + 9, 2);

					switch (cmd) {
					case (char) 0x33: //播放控制
					{
						if (pframe->data[10] == (char) 0xff) {
							start_play(src_addr);
						} else if (pframe->data[10] == 0) {
							stop_play();
						}
					}
						break;
					case (char) 0xfa: //问询测试
						break;
					case (char) 0x34: //查询时钟
					{
						struct tm time;
						get_time(&time);

						buffer[0] = to_bcd(time.tm_year - 100); //year
						buffer[1] = to_bcd(time.tm_mon + 1);
						buffer[2] = to_bcd(time.tm_mday);
						buffer[3] = to_bcd(time.tm_hour);
						buffer[4] = to_bcd(time.tm_min);
						buffer[5] = to_bcd(time.tm_sec);
						send_frame(manager, RECORD_ADDRESS, src_addr, 1,
								(char) 0x91, buffer, 6);
					}
						break;
					case (char) 0x35: //设置时钟
						break;
					case (char) 0xa5: //查询软件版本
					{

						bcopy(version, buffer, 16);
						send_frame(manager, RECORD_ADDRESS, src_addr, 1,
								(char) 0xaa, buffer, 16);
					}
						break;

					}

					break;
				case 3: //不需要应答
					break;
				}
			}
			put_block(pblock, BLOCK_EMPTY);
		} else {
			set_sys_state(BIT5_MAIN_UNIT,STATE_MAINUNIT_FAIL);
			light_main_alarm(1);
		}
	}

	return NULL;
}
コード例 #3
0
ファイル: main.c プロジェクト: perrylau/web
void delay_reload(void)
{
	set_sys_state(SYS_STATE_DELAY_RELOAD);
}
コード例 #4
0
ファイル: main.c プロジェクト: perrylau/web
int main(void)
{
	u32 endtime;
    
	system_state = SYS_STATE_INIT;
	wifi_state = 0;
	reset_uart_init();
	default_gpio_init();
	check_gotostandby();
	int2host_init();
	int2host(1);
	NFC_TAG_INIT();
	mxchipInit();
	userResetConfig();
	reset_uart_deinit();
	get_config();
	tcpip_init();
	emsp_init();
	uart_init();
	http_init();
#ifndef USE_0302
	APP_Verify_Program_Code();
#endif

	dual_uap_start();
	SetTimer(1, main_function_tick, 1);
	wifi_option_config();
	int2host(0);
	system_is_bootup(); //EMSP_CMD_SYSTEM_BOOTUP
	while(1) {
		if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) != Bit_RESET) 
			IWDG_ReloadCounter();	// Reload IWDG counter
		else
			reload();
		
		if(NFC_STARTED){
			SetTimer(3000,saveNFCConfig,0);
			NFC_STARTED = 0;     //NFC task started
			NFC_STARTED2 = 1;    //NFC task pending
		}
		
		http_tick(); // HTTP Server
		mxchipTick(); // wifi, network function
		switch (system_state) {
			case SYS_STATE_RESET:
        wait_uart_dma_clean();
				NVIC_SystemReset();
				break;
			case SYS_STATE_GOTO_DEFAULT:
				default_config();
				save_config();
				NVIC_SystemReset();
				break;
			case SYS_STATE_DELAY_RELOAD:
				endtime = MS_TIMER+500;
				while(endtime>MS_TIMER)
					mxchipTick();
				
				NVIC_SystemReset();
				break;
				
			case SYS_STATE_WPS: // User pushed WPS PBC, try wps.
				user_wifi_stop();
				wps_pbc_start();
				set_sys_state(last_work_state);
				break;
			case SYS_STATE_WPS_FAIL:
                wps_ing = 0;
				user_wifi_start();
				set_sys_state(last_work_state);
                set_conncetion_status(0);
				break;
			case SYS_STATE_WPS_SUCCESS:
                wps_ing = 0;
				set_sys_state(last_work_state);
				save_config();
                set_conncetion_status(0);
				break;
			default:
				break;
		}
	}
}
コード例 #5
0
ファイル: main.c プロジェクト: perrylau/web
void goto_wps(void)
{
	set_sys_state(SYS_STATE_WPS);
    wps_ing = 1;
}
コード例 #6
0
ファイル: main.c プロジェクト: perrylau/web
void goto_default(void)
{
	set_sys_state(SYS_STATE_GOTO_DEFAULT);
}