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; } }
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" ); }
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; } }