在命令模式里面,我们只需要维护一个命令列表就行了,而不需要关注解析函数本身。
// 当心字节对齐的问题
typedef struct {
uint8_t head;
uint8_t cmd;
uint16_t length;
uint8_t data[1];
} package_t;
static void parse_temperature( uint8_t *buffer )
{
int value = *buffer;
printf( "temperature = %d\n", value );
}
static void parse_humidity( uint8_t *buffer )
{
int value = *buffer;
printf( "humidity = %d\n", value );
}
static void parse_illumination( uint8_t *buffer )
{
int value = *buffer;
printf( "illumination = %d\n", value );
}
typedef struct {
uint8_t cmd;
void ( * handle )( uint8_t *buffer );
} package_entry_t;
static const package_entry_t package_items[] = {
{0x01, parse_temperature},
{0x02, parse_humidity},
{0x03, parse_illumination},
{0xFF, NULL},
};
static uint8_t parse( uint8_t *buffer