Esempio n. 1
0
void clunet_data_received(unsigned char src_address, unsigned char dst_address, unsigned char command, char* data, unsigned char size){
	switch(command){
		case CLUNET_COMMAND_SWITCH:
			if (data[0] == 0xFF){	//info request
				if (size == 1){
					switchResponse(src_address);
				}
			}else{
				if (size == 2){
					switch(data[0]){
						case 0x00:
						case 0x01:
						case 0x02:
						if (data[1] == RELAY_0_ID){
							switchExecute(data[0]);
						}
						break;
						case 0x03:
							switchExecute(bit(data[1], (RELAY_0_ID-1)));
						break;
					}
					switchResponse(CLUNET_BROADCAST_ADDRESS);
				}
			}
			break;
		case CLUNET_COMMAND_BUTTON:
			if (size == 0){
				buttonResponse(src_address);
			}
			break;
	}
}
Esempio n. 2
0
void __attribute__ ((interrupt)) EXTI0_handler(void) {
	int n = 0;
	/* Button debounce */
	for (int i=0; i<1000; i++) {
		if (GPIOA->IDR & 1)
			n++;
	}
	if (n > 990)
		buttonResponse();

	/* Reset the pending bit */
	__asm(	".equ 	EXTI_PR, 0x40013C14\n"
			"ldr		r1, =EXTI_PR\n"
			"mov		r0, #1\n"
			"mov		r2, r0, LSL #0\n"
			"str		r2, [r1]\n" );
}
Esempio n. 3
0
void cmd(clunet_msg* m){
	switch(m->command){
		
		case CLUNET_COMMAND_DOOR:
			if (m->size == 0){
				doorResponse(m->src_address);
			}
			break;
			
		case CLUNET_COMMAND_TEMPERATURE:
			switch (m->size){
				case 1:
					if (m->data[0] == 0){
						temperatureResponse(m->src_address);
					}
					break;
				
				case 2:
					if (m->data[0] == 1 && m->data[1] == 1){
						temperatureResponse(m->src_address);
					}
					break;
					
				case 3:
					if (m->data[0] == 2 && m->data[1] == 1 && m->data[2] == DHT_SENSOR_ID){
						temperatureResponse(m->src_address);
					}
					break;
			}
			break;
			
		case CLUNET_COMMAND_HUMIDITY:
			if (m->size == 0){
				humidityResponse(m->src_address);
			}
			break;
			
		case CLUNET_COMMAND_LIGHT_LEVEL:
			if (m->size == 0){
				lightnessResponse(m->src_address);
			}
			break;
		case CLUNET_COMMAND_BUTTON:
			if (m->size == 0){
				buttonResponse(m->src_address);
			}
		break;
		case CLUNET_COMMAND_RC_BUTTON_PRESSED:
			if (m->src_address == CLUNET_BROADCAST_ADDRESS){
				clunet_send_fairy(m->src_address, CLUNET_PRIORITY_INFO, CLUNET_COMMAND_RC_BUTTON_PRESSED, m->data, m->size);
			}
		break;
		
// 		//for debugging only
// 		case CLUNET_COMMAND_DEBUG:
// 			if (m->src_address == 0){	//supradin
// 					clunet_send_fairy(CLUNET_BROADCAST_ADDRESS, CLUNET_PRIORITY_COMMAND, CLUNET_COMMAND_DEBUG, m->data, 4);
// 			}
// 			break;
	}
}