/*---------------------------------------------------------------------------*/ PROCESS_THREAD(hello_world_process, ev, data) { PROCESS_BEGIN(); static struct etimer myTimer; printf("Hello, world\n"); leds_init(); //PORTR_OUT = 0x3; etimer_set(&myTimer, CLOCK_SECOND); while(1) { PROCESS_WAIT_EVENT(); // PORTR.OUTTGL = 0x3; leds_toggle(0x3); printf("Toggle LED0 from process: %10d: %X\n", i++, leds_get()); etimer_restart(&myTimer); } PROCESS_END(); }
/*==================[internal functions definition]==========================*/ static uint16_t cmd0x03ReadHoldingReg( uint16_t start, uint16_t quantity, uint8_t * exceptioncode, uint8_t * buf ) { /* used to indicate total of registers reads */ int8_t ret = 0; /* used to indicate quantity of registers processed */ uint16_t quantityRegProcessed; uint16_t temp16u; /* loop to read all registers indicated */ do { /* select register address to be read */ switch (start) { /* estado de los leds */ case MODBUS_ADDRESS_ESTADO_LEDS: temp16u = leds_get(); ciaaModbus_writeInt(buf, temp16u); quantityRegProcessed = 1; break; /* wrong address */ default: *exceptioncode = CIAA_MODBUS_E_WRONG_STR_ADDR; quantityRegProcessed = -1; break; } /* if quantityRegProcessed > 0, successful operation */ if (quantityRegProcessed > 0) { /* update buffer pointer to next register */ buf += (quantityRegProcessed*2); /* next address to be read */ start += quantityRegProcessed; /* increment count of registers */ ret += quantityRegProcessed; } else { /* an error occurred in reading */ ret = -1; } /* repeat until: * - read total registers or * - error occurs */ }while ((ret > 0) && (ret < quantity)); return ret; }
void leds_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) { size_t len = 0; const char *nb = NULL; const char *mode = NULL; uint8_t led = 0xff; static char buf[32]; if ((len=REST.get_query_variable(request, "led", &nb))) { if (len==1 && nb[0]>='1' && nb[0]<='7') { led = nb[0] - '0'; } else { REST.set_response_status(response, REST.status.BAD_REQUEST); return; } } if ((METHOD_GET != coap_get_rest_method(request)) && (len=REST.get_post_variable(request, "mode", &mode))) { if (strncmp(mode, "on", len)==0) { leds_on(led); } else if (strncmp(mode, "off", len)==0) { leds_off(led); } else if (strncmp(mode, "toggle", len)==0) { leds_toggle(led); } else { REST.set_response_status(response, REST.status.BAD_REQUEST); return; } } len = 0; if (led==0xff) { for (led=0; led<2; led++) { len += snprintf(buf+len, sizeof(buf)-len, "led%d=%s;", led+1, (leds_get()&(1<<led))?"on":"off"); } } else snprintf(buf, sizeof(buf), "led%d=%s;", led, (leds_get()&(1<<(led-1)))?"on":"off"); REST.set_header_content_type(response, REST.type.TEXT_PLAIN); REST.set_response_payload(response, buf, strlen(buf)); }
// 1/16th second LED blink. void blink_LEDs(unsigned char ledv) { unsigned char current_leds; current_leds = leds_get(); leds_on(ledv); clock_delay(125); if(current_leds == LEDS_RED) { leds_off(ledv & (~LEDS_RED)); } else { leds_off(ledv); } }
void handle_sensor_data_frame(uint8_t *frame) { uint8_t buf[9]; uint8_t length = 4; if (frame[1] == REQUEST_MSG) { buf[0] = PROFILE_SENSOR_DATA; buf[1] = REPLY_MSG; *(uint16_t *)&buf[2] = (HAS_SWITCH << SWITCH_BIT) | (HAS_TEMP_SENSOR << TEMP_SENSOR_BIT) | (HAS_LIGHT_SENSOR << LIGHT_SENSOR_BIT) | (HAS_PIR_SENSOR << PIR_SENSOR_BIT); if (HAS_SWITCH) { if (LEDS_YELLOW & leds_get()) buf[length] = 0x01; else buf[length] = 0x00; length += 1; } if (HAS_TEMP_SENSOR) { *(uint16_t *)&buf[length] = my_temp; length += 2; } if (HAS_LIGHT_SENSOR) { *(uint16_t *)&buf[length] = my_light; length += 2; } if (HAS_PIR_SENSOR) { *(uint8_t *)&buf[length] = (uint8_t)pir_registered; length += 1; } plug_send_message(&UIP_IP_BUF->srcipaddr ,buf, length); } }
/*---------------------------------------------------------------------------*/ PROCESS_THREAD(blink_process, ev, data) { PROCESS_BEGIN(); blinks = 0; while(1) { etimer_set(&et_blink, CLOCK_SECOND); PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER); // leds_off(LEDS_ALL); // leds_on(blinks & LEDS_ALL); printf("Blink... (state %c)\n", leds_get()); } PROCESS_END(); }
static void res_get_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) { REST.set_header_content_type(response, REST.type.TEXT_PLAIN); REST.set_response_payload(response, buffer, snprintf((char *)buffer, preferred_size, "%d", (leds_get() & LEDS_3) ? 1 : 0)); }
inline int led_b_value(void) { return ((leds_get() & LEDS_BLUE) != 0); }
inline int led_g_value(void) { return ((leds_get() & LEDS_GREEN) != 0); }
inline int led_r_value(void) { return ((leds_get() & LEDS_RED) != 0); }