Nespresso coffee demo working on the Arch Pro

Dependencies:   EthernetInterface mbed-rtos mbed nsdl rgb_sensor_buffer

Fork of mbed_nsdl by Nespresso RGB Sensor

Committer:
bridadan
Date:
Fri Mar 20 16:11:15 2015 +0000
Revision:
12:ad05fe84b4ff
Parent:
7:4d873b7d187b
Working on Arch Pro

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bjblazkowicz 6:8729a0db0e25 1 #include "mbed.h"
bjblazkowicz 6:8729a0db0e25 2 #include "rtos.h"
bjblazkowicz 6:8729a0db0e25 3 #include "nsdl_support.h"
bjblazkowicz 6:8729a0db0e25 4 #include "buffered_rgb_resource.h"
bjblazkowicz 6:8729a0db0e25 5 #include "rgb_sensor_buffer.h"
bjblazkowicz 6:8729a0db0e25 6 #include "payload.h"
bjblazkowicz 6:8729a0db0e25 7
bjblazkowicz 6:8729a0db0e25 8 #define RESOURCE_ID "sensor/capsule"
bjblazkowicz 6:8729a0db0e25 9 #define RGB_VALUES 512
bridadan 12:ad05fe84b4ff 10 #define RGB_THRESHOLD 50
bjblazkowicz 6:8729a0db0e25 11
bjblazkowicz 6:8729a0db0e25 12 extern Serial pc;
bjblazkowicz 6:8729a0db0e25 13 /* stored data for observable resource */
bjblazkowicz 6:8729a0db0e25 14 static uint8_t obs_number = 0;
bjblazkowicz 6:8729a0db0e25 15 static uint8_t *obs_token_ptr = NULL;
bjblazkowicz 6:8729a0db0e25 16 static uint8_t obs_token_len = 0;
bjblazkowicz 6:8729a0db0e25 17
bjblazkowicz 6:8729a0db0e25 18 static TRGB g_buffer[RGB_VALUES];
bridadan 12:ad05fe84b4ff 19 //static RGB_SensorBuffer g_rgb(p23,p24,p25,p20);
bridadan 12:ad05fe84b4ff 20 static RGB_SensorBuffer g_rgb(P2_3,P2_2,P2_4,P1_31);
bjblazkowicz 6:8729a0db0e25 21 static Payload g_payload;
bjblazkowicz 6:8729a0db0e25 22
bjblazkowicz 6:8729a0db0e25 23 static void exec_call_thread(void const *args)
bjblazkowicz 6:8729a0db0e25 24 {
bjblazkowicz 6:8729a0db0e25 25 while (true)
bjblazkowicz 6:8729a0db0e25 26 {
bjblazkowicz 6:8729a0db0e25 27 if (obs_number == 0 && obs_token_ptr == NULL)
bjblazkowicz 6:8729a0db0e25 28 pc.printf("ERROR: obs_number: %d, obs_token_ptr: %0x%08x\r\n", obs_number, obs_token_ptr);
bjblazkowicz 6:8729a0db0e25 29
bjblazkowicz 6:8729a0db0e25 30 obs_number++;
bjblazkowicz 6:8729a0db0e25 31 pc.printf("Waiting for detector...\r\n");
bjblazkowicz 6:8729a0db0e25 32 int samples_captured = g_rgb.trigger(g_buffer, RGB_VALUES, RGB_THRESHOLD);
bjblazkowicz 6:8729a0db0e25 33
bjblazkowicz 6:8729a0db0e25 34 g_payload.build(g_buffer, samples_captured);
bjblazkowicz 6:8729a0db0e25 35
bjblazkowicz 6:8729a0db0e25 36 int result = sn_nsdl_send_observation_notification(obs_token_ptr, obs_token_len, g_payload.raw_bytes(), g_payload.raw_bytes_size(), &obs_number, 1, COAP_MSG_TYPE_NON_CONFIRMABLE, 0);
bjblazkowicz 6:8729a0db0e25 37
bjblazkowicz 6:8729a0db0e25 38 pc.printf("Observation send %s. [samples: %d, bytes: %d]\r\n", result == 0 ? "failed" : "succeeded", samples_captured, g_payload.raw_bytes_size());
bjblazkowicz 6:8729a0db0e25 39 }
bjblazkowicz 6:8729a0db0e25 40 }
bjblazkowicz 6:8729a0db0e25 41
bjblazkowicz 6:8729a0db0e25 42 /* Only GET method allowed */
bjblazkowicz 6:8729a0db0e25 43 static uint8_t resource_cb(sn_coap_hdr_s *received_coap_ptr, sn_nsdl_addr_s *address, sn_proto_info_s * proto)
bjblazkowicz 6:8729a0db0e25 44 {
bjblazkowicz 6:8729a0db0e25 45 sn_coap_hdr_s *coap_res_ptr = 0;
bjblazkowicz 6:8729a0db0e25 46
bjblazkowicz 6:8729a0db0e25 47 coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CONTENT);
bjblazkowicz 6:8729a0db0e25 48
bjblazkowicz 6:8729a0db0e25 49 coap_res_ptr->payload_len = g_payload.raw_bytes_size();
bjblazkowicz 6:8729a0db0e25 50 coap_res_ptr->payload_ptr = g_payload.raw_bytes();
bjblazkowicz 6:8729a0db0e25 51
bjblazkowicz 6:8729a0db0e25 52 if(received_coap_ptr->token_ptr)
bjblazkowicz 6:8729a0db0e25 53 {
bjblazkowicz 6:8729a0db0e25 54 if(obs_token_ptr)
bjblazkowicz 6:8729a0db0e25 55 {
bjblazkowicz 6:8729a0db0e25 56 free(obs_token_ptr);
bjblazkowicz 6:8729a0db0e25 57 obs_token_ptr = 0;
bjblazkowicz 6:8729a0db0e25 58 }
bjblazkowicz 6:8729a0db0e25 59 obs_token_ptr = (uint8_t*)malloc(received_coap_ptr->token_len);
bjblazkowicz 6:8729a0db0e25 60 if(obs_token_ptr)
bjblazkowicz 6:8729a0db0e25 61 {
bjblazkowicz 6:8729a0db0e25 62 memcpy(obs_token_ptr, received_coap_ptr->token_ptr, received_coap_ptr->token_len);
bjblazkowicz 6:8729a0db0e25 63 obs_token_len = received_coap_ptr->token_len;
bjblazkowicz 6:8729a0db0e25 64 }
bjblazkowicz 6:8729a0db0e25 65 }
bjblazkowicz 6:8729a0db0e25 66
bjblazkowicz 6:8729a0db0e25 67 if(received_coap_ptr->options_list_ptr->observe)
bjblazkowicz 6:8729a0db0e25 68 {
bjblazkowicz 6:8729a0db0e25 69 coap_res_ptr->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
bjblazkowicz 6:8729a0db0e25 70 memset(coap_res_ptr->options_list_ptr, 0, sizeof(sn_coap_options_list_s));
bjblazkowicz 6:8729a0db0e25 71 coap_res_ptr->options_list_ptr->observe_ptr = &obs_number;
bjblazkowicz 6:8729a0db0e25 72 coap_res_ptr->options_list_ptr->observe_len = 1;
bjblazkowicz 6:8729a0db0e25 73 obs_number++;
bjblazkowicz 6:8729a0db0e25 74 }
bjblazkowicz 6:8729a0db0e25 75
bjblazkowicz 6:8729a0db0e25 76 sn_nsdl_send_coap_message(address, coap_res_ptr);
bjblazkowicz 6:8729a0db0e25 77
bjblazkowicz 6:8729a0db0e25 78 coap_res_ptr->options_list_ptr->observe_ptr = 0;
bjblazkowicz 6:8729a0db0e25 79 sn_coap_parser_release_allocated_coap_msg_mem(coap_res_ptr);
bjblazkowicz 6:8729a0db0e25 80
bjblazkowicz 6:8729a0db0e25 81 return 0;
bjblazkowicz 6:8729a0db0e25 82 }
bjblazkowicz 6:8729a0db0e25 83
bjblazkowicz 6:8729a0db0e25 84 int create_buffered_rgb_resource(sn_nsdl_resource_info_s *resource_ptr)
bjblazkowicz 6:8729a0db0e25 85 {
bjblazkowicz 6:8729a0db0e25 86 static Thread exec_thread(exec_call_thread);
bjblazkowicz 6:8729a0db0e25 87 nsdl_create_dynamic_resource(resource_ptr, sizeof(RESOURCE_ID) - 1, (uint8_t*)RESOURCE_ID, 0, 0, 1, &resource_cb, SN_GRS_GET_ALLOWED);
bjblazkowicz 6:8729a0db0e25 88 return 0;
bjblazkowicz 6:8729a0db0e25 89 }